Skip to content

This commit will add a install keyboards button to the tutorial screen - #762

Open
henrikth93 wants to merge 4 commits into
scribe-org:mainfrom
henrikth93:main
Open

henrikth93 wants to merge 4 commits into
scribe-org:mainfrom
henrikth93:main

Conversation

@henrikth93

@henrikth93 henrikth93 commented Nov 9, 2026 •

Copy link
Copy Markdown
Member

Contributor checklist


Description

This commit will add an install keyboard button to the tutorial screen which is shown if the user has no installed keyboards.

Related issue

@andrewtavis andrewtavis added the no-changelog No changelog entry is needed for this pull request label Nov 9, 2026
@andrewtavis

Copy link
Copy Markdown
Member

Thanks for the PR, @henrikth93! I don't think we need a changelog entry here, so skipping it :)

@andrewtavis
andrewtavis self-requested a review November 9, 2026 18:50
@andrewtavis

Copy link
Copy Markdown
Member

Added Closes to the PR description to close #752 when this is merged :)

Updated changelog
@andrewtavis andrewtavis removed the no-changelog No changelog entry is needed for this pull request label Nov 9, 2026
Comment thread CHANGELOG.md Outdated
- An in-app tutorial is provided to detail functionalities of the application ([#602](https://github.com/scribe-org/Scribe-Android/issues/602), [#615](https://github.com/scribe-org/Scribe-Android/issues/615), [#616](https://github.com/scribe-org/Scribe-Android/issues/616)).
- The user is able to easily rate the application, with installer-aware routing to the appropriate store ([#165](https://github.com/scribe-org/Scribe-Android/issues/165), [#640](https://github.com/scribe-org/Scribe-Android/issues/640)).

- If the user does not have any keyboards installed, the tutorial screen will not show tutorial content, but will instead give the user access to an install keyboard-button.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

note: Can we add a space after this entry and the issue number as is done in other changelog entries, @henrikth93?

val secondaryTextColor = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f)
val dividerColor = MaterialTheme.colorScheme.outlineVariant
val headerColor = MaterialTheme.colorScheme.onBackground
val isKeyboardInstalled by viewModel.isKeyboardInstalled.collectAsState()

@ashb155 ashb155 Nov 9, 2026 •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

i guess would be better to have isKeyboardInstalled.collectAsStateWithLifecycle() which is the modern recommended Android standard? @henrikth93 @andrewtavis

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

additionally we need to add a lifecycle observer here similar to the implementation in SettingsScreen.kt to refresh the status, as Android doesn't broadcast keyboard changes by default

@ashb155 ashb155 Nov 9, 2026 •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

i guess would be better to have isKeyboardInstalled.collectAsStateWithLifecycle() which is the modern recommended Android standard? @henrikth93 @andrewtavis

i noticed rest of codebase uses collectAsState only , so i guess this isn't mandatory or we could have a separate issue updating everything to collectAsStateWithLifecycle

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

any thoughts on this @andrewtavis ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'd do a separate issue to update the whole codebase, @ashb155 :) Do you want to make that?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Agreed with @andrewtavis. Since the entire app currently uses collectAsState(), keeping it consistent here is fine. We can migrate everything to collectAsStateWithLifecycle() in a separate codebase-wide issue.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Would one of you want to make the issue?

@andrewtavis andrewtavis added the -priority- High priority label Nov 9, 2026
@andrewtavis

Copy link
Copy Markdown
Member

Note that the change in #755 is likely quite similar to what we need here :)

This commit will add lifecycle to the tutorialhomescreen

@prince-0408 prince-0408 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thanks for working on this @henrikth93! The lifecycle refresh and keyboard installation check look solid. 👍

I've left a couple of minor inline suggestions to align with the download data UI and issue #752.

horizontalAlignment = Alignment.CenterHorizontally,
) {
Text(
text = stringResource(R.string.i18n_app_download_menu_ui_no_keyboards_installed),

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

To match the download data UI (DataDownloadScreen.kt) and issue #752, could we wrap this message inside a Card (or Surface) with rounded corners? That way it looks consistent with the rest of the tutorial cards on this screen.

)
}
// Install keyboards
InstallKeyboardButton(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Could we add Spacer(modifier = Modifier.weight(1f)) before InstallKeyboardButton? This will keep the primary action button pinned to the bottom of the screen, matching the layout when keyboards are installed.

Comment thread CHANGELOG.md Outdated
- Vibrate on keypress and key click functionalities are included ([#405](https://github.com/scribe-org/Scribe-Android/issues/405), [#406](https://github.com/scribe-org/Scribe-Android/issues/406)).
- An in-app tutorial is provided to detail functionalities of the application ([#602](https://github.com/scribe-org/Scribe-Android/issues/602), [#615](https://github.com/scribe-org/Scribe-Android/issues/615), [#616](https://github.com/scribe-org/Scribe-Android/issues/616)).
- The user is able to easily rate the application, with installer-aware routing to the appropriate store ([#165](https://github.com/scribe-org/Scribe-Android/issues/165), [#640](https://github.com/scribe-org/Scribe-Android/issues/640)).
- If the user does not have any keyboards installed, the tutorial screen will not show tutorial content, but will instead give the user access to an install keyboard-button.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

As @andrewtavis mentioned earlier, we can revert this changelog addition since this change doesn't require a changelog entry.

@andrewtavis andrewtavis added the no-changelog No changelog entry is needed for this pull request label Nov 12, 2026
@andrewtavis

Copy link
Copy Markdown
Member

Thanks for the further review, @prince-0408!

… spacer before the installkeyboardbutton

This commit will wrap the download text inside a card, and also add a spacer before the installkeyboardbutton. Also, it will remove the added line in the changelog.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

-priority- High priority no-changelog No changelog entry is needed for this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Tell the user to install a Scribe keyboard in quick tutorial if they haven't yet

4 participants