Skip to content
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

Allows to use a microphone for Brave Talk in the background on Android #27016

Merged
merged 1 commit into from
Dec 16, 2024

Conversation

SergeyZhukovsky
Copy link
Member

@SergeyZhukovsky SergeyZhukovsky commented Dec 13, 2024

Resolves brave/brave-browser#42897
Security review https://github.com/brave/reviews/issues/1821

Submitter Checklist:

  • I confirm that no security/privacy review is needed and no other type of reviews are needed, or that I have requested them
  • There is a ticket for my issue
  • Used Github auto-closing keywords in the PR description above
  • Wrote a good PR/commit description
  • Squashed any review feedback or "fixup" commits before merge, so that history is a record of what happened in the repo, not your PR
  • Added appropriate labels (QA/Yes or QA/No; release-notes/include or release-notes/exclude; OS/...) to the associated issue
  • Checked the PR locally:
    • npm run test -- brave_browser_tests, npm run test -- brave_unit_tests wiki
    • npm run presubmit wiki, npm run gn_check, npm run tslint
  • Ran git rebase master (if needed)

Reviewer Checklist:

  • A security review is not needed, or a link to one is included in the PR description
  • New files have MPL-2.0 license header
  • Adequate test coverage exists to prevent regressions
  • Major classes, functions and non-trivial code blocks are well-commented
  • Changes in component dependencies are properly reflected in gn
  • Code follows the style guide
  • Test plan is specified in PR before merging

After-merge Checklist:

Test Plan:

It is described in the issue.

@SergeyZhukovsky SergeyZhukovsky added CI/skip-macos-x64 Do not run CI builds for macOS x64 CI/skip-ios Do not run CI builds for iOS CI/skip-windows-x64 Do not run CI builds for Windows x64 CI/skip-macos-arm64 Do not run CI builds for macOS arm64 labels Dec 13, 2024
@SergeyZhukovsky SergeyZhukovsky self-assigned this Dec 13, 2024
@SergeyZhukovsky SergeyZhukovsky requested review from a team as code owners December 13, 2024 18:27
Copy link
Contributor

@samartnik samartnik left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

public void startForeground(
Service service, int id, Notification notification, int foregroundServiceType) {
// Check for a service that is dedicated to Brave Talk
if (service.getClass().getSimpleName().equals(sBraveTalkServiceClassName)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: service.getClass().getSimpleName() is referred twice, can be a variable

Copy link
Contributor

@AlexeyBarabash AlexeyBarabash left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Copy link
Contributor

@iefremov iefremov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sources_gni lgtm

Comment on lines +47 to +53
WebContents webContents =
(WebContents)
BraveReflectionUtil.getField(
MediaSessionHelper.class, "mWebContents", this);

return isBraveTalk(webContents);
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reflective operations in Java are usually extremely slow. They can slow down the computation by 10x.
What I would normally do is caching them in a static field so we don't access the reflection APIs multiple time.
So in this case it would be something like this:

if (sWebContents == null) {
    sWebContents = (WebContents) BraveReflectionUtil.getField(MediaSessionHelper.class, "mWebContents", this);
}
return isBraveTalk(sWebContents);

Copy link
Member Author

@SergeyZhukovsky SergeyZhukovsky Dec 16, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, that's a good point. However I'm going to save it is a non static class member as that helper is get created different for each tab.

Copy link
Member Author

@SergeyZhukovsky SergeyZhukovsky Dec 16, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actually, I see that upstream class has a set method for it https://github.com/chromium/chromium/blob/main/components/browser_ui/media/android/java/src/org/chromium/components/browser_ui/media/MediaSessionHelper.java#L288 and I don't think we are 100% confident that it's not updated somewhere in the middle of our reflection calls to it. I would pick a safe approach and fetch it, we have 2 calls there ideally on a media page load, shouldn't slow down at all. It wouldn't be good if it calls it tens-hundreds times, but 2 calls per media page I think is ok.

Comment on lines 72 to 81
} catch (RuntimeException e) {
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: when possible I usually prefer to log exceptions. When not possible it's helpful to add a comment that explains why

Suggested change
} catch (RuntimeException e) {
}
} catch (RuntimeException e) {
Log.e(TAG, "Can't start Brave service", e);
}

Copy link
Collaborator

@simoarpe simoarpe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 Changes look good!

Copy link
Contributor

@deeppandya deeppandya left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@SergeyZhukovsky SergeyZhukovsky merged commit 58cc6e4 into master Dec 16, 2024
18 checks passed
@SergeyZhukovsky SergeyZhukovsky deleted the android_brave_talk_mic branch December 16, 2024 20:22
@github-actions github-actions bot added this to the 1.75.x - Nightly milestone Dec 16, 2024
@brave-builds
Copy link
Collaborator

Released in v1.75.104

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CI/skip-ios Do not run CI builds for iOS CI/skip-macos-arm64 Do not run CI builds for macOS arm64 CI/skip-macos-x64 Do not run CI builds for macOS x64 CI/skip-windows-x64 Do not run CI builds for Windows x64
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Allow Brave Talk to use microphone when Brave is backgrounded
8 participants