Skip to content

Adds backend selection and BCR settings access#219

Open
Palatis wants to merge 16 commits intonicorac:devfrom
Palatis:feature/backend-settings
Open

Adds backend selection and BCR settings access#219
Palatis wants to merge 16 commits intonicorac:devfrom
Palatis:feature/backend-settings

Conversation

@Palatis
Copy link
Copy Markdown
Contributor

@Palatis Palatis commented Jan 4, 2026

Adds a setting to select a recording backend and provides call-recorder specific settings below.
implements the BcrGuiPlugin.launchActivity() method to open specific activities from specific package (it actually sends an intent).

currently only BCR is implemented, but leaves room for other recording apps, too.

for BCR, it allows the user to open BCR's settings directly from within the application.

Screenshot_20260104-083029_BCR-GUI-Debug~2.png

Screenshot_20260104-083034_BCR-GUI-Debug~2.png

Screenshot_20260104-083029_BCR-GUI-Debug~3.png

@Palatis
Copy link
Copy Markdown
Contributor Author

Palatis commented Jan 4, 2026

as what discussed with @nicorac in PR #217

@Palatis
Copy link
Copy Markdown
Contributor Author

Palatis commented Jan 4, 2026

@nicorac this is really the first time i code with angular.js / ionic / capacitor, so if anything looks dirty or smells bad, please accept my apology.

some "good practice" advice would be really appreciated.

@Palatis Palatis force-pushed the feature/backend-settings branch from ac03432 to b850236 Compare January 9, 2026 07:55
@nicorac
Copy link
Copy Markdown
Owner

nicorac commented Jan 11, 2026

I've had a look to your code and I really appreciate it.
Being the first time you code with "angular.js / ionic / capacitor" stack you did a good job 👍

I've cherry-picked your changes and squashed them in a single commit, to keep the history clean.
Branch is feature/call-recorder-settings.

After your now-single commit, I've added mine with some changes/cleanup:

  • replaced the term "backend" with "call recorder" or simply "recorder", to avoid misunderstanding...
    "backend" is a tech buzzword and I worry some user could misunderstand it
  • made the recorder app name "typed", to avoid "free strings"
  • reworded settings labels and help text to ease translations
  • cleaned up settings page
  • removed your translations since I've deeply changed the English content

Please have a look so I can merge it to dev and release 😉

@nicorac
Copy link
Copy Markdown
Owner

nicorac commented Jan 11, 2026

And another thing I've removed from your changes: the update to package.json libs.
Updating Angular and Capacitor libs is something that must be done carefully (especially the latter), so I'd like to do them in a dedicated branch 😉

I don't take this lightly; this change could potentially break the entire app...

@Palatis
Copy link
Copy Markdown
Contributor Author

Palatis commented Jan 12, 2026

And another thing I've removed from your changes: the update to package.json libs.

this is probably a "rebase dev" did, i always try to rebase master/dev branch for easier merge.

i avoid touching unnecessary files on PR. as you can see, i try to break commits into small and single function for easy review / cherry-pick.

and i swear i didn't touch packaging / build / manifest stuff on purpose, since they're irrelevant to this PR.

Updating Angular and Capacitor libs is something that must be done carefully (especially the latter), so I'd like to do them in a dedicated branch 😉

I don't take this lightly; this change could potentially break the entire app...

The i18n string is intended to mark emphasis, not presentation.
Replace <b> with <strong> to express semantic importance and
leave visual rendering decisions to styling and theming layers.

This also improves accessibility and future flexibility without
changing user-visible behavior.
@Palatis Palatis force-pushed the feature/backend-settings branch from b850236 to 6670a0a Compare January 12, 2026 05:24
@Palatis
Copy link
Copy Markdown
Contributor Author

Palatis commented Jan 12, 2026

I've had a look to your code and I really appreciate it.
Being the first time you code with "angular.js / ionic / capacitor" stack you did a good job 👍

I've cherry-picked your changes and squashed them in a single commit, to keep the history clean.
Branch is feature/call-recorder-settings.

After your now-single commit, I've added mine with some changes/cleanup:

  • replaced the term "backend" with "call recorder" or simply "recorder", to avoid misunderstanding...
    "backend" is a tech buzzword and I worry some user could misunderstand it

i picked the word "backend" because what i understand is

  1. BCR-GUI is a recorded call management frontend to BCR (and other call recording apps)
  2. what doesn't have an UI (or minimum UI) = backend
  3. what does the major interaction with user = frontend

maybe recorder_backend would be more accurate, but recording app does decribe the idea correctly.

  • made the recorder app name "typed", to avoid "free strings"

there was a inner fight between "enum-like indication" and "recorder package id" when i try to decide this, and finally i choose to use the package id for these reasons:

  • these codes are for developers, not end users. a package id better indicates what these section is for
  • switch with the package id string does not cause noticeable performance / responsiveness issue, anyway.
  • this value is not user input, but set programmatically by the app. random unknown value is unlikely to appear, unless user downgrade the app to an older version.

my implementation doesn't show anything on UI when backend is set to an unknown value, just like "unspecified" is selected.

even with the dictionary-lookup method like what you suggested, i would still prefer to use full package id as the key.

  • reworded settings labels and help text to ease translations
  • cleaned up settings page
  • removed your translations since I've deeply changed the English content

sure, no prob.
i will re-submit a PR after this one merged.

Please have a look so I can merge it to dev and release 😉

i'm planning on moving the filename pattern over here, too.
(since filename pattern is very recorder app specific.)

like when user select their recorder app, change the default filename pattern accordingly.
and provide a "use my patten" checkbox and input field, so the user can still have their own filename pattern.

but i gotta learn some more about "angular.js / capacitor" devel stack before i can do that properly...

nicorac and others added 4 commits January 13, 2026 10:10
- replaced "backend" with "call recorder" or simply "recorder"
- new type with supported recorder apps names (to avoid free strings)
- reworded settings labels and help text to ease translations
- cleaned up settings page
Updates the recorder app selection to
1. use the full app ID for better identification.
2. ability to use localized recorder app names, improving the user experience by displaying names in the user's preferred language.
Replaces hardcoded recorder help text with a translation key.

This ensures the text is properly localized for different languages.
Adds translations for recorder settings in the zh-Hant language file.

This includes settings labels and help texts related to call recorder
integration, specifically for "Simple Call Recorder (BCR)". It allows
the app to display appropriate settings for call recording functionality,
enhancing the user experience for Traditional Chinese speakers.
@Palatis
Copy link
Copy Markdown
Contributor Author

Palatis commented Jan 13, 2026

I just did

  1. cherry-pick your commit
  2. move some hard-coded UI text to i18n translate table
  3. move FILENAME_PATTERN_TEMPLATES from Recording model to recorderApps in SettingsService, so recorder-app specific settings are managed in one place.
  4. change how RecordingService resolve filename pattern accordingly

it now:

  1. shows a radio-button for the user to pick between default / custom filename pattern.
  2. default filename patter reflects the recorderApp selected
  3. when recorderApp is unspecified, fallback to custom pattern
  4. custom pattern default to BCR pattern
  5. when use does not select a recorder app, useCustomFilenamePattern is enforced.

TODO:

  1. no idea about recorder app package id for "ColorOS" and "GrapheneOS", so com.android.dialer@coloros and com.android.dialer@grapheneos are used for the moment.
  2. maybe move recorderApps to a model?
  3. skip Unspecified in filename pattern editor template list?

@Palatis
Copy link
Copy Markdown
Contributor Author

Palatis commented Jan 13, 2026

however for some mysterious unknown reason the UI text are all squeezed together after i cherry pick your commit.

thats beyond my ability to repair...

EDIT: looks like a android app problem, i fired up android studio and updated everything now it works.

Screenshot_20260113-123621_BCR-GUI-Debug.png

Screenshot_20260113-123632_BCR-GUI-Debug.png

@Palatis
Copy link
Copy Markdown
Contributor Author

Palatis commented Jan 13, 2026

also these are now localizable:
Screenshot_20260113-124019_BCR-GUI-Debug.png

Screenshot_20260113-124033_BCR-GUI-Debug.png

Screenshot_20260113-124045_BCR-GUI-Debug.png

Extends settings to support different call recorder applications.

Introduces recorder app options with their specific filename patterns
for better integration and customization.

Also adds a radio group for custom filename pattern selection, allowing
users to choose between the default pattern for their selected recorder
app or a custom pattern.
Adds translations for new settings related to recorder app name and filename pattern.
This improves the user experience for users of the application.
@Palatis Palatis force-pushed the feature/backend-settings branch from e490a8f to 4fc8a55 Compare January 13, 2026 06:35
@Palatis Palatis force-pushed the feature/backend-settings branch 3 times, most recently from 41ae996 to 81f4ca0 Compare January 15, 2026 19:48
Improves the user experience on the settings page by enabling buttons on item elements to trigger their respective actions.
Also adds event stop propagation to prevent the button click from triggering the parent item click.

This change makes the settings page more intuitive and responsive.
Improves the user experience on the settings page by making list items act as buttons, providing a clearer visual cue for interaction.

Prevents event bubbling to ensure the correct actions are triggered when interacting with nested elements within the settings items.
@Palatis Palatis force-pushed the feature/backend-settings branch from 81f4ca0 to c615d20 Compare January 15, 2026 19:52
@nicorac
Copy link
Copy Markdown
Owner

nicorac commented Jan 22, 2026

I see you changed the behavior of items in the settings page.
Now the "active" part covers the whole element, not only the active element contained (like the button in directory selector).

I suppose you'd like to ease the opening of setting editors BUT... this is risky:
as I already wrote in the "ripple effect" PR (#222), Ionic (and all the other UI libs I know) consider the element a "passive" container and not an "active" element.
That's because it's meant to be inserted into (long) scollable lists.
Being it active could cause unexpected behavior when the user scrolls the list by dragging items.

Android UI tells a click apart from a scroll by measuring the press time before the finger moves.
Sadly, this behavior could be (and is) different from ROM to ROM.
I'm experiencing this behavior on my new Xiaomi: I use the Thunderbird mail app, which is almost unusable because, when I scroll a mail message, it often starts "text selection" making message reading a lot difficult.
The same app on my other devices doesn't have this bad behavior.

That's why I like to have small defined active areas in each setting item 😉

@Palatis
Copy link
Copy Markdown
Contributor Author

Palatis commented Jan 24, 2026

was trying to mimic the behavior of System Settings UI (Preference UI).
most of the settings entry are clickable the whole entry, not just the button at the end.

btw, the "default country number" entry is difficult to hit, because the area is not very large.

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