Skip to content

Conversation

@leo-glp
Copy link

@leo-glp leo-glp commented May 24, 2025

Description:

Changes Made

  • Implemented automatic call recording functionality by simulation "Record" button click
  • Added corresponding settings and strings

Testing

  • Tested on GrapheneOS Pixel 9a
  • UI displays correctly

Android Build Coastguard Worker and others added 30 commits September 7, 2024 23:20
Change-Id: I0cbfd3605cae2afed51bdb7a24f75a0b00590b88
 * The anti-falsing implementation from HumanInteractionClassifier
    regularly prevents easy swipe to answer, requiring multiple
    attempts until accepted.

Change-Id: Iebad27f9da7bb8fea6fc663dc99ac6c17d94ed5f
(cherry picked from commit 583e42df0f6f02f1a6c05dbdc5559f42e99c8727)
Change-Id: I920a9c259af5597dfd9a88a72e4ac54cb6e73f7a
Change-Id: I5b840ba257adda69882e1fe19a55510802c45106
Signed-off-by: Jesse Chan <jc@lineageos.org>
This prevents the white launch screen from appearing when the system theme
is dark

Change-Id: I1ee8ff493910578b5e5c9de67ea1f7390178051a
Change-Id: I9d2ee0bbc7d765e605d6f60c7866565c83dff295
The dark theme colors exist in
java/com/android/dialer/theme/hidden/res/values/colors_dialer_light.xml
that would be used with AOSPThemeModule. As the app uses framework
dark theme instead of the module, copy the dark theme colors to
values-night.

Change-Id: I02a36b01ba581e62556ce6e0151ff0a35209467a
Ripple on dark should be lighter than background.

Change-Id: I01993eac93f29609353ef1e1e9b5dc9a211a640c
 * Keep styles that use actionBar as is because it uses
   normal actionbar
 * Set light statusbar attribute for some styles

Change-Id: I8748aa4d12f8e0c68d14d514ea5a2bd4100ee3ca
 * Make background color lighter
 * Update border radius
 * Update ripple to follow border radius
 * Remove the background color, use same as activity
 * Update the back-icon color to white/black for consistency

Change-Id: I648a2bd0da47fec99d8a8457c70451e77ed9f8be
Change-Id: I53b6ee1c70925c50e91270e0b084d777dd8c06f6
Signed-off-by: Joey <joey@lineageos.org>
Change-Id: I0994bd1fd9922f18a08364a0d88426d88cb04b6a
Since incallui doesn't have BLUETOOTH permission, SecurityException
occurs when using BluetoothDevice#getAliasName() API.
To resolve this issue, add the BLUETOOTH permission.

Test: manual - Checked that no crash occurred when switching to
audio route with BT connected.
Bug: 127236848

Change-Id: I65fa3d6275569e967d9608ac4b1c8ee175b2664d
Add missing permission declaration.

Change-Id: Icc71b79831c3045b36ff43cc0884275c1c7cbbc8
Signed-off-by: r3g_5z <june@girlboss.ceo>
09-03 13:08:51.712  4496  4496 E MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
09-03 13:08:51.713  4496  4496 E MessageQueue-JNI: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.android.dialer.app.settings.DisplayOptionsSettingsFragment: calling Fragment constructor caused an exception
09-03 13:08:51.713  4496  4496 E MessageQueue-JNI:      at android.app.Fragment.instantiate(Fragment.java:565)
09-03 13:08:51.713  4496  4496 E MessageQueue-JNI:      at android.preference.PreferenceActivity.switchToHeaderInner(PreferenceActivity.java:1245)
09-03 13:08:51.713  4496  4496 E MessageQueue-JNI:      at android.preference.PreferenceActivity.switchToHeader(PreferenceActivity.java:1296)
09-03 13:08:51.713  4496  4496 E MessageQueue-JNI:      at android.preference.PreferenceActivity.onHeaderClick(PreferenceActivity.java:1093)
09-03 13:08:51.713  4496  4496 E MessageQueue-JNI:      at com.android.dialer.app.settings.DialerSettingsActivity.onHeaderClick(DialerSettingsActivity.java:45)

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
Change-Id: Idef793065ea422e7506f943bc76cd20e60e0a271
Co-authored-by: Danny Baumann <dannybaumann@web.de>
Signed-off-by: r3g_5z <june@girlboss.ceo>
MediaRecorder dups the file descriptor that is passed to it.
Leaked file descriptors were cleared out eventually by ParcelFileDescriptor finalizer.
reset() can throw an exception, despite docs not mentioning it.
This is achieved by making the whole button grid scrollable.
@garandal245
Copy link

yeah this is essential for anyone that works in a field where they need EVERY company interaction documented

as for what @thestinger mentioned earlier in the same way that graphene by default doesnt ask the user every time to allow every individual app permission every time it is used instead opting to allow once or allow forever with the option to disable at any time. this change does the same by allowing the user to disable at any time within settings.

@Jiddahidda
Copy link

I'd also like to see this added to Graphene. Put the onus on the user to know and follow the law of their country.

@ChxChz
Copy link

ChxChz commented Aug 11, 2025

@Jiddahidda Just to clarify, call recording is an already implemented feature. This PR is about the simple addition of a setting/toggle to always record all calls, rather than manually having to press the "record" button on every call. The issue of legality/onus is already resolved.

@Jiddahidda
Copy link

@ChxChz I understand, but thanks for clarifying. My prior phone had an apk called ODialer sideloaded, as I'd prefer all calls simply record on their own and that application could quietly do that for me. Seems like a simple change to me and if we all agree that the user should decide on the lawfulness, this change should be accepted soon?

@ChxChz
Copy link

ChxChz commented Aug 12, 2025

@thestinger If the specific suggestions you made above were completed to your satisfaction, would you consider merging it? I'm asking so that this group of users can find a way to organize the completion of this feature without wasting anymore of your time on this, or anyone else's.

More specifically, the creation of a clear user interface showing recording is happening and using that for both manual/automatic recording, but for automatic, becoming fairly prominent.

@thestinger
Copy link
Member

@ChxChz Yes. We want some kind of display that recording is happening so it can't just be turned on and entirely forgotten about where people are recording many calls without realizing it.

@yourmother9

This comment was marked as off-topic.

@SnugBlizzardAbode
Copy link

@ChxChz Yes. We want some kind of display that recording is happening so it can't just be turned on and entirely forgotten about where people are recording many calls without realizing it.

Completely disagree, this approach is like well maybe google went a little to far with just disabling it.

No give the user the ability to do it period.
I don't need a warning to use my camera.
Its like if google disabled the camera on phones because people would be able to take photos/videos of minor/child pornography.
It's entirely on the user whether they take illicit photo/videos and or audio recordings.

No warning is needed.
The indication that the call is being recorded on the users end is sufficient.

Feature is complete.
Please merge it.

Kindly,
snug

@thestinger
Copy link
Member

@SnugBlizzardAbode

The indication that the call is being recorded on the users end is sufficient.

This hasn't been implemented and it won't be merged without it.

@ChxChz
Copy link

ChxChz commented Aug 24, 2025

@thestinger Thank you for taking the time to clarify. It seems reasonable and relatively simple to implement.

The indication that the call is being recorded on the users end is sufficient.

@SnugBlizzardAbode I think there's a misunderstanding here;
We are all in agreement about this. The indication is only on the users end.
The only thing that's being asked for, quite reasonably so, is to visually inform the user (who has automatic call recording turned on) that the setting is on so that they don't leave it on unintentionally (or simply by forgetting that it was turned on prior).

While this scenario might not be relevant for some people that really do want to keep calling recording on 24/7, @thestinger is reasonably asking that it be actively displayed so it isn't forgotten about and thus unintentional.

@garandal245
Copy link

The only thing that's being asked for, quite reasonably so, is to visually inform the user (who has automatic call recording turned on) that the setting is on so that they don't leave it on unintentionally (or simply by forgetting that it was turned on prior).

While this scenario might not be relevant for some people that really do want to keep calling recording on 24/7, @thestinger is reasonably asking that it be actively displayed so it isn't forgotten about and thus unintentional.

I personally disagree due to just the paradigm of how permissions work on android as a style of you turn it on once and it stays on unless you personally find the setting and turn it off again

In the same way that you do not need to grant access to the network permission every time an app is opened(unless you manually want to) instead having an option when installing to allow network access

In my opinion this is good as is to ship, but @thestinger would a potential solution be a notification notifying the user when the current call is being recorded?

@thestinger
Copy link
Member

Android supports granting one-time access to permissions and there's a permission dashboard showing usage and for reviewing which apps have them granted persistently. There are indicators shown when Camera and Microphone are being used along with an indicator for Location when available. This isn't the same kind of thing since it has to do with legal issues rather than privacy.

@NicholasFlamy
Copy link

leave it on unintentionally (or simply by forgetting that it was turned on prior).

I mean, what's the harm there? You can just delete the recording if it's a problem.

@thestinger
Copy link
Member

Multiple responses in the thread have explained this. The review of the pull request has been done and changes have been requested. Please avoid posting further comments here unrelated to implementing the requested changes.

@thestinger thestinger changed the base branch from 15-qpr2 to 16 August 24, 2025 03:56
@thestinger
Copy link
Member

It needs to be rebased for Android 16 and functionality for displaying when recording is being done needs to be added. The current pull request is not ready.

@thestinger
Copy link
Member

@leo-glp: Please do git rebase upstream/16 or equivalent rather than a merge.

@thestinger
Copy link
Member

You could also check out the 16 code, make a branch from that, port over the change (it should apply fully cleanly), then check that out over top of this branch (or reset the branch to it) and force push it.

Cherry-picking to another branch based on the upstream 16, then git checkout -B this-branch and git push -f is probably easiest now.

@leo-glp
Copy link
Author

leo-glp commented Aug 26, 2025

@thestinger, I'll try. I'm not good in git though. Hope It won't be upstram/17 when I done :)

@thestinger
Copy link
Member

It will be Android 16 QPR1 soon but it might not have any significant changes here.

@jsisam
Copy link

jsisam commented Sep 21, 2025

Hello @leo-glp , thanks for this PR.
After testing this PR on my test device, auto recording not working on Pixel 9 tokay with latest graphene custom (but clean) build, the auto-record set up button is ok and clickable, but when the first call starts it pops up a warning "You are responsible etc.." and not record, second call onwards it starts recording automatically but stays at 00:00 and not recording. stopping it and manually starting to record works.

@beast-hacker
Copy link

@leo-glp, I'm really excited for this to be implemented. Any progress? To address thestinger's concern about indicating the call is being recorded automatically, would it be possible to grey-out the typical "record" button and relabel the button "recording automatically." I don't really care about the notification feature myself, just eager for this to be implemented asap. Thanks so much for doing this!

@MarArMar
Copy link

This is a superb feature, wishing for this to be implemented

Otherwise this just leads users to download extra apps on top that add bloat or are even less secure

And for some users in some countries it s a legal requirement to have all calls recorded so a game changer

@starsoccer
Copy link

+1 would love to have this implemented

@eblis
Copy link

eblis commented Dec 3, 2025

After testing this PR on my test device, auto recording not working on Pixel 9 tokay with latest graphene custom (but clean) build, the auto-record set up button is ok and clickable, but when the first call starts it pops up a warning "You are responsible etc.." and not record, second call onwards it starts recording automatically but stays at 00:00 and not recording. stopping it and manually starting to record works.

Could it be that the first recording, the one that triggers the warning is interfering with the automatic call recording?
Does it work if you manually record the first call (and acknowledge the warning) and then enable automatic call recording?

Also, is there any help needed to get this working, are there any pending code changes that are still needed?
I would very much like this feature to make it in as well.

@raphidae
Copy link

Hi @leo-glp, I was planning on finding someone I could pay to get this implemented. However, I see you appear to be nearly done. Am I correct?

On the other hand the last movement on this appears to have been last September; are you still working on it?

Would you (or someone else) consider to be paid to make this a priority? :) If so, send me an email at r(at)phid[dot]ae to discuss.

I hope this can be implemented soon, it would save me from having to lug two phones around because for legal reasons I need to recording all my calls :(

@starsoccer
Copy link

+1 would gladly also chip-in to get this implemented

@beast-hacker
Copy link

People have been begging for this since 2023:

https://discuss.grapheneos.org/d/5413-call-recorder-automatic-recording-of-calls

@eblis
Copy link

eblis commented Jan 17, 2026

Does anyone know if you can run and debug this app with stock Android?

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.