-
Notifications
You must be signed in to change notification settings - Fork 458
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make download notification appear immediately #182
Closed
yterletskyi
wants to merge
889
commits into
androidx:release
from
jasper-apps:bugfix/make-download-notification-appear-immediately
Closed
Make download notification appear immediately #182
yterletskyi
wants to merge
889
commits into
androidx:release
from
jasper-apps:bugfix/make-download-notification-appear-immediately
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Issue: google/ExoPlayer#10429 PiperOrigin-RevId: 461577039
The old URL doesn't correctly signal the HDR10 color info in the container. The new URL signals ST2084 (PQ) transfer function and BT.2020 color space as expected. PiperOrigin-RevId: 461560107
After this change the current tracks are sent to the controller as part of `PlayerInfo` and call `Listener.onTracksChanged()` in case of a change in tracks. PiperOrigin-RevId: 461578695
This may happen when a containers' color transfer incorrectly does not match the video's color transfer. An example of a file with such a mismatch is the current Transformer demo HDR10 sample file. Manually tested by confirming that no errors are emitted for SDR and HLG sample files, and that errors are emitted for our incorrect HDR10 sample file. PiperOrigin-RevId: 461583532
* Introduced `useHdr` for `GlEffect#toGlTextureProcessor`, so `TextureProcessor` implementations can decide how to handle HDR. * Creating FP16 color textures for HDR input. Tested via manual testing, adding a no-op GlEffectWrapper to the transformation to force use of intermediate textures, adding a linear ramp to the fragment shader, and trying to ascertain that there's a real reduction in posterization when switching from 4-bit to 8-bit unsigned bytes, and again from 8-bit unsigned bytes to 16-bit floating point. PiperOrigin-RevId: 461613117
- Update profile selection logic to pick an HDR-compatible profile when doing HDR editing on H.264/AVC videos. - Handle doing the capabilities check for all MIME types that support HDR (not just H.265/HEVC). - Fix a bug where we would pass an HDR input color format to the encoder when using tone-mapping. - Tweak how `EncoderWrapper` works so decisions at made at construction time. Manually tested cases: - Transformation of an SDR video. - Transformation of an HDR video to AVC (which triggers fallback/tone-mapping on a device that doesn't support HDR editing for AVC). - Transformation of an HDR video with HDR editing. PiperOrigin-RevId: 461572973
Some commands may be asynchronous and subsequent commands need to wait for them to complete before running. This change updates the queue to use (and listen to) Futures instead of calling Runnables directly. The commands are currently still added as Runanbles though, so this change is a no-op. Also moves the permission check in MediaSessionImpl to before queueing the command because the permission should be check at the time of calling the method. When executing the comamnds in the queue, we need to be careful to avoid recursion in the same thread (which happens when both the Future is immediate and running on the correct thread already). To avoid recursion, we detect this case and loop the commands instead. Issue: androidx#85 PiperOrigin-RevId: 461827264
PiperOrigin-RevId: 461830378
This will help developers self-diagnose issues like Issue: google/ExoPlayer#10392 where the NPE occurs far from the original null value because a field gets assigned to null. This change aims to ensure that every stable method on Player, ExoPlayer and ExoPlayer.Builder that takes a non-null type will fail with an NPE before returning. #minor-release PiperOrigin-RevId: 461846580
Otherwise, invalid ColorInfo instances generated using faulty MediaFormat#getInteger values could cause exceptions. Confirmed that b/239435670 reproduces without this CL, and does not reproduce with this CL. PiperOrigin-RevId: 461862191
Issue: google/ExoPlayer#10429 PiperOrigin-RevId: 461577039
PiperOrigin-RevId: 461888238
Issue: androidx/media#10310 #minor-release PiperOrigin-RevId: 461889651
Issue: androidx#102 #minor-release PiperOrigin-RevId: 461891031
This adds two methods that are helpful when working with Futures. One is a version of postOrRun that can indicate completion by a Future and the other is a simplified version of Guava's Futures.transformAsync (which can't be used as it's in Beta). PiperOrigin-RevId: 461896598
This may happen when a containers' color transfer incorrectly does not match the video's color transfer. An example of a file with such a mismatch is the current Transformer demo HDR10 sample file. Manually tested by confirming that no errors are emitted for SDR and HLG sample files, and that errors are emitted for our incorrect HDR10 sample file. PiperOrigin-RevId: 461583532
#minor-release PiperOrigin-RevId: 461902089
The commands currently use a task and a postTask that are chained together manually. In some cases, e.g. when adding MediaItems, the postTask is already a chain of commands in itself. To allow using the entire command handling as a single task (for simplified queueing), we can change the implementation to always create a single task. If multiple subtasks need to be chained together, we can do that by wrapping the method calls. In case a task is asynchronous, we can also use Futures to chain them together. Overall, this is just a refactoring and changes no logic. Issue: androidx#85 PiperOrigin-RevId: 462085724
Some commands are run asynchronously and subsequent commands need to wait until the previous one finished. This can be supported by returning a Future for each command and using the existing command execution logic to wait for each Future to complete. As some MediaSessionStub code is now executed delayed to when it was originally created, we also need to check if the session is not released before triggering any actions or sending result codes. Issue: androidx#85 PiperOrigin-RevId: 462101136
Add a Builder to constructor DefaultMediaNotificationProvider. The Builder can also set the provider's: - notification ID - notification channel ID - notification channel name The change adds an API for apps to set the small icon in notifications. #minor-release Issue: androidx#104 PiperOrigin-RevId: 462111536
* Introduced `useHdr` for `GlEffect#toGlTextureProcessor`, so `TextureProcessor` implementations can decide how to handle HDR. * Creating FP16 color textures for HDR input. Tested via manual testing, adding a no-op GlEffectWrapper to the transformation to force use of intermediate textures, adding a linear ramp to the fragment shader, and trying to ascertain that there's a real reduction in posterization when switching from 4-bit to 8-bit unsigned bytes, and again from 8-bit unsigned bytes to 16-bit floating point. PiperOrigin-RevId: 461613117
"seq" is not a well-defined abbreviation and the value is also an integer, so sequenceNumber is better than just sequence. PiperOrigin-RevId: 462129581
PiperOrigin-RevId: 462232813
This allows us to use BT.2020 RGB linear for intermediate shaders, which also allows us to re-enable PeriodicVignetteProcessor, which should work properly in linear color-spaces. Manually tested by adding a GlEffectsWrapper, and confirming that HLG HDR editing still looks correct. PiperOrigin-RevId: 462265821
This will help developers self-diagnose issues like Issue: google/ExoPlayer#10392 where the NPE occurs far from the original null value because a field gets assigned to null. This change aims to ensure that every stable method on Player, ExoPlayer and ExoPlayer.Builder that takes a non-null type will fail with an NPE before returning. #minor-release PiperOrigin-RevId: 461846580
These constructors are currently very intertwined, passing `this` references from the constructor of one to the constructor of another before the first constructor is complete (and so the `this` reference isn't really valid yet). This change uses checker framework `@UnderInitialization` and `@NotOnlyInitialized` annotations to make it more clear that the references are not available yet. For the one 'direct' access needed in the second constructor (calling `getApplicationLooper()`) we now pass the `applicationLooper` directly alongside (to avoid needing to dereference the reference 'too early'). This change also ensures that where a class hierarchy has a 'dependent' class hierarchy, the 'subclass' instance is always used (by both subclass and superclass) without casting or manually hiding the superclass field, by defining an overridable `getFoo()` method instead and always using it. #minor-release PiperOrigin-RevId: 462335043
We currently clear all pending messages, including the one that flushes pending commands to the MediaSession. To ensure all commands that have been called before controller.release() are still sent, we can manually trigger the flush message from the release call. Related to handling the final flush because disconnecting the controller, MediaSessionStub didn't post the removal of the controller to the session thread, creating a race condition between removing the controller and actually handling the flush. Issue: androidx#99 PiperOrigin-RevId: 462342860
Also rearranged release notes to correctly show when the changes were released. #minor-release PiperOrigin-RevId: 462361982
Otherwise, invalid ColorInfo instances generated using faulty MediaFormat#getInteger values could cause exceptions. Confirmed that b/239435670 reproduces without this CL, and does not reproduce with this CL. PiperOrigin-RevId: 461862191
* Transform the intermediate color space to linear SDR by applying the SMPTE 170M EOTF and OETF. * Use linear colors for the color filter pixel tests and update all golden bitmaps. PiperOrigin-RevId: 476124592
PiperOrigin-RevId: 476144167
To confirm that tone mapping did or did not happen. PiperOrigin-RevId: 476354606
If the sample type is dolby vision and the following conditions match a)There is a supported alternative codec mimetype b)Display does not support Dolby Vision Then getDecoderInfos will return the alternative types. Issue: google/ExoPlayer#9794 PiperOrigin-RevId: 476356223
PiperOrigin-RevId: 476362571
PiperOrigin-RevId: 476373520
PiperOrigin-RevId: 476376463
* Before this CL, the texture was stored during the construction of the LUT processor. This failed since if one creates a list of GlEffects on the application thread, the texture will get stored in the application thread during the effect creation and not on the GL thread, which executes the FrameProcessors. * This is an issue since the executing thread then can't index from the texture stored on a different thread. PiperOrigin-RevId: 476388021
PiperOrigin-RevId: 476390089
This allows to access the associated functionality of AudioTrack and fills a feature gap to MediaPlayer, which has a similar method. Issue: androidx#135 PiperOrigin-RevId: 476398964
Calling maybeUpdateLegacyErrorState potentially creates a new legacy playback state which involves calling player methods. This change makes sure that the call sites of `maybeUpdateLegacyErrorState` are called on the app thread as enforced by the library. PiperOrigin-RevId: 476406282
Comment-only change. PiperOrigin-RevId: 476873286
`PlaybackStateCompat.toKeyCode(command)` was replaced by our own implementation of `toKeyCode()`. The legacy implementation used PLAY and PAUSE, while the new implementation uses PLAY_PAUSE. This made `pause` a pending intent that attempt to start the service in the foreground, but `service.startForeground()` won't be called in `MediaNotificationManager.updateNotificationInternal` when paused. PiperOrigin-RevId: 476895752
One of the tests in MediaBrowserListenerTest caused the remote browser service to crash and then just timed out. As this asserts nothing useful besides checking that the timeout method is working, we can remove the test. Crashing the remote browser service had the side effect of letting subsequent tests in the same class fail because the previous session was never released and was still present in the static MediaSession SESSION_ID_TO_SESSION_MAP instance, which prevented the creation of new sessions with the same id. This is only an issue in test runs because a real process would also lose its static variables when it crashes. PiperOrigin-RevId: 476905337
PiperOrigin-RevId: 476909855
PiperOrigin-RevId: 476937845
PiperOrigin-RevId: 477101201
PiperOrigin-RevId: 477166507
Also, add checks for output file color. PiperOrigin-RevId: 477439139
For tone mapping error messages. PiperOrigin-RevId: 477447799
PiperOrigin-RevId: 477524540
Rename test files to avoid substrings that can be implied by the directory name, like "Transformation" and "Test" No functional changes. Renaming-only. PiperOrigin-RevId: 477724724
Per go/java-practices/imports#static No functional changes intended. PiperOrigin-RevId: 477974779
"Final" was likely added to reference the FinalMatrixTextureProcessorWrapper, which is a package-private class. However, I think more clear to express that this is the input size, which then has all effects applied, to get the output size. PiperOrigin-RevId: 477975358
yterletskyi
force-pushed
the
bugfix/make-download-notification-appear-immediately
branch
from
October 9, 2022 18:37
e58d238
to
ed55d0b
Compare
Close due to #183 |
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Since Android 12 (API 31) notifications produced by
startForeground
method wait 10 seconds until showing. This could be confusing to user who useDownloadNotificationHelper
methods to build notifications to show in a customDownloadService
(protected abstract Notification getForegroundNotification(List<Download> downloads, @RequirementFlags int notMetRequirements);
).Docs excerpt:
To make the notifications be shown immediately once actual download operation is started,
FOREGROUND_SERVICE_IMMEDIATE
can be set toNotificationCompat.Builder.setForegroundServiceBehavior()
.See: https://developer.android.com/guide/components/foreground-services#notification-immediate