Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@tuuhin
Copy link
Owner

@tuuhin tuuhin commented Aug 4, 2025

Key Changes

This pull request addresses several issues, refines visualizations, and introduces minor enhancements to improve the user experience and application stability.

Bug Fixes:

  • Resolved an issue with the audio player screen visualization (further improvements for longer files are still being investigated).
  • Proper cancellation of audio decoder when the user leaves the screen
  • Fixed inconsistencies in category-based recording counts in case user opts in or opts out external recordings

Visualization Improvements:

  • Switched to using the audio record class for visualization, moving away from amplitude-based values for rendering
  • Implemented an extra fade-out animation for the splash screen for a smoother transition.

Enhancements & Updates:

  • Updated project dependencies to their latest stable versions.
  • Added functionality to directly open recorded files from notifications for quicker access.
  • Moved storage statistics to data layer so reducing Jank while moving to file settings.
  • Removed the redundant "cancelled recording" notification.
  • Incorporated a new signing configuration for release builds, replacing the debug one.

tuuhin added 14 commits July 26, 2025 12:16
kotlinx-datetime now uses kotlin.time for Clock and Instant so wherever they are used it need to marked as experimental time api.
In UI level enum classes the associate string resource is not a getter that a constructor.
In RecordingCategoryDao.kt need to provide the map column info directly cannot use a typealias.
Dependencies and agp is updated to latest version.
Added Visibility provider in editor route so that shared element transition works.
As we are to show the recording ui at all condition and only to allow recording when service is bound.
Thus, we don't need to prepare recorder text
Rather than reading the amplitudes we instead use the AudioRecord class to load the pcm data, as we have pcm data we are getting the raw bytes of the recorded data we can now display in any ways.
Now each of the points is given by RecordedPoint.kt, and we use RecordedPointExt.kt that normalize , pad and others which help to properly set the timeline. Rest the concept is kept same as BufferedAmplitudeReader.kt.
The graph content is clipped so no more extra drawing and the timeline is now drawn based in time values no extra conversion.
VoiceRecorderImpl.kt need to be changed a bit in order to use AudioRecord,just a few function call on each of the operation to prepare AudioRecord and to release it.
For LocationProvider.kt its changed to Result form rather that resource which is good for flow based api's.
RecorderStopWatch.kt simple change using onStart to start the clock.
In the service used a debounced version for the timer text.
Previously We only changed the compile sdk for the app module, other android library module configured with
ConfigureAndroidLibraryPlugin.kt was still using compile sdk 35 changed that.
some dependency in libs.versions.toml is also updated to there latest version.
Corrected the strings for core and recorder , the strings which will be only used by recorder are kept in recorder.
Renamed the clock font to actual name. A new font is used.
When the recording is stoped the content is saved then only show the intent based notification.
NavController initialized via lambda in MainActivity.kt
Rather than a getter we are using a suspending function and not always use runBlocking to get the settings.
A extra fade in animation added when the actual screen comes to view.
Updated agp and other dependency to latest version
Categories count will not be pre-calculated and only the selected category and recordings will be used to evaluate the count value.
In RecordingCategoryProvider.kt removed unwanted method and removed unwanted withContext block from RecordingsCategoryProviderImpl.kt.
As we are calculating the count on go thus no need for count variable for RecordingCategoryModel.kt
To maintain consistency used the same font over the app graph and editor
The MediaCodecCallback.kt or MediaCodecPCMDataDecoder.kt was not being cancelled as cleanUp was not called in viewmodel and along with that we infer steps visualization ie, a small batch is loaded of longer recordings this is better.
MediaCodecPCMDataDecoder.kt the whole media codec logic is put into it.
Including to evaluate the data is coroutine is active.
If the decoder exists we don't create the visualizer again. indicated by DecoderExistsException.kt
Some correction in PlayerTrackDataFlow.kt use of trySend instead of send to ignore suspending in most cases, PlayerToDomain.kt checked if the extension is called from main thread.
In PlayerDurationText.kt and RecorderTimerText.kt else block was not present.
Removed unwanted lowpassfilter calculation, if needed it can be replaced later.
App is now signed by a unique key not the debug one,
properties in developer.properties is now in ApplicationInfo.kt.
Updated version number and version code
Using the storage statistics in ui layer was causing a jank , thus moved to data layer in recordings.
DeviceTotalStorageModel.kt provides the info for the storage loaded through StorageInfoProvider.kt
@tuuhin tuuhin merged commit 75497a9 into main Aug 5, 2025
1 check passed
@tuuhin tuuhin deleted the enhancements branch August 5, 2025 15:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants