From b2d4eddc77f887e38abf30ad978c28bbce153c19 Mon Sep 17 00:00:00 2001 From: Alex Jbanca Date: Thu, 16 Oct 2025 10:24:30 +0300 Subject: [PATCH] chore: Update app name to Status and align app package id with the bundle id App name: Status App package/bundle: im.status.app --- .github/workflows/android-build.yml | 2 +- .github/workflows/e2e-appium-android.yml | 4 ++-- ci/Jenkinsfile.android | 2 +- ci/Jenkinsfile.ios | 4 ++-- mobile/TROUBLESHOOTING.md | 2 +- mobile/android/qt5/AndroidManifest.xml | 6 +++--- mobile/android/qt5/res/values/strings.xml | 2 +- mobile/android/qt6/AndroidManifest.xml | 2 +- mobile/android/qt6/res/values/strings.xml | 2 +- .../SecureAndroidAuthentication.java | 2 +- mobile/docker/Dockerfile | 2 +- mobile/scripts/Common.mk | 2 +- mobile/scripts/android/run.sh | 4 ++-- mobile/scripts/buildApp.sh | 14 +++++++------- mobile/scripts/ios/run.sh | 2 +- .../wrapperApp/{Status-tablet.pro => Status.pro} | 2 +- test/e2e_appium/README.md | 12 ++++++------ test/e2e_appium/config/environments/local.yaml | 2 +- test/e2e_appium/pages/base_page.py | 4 ++-- .../tests/test_onboarding_import_seed.py | 6 +++--- test/e2e_appium/utils/app_lifecycle_manager.py | 8 ++++---- ui/StatusQ/src/keychain_android.cpp | 4 ++-- 22 files changed, 45 insertions(+), 45 deletions(-) rename mobile/android/qt6/src/im/status/{tablet => app}/SecureAndroidAuthentication.java (99%) rename mobile/wrapperApp/{Status-tablet.pro => Status.pro} (96%) diff --git a/.github/workflows/android-build.yml b/.github/workflows/android-build.yml index ff545736bc..24ea7528b8 100644 --- a/.github/workflows/android-build.yml +++ b/.github/workflows/android-build.yml @@ -142,7 +142,7 @@ jobs: echo "VERSION=$VERSION" >> $GITHUB_ENV echo "Determined version: $VERSION" - SRC_APK="mobile/bin/android/qt6/Status-tablet.apk" + SRC_APK="mobile/bin/android/qt6/Status.apk" DEST_APK="mobile/bin/android/qt6/Status-android-${{ inputs.architecture }}-${VERSION}.apk" if [ ! -f "$SRC_APK" ]; then diff --git a/.github/workflows/e2e-appium-android.yml b/.github/workflows/e2e-appium-android.yml index 71cee46816..d18bfc1f68 100644 --- a/.github/workflows/e2e-appium-android.yml +++ b/.github/workflows/e2e-appium-android.yml @@ -104,8 +104,8 @@ jobs: if: steps.detect_source.outputs.source_type == 'github_artifact' uses: actions/download-artifact@v4 with: - # Your build workflow uploads "Status-tablet-${{ inputs.architecture }}-${{ github.run_number }}" - pattern: Status-tablet-* + # Your build workflow uploads "Status-${{ inputs.architecture }}-${{ github.run_number }}" + pattern: Status-* merge-multiple: true run-id: ${{ steps.detect_source.outputs.artifact_run_id }} path: ./apk/ diff --git a/ci/Jenkinsfile.android b/ci/Jenkinsfile.android index 6e9cd2b6ad..4dfddee317 100644 --- a/ci/Jenkinsfile.android +++ b/ci/Jenkinsfile.android @@ -61,7 +61,7 @@ pipeline { QT_VERSION = "6.9.2" QT_ANDROID_PATH = "/opt/qt/${env.QT_VERSION}/android_arm64_v8a" QMAKE = "/opt/qt/${env.QT_VERSION}/android_arm64_v8a/bin/qmake" - STATUS_APK = "${WORKSPACE}/mobile/bin/android/qt6/Status-tablet.apk" + STATUS_APK = "${WORKSPACE}/mobile/bin/android/qt6/Status.apk" } stages { diff --git a/ci/Jenkinsfile.ios b/ci/Jenkinsfile.ios index 95e0aa415a..5da03d4bc1 100644 --- a/ci/Jenkinsfile.ios +++ b/ci/Jenkinsfile.ios @@ -66,7 +66,7 @@ pipeline { ARCH = "x86_64" /* iOS app paths */ STATUS_IOS_APP_ARTIFACT = "pkg/${utils.pkgFilename(ext: 'app.zip', arch: getArch(), version: env.VERSION, type: env.APP_TYPE)}" - STATUS_IOS_APP = "${WORKSPACE}/mobile/bin/ios/qt6/Status-tablet.app" + STATUS_IOS_APP = "${WORKSPACE}/mobile/bin/ios/qt6/Status.app" } stages { @@ -98,7 +98,7 @@ pipeline { stage('Package iOS App') { steps { sh 'mkdir -p pkg' - sh "cd mobile/bin/ios/qt6 && zip -r ${env.WORKSPACE}/${env.STATUS_IOS_APP_ARTIFACT} Status-tablet.app" + sh "cd mobile/bin/ios/qt6 && zip -r ${env.WORKSPACE}/${env.STATUS_IOS_APP_ARTIFACT} Status.app" sh "ls -la ${env.STATUS_IOS_APP_ARTIFACT}" } } diff --git a/mobile/TROUBLESHOOTING.md b/mobile/TROUBLESHOOTING.md index b3b917122b..cbd4a71c69 100644 --- a/mobile/TROUBLESHOOTING.md +++ b/mobile/TROUBLESHOOTING.md @@ -28,7 +28,7 @@ ModuleNotFoundError: No module named 'distutils' Simulator device failed to install the application. The application's Info.plist does not contain a valid CFBundleVersion. ``` -**Fix**: Remove `bin/Status-tablet.app` and run `make run` +**Fix**: Remove `bin/Status.app` and run `make run` 5. **FBSOpenApplicationServiceErrorDomain** ``` diff --git a/mobile/android/qt5/AndroidManifest.xml b/mobile/android/qt5/AndroidManifest.xml index 2e1998b071..7f99c60558 100644 --- a/mobile/android/qt5/AndroidManifest.xml +++ b/mobile/android/qt5/AndroidManifest.xml @@ -1,5 +1,5 @@ - + @@ -34,7 +34,7 @@ android:requestLegacyExternalStorage="true" android:allowBackup="true" android:fullBackupOnly="false"> - + @@ -44,7 +44,7 @@ - + diff --git a/mobile/android/qt5/res/values/strings.xml b/mobile/android/qt5/res/values/strings.xml index 8748f2e82e..917ca04be8 100644 --- a/mobile/android/qt5/res/values/strings.xml +++ b/mobile/android/qt5/res/values/strings.xml @@ -1,3 +1,3 @@ - Status-tablet + Status diff --git a/mobile/android/qt6/AndroidManifest.xml b/mobile/android/qt6/AndroidManifest.xml index 3c1cad5431..8a0e877b59 100644 --- a/mobile/android/qt6/AndroidManifest.xml +++ b/mobile/android/qt6/AndroidManifest.xml @@ -1,6 +1,6 @@ diff --git a/mobile/android/qt6/res/values/strings.xml b/mobile/android/qt6/res/values/strings.xml index 8748f2e82e..917ca04be8 100644 --- a/mobile/android/qt6/res/values/strings.xml +++ b/mobile/android/qt6/res/values/strings.xml @@ -1,3 +1,3 @@ - Status-tablet + Status diff --git a/mobile/android/qt6/src/im/status/tablet/SecureAndroidAuthentication.java b/mobile/android/qt6/src/im/status/app/SecureAndroidAuthentication.java similarity index 99% rename from mobile/android/qt6/src/im/status/tablet/SecureAndroidAuthentication.java rename to mobile/android/qt6/src/im/status/app/SecureAndroidAuthentication.java index 3f8c80c538..fd32ae01b0 100644 --- a/mobile/android/qt6/src/im/status/tablet/SecureAndroidAuthentication.java +++ b/mobile/android/qt6/src/im/status/app/SecureAndroidAuthentication.java @@ -1,4 +1,4 @@ -package im.status.tablet; +package im.status.app; import android.app.Activity; import android.content.Context; diff --git a/mobile/docker/Dockerfile b/mobile/docker/Dockerfile index c5b12ee316..60ced2dc5f 100644 --- a/mobile/docker/Dockerfile +++ b/mobile/docker/Dockerfile @@ -396,4 +396,4 @@ RUN apt update -yq && apt install -yq software-properties-common \ ENV PATH="/root/go/bin:${PATH}" -LABEL description="Build image for the Status-tablet Android APK." +LABEL description="Build image for the Status Android APK." diff --git a/mobile/scripts/Common.mk b/mobile/scripts/Common.mk index e7c8517df3..5bcb14e627 100644 --- a/mobile/scripts/Common.mk +++ b/mobile/scripts/Common.mk @@ -35,7 +35,7 @@ OPENSSL?=$(ROOT_DIR)/vendors/openssl QRCODEGEN?=$(STATUS_DESKTOP)/vendor/QR-Code-generator/c # compile macros -TARGET_PREFIX := Status-tablet +TARGET_PREFIX := Status TARGET_NAME := $(TARGET_PREFIX).$(shell if [ $(OS) = "ios" ]; then echo "app"; else echo "apk"; fi ) diff --git a/mobile/scripts/android/run.sh b/mobile/scripts/android/run.sh index 9b81ea76b4..d0df8d292a 100755 --- a/mobile/scripts/android/run.sh +++ b/mobile/scripts/android/run.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash CWD=$(realpath `dirname $0`) -APP=${APP:="$CWD/../bin/$OS/Status-tablet.apk"} -APP_PACKAGE=${APP_PACKAGE:="im.status.tablet"} +APP=${APP:="$CWD/../bin/$OS/Status.apk"} +APP_PACKAGE=${APP_PACKAGE:="im.status.app"} ARCH=${ARCH:="arm64-v8a"} ANDROID_SDK_ROOT=${ANDROID_SDK_ROOT:=""} EMULATOR=${EMULATOR:="$ANDROID_SDK_ROOT/emulator/emulator"} diff --git a/mobile/scripts/buildApp.sh b/mobile/scripts/buildApp.sh index 39da1a5bc2..83eb49ff1d 100755 --- a/mobile/scripts/buildApp.sh +++ b/mobile/scripts/buildApp.sh @@ -28,29 +28,29 @@ if [[ "${OS}" == "android" ]]; then QMAKE_CONFIG="CONFIG+=device CONFIG+=release" QMAKE_BIN="${QMAKE:-qmake}" - "$QMAKE_BIN" "$CWD/../wrapperApp/Status-tablet.pro" "$QMAKE_CONFIG" -spec android-clang ANDROID_ABIS="$ANDROID_ABI" APP_VARIANT="${APP_VARIANT}" -after + "$QMAKE_BIN" "$CWD/../wrapperApp/Status.pro" "$QMAKE_CONFIG" -spec android-clang ANDROID_ABIS="$ANDROID_ABI" APP_VARIANT="${APP_VARIANT}" -after # Build the app make -j"$(nproc)" apk_install_target # call androiddeployqt - androiddeployqt --input "$BUILD_DIR/android-Status-tablet-deployment-settings.json" --output "$BUILD_DIR/android-build" --apk "$BUILD_DIR/android-build/Status-tablet.apk" --android-platform "$ANDROID_PLATFORM" + androiddeployqt --input "$BUILD_DIR/android-Status-deployment-settings.json" --output "$BUILD_DIR/android-build" --apk "$BUILD_DIR/android-build/Status.apk" --android-platform "$ANDROID_PLATFORM" ANDROID_OUTPUT_DIR="bin/android/qt6" BIN_DIR_ANDROID=${BIN_DIR:-"$CWD/$ANDROID_OUTPUT_DIR"} mkdir -p "$BIN_DIR_ANDROID" - cp ./android-build/Status-tablet.apk "$BIN_DIR_ANDROID/Status-tablet.apk" + cp ./android-build/Status.apk "$BIN_DIR_ANDROID/Status.apk" - echo "Build succeeded. APK is available at $BIN_DIR_ANDROID/Status-tablet.apk" + echo "Build succeeded. APK is available at $BIN_DIR_ANDROID/Status.apk" else QMAKE_BIN="${QMAKE:-qmake}" - "$QMAKE_BIN" "$CWD/../wrapperApp/Status-tablet.pro" -spec macx-ios-clang CONFIG+=release CONFIG+="$SDK" CONFIG+=device -after + "$QMAKE_BIN" "$CWD/../wrapperApp/Status.pro" -spec macx-ios-clang CONFIG+=release CONFIG+="$SDK" CONFIG+=device -after # Compile resources xcodebuild -configuration Release -target "Qt Preprocess" -sdk "$SDK" -arch "$ARCH" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO | xcbeautify # Compile the app - xcodebuild -configuration Release -target Status-tablet install -sdk "$SDK" -arch "$ARCH" DSTROOT="$BIN_DIR" INSTALL_PATH="/" TARGET_BUILD_DIR="$BIN_DIR" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO | xcbeautify + xcodebuild -configuration Release -target Status install -sdk "$SDK" -arch "$ARCH" DSTROOT="$BIN_DIR" INSTALL_PATH="/" TARGET_BUILD_DIR="$BIN_DIR" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO | xcbeautify - if [[ -e "$BIN_DIR/Status-tablet.app/Info.plist" ]]; then + if [[ -e "$BIN_DIR/Status.app/Info.plist" ]]; then echo "Build succeeded" else echo "Build failed" diff --git a/mobile/scripts/ios/run.sh b/mobile/scripts/ios/run.sh index 05f967cd1f..bb729a8f47 100755 --- a/mobile/scripts/ios/run.sh +++ b/mobile/scripts/ios/run.sh @@ -7,7 +7,7 @@ set -euo pipefail CWD=$(realpath "$(dirname "$0")") -APP=${APP:-"$CWD/../../bin/Applications/Status-tablet.app"} # Path to the .app bundle +APP=${APP:-"$CWD/../../bin/Applications/Status.app"} # Path to the .app bundle APPID=${APPID:-$(plutil -extract CFBundleIdentifier raw "$APP/Info.plist")} # Bundle identifier of the app SIMULATOR_UDID=${SIMULATOR_UDID:-""} # Specify to skip interactive selection IPHONE_SDK=${IPHONE_SDK:-iphonesimulator} # Default to simulator if not set diff --git a/mobile/wrapperApp/Status-tablet.pro b/mobile/wrapperApp/Status.pro similarity index 96% rename from mobile/wrapperApp/Status-tablet.pro rename to mobile/wrapperApp/Status.pro index 680a3ae837..a697131c71 100644 --- a/mobile/wrapperApp/Status-tablet.pro +++ b/mobile/wrapperApp/Status.pro @@ -36,7 +36,7 @@ android { $$PWD/../lib/$$LIB_PREFIX/libStatusQ$$(LIB_SUFFIX)$$(LIB_EXT) OTHER_FILES += \ - android/src/im/status/tablet/SecureAndroidAuthentication.java + android/src/im/status/app/SecureAndroidAuthentication.java } ios { diff --git a/test/e2e_appium/README.md b/test/e2e_appium/README.md index 2705460971..6af6118061 100644 --- a/test/e2e_appium/README.md +++ b/test/e2e_appium/README.md @@ -18,7 +18,7 @@ Repository administrators need to set: ### 3. Run Tests via GitHub Actions 1. Build APK using `android-build.yml` workflow (architecture: `x86_64`) 2. Run tests using `e2e-appium-android.yml` workflow -3. Use artifact name: `Status-tablet-x86_64` +3. Use artifact name: `Status-x86_64` ## Test Selection @@ -48,7 +48,7 @@ pytest tests/test_onboarding_dependent_features.py python scripts/local_setup.py # Run tests with local APK -export LOCAL_APP_PATH="/path/to/Status-tablet.apk" +export LOCAL_APP_PATH="/path/to/Status.apk" pytest -m onboarding --env=local -v ``` @@ -57,7 +57,7 @@ pytest -m onboarding --env=local -v ### Build APK Workflow - **File**: `android-build.yml` - **Architecture**: `x86_64` (required for LambdaTest) -- **Output**: `Status-tablet-x86_64` artifact +- **Output**: `Status-x86_64` artifact ### E2E Testing Workflow - **File**: `e2e-appium-android.yml` @@ -68,7 +68,7 @@ pytest -m onboarding --env=local -v ## Workflow Input Options ### APK Sources -- **GitHub artifacts**: `Status-tablet-x86_64` (recommended) +- **GitHub artifacts**: `Status-x86_64` (recommended) - **Direct URLs**: `https://example.com/app.apk` - **LambdaTest IDs**: `lt://APP123456789` @@ -113,7 +113,7 @@ LT_ACCESS_KEY=your_access_key ### For Local Testing ```bash -export LOCAL_APP_PATH="/path/to/Status-tablet.apk" +export LOCAL_APP_PATH="/path/to/Status.apk" export CURRENT_TEST_ENVIRONMENT="local" ``` @@ -125,7 +125,7 @@ export CURRENT_TEST_ENVIRONMENT="local" **Test Execution Issues:** - Verify LambdaTest credentials in repository secrets -- Check APK artifact name matches exactly: `Status-tablet-x86_64` +- Check APK artifact name matches exactly: `Status-x86_64` - Review workflow logs for detailed error messages **Local Testing Issues:** diff --git a/test/e2e_appium/config/environments/local.yaml b/test/e2e_appium/config/environments/local.yaml index 68f73fd1a5..b7aec3ff92 100644 --- a/test/e2e_appium/config/environments/local.yaml +++ b/test/e2e_appium/config/environments/local.yaml @@ -47,7 +47,7 @@ capabilities: automationName: "UiAutomator2" newCommandTimeout: 300 noReset: false - appPackage: "im.status.tablet" + appPackage: "im.status.app" appActivity: "org.qtproject.qt.android.bindings.QtActivity" unicodeKeyboard: true resetKeyboard: true \ No newline at end of file diff --git a/test/e2e_appium/pages/base_page.py b/test/e2e_appium/pages/base_page.py index d61deeae2f..5d179a4e90 100644 --- a/test/e2e_appium/pages/base_page.py +++ b/test/e2e_appium/pages/base_page.py @@ -358,12 +358,12 @@ class BasePage: self.logger.debug(f"Coordinate tap failed: {e}") return False - def restart_app(self, app_package: str = "im.status.tablet") -> bool: + def restart_app(self, app_package: str = "im.status.app") -> bool: """Restart the app within the current session.""" return self.app_lifecycle.restart_app(app_package) def restart_app_with_data_cleared( - self, app_package: str = "im.status.tablet" + self, app_package: str = "im.status.app" ) -> bool: """Restart the app with all app data cleared (fresh app state).""" return self.app_lifecycle.restart_app_with_data_cleared(app_package) diff --git a/test/e2e_appium/tests/test_onboarding_import_seed.py b/test/e2e_appium/tests/test_onboarding_import_seed.py index c2dc8b1e0e..f91b699d0c 100644 --- a/test/e2e_appium/tests/test_onboarding_import_seed.py +++ b/test/e2e_appium/tests/test_onboarding_import_seed.py @@ -68,15 +68,15 @@ class TestOnboardingImportSeed(BaseTest): base_page = base restarted = False try: - restarted = base_page.restart_app("im.status.tablet") + restarted = base_page.restart_app("im.status.app") except Exception: restarted = False if not restarted: try: - self.driver.terminate_app("im.status.tablet") + self.driver.terminate_app("im.status.app") self.driver.start_activity( - "im.status.tablet", "org.qtproject.qt.android.bindings.QtActivity" + "im.status.app", "org.qtproject.qt.android.bindings.QtActivity" ) except Exception: pass diff --git a/test/e2e_appium/utils/app_lifecycle_manager.py b/test/e2e_appium/utils/app_lifecycle_manager.py index ea4cd47d98..b300682bba 100644 --- a/test/e2e_appium/utils/app_lifecycle_manager.py +++ b/test/e2e_appium/utils/app_lifecycle_manager.py @@ -17,7 +17,7 @@ class AppLifecycleManager: self.driver = driver self.logger = get_logger("app_lifecycle") - def restart_app(self, app_package: str = "im.status.tablet") -> bool: + def restart_app(self, app_package: str = "im.status.app") -> bool: """ Restart the app within the current session. @@ -44,7 +44,7 @@ class AppLifecycleManager: return False def restart_app_with_data_cleared( - self, app_package: str = "im.status.tablet" + self, app_package: str = "im.status.app" ) -> bool: """ Restart the app with all app data cleared (fresh app state). @@ -104,7 +104,7 @@ class AppLifecycleManager: self.logger.error(f"❌ App restart with data cleared failed: {e}") return False - def terminate_app(self, app_package: str = "im.status.tablet") -> bool: + def terminate_app(self, app_package: str = "im.status.app") -> bool: """Terminate the specified app.""" try: self.driver.terminate_app(app_package) @@ -114,7 +114,7 @@ class AppLifecycleManager: self.logger.error(f"❌ Failed to terminate app: {e}") return False - def activate_app(self, app_package: str = "im.status.tablet") -> bool: + def activate_app(self, app_package: str = "im.status.app") -> bool: """Activate the specified app.""" try: self.driver.activate_app(app_package) diff --git a/ui/StatusQ/src/keychain_android.cpp b/ui/StatusQ/src/keychain_android.cpp index 69f560ef89..52951b5bc8 100644 --- a/ui/StatusQ/src/keychain_android.cpp +++ b/ui/StatusQ/src/keychain_android.cpp @@ -18,7 +18,7 @@ static void jni_nativeCredentialError(JNIEnv*, jobject, jint, jstring); static Keychain* s_keychain = nullptr; static constexpr const char* kJavaClass = - "im/status/tablet/SecureAndroidAuthentication"; + "im/status/app/SecureAndroidAuthentication"; // Get the singleton Java object, creating it if needed. // Never cache a raw jobject; pass the Context only for this call. @@ -34,7 +34,7 @@ static QJniObject getJavaSingleton() QJniObject inst = QJniObject::callStaticObjectMethod( kJavaClass, "getInstance", - "(Landroid/content/Context;)Lim/status/tablet/SecureAndroidAuthentication;", + "(Landroid/content/Context;)Lim/status/app/SecureAndroidAuthentication;", ctxObj.object() // pass a fresh Context for this call only );