Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
8861d4b
ohos: add the OpenHarmony platform host
springmin Oct 18, 2026
4b51030
ohos: wheel scrolling, notification permission timing, asset recovery
springmin Oct 18, 2026
eefa2da
ios: pass the notification publisher in the launch context
springmin Oct 18, 2026
f163107
ohos: default to com.flectar.mail
springmin Oct 19, 2026
81d76c3
ohos: derive the hap version from the workspace crate
springmin Oct 19, 2026
0784cf0
ohos: request the pasteboard ACL permission for paste
springmin Oct 19, 2026
2c65318
ohos: log through hilog and type the ability callback
springmin Oct 19, 2026
cdea286
ohos: clear ArkTS lint findings
springmin Oct 19, 2026
9bfd7a2
ohos: ignore the generated shell page, document lint and device status
springmin Oct 19, 2026
0327bf0
ohos: configure the PDFium directory from the loaded module
springmin Oct 19, 2026
95cd321
ohos: record the PDF preview and clipboard ACL status
springmin Oct 19, 2026
7544871
ohos: add the privacy policy and first-run consent
springmin Oct 19, 2026
9b81216
ohos: localise the privacy policy and let consent be withdrawn
springmin Oct 20, 2026
d823705
ohos: add jurisdiction-specific privacy disclosures
springmin Oct 20, 2026
557c84e
ohos: localise the consent screen and polish its layout
springmin Oct 20, 2026
ec69115
ohos: revise the privacy policy wording
springmin Oct 20, 2026
136940e
chore(deps): update webpki crates for RUSTSEC-2026-0381/0382/0383
springmin Oct 20, 2026
2ff00c2
ui: drop the obsolete onboarding import-backup callback
springmin Oct 21, 2026
a5160c5
ohos: fix the inverted mouse wheel direction
springmin Oct 21, 2026
fd6d1cd
chore(ohos): refresh the lockfile for the zip dependency edge
springmin Oct 21, 2026
3064513
i18n: regenerate the catalogs after the rebase
springmin Oct 23, 2026
95ff888
Merge branch 'main' into ohos-alias
iamdarkle Oct 24, 2026
7dde8f5
fix: import certificates through the document provider
iamdarkle Oct 24, 2026
1c1c7ae
ohos: hold presentation while a picker is open
iamdarkle Oct 24, 2026
fd07736
fix: keep keyring and dirs off OpenHarmony
iamdarkle Oct 24, 2026
bbfa878
fix: keep document requests on the runtime
iamdarkle Oct 24, 2026
59a8b6c
ohos: ignore the selection clipboard
iamdarkle Oct 24, 2026
7ff4385
ohos: stop logging key codes
iamdarkle Oct 24, 2026
78f98d3
ohos: don't click on cancelled touches
iamdarkle Oct 24, 2026
df5c590
ohos: repeat the winit patch
iamdarkle Oct 24, 2026
a2f9514
fix: update vulnerable crates in the OpenHarmony lockfile
iamdarkle Oct 24, 2026
87351a6
fix: fail the fontique check when the tree is missing
iamdarkle Oct 24, 2026
5774b84
ohos: keep build output out of the repository
iamdarkle Oct 24, 2026
79e0c67
docs: correct the OpenHarmony backend notes
iamdarkle Oct 24, 2026
8b0b3d3
ohos: keep empty secrets in the Asset Store
iamdarkle Oct 24, 2026
2818b7d
ohos: use the Android version code sequence
iamdarkle Oct 24, 2026
85ae2a4
ohos: fix the shell metadata
iamdarkle Oct 24, 2026
767e301
style: format the email font fallback
iamdarkle Oct 24, 2026
e074912
Merge branch 'main' into ohos-alias
iamdarkle Oct 24, 2026
018de4b
Merge remote-tracking branch 'origin/main' into ohos-alias
springmin Oct 25, 2026
a11d552
ohos: adapt credential storage to per-connection slots
springmin Oct 25, 2026
5c88d45
ohos: move privacy and notification seams out of the port
springmin Oct 25, 2026
a412520
ohos: fix surface lifecycle, fences and wheel scaling
springmin Oct 25, 2026
c6e3900
ohos: keep the shared certificate picker path unchanged
springmin Oct 25, 2026
8022c58
ohos: forward IME password type, action key and cursor updates
springmin Oct 25, 2026
a9714fa
ohos: harden picker, fonts, input and system integration
springmin Oct 25, 2026
062ba5d
ohos: complete the P1 picker, IME and lifecycle fixes
springmin Oct 25, 2026
a0061c9
ohos: clarify the picker cache guard
springmin Oct 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 104 additions & 0 deletions .github/workflows/ohos.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
name: OpenHarmony hap

# Tier 3 (platform/README.md): a community port built by a manually dispatched
# workflow, never on pull requests. The HarmonyOS SDK and hvigor are not
# anonymously downloadable, so the build job targets a self-hosted runner with
# the toolchain described in platform/ohos/README.md.
#
# Pull request checks build unsigned: this workflow only runs on dispatch, and
# signing material exists exclusively as repository secrets.

on:
workflow_dispatch:
inputs:
app:
description: Application to package
type: choice
options:
- mail
- demo
default: mail
profile:
description: Cargo profile
type: choice
options:
- release
- debug
default: release
sign:
description: Sign with the AGC material stored in the repository secrets
type: boolean
default: false
run_quality:
description: Run the shared quality suite first
type: boolean
default: true

permissions:
contents: read

concurrency:
group: ohos-${{ github.ref }}
cancel-in-progress: false

jobs:
quality:
if: inputs.run_quality
name: Shared quality suite
uses: ./.github/workflows/quality.yml

hap:
name: ${{ inputs.app }} hap (${{ inputs.profile }})
needs: quality
if: always() && (needs.quality.result == 'success' || needs.quality.result == 'skipped')
runs-on: [self-hosted, linux, ohos]
timeout-minutes: 180
steps:
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5

- name: Check the OHOS workspace formatting
run: cargo fmt --manifest-path platform/ohos/Cargo.toml --all -- --check

- name: Materialize signing material
if: inputs.sign
env:
KEYSTORE_BASE64: ${{ secrets.FLECTAR_OHOS_KEYSTORE_BASE64 }}
CERTIFICATE_BASE64: ${{ secrets.FLECTAR_OHOS_CERTIFICATE_BASE64 }}
PROFILE_BASE64: ${{ secrets.FLECTAR_OHOS_PROFILE_BASE64 }}
run: |
test -n "$KEYSTORE_BASE64"
test -n "$CERTIFICATE_BASE64"
test -n "$PROFILE_BASE64"
material="$RUNNER_TEMP/ohos-signing"
umask 077
mkdir -p "$material"
printf '%s' "$KEYSTORE_BASE64" | base64 --decode > "$material/keystore.p12"
printf '%s' "$CERTIFICATE_BASE64" | base64 --decode > "$material/certificate.cer"
printf '%s' "$PROFILE_BASE64" | base64 --decode > "$material/profile.p7b"
{
echo "RELEASE_SIGN=1"
echo "RELEASE_P12=$material/keystore.p12"
echo "RELEASE_CERT=$material/certificate.cer"
echo "RELEASE_PROFILE=$material/profile.p7b"
echo "RELEASE_KEY_ALIAS=${{ secrets.FLECTAR_OHOS_KEY_ALIAS }}"
echo "RELEASE_KEY_PWD=${{ secrets.FLECTAR_OHOS_KEY_PASSWORD }}"
echo "RELEASE_STORE_PWD=${{ secrets.FLECTAR_OHOS_STORE_PASSWORD }}"
} >> "$GITHUB_ENV"

- name: Build the hap
env:
APP: ${{ inputs.app }}
PROFILE: ${{ inputs.profile }}
CARGO_BUILD_JOBS: "4"
SKIP_SIGN: ${{ inputs.sign && '0' || '1' }}
run: sh platform/ohos/scripts/build-hap.sh

- name: Remove the signing material
if: always() && inputs.sign
run: rm -rf "$RUNNER_TEMP/ohos-signing"

- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: flectar-ohos-${{ inputs.app }}-${{ inputs.profile }}
path: platform/ohos/build/*.hap
if-no-files-found: error
2 changes: 2 additions & 0 deletions .github/workflows/quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ jobs:
run: python3 scripts/check-platform-gates.py
- name: Verify the Blitz patch queue
run: bash scripts/blitz-patches.sh verify
- name: Verify the Fontique patch queue
run: bash scripts/fontique-patches.sh verify
- name: Verify and test the Parley backport
run: |
python3 scripts/verify-parley.py
Expand Down
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[workspace]
members = ["crates/flectar-mail-core", "crates/renderer-probe"]
exclude = ["crates/candle-core", "crates/blitz-dom", "crates/blitz-paint", "crates/i-slint-backend-winit", "crates/parley", "crates/parley_emoji"]
exclude = ["crates/candle-core", "crates/blitz-dom", "crates/blitz-paint", "crates/fontique", "crates/i-slint-backend-winit", "crates/parley", "crates/parley_emoji"]
resolver = "3"

[workspace.dependencies]
Expand Down Expand Up @@ -174,7 +174,7 @@ objc2-foundation = { version = "0.3", default-features = false, features = ["std
objc2-service-management = { version = "0.3", default-features = false, features = ["std", "objc2", "objc2-foundation", "SMAppService"] }

# This is `desktop`; keep it in step with the `mobile` alias in build.rs.
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
[target.'cfg(not(any(target_os = "android", target_os = "ios", target_env = "ohos")))'.dependencies]
arboard = { version = "3.6", default-features = false, features = ["wayland-data-control"] }
rfd = { version = "0.16", default-features = false, features = ["tokio", "xdg-portal"] }

Expand Down
2 changes: 1 addition & 1 deletion build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ fn main() {
// operating system. A new platform joins these groups here (and in the
// core's build.rs) instead of editing call sites. See platform/README.md.
cfg_aliases! {
mobile: { any(target_os = "android", target_os = "ios") },
mobile: { any(target_os = "android", target_os = "ios", target_env = "ohos") },
desktop: { not(mobile) },
// OpenHarmony reports target_os = "linux" without a desktop session,
// portals, X11 or a Secret Service.
Expand Down
2 changes: 1 addition & 1 deletion crates/flectar-mail-core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,6 @@ rustix = { version = "1", features = ["fs"] }

# This is `desktop`. Mobile hosts inject their storage paths and a
# platform-owned credential store instead.
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
[target.'cfg(not(any(target_os = "android", target_os = "ios", target_env = "ohos")))'.dependencies]
dirs = "6"
keyring = { version = "3", features = ["sync-secret-service", "apple-native", "windows-native"] }
2 changes: 1 addition & 1 deletion crates/flectar-mail-core/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ fn main() {
// Keep `mobile` identical to the application's build.rs; see
// platform/README.md.
cfg_aliases! {
mobile: { any(target_os = "android", target_os = "ios") },
mobile: { any(target_os = "android", target_os = "ios", target_env = "ohos") },
desktop: { not(mobile) },
// rustix exposes renameat2/renameatx_np with RENAME_NOREPLACE here.
rename_noreplace: { any(target_os = "linux", target_os = "android", target_os = "macos", target_os = "ios") },
Expand Down
6 changes: 6 additions & 0 deletions crates/fontique/.cargo_vcs_info.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"git": {
"sha1": "eea3503dd6cf17130cbb07348e0ff2c918300e94"
},
"path_in_vcs": "fontique"
}
Loading
Loading