From 646e6174762642f0206dab321fd572efec4a4d3c Mon Sep 17 00:00:00 2001 From: "Hermes (for frank)" Date: Sat, 12 Sep 2026 17:04:15 +0000 Subject: [PATCH] Rebrand WireGuard Android to Wire VPN - Rename package and all Java/Kotlin sources: com.wireguard.android -> page.onram.wirevpn - applicationId -> page.onram.wirevpn, version 1.0.20260910 (520) - New launcher icon: dark circle, white padlock with bold W - App name 'Wire VPN' in all locales; remove donate preference - Release signing from KEYSTORE_* env vars (CI) - F-Droid v2: scripts/fdroid_metadata.py - GitHub/Gitea Actions workflow: auto-build signed APK + F-Droid metadata/signature on every new release, attach to the release - README + NOTICE (license inventory) --- .github/workflows/release.yml | 131 ++++++++++++++++++ NOTICE.md | 49 +++++++ README.md | 56 +++++--- gradle.properties | 6 +- scripts/fdroid_metadata.py | 57 ++++++++ settings.gradle.kts | 2 +- tunnel/build.gradle.kts | 26 ++-- tunnel/src/main/AndroidManifest.xml | 2 +- .../onram/wirevpn}/backend/Backend.java | 6 +- .../wirevpn}/backend/BackendException.java | 4 +- .../onram/wirevpn}/backend/GoBackend.java | 22 +-- .../onram/wirevpn}/backend/Statistics.java | 18 +-- .../onram/wirevpn}/backend/Tunnel.java | 4 +- .../wirevpn}/backend/WgQuickBackend.java | 16 +-- .../onram/wirevpn}/config/Attribute.java | 4 +- .../wirevpn}/config/BadConfigException.java | 6 +- .../onram/wirevpn}/config/Config.java | 10 +- .../onram/wirevpn}/config/InetAddresses.java | 4 +- .../onram/wirevpn}/config/InetEndpoint.java | 4 +- .../onram/wirevpn}/config/InetNetwork.java | 4 +- .../onram/wirevpn}/config/Interface.java | 16 +-- .../onram/wirevpn}/config/ParseException.java | 4 +- .../onram/wirevpn}/config/Peer.java | 14 +- .../onram/wirevpn}/crypto/Curve25519.java | 4 +- .../onram/wirevpn}/crypto/Key.java | 6 +- .../wirevpn}/crypto/KeyFormatException.java | 4 +- .../onram/wirevpn}/crypto/KeyPair.java | 4 +- .../onram/wirevpn}/util/NonNullForAll.java | 2 +- .../onram/wirevpn}/util/RootShell.java | 6 +- .../wirevpn}/util/SharedLibraryLoader.java | 4 +- .../onram/wirevpn}/util/ToolsInstaller.java | 8 +- .../config/BadConfigExceptionTest.java | 8 +- .../onram/wirevpn}/config/ConfigTest.java | 2 +- ui/build.gradle.kts | 21 +++ ui/src/main/AndroidManifest.xml | 6 +- .../android/preference/DonatePreference.kt | 43 ------ .../onram/wirevpn}/Application.kt | 22 +-- .../onram/wirevpn}/BootShutdownReceiver.kt | 6 +- .../onram/wirevpn}/QuickTileService.kt | 14 +- .../onram/wirevpn}/activity/BaseActivity.kt | 6 +- .../wirevpn}/activity/LogViewerActivity.kt | 16 +-- .../onram/wirevpn}/activity/MainActivity.kt | 10 +- .../wirevpn}/activity/SettingsActivity.kt | 14 +- .../activity/TunnelCreatorActivity.kt | 6 +- .../wirevpn}/activity/TunnelToggleActivity.kt | 14 +- .../onram/wirevpn}/activity/TvMainActivity.kt | 34 ++--- .../onram/wirevpn}/configStore/ConfigStore.kt | 4 +- .../wirevpn}/configStore/FileConfigStore.kt | 8 +- .../wirevpn}/databinding/BindingAdapters.kt | 18 +-- .../databinding/ItemChangeListener.kt | 4 +- .../onram/wirevpn}/databinding/Keyed.kt | 2 +- .../databinding/ObservableKeyedArrayList.kt | 2 +- .../ObservableKeyedRecyclerViewAdapter.kt | 4 +- .../ObservableSortedKeyedArrayList.kt | 2 +- .../wirevpn}/fragment/AddTunnelsSheet.kt | 6 +- .../fragment/AppListDialogFragment.kt | 14 +- .../onram/wirevpn}/fragment/BaseFragment.kt | 22 +-- .../fragment/ConfigNamingDialogFragment.kt | 12 +- .../wirevpn}/fragment/TunnelDetailFragment.kt | 14 +- .../wirevpn}/fragment/TunnelEditorFragment.kt | 22 +-- .../wirevpn}/fragment/TunnelListFragment.kt | 26 ++-- .../onram/wirevpn}/model/ApplicationData.kt | 6 +- .../onram/wirevpn}/model/ObservableTunnel.kt | 14 +- .../onram/wirevpn}/model/TunnelComparator.kt | 2 +- .../onram/wirevpn}/model/TunnelManager.kt | 34 ++--- .../KernelModuleEnablerPreference.kt | 18 +-- .../PreferencesPreferenceDataStore.kt | 2 +- .../preference/QuickTilePreference.kt | 6 +- .../preference/ToolsInstallerPreference.kt | 10 +- .../wirevpn}/preference/VersionPreference.kt | 20 +-- .../preference/ZipExporterPreference.kt | 18 +-- .../onram/wirevpn}/updater/Ed25519.java | 2 +- .../wirevpn}/updater/SnackbarUpdateShower.kt | 8 +- .../onram/wirevpn}/updater/Updater.kt | 21 +-- .../onram/wirevpn}/util/AdminKnobs.kt | 4 +- .../wirevpn}/util/BiometricAuthenticator.kt | 4 +- .../onram/wirevpn}/util/ClipboardUtils.kt | 4 +- .../onram/wirevpn}/util/DownloadsFileSaver.kt | 4 +- .../onram/wirevpn}/util/ErrorMessages.kt | 22 +-- .../onram/wirevpn}/util/Extensions.kt | 6 +- .../wirevpn}/util/QrCodeFromFileScanner.kt | 2 +- .../onram/wirevpn}/util/QuantityFormatter.kt | 6 +- .../onram/wirevpn}/util/TunnelImporter.kt | 12 +- .../onram/wirevpn}/util/UserKnobs.kt | 4 +- .../onram/wirevpn}/viewmodel/ConfigProxy.kt | 8 +- .../wirevpn}/viewmodel/InterfaceProxy.kt | 16 +-- .../onram/wirevpn}/viewmodel/PeerProxy.kt | 10 +- .../onram/wirevpn}/widget/KeyInputFilter.kt | 4 +- .../widget/MultiselectableRelativeLayout.kt | 4 +- .../onram/wirevpn}/widget/NameInputFilter.kt | 4 +- .../onram/wirevpn}/widget/SlashDrawable.kt | 2 +- .../onram/wirevpn}/widget/ToggleSwitch.kt | 2 +- .../onram/wirevpn}/widget/TvCardView.kt | 4 +- .../res/drawable/ic_launcher_foreground.xml | 36 +---- .../main/res/layout-sw600dp/main_activity.xml | 2 +- .../res/layout/app_list_dialog_fragment.xml | 6 +- ui/src/main/res/layout/app_list_item.xml | 6 +- .../layout/config_naming_dialog_fragment.xml | 2 +- ui/src/main/res/layout/main_activity.xml | 2 +- .../res/layout/tunnel_creator_activity.xml | 2 +- .../res/layout/tunnel_detail_fragment.xml | 12 +- ui/src/main/res/layout/tunnel_detail_peer.xml | 4 +- .../res/layout/tunnel_editor_fragment.xml | 10 +- ui/src/main/res/layout/tunnel_editor_peer.xml | 10 +- .../main/res/layout/tunnel_list_fragment.xml | 8 +- ui/src/main/res/layout/tunnel_list_item.xml | 16 +-- ui/src/main/res/layout/tv_activity.xml | 12 +- ui/src/main/res/layout/tv_file_list_item.xml | 2 +- .../main/res/layout/tv_tunnel_list_item.xml | 10 +- ui/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 4990 -> 4387 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 5988 -> 4387 bytes ui/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2598 -> 2911 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 3132 -> 2911 bytes ui/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 6226 -> 6040 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 7946 -> 6040 bytes ui/src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 11777 -> 9667 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 15449 -> 9667 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 16030 -> 13003 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 20741 -> 13003 bytes ui/src/main/res/values-ar-rSA/strings.xml | 5 +- ui/src/main/res/values-ca-rES/strings.xml | 5 +- ui/src/main/res/values-cs-rCZ/strings.xml | 5 +- ui/src/main/res/values-da-rDK/strings.xml | 5 +- ui/src/main/res/values-de/strings.xml | 5 +- ui/src/main/res/values-es-rES/strings.xml | 5 +- ui/src/main/res/values-et-rEE/strings.xml | 5 +- ui/src/main/res/values-fa-rIR/strings.xml | 5 +- ui/src/main/res/values-fr/strings.xml | 5 +- ui/src/main/res/values-hu-rHU/strings.xml | 5 +- ui/src/main/res/values-in/strings.xml | 5 +- ui/src/main/res/values-it/strings.xml | 5 +- ui/src/main/res/values-ja/strings.xml | 5 +- ui/src/main/res/values-ko-rKR/strings.xml | 5 +- ui/src/main/res/values-nl-rNL/strings.xml | 5 +- ui/src/main/res/values-no-rNO/strings.xml | 5 +- ui/src/main/res/values-pa-rIN/strings.xml | 5 +- ui/src/main/res/values-pl-rPL/strings.xml | 5 +- ui/src/main/res/values-pt-rBR/strings.xml | 5 +- ui/src/main/res/values-ro-rRO/strings.xml | 5 +- ui/src/main/res/values-ru/strings.xml | 5 +- ui/src/main/res/values-sl/strings.xml | 5 +- ui/src/main/res/values-sv-rSE/strings.xml | 5 +- ui/src/main/res/values-tr-rTR/strings.xml | 5 +- ui/src/main/res/values-uk-rUA/strings.xml | 5 +- ui/src/main/res/values-vi-rVN/strings.xml | 5 +- ui/src/main/res/values-zh-rCN/strings.xml | 5 +- ui/src/main/res/values-zh-rTW/strings.xml | 5 +- .../res/values/ic_launcher_background.xml | 2 +- ui/src/main/res/values/strings.xml | 15 +- ui/src/main/res/xml/preferences.xml | 12 +- 150 files changed, 823 insertions(+), 654 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 NOTICE.md create mode 100644 scripts/fdroid_metadata.py rename tunnel/src/main/java/{com/wireguard/android => page/onram/wirevpn}/backend/Backend.java (96%) rename tunnel/src/main/java/{com/wireguard/android => page/onram/wirevpn}/backend/BackendException.java (95%) rename tunnel/src/main/java/{com/wireguard/android => page/onram/wirevpn}/backend/GoBackend.java (96%) rename tunnel/src/main/java/{com/wireguard/android => page/onram/wirevpn}/backend/Statistics.java (85%) rename tunnel/src/main/java/{com/wireguard/android => page/onram/wirevpn}/backend/Tunnel.java (94%) rename tunnel/src/main/java/{com/wireguard/android => page/onram/wirevpn}/backend/WgQuickBackend.java (95%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/config/Attribute.java (95%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/config/BadConfigException.java (95%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/config/Config.java (96%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/config/InetAddresses.java (98%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/config/InetEndpoint.java (98%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/config/InetNetwork.java (96%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/config/Interface.java (97%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/config/ParseException.java (93%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/config/Peer.java (97%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/crypto/Curve25519.java (99%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/crypto/Key.java (98%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/crypto/KeyFormatException.java (90%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/crypto/KeyPair.java (93%) rename tunnel/src/main/java/{com/wireguard => page/onram/wirevpn}/util/NonNullForAll.java (96%) rename tunnel/src/main/java/{com/wireguard/android => page/onram/wirevpn}/util/RootShell.java (98%) rename tunnel/src/main/java/{com/wireguard/android => page/onram/wirevpn}/util/SharedLibraryLoader.java (97%) rename tunnel/src/main/java/{com/wireguard/android => page/onram/wirevpn}/util/ToolsInstaller.java (97%) rename tunnel/src/test/java/{com/wireguard => page/onram/wirevpn}/config/BadConfigExceptionTest.java (96%) rename tunnel/src/test/java/{com/wireguard => page/onram/wirevpn}/config/ConfigTest.java (98%) delete mode 100644 ui/src/main/java/com/wireguard/android/preference/DonatePreference.kt rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/Application.kt (91%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/BootShutdownReceiver.kt (89%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/QuickTileService.kt (95%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/activity/BaseActivity.kt (96%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/activity/LogViewerActivity.kt (97%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/activity/MainActivity.kt (95%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/activity/SettingsActivity.kt (93%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/activity/TunnelCreatorActivity.kt (82%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/activity/TunnelToggleActivity.kt (89%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/activity/TvMainActivity.kt (95%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/configStore/ConfigStore.kt (96%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/configStore/FileConfigStore.kt (94%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/databinding/BindingAdapters.kt (93%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/databinding/ItemChangeListener.kt (98%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/databinding/Keyed.kt (84%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/databinding/ObservableKeyedArrayList.kt (96%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/databinding/ObservableKeyedRecyclerViewAdapter.kt (98%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/databinding/ObservableSortedKeyedArrayList.kt (98%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/fragment/AddTunnelsSheet.kt (97%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/fragment/AppListDialogFragment.kt (95%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/fragment/BaseFragment.kt (87%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/fragment/ConfigNamingDialogFragment.kt (91%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/fragment/TunnelDetailFragment.kt (93%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/fragment/TunnelEditorFragment.kt (96%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/fragment/TunnelListFragment.kt (94%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/model/ApplicationData.kt (82%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/model/ObservableTunnel.kt (93%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/model/TunnelComparator.kt (98%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/model/TunnelManager.kt (91%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/preference/KernelModuleEnablerPreference.kt (89%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/preference/PreferencesPreferenceDataStore.kt (99%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/preference/QuickTilePreference.kt (94%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/preference/ToolsInstallerPreference.kt (93%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/preference/VersionPreference.kt (81%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/preference/ZipExporterPreference.kt (91%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/updater/Ed25519.java (99%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/updater/SnackbarUpdateShower.kt (97%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/updater/Updater.kt (97%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/util/AdminKnobs.kt (86%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/util/BiometricAuthenticator.kt (98%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/util/ClipboardUtils.kt (94%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/util/DownloadsFileSaver.kt (98%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/util/ErrorMessages.kt (93%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/util/Extensions.kt (86%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/util/QrCodeFromFileScanner.kt (98%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/util/QuantityFormatter.kt (96%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/util/TunnelImporter.kt (96%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/util/UserKnobs.kt (98%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/viewmodel/ConfigProxy.kt (93%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/viewmodel/InterfaceProxy.kt (92%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/viewmodel/PeerProxy.kt (98%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/widget/KeyInputFilter.kt (95%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/widget/MultiselectableRelativeLayout.kt (95%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/widget/NameInputFilter.kt (94%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/widget/SlashDrawable.kt (99%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/widget/ToggleSwitch.kt (97%) rename ui/src/main/java/{com/wireguard/android => page/onram/wirevpn}/widget/TvCardView.kt (95%) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..e0331136 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,131 @@ +# Builds the signed release APK and F-Droid v2 artifacts as soon as a new +# release is created, and attaches everything to that release. +# +# Works on Gitea Actions (GitHub-Actions-compatible) — the repo lives on +# https://git.obahan.xyz/frank/wirevpn. +# +# Required repository secrets: +# KEYSTORE_FILE base64-encoded release signing keystore (.jks) +# KEYSTORE_PASSWORD keystore password +# KEY_ALIAS key alias +# KEY_PASSWORD key password +# +# Requires a registered Actions runner on the Gitea instance that can run +# docker containers with the Android SDK (gitea/act image, docker driver). +name: release + +on: + release: + types: [published, created] + +concurrency: + group: release-${{ github.ref }} + cancel-in-progress: false + +env: + ANDROID_NDK_VERSION: "28.2.13676358" + ANDROID_API_LEVEL: "36" + GRADLE_USER_HOME: ${{ github.workspace }}/.gradle + +jobs: + build: + runs-on: self-hosted + timeout-minutes: 90 + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + fetch-depth: 0 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "21" + + - name: Ensure Android SDK (platform, build-tools, NDK) + run: | + set -e + if [ -z "${ANDROID_HOME:-}" ] && [ -d /usr/lib/android-sdk ]; then + export ANDROID_HOME=/usr/lib/android-sdk + fi + if [ -z "${ANDROID_HOME:-}" ]; then + echo "ANDROID_HOME not set; installing SDK" + export ANDROID_HOME=$HOME/android-sdk + mkdir -p "$ANDROID_HOME/cmdline-tools" + curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -o ct.zip + (cd "$ANDROID_HOME/cmdline-tools" && unzip -q ../../ct.zip && mv cmdline-tools latest && rm -rf latest/latest) + yes | "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" --sdk_root="$ANDROID_HOME" --licenses >/dev/null + fi + "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" --sdk_root="$ANDROID_HOME" \ + "platform-tools" "platforms;android-${ANDROID_API_LEVEL}" "build-tools;36.0.0" "ndk;${ANDROID_NDK_VERSION}" + echo "sdk.dir=$ANDROID_HOME" > local.properties + echo "ndk.dir=$ANDROID_HOME/ndk/${ANDROID_NDK_VERSION}" >> local.properties + + - name: Decode signing keystore + run: | + mkdir -p "$HOME/keystore" + echo "$KEYSTORE_FILE" | base64 -d > "$HOME/keystore/wirevpn-release.jks" + env: + KEYSTORE_FILE: ${{ secrets.KEYSTORE_FILE }} + + - name: Build signed release APK + uses: gradle/actions/setup-gradle@v4 + env: + KEYSTORE_FILE: ${{ env.HOME }}/keystore/wirevpn-release.jks + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + with: + arguments: assembleRelease + + - name: Collect build outputs + F-Droid metadata + run: | + set -e + APK=ui/build/outputs/apk/release/ui-release.apk + test -f "$APK" + mkdir -p dist + cp "$APK" dist/page.onram.wirevpn.apk + # F-Droid v2 metadata + signature: "256;" + base64(sha256(sha256(apk-bytes))) + export PATH="$ANDROID_HOME/build-tools/36.0.0:$PATH" + python3 scripts/fdroid_metadata.py dist/page.onram.wirevpn.apk > dist/page.onram.wirevpn.metadata + python3 -c " + import hashlib, base64 + d = open('dist/page.onram.wirevpn.apk', 'rb').read() + sig = base64.b64encode(hashlib.sha256(hashlib.sha256(d).digest()).digest()).decode() + open('dist/page.onram.wirevpn.signature', 'w').write(f'256;{sig}\n') + " + echo "--- metadata ---" + cat dist/page.onram.wirevpn.metadata + echo "--- signature ---" + cat dist/page.onram.wirevpn.signature + + - name: Attach artifacts to the Gitea release + env: + GITEA_API: https://git.obahan.xyz/api/v1 + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN || github.token }} + REPO: frank/wirevpn + run: | + set -e + tag="${GITHUB_REF#refs/tags/}" + [ -n "$tag" ] || tag="latest" + # Find or create the release + rid=$(curl -fsSL -H "Authorization: token $GITEA_TOKEN" "$GITEA_API/repos/$REPO/releases/tags/$tag" | python3 -c 'import json,sys; print(json.load(sys.stdin)["id"])' 2>/dev/null || true) + if [ -z "$rid" ]; then + rid=$(curl -fsSL -H "Authorization: token $GITEA_TOKEN" -H "Content-Type: application/json" \ + -d "{\"name\":\"$tag\",\"tag_name\":\"$tag\",\"target\":\"main\"}" \ + "$GITEA_API/repos/$REPO/releases" | python3 -c 'import json,sys; print(json.load(sys.stdin)["id"])') + fi + for f in dist/page.onram.wirevpn.apk dist/page.onram.wirevpn.metadata dist/page.onram.wirevpn.signature; do + curl -fsSL -H "Authorization: token $GITEA_TOKEN" \ + -F "file=@$f" \ + "$GITEA_API/repos/$REPO/releases/$rid/assets" + echo "uploaded $f" + done + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: fdroid-bundle + path: dist/ diff --git a/NOTICE.md b/NOTICE.md new file mode 100644 index 00000000..891f3864 --- /dev/null +++ b/NOTICE.md @@ -0,0 +1,49 @@ +# Wire VPN for Android — Third-Party Components & Licences + +Wire VPN is a fork of [WireGuard for Android](https://git.zx2c4.com/wireguard-android/about/). +This file lists the components shipped inside the APK and their licences. + +## Shipped in the APK + +| Component | Where | Licence | +|---|---|---| +| App code (`ui`) | `ui/src` | Apache-2.0 | +| Tunnel library (`tunnel`) | `tunnel/src` | Apache-2.0 | +| Userspace WireGuard (`golang.zx2c4.com/wireguard`, compiled into `libwg-go.so`) | `tunnel/tools/libwg-go` + Go module | MIT (per `LICENSE` of the Go module; every `.go` file is SPDX `MIT`) | +| gVisor / netstack (`gvisor.dev/gvisor`, Go dependency of the module, compiled into `libwg-go.so`) | Go module dep | Apache-2.0 | +| Go standard libraries | Go module dep | BSD-3-Clause | +| `golang.org/x/*` (crypto, net, sys) | Go module deps | BSD-3-Clause | +| wireguard-tools (`wg` / `wg-quick`, compiled into `libwg.so`, `libwg-quick.so`) | `tunnel/tools/wireguard-tools` | GPL-2.0-only OR MIT (each file `SPDX-License-Identifier: GPL-2.0 OR MIT` — the **MIT** clause is selected for this distribution) | +| `zxing-android-embedded` (QR scanning) | Gradle dependency | Apache-2.0 | +| AndroidX, Material, Kotlin coroutines | Gradle dependencies | Apache-2.0 | + +Full licence texts: + +- Apache-2.0: [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) (also `COPYING`) +- MIT: see `golang.zx2c4.com/wireguard` module `LICENSE` +- BSD-3-Clause: [https://opensource.org/license/bsd-3-clause](https://opensource.org/license/bsd-3-clause) +- wireguard-tools GPL-2.0 OR MIT: [https://git.zx2c4.com/wireguard-tools/about](https://git.zx2c4.com/wireguard-tools/about) + +All shipped licences are F-Droid-compatible (permissive, or GPL-2.0/MIT dual where +the MIT clause is elected). + +## Build-time only (not shipped in the APK) + +| Component | Purpose | Licence | +|---|---|---| +| Go toolchain 1.24.3 | compiles `libwg-go.so` | BSD-3-Clause | +| `termux-elf-cleaner` (`tunnel/tools/elf-cleaner`) | strips ELF debug sections from `libwg.so`/`libwg-quick.so` at build time | GPL-3.0-only | + +`termux-elf-cleaner` runs only during the build on the build host; it is not +distributed with the application. + +## Note on the wireguard-go history + +Historically `wireguard-go` was licensed GPL-2.0. The current upstream Go module +(`golang.zx2c4.com/wireguard`), which this project builds, is licensed MIT, and +every source file in the pinned module revision is marked `SPDX-License-Identifier: MIT`. + +## Not affiliated + +This project is an independent fork. WireGuard is a trademark of its respective +owner; this project is not affiliated with, endorsed by, or sponsored by WireGuard LLC. diff --git a/README.md b/README.md index eaffeee7..6bb2033b 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,50 @@ -# Android GUI for [WireGuard](https://www.wireguard.com/) +# Wire VPN for Android -**[Download from the Play Store](https://play.google.com/store/apps/details?id=com.wireguard.android)** +**A fork of [WireGuard for Android](https://git.zx2c4.com/wireguard-android/about/), rebranded as Wire VPN.** -This is an Android GUI for [WireGuard](https://www.wireguard.com/). It [opportunistically uses the kernel implementation](https://git.zx2c4.com/android_kernel_wireguard/about/), and falls back to using the non-root [userspace implementation](https://git.zx2c4.com/wireguard-go/about/). +Package: `page.onram.wirevpn` · Available from our [F-Droid repository](https://git.obahan.xyz/frank/wirevpn) on release. + +Wire VPN is an Android GUI for [WireGuard](https://www.wireguard.com/). It [opportunistically uses the kernel implementation](https://git.zx2c4.com/android_kernel_wireguard/about/), and falls back to using the non-root [userspace implementation](https://git.zx2c4.com/wireguard-go/about/). + +## What changed from upstream + +- App name rebranded from *WireGuard* to *Wire VPN* +- New launcher icon (padlock with a bold W in a circle) +- Application ID changed to `page.onram.wirevpn` (Java/Kotlin package is `page.onram.wirevpn`) +- GitHub Actions pipeline: every new Git release automatically builds a signed release APK and produces F-Droid v2 repository artifacts +- Upstream in-app auto-updater and donation links removed (we distribute via our own F-Droid repo) ## Building ``` -$ git clone --recurse-submodules https://git.zx2c4.com/wireguard-android -$ cd wireguard-android +$ git clone --recurse-submodules https://git.obahan.xyz/frank/wirevpn.git +$ cd wirevpn $ ./gradlew assembleRelease ``` -macOS users may need [flock(1)](https://github.com/discoteq/flock). +The build compiles the tunnel backend natively (CMake + NDK) and the userspace +WireGuard implementation in Go (Go 1.24.3 is fetched and hash-checked by the +build automatically). -## Embedding - -The tunnel library is [on Maven Central](https://search.maven.org/artifact/com.wireguard.android/tunnel), alongside [extensive class library documentation](https://javadoc.io/doc/com.wireguard.android/tunnel). +To sign with a keystore, export: ``` -implementation 'com.wireguard.android:tunnel:$wireguardTunnelVersion' +export KEYSTORE_FILE=/path/to/keystore.jks +export KEYSTORE_PASSWORD=... +export KEY_ALIAS=... +export KEY_PASSWORD=... ``` -The library makes use of Java 8 features, so be sure to support those in your gradle configuration with [desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring): - -``` -compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 - coreLibraryDesugaringEnabled = true -} -dependencies { - coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.0.3" -} -``` +Releases are cut by creating a Git tag/release on `main` (e.g. `v1.0.x`); the +`release.yml` GitHub Action builds and publishes the artifacts. ## Translating -Please help us translate the app into several languages on [our translation platform](https://crowdin.com/project/WireGuard). +This project uses [Crowdin](https://crowdin.com) upstream; translations in +`ui/src/main/res/values-*/` are carried over from the WireGuard project. + +## Licences + +See [NOTICE.md](NOTICE.md) for the full list. The app code is +[Apache-2.0](COPYING). This project is a fork of the WireGuard Android app and +is not affiliated with WireGuard LLC. diff --git a/gradle.properties b/gradle.properties index eb34e28f..e7e450c6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ -wireguardVersionCode=519 -wireguardVersionName=1.0.20260315 -wireguardPackageName=com.wireguard.android +wireguardVersionCode=520 +wireguardVersionName=1.0.20260910 +wireguardPackageName=page.onram.wirevpn # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit diff --git a/scripts/fdroid_metadata.py b/scripts/fdroid_metadata.py new file mode 100644 index 00000000..2cdb56b5 --- /dev/null +++ b/scripts/fdroid_metadata.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +"""Generate F-Droid v2 metadata for a signed APK. + +Usage: fdroid_metadata.py +Prints the F-Droid metadata lines to stdout. The workflow separately computes +the F-Droid signature (base64 of double SHA-256). +""" +import hashlib +import re +import shutil +import subprocess +import sys + + +def main(): + apk = sys.argv[1] + with open(apk, "rb") as f: + data = f.read() + sha256 = hashlib.sha256(data).hexdigest() + + aapt2 = shutil.which("aapt2") + if aapt2 is None: + sys.exit("aapt2 not found on PATH; add the Android build-tools dir to PATH") + + dump = subprocess.run([aapt2, "dump", "badging", apk], check=True, + capture_output=True, text=True).stdout + m_pkg = re.search(r"package: name='([^']+)'", dump) + m_ver = re.search(r"versionName='([^']+)'", dump) + m_code = re.search(r"versionCode='(\d+)'", dump) + if not (m_pkg and m_ver and m_code): + sys.exit(f"could not parse APK badging:\n{dump[:2000]}") + + pkg = m_pkg.group(1) + ver = m_ver.group(1) + code = int(m_code.group(1)) + + lines = [ + f"VersionName: {ver}", + f"VersionCode: {code}", + "MinSdkVersion: 24", + "TargetSdkVersion: 36", + "Permissions:", + " android.permission.INTERNET", + " android.permission.CAMERA", + " android.permission.RECEIVE_BOOT_COMPLETED", + " android.permission.REQUEST_INSTALL_PACKAGES", + " android.permission.SYSTEM_ALERT_WINDOW", + " android.permission.WRITE_EXTERNAL_STORAGE", + f"UpdateUrl: https://git.obahan.xyz/frank/wirevpn/releases", + f"Sha256Digest: {sha256}", + f"AndroidPackageInfoName: {pkg}", + ] + print("\n".join(lines)) + + +if __name__ == "__main__": + main() diff --git a/settings.gradle.kts b/settings.gradle.kts index 66a112c9..9ec77069 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,7 +16,7 @@ dependencyResolutionManagement { } } -rootProject.name = "wireguard-android" +rootProject.name = "wire-vpn" include(":tunnel") include(":ui") diff --git a/tunnel/build.gradle.kts b/tunnel/build.gradle.kts index 26cda3df..da0a98ef 100644 --- a/tunnel/build.gradle.kts +++ b/tunnel/build.gradle.kts @@ -8,7 +8,6 @@ val pkg: String = providers.gradleProperty("wireguardPackageName").get() plugins { alias(libs.plugins.android.library) `maven-publish` - signing } android { @@ -83,9 +82,9 @@ publishing { from(components["release"]) } pom { - name = "WireGuard Tunnel Library" - description = "Embeddable tunnel library for WireGuard for Android" - url = "https://www.wireguard.com/" + name = "Wire VPN Tunnel Library" + description = "Embeddable tunnel library for Wire VPN for Android" + url = "https://git.obahan.xyz/frank/wirevpn" licenses { license { @@ -95,18 +94,18 @@ publishing { } } scm { - connection = "scm:git:https://git.zx2c4.com/wireguard-android" - developerConnection = "scm:git:https://git.zx2c4.com/wireguard-android" - url = "https://git.zx2c4.com/wireguard-android" + connection = "scm:git:https://git.obahan.xyz/frank/wirevpn.git" + developerConnection = "scm:git:https://git.obahan.xyz/frank/wirevpn.git" + url = "https://git.obahan.xyz/frank/wirevpn" } developers { organization { - name = "WireGuard" - url = "https://www.wireguard.com/" + name = "Wire VPN" + url = "https://git.obahan.xyz/frank/wirevpn" } developer { - name = "WireGuard" - email = "team@wireguard.com" + name = "Wire VPN" + email = "frank@onram.page" } } } @@ -136,8 +135,3 @@ tasks.register("zipReleasePublication") { destinationDirectory.set(layout.buildDirectory.dir("distributions")) into("${mavenGroupPath}/${mavenArtifactId}/${mavenVersion}") } - -signing { - useGpgCmd() - sign(publishing.publications) -} diff --git a/tunnel/src/main/AndroidManifest.xml b/tunnel/src/main/AndroidManifest.xml index 7ac3b123..df365078 100644 --- a/tunnel/src/main/AndroidManifest.xml +++ b/tunnel/src/main/AndroidManifest.xml @@ -7,7 +7,7 @@ diff --git a/tunnel/src/main/java/com/wireguard/android/backend/Backend.java b/tunnel/src/main/java/page/onram/wirevpn/backend/Backend.java similarity index 96% rename from tunnel/src/main/java/com/wireguard/android/backend/Backend.java rename to tunnel/src/main/java/page/onram/wirevpn/backend/Backend.java index ff2fb818..a447892c 100644 --- a/tunnel/src/main/java/com/wireguard/android/backend/Backend.java +++ b/tunnel/src/main/java/page/onram/wirevpn/backend/Backend.java @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.backend; +package page.onram.wirevpn.backend; -import com.wireguard.config.Config; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.config.Config; +import page.onram.wirevpn.util.NonNullForAll; import java.util.Set; diff --git a/tunnel/src/main/java/com/wireguard/android/backend/BackendException.java b/tunnel/src/main/java/page/onram/wirevpn/backend/BackendException.java similarity index 95% rename from tunnel/src/main/java/com/wireguard/android/backend/BackendException.java rename to tunnel/src/main/java/page/onram/wirevpn/backend/BackendException.java index 94f7b098..82a20124 100644 --- a/tunnel/src/main/java/com/wireguard/android/backend/BackendException.java +++ b/tunnel/src/main/java/page/onram/wirevpn/backend/BackendException.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.backend; +package page.onram.wirevpn.backend; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.util.NonNullForAll; /** * A subclass of {@link Exception} that encapsulates the reasons for a failure originating in diff --git a/tunnel/src/main/java/com/wireguard/android/backend/GoBackend.java b/tunnel/src/main/java/page/onram/wirevpn/backend/GoBackend.java similarity index 96% rename from tunnel/src/main/java/com/wireguard/android/backend/GoBackend.java rename to tunnel/src/main/java/page/onram/wirevpn/backend/GoBackend.java index 1b91aeda..d9008f64 100644 --- a/tunnel/src/main/java/com/wireguard/android/backend/GoBackend.java +++ b/tunnel/src/main/java/page/onram/wirevpn/backend/GoBackend.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.backend; +package page.onram.wirevpn.backend; import android.content.Context; import android.content.Intent; @@ -12,16 +12,16 @@ import android.os.ParcelFileDescriptor; import android.system.OsConstants; import android.util.Log; -import com.wireguard.android.backend.BackendException.Reason; -import com.wireguard.android.backend.Tunnel.State; -import com.wireguard.android.util.SharedLibraryLoader; -import com.wireguard.config.Config; -import com.wireguard.config.InetEndpoint; -import com.wireguard.config.InetNetwork; -import com.wireguard.config.Peer; -import com.wireguard.crypto.Key; -import com.wireguard.crypto.KeyFormatException; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.backend.BackendException.Reason; +import page.onram.wirevpn.backend.Tunnel.State; +import page.onram.wirevpn.util.SharedLibraryLoader; +import page.onram.wirevpn.config.Config; +import page.onram.wirevpn.config.InetEndpoint; +import page.onram.wirevpn.config.InetNetwork; +import page.onram.wirevpn.config.Peer; +import page.onram.wirevpn.crypto.Key; +import page.onram.wirevpn.crypto.KeyFormatException; +import page.onram.wirevpn.util.NonNullForAll; import java.net.InetAddress; import java.util.Collections; diff --git a/tunnel/src/main/java/com/wireguard/android/backend/Statistics.java b/tunnel/src/main/java/page/onram/wirevpn/backend/Statistics.java similarity index 85% rename from tunnel/src/main/java/com/wireguard/android/backend/Statistics.java rename to tunnel/src/main/java/page/onram/wirevpn/backend/Statistics.java index d5d41c5f..e29e86fc 100644 --- a/tunnel/src/main/java/com/wireguard/android/backend/Statistics.java +++ b/tunnel/src/main/java/page/onram/wirevpn/backend/Statistics.java @@ -3,12 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.backend; +package page.onram.wirevpn.backend; import android.os.SystemClock; -import com.wireguard.crypto.Key; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.crypto.Key; +import page.onram.wirevpn.util.NonNullForAll; import java.util.HashMap; import java.util.Map; @@ -32,11 +32,11 @@ public class Statistics { * Add a peer and its current stats to the internal map. * * @param key A WireGuard public key bound to a particular peer - * @param rxBytes The received traffic for the {@link com.wireguard.config.Peer} referenced by + * @param rxBytes The received traffic for the {@link page.onram.wirevpn.config.Peer} referenced by * the provided {@link Key}. This value is in bytes - * @param txBytes The transmitted traffic for the {@link com.wireguard.config.Peer} referenced by + * @param txBytes The transmitted traffic for the {@link page.onram.wirevpn.config.Peer} referenced by * the provided {@link Key}. This value is in bytes. - * @param latestHandshake The timestamp of the latest handshake for the {@link com.wireguard.config.Peer} + * @param latestHandshake The timestamp of the latest handshake for the {@link page.onram.wirevpn.config.Peer} * referenced by the provided {@link Key}. The value is in epoch milliseconds. */ void add(final Key key, final long rxBytes, final long txBytes, final long latestHandshake) { @@ -54,9 +54,9 @@ public class Statistics { } /** - * Get the statistics for the {@link com.wireguard.config.Peer} referenced by the provided {@link Key} + * Get the statistics for the {@link page.onram.wirevpn.config.Peer} referenced by the provided {@link Key} * - * @param peer A {@link Key} representing a {@link com.wireguard.config.Peer}. + * @param peer A {@link Key} representing a {@link page.onram.wirevpn.config.Peer}. * @return a {@link PeerStats} representing various statistics about this peer. */ @Nullable @@ -68,7 +68,7 @@ public class Statistics { * Get the list of peers being tracked by this instance. * * @return An array of {@link Key} instances representing WireGuard - * {@link com.wireguard.config.Peer}s + * {@link page.onram.wirevpn.config.Peer}s */ public Key[] peers() { return stats.keySet().toArray(new Key[0]); diff --git a/tunnel/src/main/java/com/wireguard/android/backend/Tunnel.java b/tunnel/src/main/java/page/onram/wirevpn/backend/Tunnel.java similarity index 94% rename from tunnel/src/main/java/com/wireguard/android/backend/Tunnel.java rename to tunnel/src/main/java/page/onram/wirevpn/backend/Tunnel.java index dbc91c27..eb707787 100644 --- a/tunnel/src/main/java/com/wireguard/android/backend/Tunnel.java +++ b/tunnel/src/main/java/page/onram/wirevpn/backend/Tunnel.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.backend; +package page.onram.wirevpn.backend; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.util.NonNullForAll; import java.util.regex.Pattern; diff --git a/tunnel/src/main/java/com/wireguard/android/backend/WgQuickBackend.java b/tunnel/src/main/java/page/onram/wirevpn/backend/WgQuickBackend.java similarity index 95% rename from tunnel/src/main/java/com/wireguard/android/backend/WgQuickBackend.java rename to tunnel/src/main/java/page/onram/wirevpn/backend/WgQuickBackend.java index af96ddae..4122c290 100644 --- a/tunnel/src/main/java/com/wireguard/android/backend/WgQuickBackend.java +++ b/tunnel/src/main/java/page/onram/wirevpn/backend/WgQuickBackend.java @@ -3,19 +3,19 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.backend; +package page.onram.wirevpn.backend; import android.content.Context; import android.util.Log; import android.util.Pair; -import com.wireguard.android.backend.BackendException.Reason; -import com.wireguard.android.backend.Tunnel.State; -import com.wireguard.android.util.RootShell; -import com.wireguard.android.util.ToolsInstaller; -import com.wireguard.config.Config; -import com.wireguard.crypto.Key; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.backend.BackendException.Reason; +import page.onram.wirevpn.backend.Tunnel.State; +import page.onram.wirevpn.util.RootShell; +import page.onram.wirevpn.util.ToolsInstaller; +import page.onram.wirevpn.config.Config; +import page.onram.wirevpn.crypto.Key; +import page.onram.wirevpn.util.NonNullForAll; import java.io.File; import java.io.FileOutputStream; diff --git a/tunnel/src/main/java/com/wireguard/config/Attribute.java b/tunnel/src/main/java/page/onram/wirevpn/config/Attribute.java similarity index 95% rename from tunnel/src/main/java/com/wireguard/config/Attribute.java rename to tunnel/src/main/java/page/onram/wirevpn/config/Attribute.java index c43750d7..1c5aeaf5 100644 --- a/tunnel/src/main/java/com/wireguard/config/Attribute.java +++ b/tunnel/src/main/java/page/onram/wirevpn/config/Attribute.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.config; +package page.onram.wirevpn.config; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.util.NonNullForAll; import java.util.Iterator; import java.util.Optional; diff --git a/tunnel/src/main/java/com/wireguard/config/BadConfigException.java b/tunnel/src/main/java/page/onram/wirevpn/config/BadConfigException.java similarity index 95% rename from tunnel/src/main/java/com/wireguard/config/BadConfigException.java rename to tunnel/src/main/java/page/onram/wirevpn/config/BadConfigException.java index e70418c9..225cd239 100644 --- a/tunnel/src/main/java/com/wireguard/config/BadConfigException.java +++ b/tunnel/src/main/java/page/onram/wirevpn/config/BadConfigException.java @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.config; +package page.onram.wirevpn.config; -import com.wireguard.crypto.KeyFormatException; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.crypto.KeyFormatException; +import page.onram.wirevpn.util.NonNullForAll; import androidx.annotation.Nullable; diff --git a/tunnel/src/main/java/com/wireguard/config/Config.java b/tunnel/src/main/java/page/onram/wirevpn/config/Config.java similarity index 96% rename from tunnel/src/main/java/com/wireguard/config/Config.java rename to tunnel/src/main/java/page/onram/wirevpn/config/Config.java index 21e45f5d..7c53d037 100644 --- a/tunnel/src/main/java/com/wireguard/config/Config.java +++ b/tunnel/src/main/java/page/onram/wirevpn/config/Config.java @@ -3,12 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.config; +package page.onram.wirevpn.config; -import com.wireguard.config.BadConfigException.Location; -import com.wireguard.config.BadConfigException.Reason; -import com.wireguard.config.BadConfigException.Section; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.config.BadConfigException.Location; +import page.onram.wirevpn.config.BadConfigException.Reason; +import page.onram.wirevpn.config.BadConfigException.Section; +import page.onram.wirevpn.util.NonNullForAll; import java.io.BufferedReader; import java.io.IOException; diff --git a/tunnel/src/main/java/com/wireguard/config/InetAddresses.java b/tunnel/src/main/java/page/onram/wirevpn/config/InetAddresses.java similarity index 98% rename from tunnel/src/main/java/com/wireguard/config/InetAddresses.java rename to tunnel/src/main/java/page/onram/wirevpn/config/InetAddresses.java index 165a702b..4593e82e 100644 --- a/tunnel/src/main/java/com/wireguard/config/InetAddresses.java +++ b/tunnel/src/main/java/page/onram/wirevpn/config/InetAddresses.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.config; +package page.onram.wirevpn.config; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.util.NonNullForAll; import java.lang.reflect.Method; import java.net.Inet4Address; diff --git a/tunnel/src/main/java/com/wireguard/config/InetEndpoint.java b/tunnel/src/main/java/page/onram/wirevpn/config/InetEndpoint.java similarity index 98% rename from tunnel/src/main/java/com/wireguard/config/InetEndpoint.java rename to tunnel/src/main/java/page/onram/wirevpn/config/InetEndpoint.java index c0ef433e..3c9c4ed1 100644 --- a/tunnel/src/main/java/com/wireguard/config/InetEndpoint.java +++ b/tunnel/src/main/java/page/onram/wirevpn/config/InetEndpoint.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.config; +package page.onram.wirevpn.config; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.util.NonNullForAll; import java.net.Inet4Address; import java.net.InetAddress; diff --git a/tunnel/src/main/java/com/wireguard/config/InetNetwork.java b/tunnel/src/main/java/page/onram/wirevpn/config/InetNetwork.java similarity index 96% rename from tunnel/src/main/java/com/wireguard/config/InetNetwork.java rename to tunnel/src/main/java/page/onram/wirevpn/config/InetNetwork.java index 84aea82b..8acdfba5 100644 --- a/tunnel/src/main/java/com/wireguard/config/InetNetwork.java +++ b/tunnel/src/main/java/page/onram/wirevpn/config/InetNetwork.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.config; +package page.onram.wirevpn.config; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.util.NonNullForAll; import java.net.Inet4Address; import java.net.InetAddress; diff --git a/tunnel/src/main/java/com/wireguard/config/Interface.java b/tunnel/src/main/java/page/onram/wirevpn/config/Interface.java similarity index 97% rename from tunnel/src/main/java/com/wireguard/config/Interface.java rename to tunnel/src/main/java/page/onram/wirevpn/config/Interface.java index 53ca9111..c76f70d2 100644 --- a/tunnel/src/main/java/com/wireguard/config/Interface.java +++ b/tunnel/src/main/java/page/onram/wirevpn/config/Interface.java @@ -3,15 +3,15 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.config; +package page.onram.wirevpn.config; -import com.wireguard.config.BadConfigException.Location; -import com.wireguard.config.BadConfigException.Reason; -import com.wireguard.config.BadConfigException.Section; -import com.wireguard.crypto.Key; -import com.wireguard.crypto.KeyFormatException; -import com.wireguard.crypto.KeyPair; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.config.BadConfigException.Location; +import page.onram.wirevpn.config.BadConfigException.Reason; +import page.onram.wirevpn.config.BadConfigException.Section; +import page.onram.wirevpn.crypto.Key; +import page.onram.wirevpn.crypto.KeyFormatException; +import page.onram.wirevpn.crypto.KeyPair; +import page.onram.wirevpn.util.NonNullForAll; import java.net.InetAddress; import java.util.Collection; diff --git a/tunnel/src/main/java/com/wireguard/config/ParseException.java b/tunnel/src/main/java/page/onram/wirevpn/config/ParseException.java similarity index 93% rename from tunnel/src/main/java/com/wireguard/config/ParseException.java rename to tunnel/src/main/java/page/onram/wirevpn/config/ParseException.java index ff430e6b..fdc9016e 100644 --- a/tunnel/src/main/java/com/wireguard/config/ParseException.java +++ b/tunnel/src/main/java/page/onram/wirevpn/config/ParseException.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.config; +package page.onram.wirevpn.config; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.util.NonNullForAll; import androidx.annotation.Nullable; diff --git a/tunnel/src/main/java/com/wireguard/config/Peer.java b/tunnel/src/main/java/page/onram/wirevpn/config/Peer.java similarity index 97% rename from tunnel/src/main/java/com/wireguard/config/Peer.java rename to tunnel/src/main/java/page/onram/wirevpn/config/Peer.java index b308a937..770234a2 100644 --- a/tunnel/src/main/java/com/wireguard/config/Peer.java +++ b/tunnel/src/main/java/page/onram/wirevpn/config/Peer.java @@ -3,14 +3,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.config; +package page.onram.wirevpn.config; -import com.wireguard.config.BadConfigException.Location; -import com.wireguard.config.BadConfigException.Reason; -import com.wireguard.config.BadConfigException.Section; -import com.wireguard.crypto.Key; -import com.wireguard.crypto.KeyFormatException; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.config.BadConfigException.Location; +import page.onram.wirevpn.config.BadConfigException.Reason; +import page.onram.wirevpn.config.BadConfigException.Section; +import page.onram.wirevpn.crypto.Key; +import page.onram.wirevpn.crypto.KeyFormatException; +import page.onram.wirevpn.util.NonNullForAll; import java.util.Collection; import java.util.Collections; diff --git a/tunnel/src/main/java/com/wireguard/crypto/Curve25519.java b/tunnel/src/main/java/page/onram/wirevpn/crypto/Curve25519.java similarity index 99% rename from tunnel/src/main/java/com/wireguard/crypto/Curve25519.java rename to tunnel/src/main/java/page/onram/wirevpn/crypto/Curve25519.java index c9a592f2..72896286 100644 --- a/tunnel/src/main/java/com/wireguard/crypto/Curve25519.java +++ b/tunnel/src/main/java/page/onram/wirevpn/crypto/Curve25519.java @@ -4,9 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.crypto; +package page.onram.wirevpn.crypto; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.util.NonNullForAll; import java.util.Arrays; diff --git a/tunnel/src/main/java/com/wireguard/crypto/Key.java b/tunnel/src/main/java/page/onram/wirevpn/crypto/Key.java similarity index 98% rename from tunnel/src/main/java/com/wireguard/crypto/Key.java rename to tunnel/src/main/java/page/onram/wirevpn/crypto/Key.java index 1aff6701..3337074b 100644 --- a/tunnel/src/main/java/com/wireguard/crypto/Key.java +++ b/tunnel/src/main/java/page/onram/wirevpn/crypto/Key.java @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.crypto; +package page.onram.wirevpn.crypto; -import com.wireguard.crypto.KeyFormatException.Type; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.crypto.KeyFormatException.Type; +import page.onram.wirevpn.util.NonNullForAll; import java.security.MessageDigest; import java.security.SecureRandom; diff --git a/tunnel/src/main/java/com/wireguard/crypto/KeyFormatException.java b/tunnel/src/main/java/page/onram/wirevpn/crypto/KeyFormatException.java similarity index 90% rename from tunnel/src/main/java/com/wireguard/crypto/KeyFormatException.java rename to tunnel/src/main/java/page/onram/wirevpn/crypto/KeyFormatException.java index b1503f29..2110c503 100644 --- a/tunnel/src/main/java/com/wireguard/crypto/KeyFormatException.java +++ b/tunnel/src/main/java/page/onram/wirevpn/crypto/KeyFormatException.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.crypto; +package page.onram.wirevpn.crypto; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.util.NonNullForAll; /** * An exception thrown when attempting to parse an invalid key (too short, too long, or byte diff --git a/tunnel/src/main/java/com/wireguard/crypto/KeyPair.java b/tunnel/src/main/java/page/onram/wirevpn/crypto/KeyPair.java similarity index 93% rename from tunnel/src/main/java/com/wireguard/crypto/KeyPair.java rename to tunnel/src/main/java/page/onram/wirevpn/crypto/KeyPair.java index 85f94ca5..fec1a44c 100644 --- a/tunnel/src/main/java/com/wireguard/crypto/KeyPair.java +++ b/tunnel/src/main/java/page/onram/wirevpn/crypto/KeyPair.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.crypto; +package page.onram.wirevpn.crypto; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.util.NonNullForAll; /** * Represents a Curve25519 key pair as used by WireGuard. diff --git a/tunnel/src/main/java/com/wireguard/util/NonNullForAll.java b/tunnel/src/main/java/page/onram/wirevpn/util/NonNullForAll.java similarity index 96% rename from tunnel/src/main/java/com/wireguard/util/NonNullForAll.java rename to tunnel/src/main/java/page/onram/wirevpn/util/NonNullForAll.java index a6598fd8..d9e5292f 100644 --- a/tunnel/src/main/java/com/wireguard/util/NonNullForAll.java +++ b/tunnel/src/main/java/page/onram/wirevpn/util/NonNullForAll.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.util; +package page.onram.wirevpn.util; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/tunnel/src/main/java/com/wireguard/android/util/RootShell.java b/tunnel/src/main/java/page/onram/wirevpn/util/RootShell.java similarity index 98% rename from tunnel/src/main/java/com/wireguard/android/util/RootShell.java rename to tunnel/src/main/java/page/onram/wirevpn/util/RootShell.java index 5839ec67..4fe8bb55 100644 --- a/tunnel/src/main/java/com/wireguard/android/util/RootShell.java +++ b/tunnel/src/main/java/page/onram/wirevpn/util/RootShell.java @@ -3,13 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.util; +package page.onram.wirevpn.util; import android.content.Context; import android.util.Log; -import com.wireguard.android.util.RootShell.RootShellException.Reason; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.util.RootShell.RootShellException.Reason; +import page.onram.wirevpn.util.NonNullForAll; import java.io.BufferedReader; import java.io.File; diff --git a/tunnel/src/main/java/com/wireguard/android/util/SharedLibraryLoader.java b/tunnel/src/main/java/page/onram/wirevpn/util/SharedLibraryLoader.java similarity index 97% rename from tunnel/src/main/java/com/wireguard/android/util/SharedLibraryLoader.java rename to tunnel/src/main/java/page/onram/wirevpn/util/SharedLibraryLoader.java index 98e3e63d..e4d0b706 100644 --- a/tunnel/src/main/java/com/wireguard/android/util/SharedLibraryLoader.java +++ b/tunnel/src/main/java/page/onram/wirevpn/util/SharedLibraryLoader.java @@ -3,13 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.util; +package page.onram.wirevpn.util; import android.content.Context; import android.os.Build; import android.util.Log; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.util.NonNullForAll; import java.io.File; import java.io.FileOutputStream; diff --git a/tunnel/src/main/java/com/wireguard/android/util/ToolsInstaller.java b/tunnel/src/main/java/page/onram/wirevpn/util/ToolsInstaller.java similarity index 97% rename from tunnel/src/main/java/com/wireguard/android/util/ToolsInstaller.java rename to tunnel/src/main/java/page/onram/wirevpn/util/ToolsInstaller.java index d3882498..d5f2bfd0 100644 --- a/tunnel/src/main/java/com/wireguard/android/util/ToolsInstaller.java +++ b/tunnel/src/main/java/page/onram/wirevpn/util/ToolsInstaller.java @@ -3,14 +3,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.util; +package page.onram.wirevpn.util; import android.content.Context; import android.system.OsConstants; import android.util.Log; -import com.wireguard.android.util.RootShell.RootShellException; -import com.wireguard.util.NonNullForAll; +import page.onram.wirevpn.util.RootShell.RootShellException; +import page.onram.wirevpn.util.NonNullForAll; import java.io.File; import java.io.FileNotFoundException; @@ -134,7 +134,7 @@ public final class ToolsInstaller { @RestrictTo(Scope.LIBRARY_GROUP) public int install() throws RootShellException, IOException { - if (!context.getPackageName().startsWith("com.wireguard.")) + if (!context.getPackageName().startsWith("page.onram.wirevpn.")) throw new SecurityException("The tools may only be installed system-wide from the main WireGuard app."); return willInstallAsMagiskModule() ? installMagisk() : installSystem(); } diff --git a/tunnel/src/test/java/com/wireguard/config/BadConfigExceptionTest.java b/tunnel/src/test/java/page/onram/wirevpn/config/BadConfigExceptionTest.java similarity index 96% rename from tunnel/src/test/java/com/wireguard/config/BadConfigExceptionTest.java rename to tunnel/src/test/java/page/onram/wirevpn/config/BadConfigExceptionTest.java index 59badad7..e5995ffb 100644 --- a/tunnel/src/test/java/com/wireguard/config/BadConfigExceptionTest.java +++ b/tunnel/src/test/java/page/onram/wirevpn/config/BadConfigExceptionTest.java @@ -3,11 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.config; +package page.onram.wirevpn.config; -import com.wireguard.config.BadConfigException.Location; -import com.wireguard.config.BadConfigException.Reason; -import com.wireguard.config.BadConfigException.Section; +import page.onram.wirevpn.config.BadConfigException.Location; +import page.onram.wirevpn.config.BadConfigException.Reason; +import page.onram.wirevpn.config.BadConfigException.Section; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/tunnel/src/test/java/com/wireguard/config/ConfigTest.java b/tunnel/src/test/java/page/onram/wirevpn/config/ConfigTest.java similarity index 98% rename from tunnel/src/test/java/com/wireguard/config/ConfigTest.java rename to tunnel/src/test/java/page/onram/wirevpn/config/ConfigTest.java index 582c7ac0..eaad6bbb 100644 --- a/tunnel/src/test/java/com/wireguard/config/ConfigTest.java +++ b/tunnel/src/test/java/page/onram/wirevpn/config/ConfigTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.config; +package page.onram.wirevpn.config; import org.junit.Test; diff --git a/ui/build.gradle.kts b/ui/build.gradle.kts index 52ad0b78..57beef3a 100644 --- a/ui/build.gradle.kts +++ b/ui/build.gradle.kts @@ -7,6 +7,13 @@ plugins { alias(libs.plugins.legacy.kapt) } +val signingKeystoreFile: String? = providers.environmentVariable("KEYSTORE_FILE").orNull +val releaseSigningEnabled = + signingKeystoreFile != null && + providers.environmentVariable("KEYSTORE_PASSWORD").orNull != null && + providers.environmentVariable("KEY_ALIAS").orNull != null && + providers.environmentVariable("KEY_PASSWORD").orNull != null + android { compileSdk = 36 buildFeatures { @@ -15,6 +22,17 @@ android { viewBinding = true } namespace = pkg + signingConfigs { + if (releaseSigningEnabled) { + val storeFileRef = requireNotNull(signingKeystoreFile) + create("release") { + storeFile = file(storeFileRef) + storePassword = providers.environmentVariable("KEYSTORE_PASSWORD").get() + keyAlias = providers.environmentVariable("KEY_ALIAS").get() + keyPassword = providers.environmentVariable("KEY_PASSWORD").get() + } + } + } defaultConfig { applicationId = pkg minSdk = 24 @@ -32,6 +50,9 @@ android { isMinifyEnabled = true isShrinkResources = true proguardFiles("proguard-android-optimize.txt") + if (releaseSigningEnabled) { + signingConfig = signingConfigs.getByName("release") + } packaging { resources { excludes += "DebugProbesKt.bin" diff --git a/ui/src/main/AndroidManifest.xml b/ui/src/main/AndroidManifest.xml index 86c989b3..5d849595 100644 --- a/ui/src/main/AndroidManifest.xml +++ b/ui/src/main/AndroidManifest.xml @@ -130,9 +130,9 @@ android:exported="true" android:permission="${applicationId}.permission.CONTROL_TUNNELS"> - - - + + + diff --git a/ui/src/main/java/com/wireguard/android/preference/DonatePreference.kt b/ui/src/main/java/com/wireguard/android/preference/DonatePreference.kt deleted file mode 100644 index 2f66a2ca..00000000 --- a/ui/src/main/java/com/wireguard/android/preference/DonatePreference.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.wireguard.android.preference - -import android.content.Context -import android.content.Intent -import android.net.Uri -import android.util.AttributeSet -import android.widget.Toast -import androidx.preference.Preference -import com.google.android.material.dialog.MaterialAlertDialogBuilder -import com.wireguard.android.R -import com.wireguard.android.updater.Updater -import com.wireguard.android.util.ErrorMessages -import androidx.core.net.toUri - -class DonatePreference(context: Context, attrs: AttributeSet?) : Preference(context, attrs) { - override fun getSummary() = context.getString(R.string.donate_summary) - - override fun getTitle() = context.getString(R.string.donate_title) - - override fun onClick() { - /* Google Play Store forbids links to our donation page. */ - if (Updater.installerIsGooglePlay(context)) { - MaterialAlertDialogBuilder(context) - .setTitle(R.string.donate_title) - .setMessage(R.string.donate_google_play_disappointment) - .show() - return - } - - val intent = Intent(Intent.ACTION_VIEW) - intent.data = "https://www.wireguard.com/donations/".toUri() - try { - context.startActivity(intent) - } catch (e: Throwable) { - Toast.makeText(context, ErrorMessages[e], Toast.LENGTH_SHORT).show() - } - } -} diff --git a/ui/src/main/java/com/wireguard/android/Application.kt b/ui/src/main/java/page/onram/wirevpn/Application.kt similarity index 91% rename from ui/src/main/java/com/wireguard/android/Application.kt rename to ui/src/main/java/page/onram/wirevpn/Application.kt index 64da5873..35e755e7 100644 --- a/ui/src/main/java/com/wireguard/android/Application.kt +++ b/ui/src/main/java/page/onram/wirevpn/Application.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android +package page.onram.wirevpn import android.content.Context import android.content.Intent @@ -17,16 +17,16 @@ import androidx.datastore.preferences.core.PreferenceDataStoreFactory import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.preferencesDataStoreFile import com.google.android.material.color.DynamicColors -import com.wireguard.android.backend.Backend -import com.wireguard.android.backend.GoBackend -import com.wireguard.android.backend.WgQuickBackend -import com.wireguard.android.configStore.FileConfigStore -import com.wireguard.android.model.TunnelManager -import com.wireguard.android.updater.Updater -import com.wireguard.android.util.RootShell -import com.wireguard.android.util.ToolsInstaller -import com.wireguard.android.util.UserKnobs -import com.wireguard.android.util.applicationScope +import page.onram.wirevpn.backend.Backend +import page.onram.wirevpn.backend.GoBackend +import page.onram.wirevpn.backend.WgQuickBackend +import page.onram.wirevpn.configStore.FileConfigStore +import page.onram.wirevpn.model.TunnelManager +import page.onram.wirevpn.updater.Updater +import page.onram.wirevpn.util.RootShell +import page.onram.wirevpn.util.ToolsInstaller +import page.onram.wirevpn.util.UserKnobs +import page.onram.wirevpn.util.applicationScope import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/ui/src/main/java/com/wireguard/android/BootShutdownReceiver.kt b/ui/src/main/java/page/onram/wirevpn/BootShutdownReceiver.kt similarity index 89% rename from ui/src/main/java/com/wireguard/android/BootShutdownReceiver.kt rename to ui/src/main/java/page/onram/wirevpn/BootShutdownReceiver.kt index 59769df4..ce23fa9a 100644 --- a/ui/src/main/java/com/wireguard/android/BootShutdownReceiver.kt +++ b/ui/src/main/java/page/onram/wirevpn/BootShutdownReceiver.kt @@ -2,14 +2,14 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android +package page.onram.wirevpn import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.util.Log -import com.wireguard.android.backend.WgQuickBackend -import com.wireguard.android.util.applicationScope +import page.onram.wirevpn.backend.WgQuickBackend +import page.onram.wirevpn.util.applicationScope import kotlinx.coroutines.launch class BootShutdownReceiver : BroadcastReceiver() { diff --git a/ui/src/main/java/com/wireguard/android/QuickTileService.kt b/ui/src/main/java/page/onram/wirevpn/QuickTileService.kt similarity index 95% rename from ui/src/main/java/com/wireguard/android/QuickTileService.kt rename to ui/src/main/java/page/onram/wirevpn/QuickTileService.kt index a849c481..76540442 100644 --- a/ui/src/main/java/com/wireguard/android/QuickTileService.kt +++ b/ui/src/main/java/page/onram/wirevpn/QuickTileService.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android +package page.onram.wirevpn import android.app.PendingIntent import android.content.Intent @@ -19,12 +19,12 @@ import android.util.Log import androidx.annotation.RequiresApi import androidx.databinding.Observable import androidx.databinding.Observable.OnPropertyChangedCallback -import com.wireguard.android.activity.MainActivity -import com.wireguard.android.activity.TunnelToggleActivity -import com.wireguard.android.backend.Tunnel -import com.wireguard.android.model.ObservableTunnel -import com.wireguard.android.util.applicationScope -import com.wireguard.android.widget.SlashDrawable +import page.onram.wirevpn.activity.MainActivity +import page.onram.wirevpn.activity.TunnelToggleActivity +import page.onram.wirevpn.backend.Tunnel +import page.onram.wirevpn.model.ObservableTunnel +import page.onram.wirevpn.util.applicationScope +import page.onram.wirevpn.widget.SlashDrawable import kotlinx.coroutines.launch /** diff --git a/ui/src/main/java/com/wireguard/android/activity/BaseActivity.kt b/ui/src/main/java/page/onram/wirevpn/activity/BaseActivity.kt similarity index 96% rename from ui/src/main/java/com/wireguard/android/activity/BaseActivity.kt rename to ui/src/main/java/page/onram/wirevpn/activity/BaseActivity.kt index 5ff11062..47117de6 100644 --- a/ui/src/main/java/com/wireguard/android/activity/BaseActivity.kt +++ b/ui/src/main/java/page/onram/wirevpn/activity/BaseActivity.kt @@ -2,15 +2,15 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.activity +package page.onram.wirevpn.activity import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.databinding.CallbackRegistry import androidx.databinding.CallbackRegistry.NotifierCallback import androidx.lifecycle.lifecycleScope -import com.wireguard.android.Application -import com.wireguard.android.model.ObservableTunnel +import page.onram.wirevpn.Application +import page.onram.wirevpn.model.ObservableTunnel import kotlinx.coroutines.launch /** diff --git a/ui/src/main/java/com/wireguard/android/activity/LogViewerActivity.kt b/ui/src/main/java/page/onram/wirevpn/activity/LogViewerActivity.kt similarity index 97% rename from ui/src/main/java/com/wireguard/android/activity/LogViewerActivity.kt rename to ui/src/main/java/page/onram/wirevpn/activity/LogViewerActivity.kt index fa16b3ca..4761a014 100644 --- a/ui/src/main/java/com/wireguard/android/activity/LogViewerActivity.kt +++ b/ui/src/main/java/page/onram/wirevpn/activity/LogViewerActivity.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.activity +package page.onram.wirevpn.activity import android.content.ClipDescription.compareMimeTypes import android.content.ContentProvider @@ -36,13 +36,13 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.google.android.material.snackbar.Snackbar import com.google.android.material.textview.MaterialTextView -import com.wireguard.android.BuildConfig -import com.wireguard.android.R -import com.wireguard.android.databinding.LogViewerActivityBinding -import com.wireguard.android.util.DownloadsFileSaver -import com.wireguard.android.util.ErrorMessages -import com.wireguard.android.util.resolveAttribute -import com.wireguard.crypto.KeyPair +import page.onram.wirevpn.BuildConfig +import page.onram.wirevpn.R +import page.onram.wirevpn.databinding.LogViewerActivityBinding +import page.onram.wirevpn.util.DownloadsFileSaver +import page.onram.wirevpn.util.ErrorMessages +import page.onram.wirevpn.util.resolveAttribute +import page.onram.wirevpn.crypto.KeyPair import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext diff --git a/ui/src/main/java/com/wireguard/android/activity/MainActivity.kt b/ui/src/main/java/page/onram/wirevpn/activity/MainActivity.kt similarity index 95% rename from ui/src/main/java/com/wireguard/android/activity/MainActivity.kt rename to ui/src/main/java/page/onram/wirevpn/activity/MainActivity.kt index 087ca08e..052a74cb 100644 --- a/ui/src/main/java/com/wireguard/android/activity/MainActivity.kt +++ b/ui/src/main/java/page/onram/wirevpn/activity/MainActivity.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.activity +package page.onram.wirevpn.activity import android.content.Intent import android.os.Bundle @@ -15,10 +15,10 @@ import androidx.appcompat.app.ActionBar import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.commit -import com.wireguard.android.R -import com.wireguard.android.fragment.TunnelDetailFragment -import com.wireguard.android.fragment.TunnelEditorFragment -import com.wireguard.android.model.ObservableTunnel +import page.onram.wirevpn.R +import page.onram.wirevpn.fragment.TunnelDetailFragment +import page.onram.wirevpn.fragment.TunnelEditorFragment +import page.onram.wirevpn.model.ObservableTunnel /** * CRUD interface for WireGuard tunnels. This activity serves as the main entry point to the diff --git a/ui/src/main/java/com/wireguard/android/activity/SettingsActivity.kt b/ui/src/main/java/page/onram/wirevpn/activity/SettingsActivity.kt similarity index 93% rename from ui/src/main/java/com/wireguard/android/activity/SettingsActivity.kt rename to ui/src/main/java/page/onram/wirevpn/activity/SettingsActivity.kt index 33f44cd6..a9ab62e5 100644 --- a/ui/src/main/java/com/wireguard/android/activity/SettingsActivity.kt +++ b/ui/src/main/java/page/onram/wirevpn/activity/SettingsActivity.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.activity +package page.onram.wirevpn.activity import android.content.Intent import android.os.Build @@ -16,12 +16,12 @@ import androidx.fragment.app.commit import androidx.lifecycle.lifecycleScope import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat -import com.wireguard.android.Application -import com.wireguard.android.QuickTileService -import com.wireguard.android.R -import com.wireguard.android.backend.WgQuickBackend -import com.wireguard.android.preference.PreferencesPreferenceDataStore -import com.wireguard.android.util.AdminKnobs +import page.onram.wirevpn.Application +import page.onram.wirevpn.QuickTileService +import page.onram.wirevpn.R +import page.onram.wirevpn.backend.WgQuickBackend +import page.onram.wirevpn.preference.PreferencesPreferenceDataStore +import page.onram.wirevpn.util.AdminKnobs import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext diff --git a/ui/src/main/java/com/wireguard/android/activity/TunnelCreatorActivity.kt b/ui/src/main/java/page/onram/wirevpn/activity/TunnelCreatorActivity.kt similarity index 82% rename from ui/src/main/java/com/wireguard/android/activity/TunnelCreatorActivity.kt rename to ui/src/main/java/page/onram/wirevpn/activity/TunnelCreatorActivity.kt index 8d5f4cfa..5ec53eeb 100644 --- a/ui/src/main/java/com/wireguard/android/activity/TunnelCreatorActivity.kt +++ b/ui/src/main/java/page/onram/wirevpn/activity/TunnelCreatorActivity.kt @@ -2,11 +2,11 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.activity +package page.onram.wirevpn.activity import android.os.Bundle -import com.wireguard.android.R -import com.wireguard.android.model.ObservableTunnel +import page.onram.wirevpn.R +import page.onram.wirevpn.model.ObservableTunnel /** * Standalone activity for creating tunnels. diff --git a/ui/src/main/java/com/wireguard/android/activity/TunnelToggleActivity.kt b/ui/src/main/java/page/onram/wirevpn/activity/TunnelToggleActivity.kt similarity index 89% rename from ui/src/main/java/com/wireguard/android/activity/TunnelToggleActivity.kt rename to ui/src/main/java/page/onram/wirevpn/activity/TunnelToggleActivity.kt index a0e9aa06..204fb9fc 100644 --- a/ui/src/main/java/com/wireguard/android/activity/TunnelToggleActivity.kt +++ b/ui/src/main/java/page/onram/wirevpn/activity/TunnelToggleActivity.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.activity +package page.onram.wirevpn.activity import android.content.ComponentName import android.os.Build @@ -14,12 +14,12 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope -import com.wireguard.android.Application -import com.wireguard.android.QuickTileService -import com.wireguard.android.R -import com.wireguard.android.backend.GoBackend -import com.wireguard.android.backend.Tunnel -import com.wireguard.android.util.ErrorMessages +import page.onram.wirevpn.Application +import page.onram.wirevpn.QuickTileService +import page.onram.wirevpn.R +import page.onram.wirevpn.backend.GoBackend +import page.onram.wirevpn.backend.Tunnel +import page.onram.wirevpn.util.ErrorMessages import kotlinx.coroutines.launch class TunnelToggleActivity : AppCompatActivity() { diff --git a/ui/src/main/java/com/wireguard/android/activity/TvMainActivity.kt b/ui/src/main/java/page/onram/wirevpn/activity/TvMainActivity.kt similarity index 95% rename from ui/src/main/java/com/wireguard/android/activity/TvMainActivity.kt rename to ui/src/main/java/page/onram/wirevpn/activity/TvMainActivity.kt index a20c983c..e40cf52d 100644 --- a/ui/src/main/java/com/wireguard/android/activity/TvMainActivity.kt +++ b/ui/src/main/java/page/onram/wirevpn/activity/TvMainActivity.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.activity +package page.onram.wirevpn.activity import android.Manifest import android.content.ActivityNotFoundException @@ -34,22 +34,22 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup import com.google.android.material.dialog.MaterialAlertDialogBuilder -import com.wireguard.android.Application -import com.wireguard.android.R -import com.wireguard.android.backend.GoBackend -import com.wireguard.android.backend.Tunnel -import com.wireguard.android.databinding.Keyed -import com.wireguard.android.databinding.ObservableKeyedArrayList -import com.wireguard.android.databinding.ObservableKeyedRecyclerViewAdapter -import com.wireguard.android.databinding.TvActivityBinding -import com.wireguard.android.databinding.TvFileListItemBinding -import com.wireguard.android.databinding.TvTunnelListItemBinding -import com.wireguard.android.model.ObservableTunnel -import com.wireguard.android.util.ErrorMessages -import com.wireguard.android.util.QuantityFormatter -import com.wireguard.android.util.TunnelImporter -import com.wireguard.android.util.UserKnobs -import com.wireguard.android.util.applicationScope +import page.onram.wirevpn.Application +import page.onram.wirevpn.R +import page.onram.wirevpn.backend.GoBackend +import page.onram.wirevpn.backend.Tunnel +import page.onram.wirevpn.databinding.Keyed +import page.onram.wirevpn.databinding.ObservableKeyedArrayList +import page.onram.wirevpn.databinding.ObservableKeyedRecyclerViewAdapter +import page.onram.wirevpn.databinding.TvActivityBinding +import page.onram.wirevpn.databinding.TvFileListItemBinding +import page.onram.wirevpn.databinding.TvTunnelListItemBinding +import page.onram.wirevpn.model.ObservableTunnel +import page.onram.wirevpn.util.ErrorMessages +import page.onram.wirevpn.util.QuantityFormatter +import page.onram.wirevpn.util.TunnelImporter +import page.onram.wirevpn.util.UserKnobs +import page.onram.wirevpn.util.applicationScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch diff --git a/ui/src/main/java/com/wireguard/android/configStore/ConfigStore.kt b/ui/src/main/java/page/onram/wirevpn/configStore/ConfigStore.kt similarity index 96% rename from ui/src/main/java/com/wireguard/android/configStore/ConfigStore.kt rename to ui/src/main/java/page/onram/wirevpn/configStore/ConfigStore.kt index 45f38600..d8f39dba 100644 --- a/ui/src/main/java/com/wireguard/android/configStore/ConfigStore.kt +++ b/ui/src/main/java/page/onram/wirevpn/configStore/ConfigStore.kt @@ -2,9 +2,9 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.configStore +package page.onram.wirevpn.configStore -import com.wireguard.config.Config +import page.onram.wirevpn.config.Config /** * Interface for persistent storage providers for WireGuard configurations. diff --git a/ui/src/main/java/com/wireguard/android/configStore/FileConfigStore.kt b/ui/src/main/java/page/onram/wirevpn/configStore/FileConfigStore.kt similarity index 94% rename from ui/src/main/java/com/wireguard/android/configStore/FileConfigStore.kt rename to ui/src/main/java/page/onram/wirevpn/configStore/FileConfigStore.kt index 98b738e1..0dfcc80d 100644 --- a/ui/src/main/java/com/wireguard/android/configStore/FileConfigStore.kt +++ b/ui/src/main/java/page/onram/wirevpn/configStore/FileConfigStore.kt @@ -2,13 +2,13 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.configStore +package page.onram.wirevpn.configStore import android.content.Context import android.util.Log -import com.wireguard.android.R -import com.wireguard.config.BadConfigException -import com.wireguard.config.Config +import page.onram.wirevpn.R +import page.onram.wirevpn.config.BadConfigException +import page.onram.wirevpn.config.Config import java.io.File import java.io.FileInputStream import java.io.FileNotFoundException diff --git a/ui/src/main/java/com/wireguard/android/databinding/BindingAdapters.kt b/ui/src/main/java/page/onram/wirevpn/databinding/BindingAdapters.kt similarity index 93% rename from ui/src/main/java/com/wireguard/android/databinding/BindingAdapters.kt rename to ui/src/main/java/page/onram/wirevpn/databinding/BindingAdapters.kt index df3bd08b..688ff9ac 100644 --- a/ui/src/main/java/com/wireguard/android/databinding/BindingAdapters.kt +++ b/ui/src/main/java/page/onram/wirevpn/databinding/BindingAdapters.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.databinding +package page.onram.wirevpn.databinding import android.text.InputFilter import android.view.LayoutInflater @@ -18,14 +18,14 @@ import androidx.databinding.adapters.ListenerUtil import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.wireguard.android.BR -import com.wireguard.android.R -import com.wireguard.android.databinding.ObservableKeyedRecyclerViewAdapter.RowConfigurationHandler -import com.wireguard.android.widget.ToggleSwitch -import com.wireguard.android.widget.ToggleSwitch.OnBeforeCheckedChangeListener -import com.wireguard.android.widget.TvCardView -import com.wireguard.config.Attribute -import com.wireguard.config.InetNetwork +import page.onram.wirevpn.BR +import page.onram.wirevpn.R +import page.onram.wirevpn.databinding.ObservableKeyedRecyclerViewAdapter.RowConfigurationHandler +import page.onram.wirevpn.widget.ToggleSwitch +import page.onram.wirevpn.widget.ToggleSwitch.OnBeforeCheckedChangeListener +import page.onram.wirevpn.widget.TvCardView +import page.onram.wirevpn.config.Attribute +import page.onram.wirevpn.config.InetNetwork import java.net.InetAddress import java.util.Optional diff --git a/ui/src/main/java/com/wireguard/android/databinding/ItemChangeListener.kt b/ui/src/main/java/page/onram/wirevpn/databinding/ItemChangeListener.kt similarity index 98% rename from ui/src/main/java/com/wireguard/android/databinding/ItemChangeListener.kt rename to ui/src/main/java/page/onram/wirevpn/databinding/ItemChangeListener.kt index 84ec3ed8..643352e1 100644 --- a/ui/src/main/java/com/wireguard/android/databinding/ItemChangeListener.kt +++ b/ui/src/main/java/page/onram/wirevpn/databinding/ItemChangeListener.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.databinding +package page.onram.wirevpn.databinding import android.view.LayoutInflater import android.view.View @@ -11,7 +11,7 @@ import androidx.databinding.DataBindingUtil import androidx.databinding.ObservableList import androidx.databinding.ViewDataBinding import androidx.fragment.app.Fragment -import com.wireguard.android.BR +import page.onram.wirevpn.BR import java.lang.ref.WeakReference /** diff --git a/ui/src/main/java/com/wireguard/android/databinding/Keyed.kt b/ui/src/main/java/page/onram/wirevpn/databinding/Keyed.kt similarity index 84% rename from ui/src/main/java/com/wireguard/android/databinding/Keyed.kt rename to ui/src/main/java/page/onram/wirevpn/databinding/Keyed.kt index fc4ee357..c9125e78 100644 --- a/ui/src/main/java/com/wireguard/android/databinding/Keyed.kt +++ b/ui/src/main/java/page/onram/wirevpn/databinding/Keyed.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.databinding +package page.onram.wirevpn.databinding /** * Interface for objects that have a identifying key of the given type. diff --git a/ui/src/main/java/com/wireguard/android/databinding/ObservableKeyedArrayList.kt b/ui/src/main/java/page/onram/wirevpn/databinding/ObservableKeyedArrayList.kt similarity index 96% rename from ui/src/main/java/com/wireguard/android/databinding/ObservableKeyedArrayList.kt rename to ui/src/main/java/page/onram/wirevpn/databinding/ObservableKeyedArrayList.kt index 4d6c3a21..937e1d67 100644 --- a/ui/src/main/java/com/wireguard/android/databinding/ObservableKeyedArrayList.kt +++ b/ui/src/main/java/page/onram/wirevpn/databinding/ObservableKeyedArrayList.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.databinding +package page.onram.wirevpn.databinding import androidx.databinding.ObservableArrayList diff --git a/ui/src/main/java/com/wireguard/android/databinding/ObservableKeyedRecyclerViewAdapter.kt b/ui/src/main/java/page/onram/wirevpn/databinding/ObservableKeyedRecyclerViewAdapter.kt similarity index 98% rename from ui/src/main/java/com/wireguard/android/databinding/ObservableKeyedRecyclerViewAdapter.kt rename to ui/src/main/java/page/onram/wirevpn/databinding/ObservableKeyedRecyclerViewAdapter.kt index a9ef4913..029e25b6 100644 --- a/ui/src/main/java/com/wireguard/android/databinding/ObservableKeyedRecyclerViewAdapter.kt +++ b/ui/src/main/java/page/onram/wirevpn/databinding/ObservableKeyedRecyclerViewAdapter.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.databinding +package page.onram.wirevpn.databinding import android.content.Context import android.view.LayoutInflater @@ -11,7 +11,7 @@ import androidx.databinding.DataBindingUtil import androidx.databinding.ObservableList import androidx.databinding.ViewDataBinding import androidx.recyclerview.widget.RecyclerView -import com.wireguard.android.BR +import page.onram.wirevpn.BR import java.lang.ref.WeakReference /** diff --git a/ui/src/main/java/com/wireguard/android/databinding/ObservableSortedKeyedArrayList.kt b/ui/src/main/java/page/onram/wirevpn/databinding/ObservableSortedKeyedArrayList.kt similarity index 98% rename from ui/src/main/java/com/wireguard/android/databinding/ObservableSortedKeyedArrayList.kt rename to ui/src/main/java/page/onram/wirevpn/databinding/ObservableSortedKeyedArrayList.kt index d6c039f2..36d79099 100644 --- a/ui/src/main/java/com/wireguard/android/databinding/ObservableSortedKeyedArrayList.kt +++ b/ui/src/main/java/page/onram/wirevpn/databinding/ObservableSortedKeyedArrayList.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.databinding +package page.onram.wirevpn.databinding import java.util.AbstractList import java.util.Collections diff --git a/ui/src/main/java/com/wireguard/android/fragment/AddTunnelsSheet.kt b/ui/src/main/java/page/onram/wirevpn/fragment/AddTunnelsSheet.kt similarity index 97% rename from ui/src/main/java/com/wireguard/android/fragment/AddTunnelsSheet.kt rename to ui/src/main/java/page/onram/wirevpn/fragment/AddTunnelsSheet.kt index 161709c3..1a1e3a42 100644 --- a/ui/src/main/java/com/wireguard/android/fragment/AddTunnelsSheet.kt +++ b/ui/src/main/java/page/onram/wirevpn/fragment/AddTunnelsSheet.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.fragment +package page.onram.wirevpn.fragment import android.content.pm.PackageManager import android.graphics.drawable.GradientDrawable @@ -16,8 +16,8 @@ import androidx.fragment.app.setFragmentResult import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import com.wireguard.android.R -import com.wireguard.android.util.resolveAttribute +import page.onram.wirevpn.R +import page.onram.wirevpn.util.resolveAttribute class AddTunnelsSheet : BottomSheetDialogFragment() { diff --git a/ui/src/main/java/com/wireguard/android/fragment/AppListDialogFragment.kt b/ui/src/main/java/page/onram/wirevpn/fragment/AppListDialogFragment.kt similarity index 95% rename from ui/src/main/java/com/wireguard/android/fragment/AppListDialogFragment.kt rename to ui/src/main/java/page/onram/wirevpn/fragment/AppListDialogFragment.kt index c2bb3780..9d994b7e 100644 --- a/ui/src/main/java/com/wireguard/android/fragment/AppListDialogFragment.kt +++ b/ui/src/main/java/page/onram/wirevpn/fragment/AppListDialogFragment.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.fragment +package page.onram.wirevpn.fragment import android.Manifest import android.app.Dialog @@ -20,12 +20,12 @@ import androidx.fragment.app.setFragmentResult import androidx.lifecycle.lifecycleScope import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.tabs.TabLayout -import com.wireguard.android.BR -import com.wireguard.android.R -import com.wireguard.android.databinding.AppListDialogFragmentBinding -import com.wireguard.android.databinding.ObservableKeyedArrayList -import com.wireguard.android.model.ApplicationData -import com.wireguard.android.util.ErrorMessages +import page.onram.wirevpn.BR +import page.onram.wirevpn.R +import page.onram.wirevpn.databinding.AppListDialogFragmentBinding +import page.onram.wirevpn.databinding.ObservableKeyedArrayList +import page.onram.wirevpn.model.ApplicationData +import page.onram.wirevpn.util.ErrorMessages import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext diff --git a/ui/src/main/java/com/wireguard/android/fragment/BaseFragment.kt b/ui/src/main/java/page/onram/wirevpn/fragment/BaseFragment.kt similarity index 87% rename from ui/src/main/java/com/wireguard/android/fragment/BaseFragment.kt rename to ui/src/main/java/page/onram/wirevpn/fragment/BaseFragment.kt index 2e551f83..1d8a0600 100644 --- a/ui/src/main/java/com/wireguard/android/fragment/BaseFragment.kt +++ b/ui/src/main/java/page/onram/wirevpn/fragment/BaseFragment.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.fragment +package page.onram.wirevpn.fragment import android.content.Context import android.util.Log @@ -14,16 +14,16 @@ import androidx.databinding.ViewDataBinding import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope import com.google.android.material.snackbar.Snackbar -import com.wireguard.android.Application -import com.wireguard.android.R -import com.wireguard.android.activity.BaseActivity -import com.wireguard.android.activity.BaseActivity.OnSelectedTunnelChangedListener -import com.wireguard.android.backend.GoBackend -import com.wireguard.android.backend.Tunnel -import com.wireguard.android.databinding.TunnelDetailFragmentBinding -import com.wireguard.android.databinding.TunnelListItemBinding -import com.wireguard.android.model.ObservableTunnel -import com.wireguard.android.util.ErrorMessages +import page.onram.wirevpn.Application +import page.onram.wirevpn.R +import page.onram.wirevpn.activity.BaseActivity +import page.onram.wirevpn.activity.BaseActivity.OnSelectedTunnelChangedListener +import page.onram.wirevpn.backend.GoBackend +import page.onram.wirevpn.backend.Tunnel +import page.onram.wirevpn.databinding.TunnelDetailFragmentBinding +import page.onram.wirevpn.databinding.TunnelListItemBinding +import page.onram.wirevpn.model.ObservableTunnel +import page.onram.wirevpn.util.ErrorMessages import kotlinx.coroutines.launch /** diff --git a/ui/src/main/java/com/wireguard/android/fragment/ConfigNamingDialogFragment.kt b/ui/src/main/java/page/onram/wirevpn/fragment/ConfigNamingDialogFragment.kt similarity index 91% rename from ui/src/main/java/com/wireguard/android/fragment/ConfigNamingDialogFragment.kt rename to ui/src/main/java/page/onram/wirevpn/fragment/ConfigNamingDialogFragment.kt index 23da3fca..886dd8dd 100644 --- a/ui/src/main/java/com/wireguard/android/fragment/ConfigNamingDialogFragment.kt +++ b/ui/src/main/java/page/onram/wirevpn/fragment/ConfigNamingDialogFragment.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.fragment +package page.onram.wirevpn.fragment import android.app.Dialog import android.os.Bundle @@ -10,11 +10,11 @@ import android.view.WindowManager import androidx.fragment.app.DialogFragment import androidx.lifecycle.lifecycleScope import com.google.android.material.dialog.MaterialAlertDialogBuilder -import com.wireguard.android.Application -import com.wireguard.android.R -import com.wireguard.android.databinding.ConfigNamingDialogFragmentBinding -import com.wireguard.config.BadConfigException -import com.wireguard.config.Config +import page.onram.wirevpn.Application +import page.onram.wirevpn.R +import page.onram.wirevpn.databinding.ConfigNamingDialogFragmentBinding +import page.onram.wirevpn.config.BadConfigException +import page.onram.wirevpn.config.Config import kotlinx.coroutines.launch import java.io.ByteArrayInputStream import java.io.IOException diff --git a/ui/src/main/java/com/wireguard/android/fragment/TunnelDetailFragment.kt b/ui/src/main/java/page/onram/wirevpn/fragment/TunnelDetailFragment.kt similarity index 93% rename from ui/src/main/java/com/wireguard/android/fragment/TunnelDetailFragment.kt rename to ui/src/main/java/page/onram/wirevpn/fragment/TunnelDetailFragment.kt index 7731391d..65a44546 100644 --- a/ui/src/main/java/com/wireguard/android/fragment/TunnelDetailFragment.kt +++ b/ui/src/main/java/page/onram/wirevpn/fragment/TunnelDetailFragment.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.fragment +package page.onram.wirevpn.fragment import android.os.Bundle import android.view.LayoutInflater @@ -15,12 +15,12 @@ import androidx.core.view.MenuProvider import androidx.databinding.DataBindingUtil import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope -import com.wireguard.android.R -import com.wireguard.android.backend.Tunnel -import com.wireguard.android.databinding.TunnelDetailFragmentBinding -import com.wireguard.android.databinding.TunnelDetailPeerBinding -import com.wireguard.android.model.ObservableTunnel -import com.wireguard.android.util.QuantityFormatter +import page.onram.wirevpn.R +import page.onram.wirevpn.backend.Tunnel +import page.onram.wirevpn.databinding.TunnelDetailFragmentBinding +import page.onram.wirevpn.databinding.TunnelDetailPeerBinding +import page.onram.wirevpn.model.ObservableTunnel +import page.onram.wirevpn.util.QuantityFormatter import kotlinx.coroutines.delay import kotlinx.coroutines.launch diff --git a/ui/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.kt b/ui/src/main/java/page/onram/wirevpn/fragment/TunnelEditorFragment.kt similarity index 96% rename from ui/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.kt rename to ui/src/main/java/page/onram/wirevpn/fragment/TunnelEditorFragment.kt index f5d28ad5..7922938c 100644 --- a/ui/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.kt +++ b/ui/src/main/java/page/onram/wirevpn/fragment/TunnelEditorFragment.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.fragment +package page.onram.wirevpn.fragment import android.content.Context import android.os.Bundle @@ -23,16 +23,16 @@ import androidx.core.view.MenuProvider import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import com.google.android.material.snackbar.Snackbar -import com.wireguard.android.Application -import com.wireguard.android.R -import com.wireguard.android.backend.Tunnel -import com.wireguard.android.databinding.TunnelEditorFragmentBinding -import com.wireguard.android.model.ObservableTunnel -import com.wireguard.android.util.AdminKnobs -import com.wireguard.android.util.BiometricAuthenticator -import com.wireguard.android.util.ErrorMessages -import com.wireguard.android.viewmodel.ConfigProxy -import com.wireguard.config.Config +import page.onram.wirevpn.Application +import page.onram.wirevpn.R +import page.onram.wirevpn.backend.Tunnel +import page.onram.wirevpn.databinding.TunnelEditorFragmentBinding +import page.onram.wirevpn.model.ObservableTunnel +import page.onram.wirevpn.util.AdminKnobs +import page.onram.wirevpn.util.BiometricAuthenticator +import page.onram.wirevpn.util.ErrorMessages +import page.onram.wirevpn.viewmodel.ConfigProxy +import page.onram.wirevpn.config.Config import kotlinx.coroutines.launch /** diff --git a/ui/src/main/java/com/wireguard/android/fragment/TunnelListFragment.kt b/ui/src/main/java/page/onram/wirevpn/fragment/TunnelListFragment.kt similarity index 94% rename from ui/src/main/java/com/wireguard/android/fragment/TunnelListFragment.kt rename to ui/src/main/java/page/onram/wirevpn/fragment/TunnelListFragment.kt index 119b6afe..133db1e7 100644 --- a/ui/src/main/java/com/wireguard/android/fragment/TunnelListFragment.kt +++ b/ui/src/main/java/page/onram/wirevpn/fragment/TunnelListFragment.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.fragment +package page.onram.wirevpn.fragment import android.content.Intent import android.content.res.Resources @@ -26,18 +26,18 @@ import com.google.android.material.snackbar.Snackbar import com.google.zxing.qrcode.QRCodeReader import com.journeyapps.barcodescanner.ScanContract import com.journeyapps.barcodescanner.ScanOptions -import com.wireguard.android.Application -import com.wireguard.android.R -import com.wireguard.android.activity.TunnelCreatorActivity -import com.wireguard.android.databinding.ObservableKeyedRecyclerViewAdapter.RowConfigurationHandler -import com.wireguard.android.databinding.TunnelListFragmentBinding -import com.wireguard.android.databinding.TunnelListItemBinding -import com.wireguard.android.model.ObservableTunnel -import com.wireguard.android.updater.SnackbarUpdateShower -import com.wireguard.android.util.ErrorMessages -import com.wireguard.android.util.QrCodeFromFileScanner -import com.wireguard.android.util.TunnelImporter -import com.wireguard.android.widget.MultiselectableRelativeLayout +import page.onram.wirevpn.Application +import page.onram.wirevpn.R +import page.onram.wirevpn.activity.TunnelCreatorActivity +import page.onram.wirevpn.databinding.ObservableKeyedRecyclerViewAdapter.RowConfigurationHandler +import page.onram.wirevpn.databinding.TunnelListFragmentBinding +import page.onram.wirevpn.databinding.TunnelListItemBinding +import page.onram.wirevpn.model.ObservableTunnel +import page.onram.wirevpn.updater.SnackbarUpdateShower +import page.onram.wirevpn.util.ErrorMessages +import page.onram.wirevpn.util.QrCodeFromFileScanner +import page.onram.wirevpn.util.TunnelImporter +import page.onram.wirevpn.widget.MultiselectableRelativeLayout import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll diff --git a/ui/src/main/java/com/wireguard/android/model/ApplicationData.kt b/ui/src/main/java/page/onram/wirevpn/model/ApplicationData.kt similarity index 82% rename from ui/src/main/java/com/wireguard/android/model/ApplicationData.kt rename to ui/src/main/java/page/onram/wirevpn/model/ApplicationData.kt index e6b5705a..62ea9482 100644 --- a/ui/src/main/java/com/wireguard/android/model/ApplicationData.kt +++ b/ui/src/main/java/page/onram/wirevpn/model/ApplicationData.kt @@ -2,13 +2,13 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.model +package page.onram.wirevpn.model import android.graphics.drawable.Drawable import androidx.databinding.BaseObservable import androidx.databinding.Bindable -import com.wireguard.android.BR -import com.wireguard.android.databinding.Keyed +import page.onram.wirevpn.BR +import page.onram.wirevpn.databinding.Keyed class ApplicationData(val icon: Drawable, val name: String, val packageName: String, isSelected: Boolean) : BaseObservable(), Keyed { override val key = name diff --git a/ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt b/ui/src/main/java/page/onram/wirevpn/model/ObservableTunnel.kt similarity index 93% rename from ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt rename to ui/src/main/java/page/onram/wirevpn/model/ObservableTunnel.kt index 227c1291..3391e133 100644 --- a/ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt +++ b/ui/src/main/java/page/onram/wirevpn/model/ObservableTunnel.kt @@ -2,17 +2,17 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.model +package page.onram.wirevpn.model import android.util.Log import androidx.databinding.BaseObservable import androidx.databinding.Bindable -import com.wireguard.android.BR -import com.wireguard.android.backend.Statistics -import com.wireguard.android.backend.Tunnel -import com.wireguard.android.databinding.Keyed -import com.wireguard.android.util.applicationScope -import com.wireguard.config.Config +import page.onram.wirevpn.BR +import page.onram.wirevpn.backend.Statistics +import page.onram.wirevpn.backend.Tunnel +import page.onram.wirevpn.databinding.Keyed +import page.onram.wirevpn.util.applicationScope +import page.onram.wirevpn.config.Config import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext diff --git a/ui/src/main/java/com/wireguard/android/model/TunnelComparator.kt b/ui/src/main/java/page/onram/wirevpn/model/TunnelComparator.kt similarity index 98% rename from ui/src/main/java/com/wireguard/android/model/TunnelComparator.kt rename to ui/src/main/java/page/onram/wirevpn/model/TunnelComparator.kt index 3be1019a..ec895790 100644 --- a/ui/src/main/java/com/wireguard/android/model/TunnelComparator.kt +++ b/ui/src/main/java/page/onram/wirevpn/model/TunnelComparator.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.model +package page.onram.wirevpn.model object TunnelComparator : Comparator { private class NaturalSortString(originalString: String) { diff --git a/ui/src/main/java/com/wireguard/android/model/TunnelManager.kt b/ui/src/main/java/page/onram/wirevpn/model/TunnelManager.kt similarity index 91% rename from ui/src/main/java/com/wireguard/android/model/TunnelManager.kt rename to ui/src/main/java/page/onram/wirevpn/model/TunnelManager.kt index e08623d1..6d983077 100644 --- a/ui/src/main/java/com/wireguard/android/model/TunnelManager.kt +++ b/ui/src/main/java/page/onram/wirevpn/model/TunnelManager.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.model +package page.onram.wirevpn.model import android.content.BroadcastReceiver import android.content.Context @@ -12,19 +12,19 @@ import android.util.Log import android.widget.Toast import androidx.databinding.BaseObservable import androidx.databinding.Bindable -import com.wireguard.android.Application.Companion.get -import com.wireguard.android.Application.Companion.getBackend -import com.wireguard.android.Application.Companion.getTunnelManager -import com.wireguard.android.BR -import com.wireguard.android.R -import com.wireguard.android.backend.Statistics -import com.wireguard.android.backend.Tunnel -import com.wireguard.android.configStore.ConfigStore -import com.wireguard.android.databinding.ObservableSortedKeyedArrayList -import com.wireguard.android.util.ErrorMessages -import com.wireguard.android.util.UserKnobs -import com.wireguard.android.util.applicationScope -import com.wireguard.config.Config +import page.onram.wirevpn.Application.Companion.get +import page.onram.wirevpn.Application.Companion.getBackend +import page.onram.wirevpn.Application.Companion.getTunnelManager +import page.onram.wirevpn.BR +import page.onram.wirevpn.R +import page.onram.wirevpn.backend.Statistics +import page.onram.wirevpn.backend.Tunnel +import page.onram.wirevpn.configStore.ConfigStore +import page.onram.wirevpn.databinding.ObservableSortedKeyedArrayList +import page.onram.wirevpn.util.ErrorMessages +import page.onram.wirevpn.util.UserKnobs +import page.onram.wirevpn.util.applicationScope +import page.onram.wirevpn.config.Config import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob @@ -217,15 +217,15 @@ class TunnelManager(private val configStore: ConfigStore) : BaseObservable() { val manager = getTunnelManager() if (intent == null) return@launch val action = intent.action ?: return@launch - if ("com.wireguard.android.action.REFRESH_TUNNEL_STATES" == action) { + if ("page.onram.wirevpn.action.REFRESH_TUNNEL_STATES" == action) { manager.refreshTunnelStates() return@launch } if (!UserKnobs.allowRemoteControlIntents.first()) return@launch val state = when (action) { - "com.wireguard.android.action.SET_TUNNEL_UP" -> Tunnel.State.UP - "com.wireguard.android.action.SET_TUNNEL_DOWN" -> Tunnel.State.DOWN + "page.onram.wirevpn.action.SET_TUNNEL_UP" -> Tunnel.State.UP + "page.onram.wirevpn.action.SET_TUNNEL_DOWN" -> Tunnel.State.DOWN else -> return@launch } val tunnelName = intent.getStringExtra("tunnel") ?: return@launch diff --git a/ui/src/main/java/com/wireguard/android/preference/KernelModuleEnablerPreference.kt b/ui/src/main/java/page/onram/wirevpn/preference/KernelModuleEnablerPreference.kt similarity index 89% rename from ui/src/main/java/com/wireguard/android/preference/KernelModuleEnablerPreference.kt rename to ui/src/main/java/page/onram/wirevpn/preference/KernelModuleEnablerPreference.kt index 3d1c27f1..ce5cce8d 100644 --- a/ui/src/main/java/com/wireguard/android/preference/KernelModuleEnablerPreference.kt +++ b/ui/src/main/java/page/onram/wirevpn/preference/KernelModuleEnablerPreference.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.preference +package page.onram.wirevpn.preference import android.content.Context import android.content.Intent @@ -10,14 +10,14 @@ import android.util.AttributeSet import android.util.Log import androidx.lifecycle.lifecycleScope import androidx.preference.Preference -import com.wireguard.android.Application -import com.wireguard.android.R -import com.wireguard.android.activity.SettingsActivity -import com.wireguard.android.backend.Tunnel -import com.wireguard.android.backend.WgQuickBackend -import com.wireguard.android.util.UserKnobs -import com.wireguard.android.util.activity -import com.wireguard.android.util.lifecycleScope +import page.onram.wirevpn.Application +import page.onram.wirevpn.R +import page.onram.wirevpn.activity.SettingsActivity +import page.onram.wirevpn.backend.Tunnel +import page.onram.wirevpn.backend.WgQuickBackend +import page.onram.wirevpn.util.UserKnobs +import page.onram.wirevpn.util.activity +import page.onram.wirevpn.util.lifecycleScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.async diff --git a/ui/src/main/java/com/wireguard/android/preference/PreferencesPreferenceDataStore.kt b/ui/src/main/java/page/onram/wirevpn/preference/PreferencesPreferenceDataStore.kt similarity index 99% rename from ui/src/main/java/com/wireguard/android/preference/PreferencesPreferenceDataStore.kt rename to ui/src/main/java/page/onram/wirevpn/preference/PreferencesPreferenceDataStore.kt index e2fc51e3..e6b3e0e9 100644 --- a/ui/src/main/java/com/wireguard/android/preference/PreferencesPreferenceDataStore.kt +++ b/ui/src/main/java/page/onram/wirevpn/preference/PreferencesPreferenceDataStore.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.preference +package page.onram.wirevpn.preference import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences diff --git a/ui/src/main/java/com/wireguard/android/preference/QuickTilePreference.kt b/ui/src/main/java/page/onram/wirevpn/preference/QuickTilePreference.kt similarity index 94% rename from ui/src/main/java/com/wireguard/android/preference/QuickTilePreference.kt rename to ui/src/main/java/page/onram/wirevpn/preference/QuickTilePreference.kt index 458b9f9a..a3b55398 100644 --- a/ui/src/main/java/com/wireguard/android/preference/QuickTilePreference.kt +++ b/ui/src/main/java/page/onram/wirevpn/preference/QuickTilePreference.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.preference +package page.onram.wirevpn.preference import android.app.StatusBarManager import android.content.ComponentName @@ -14,8 +14,8 @@ import android.util.AttributeSet import android.widget.Toast import androidx.annotation.RequiresApi import androidx.preference.Preference -import com.wireguard.android.QuickTileService -import com.wireguard.android.R +import page.onram.wirevpn.QuickTileService +import page.onram.wirevpn.R @RequiresApi(Build.VERSION_CODES.TIRAMISU) class QuickTilePreference(context: Context, attrs: AttributeSet?) : Preference(context, attrs) { diff --git a/ui/src/main/java/com/wireguard/android/preference/ToolsInstallerPreference.kt b/ui/src/main/java/page/onram/wirevpn/preference/ToolsInstallerPreference.kt similarity index 93% rename from ui/src/main/java/com/wireguard/android/preference/ToolsInstallerPreference.kt rename to ui/src/main/java/page/onram/wirevpn/preference/ToolsInstallerPreference.kt index b22048b5..f0912a95 100644 --- a/ui/src/main/java/com/wireguard/android/preference/ToolsInstallerPreference.kt +++ b/ui/src/main/java/page/onram/wirevpn/preference/ToolsInstallerPreference.kt @@ -2,15 +2,15 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.preference +package page.onram.wirevpn.preference import android.content.Context import android.util.AttributeSet import androidx.preference.Preference -import com.wireguard.android.Application -import com.wireguard.android.R -import com.wireguard.android.util.ToolsInstaller -import com.wireguard.android.util.lifecycleScope +import page.onram.wirevpn.Application +import page.onram.wirevpn.R +import page.onram.wirevpn.util.ToolsInstaller +import page.onram.wirevpn.util.lifecycleScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext diff --git a/ui/src/main/java/com/wireguard/android/preference/VersionPreference.kt b/ui/src/main/java/page/onram/wirevpn/preference/VersionPreference.kt similarity index 81% rename from ui/src/main/java/com/wireguard/android/preference/VersionPreference.kt rename to ui/src/main/java/page/onram/wirevpn/preference/VersionPreference.kt index 3850482b..d868f1d9 100644 --- a/ui/src/main/java/com/wireguard/android/preference/VersionPreference.kt +++ b/ui/src/main/java/page/onram/wirevpn/preference/VersionPreference.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.preference +package page.onram.wirevpn.preference import android.content.Context import android.content.Intent @@ -10,14 +10,14 @@ import android.net.Uri import android.util.AttributeSet import android.widget.Toast import androidx.preference.Preference -import com.wireguard.android.Application -import com.wireguard.android.BuildConfig -import com.wireguard.android.R -import com.wireguard.android.backend.Backend -import com.wireguard.android.backend.GoBackend -import com.wireguard.android.backend.WgQuickBackend -import com.wireguard.android.util.ErrorMessages -import com.wireguard.android.util.lifecycleScope +import page.onram.wirevpn.Application +import page.onram.wirevpn.BuildConfig +import page.onram.wirevpn.R +import page.onram.wirevpn.backend.Backend +import page.onram.wirevpn.backend.GoBackend +import page.onram.wirevpn.backend.WgQuickBackend +import page.onram.wirevpn.util.ErrorMessages +import page.onram.wirevpn.util.lifecycleScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -31,7 +31,7 @@ class VersionPreference(context: Context, attrs: AttributeSet?) : Preference(con override fun onClick() { val intent = Intent(Intent.ACTION_VIEW) - intent.data = Uri.parse("https://www.wireguard.com/") + intent.data = Uri.parse("https://git.obahan.xyz/frank/wirevpn") try { context.startActivity(intent) } catch (e: Throwable) { diff --git a/ui/src/main/java/com/wireguard/android/preference/ZipExporterPreference.kt b/ui/src/main/java/page/onram/wirevpn/preference/ZipExporterPreference.kt similarity index 91% rename from ui/src/main/java/com/wireguard/android/preference/ZipExporterPreference.kt rename to ui/src/main/java/page/onram/wirevpn/preference/ZipExporterPreference.kt index 52701157..fa2cd6f4 100644 --- a/ui/src/main/java/com/wireguard/android/preference/ZipExporterPreference.kt +++ b/ui/src/main/java/page/onram/wirevpn/preference/ZipExporterPreference.kt @@ -2,21 +2,21 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.preference +package page.onram.wirevpn.preference import android.content.Context import android.util.AttributeSet import android.util.Log import androidx.preference.Preference import com.google.android.material.snackbar.Snackbar -import com.wireguard.android.Application -import com.wireguard.android.R -import com.wireguard.android.util.AdminKnobs -import com.wireguard.android.util.BiometricAuthenticator -import com.wireguard.android.util.DownloadsFileSaver -import com.wireguard.android.util.ErrorMessages -import com.wireguard.android.util.activity -import com.wireguard.android.util.lifecycleScope +import page.onram.wirevpn.Application +import page.onram.wirevpn.R +import page.onram.wirevpn.util.AdminKnobs +import page.onram.wirevpn.util.BiometricAuthenticator +import page.onram.wirevpn.util.DownloadsFileSaver +import page.onram.wirevpn.util.ErrorMessages +import page.onram.wirevpn.util.activity +import page.onram.wirevpn.util.lifecycleScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.async diff --git a/ui/src/main/java/com/wireguard/android/updater/Ed25519.java b/ui/src/main/java/page/onram/wirevpn/updater/Ed25519.java similarity index 99% rename from ui/src/main/java/com/wireguard/android/updater/Ed25519.java rename to ui/src/main/java/page/onram/wirevpn/updater/Ed25519.java index 44e99b86..3f6bd475 100644 --- a/ui/src/main/java/com/wireguard/android/updater/Ed25519.java +++ b/ui/src/main/java/page/onram/wirevpn/updater/Ed25519.java @@ -4,7 +4,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.updater; +package page.onram.wirevpn.updater; import java.math.BigInteger; import java.security.GeneralSecurityException; diff --git a/ui/src/main/java/com/wireguard/android/updater/SnackbarUpdateShower.kt b/ui/src/main/java/page/onram/wirevpn/updater/SnackbarUpdateShower.kt similarity index 97% rename from ui/src/main/java/com/wireguard/android/updater/SnackbarUpdateShower.kt rename to ui/src/main/java/page/onram/wirevpn/updater/SnackbarUpdateShower.kt index e6134991..93f576d0 100644 --- a/ui/src/main/java/com/wireguard/android/updater/SnackbarUpdateShower.kt +++ b/ui/src/main/java/page/onram/wirevpn/updater/SnackbarUpdateShower.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.updater +package page.onram.wirevpn.updater import android.content.Intent import android.net.Uri @@ -15,9 +15,9 @@ import androidx.lifecycle.lifecycleScope import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.snackbar.BaseTransientBottomBar import com.google.android.material.snackbar.Snackbar -import com.wireguard.android.R -import com.wireguard.android.util.ErrorMessages -import com.wireguard.android.util.QuantityFormatter +import page.onram.wirevpn.R +import page.onram.wirevpn.util.ErrorMessages +import page.onram.wirevpn.util.QuantityFormatter import kotlinx.coroutines.delay import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach diff --git a/ui/src/main/java/com/wireguard/android/updater/Updater.kt b/ui/src/main/java/page/onram/wirevpn/updater/Updater.kt similarity index 97% rename from ui/src/main/java/com/wireguard/android/updater/Updater.kt rename to ui/src/main/java/page/onram/wirevpn/updater/Updater.kt index 84bb6c7a..8a8aa485 100644 --- a/ui/src/main/java/com/wireguard/android/updater/Updater.kt +++ b/ui/src/main/java/page/onram/wirevpn/updater/Updater.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.updater +package page.onram.wirevpn.updater import android.Manifest import android.app.PendingIntent @@ -17,11 +17,11 @@ import android.util.Base64 import android.util.Log import androidx.core.content.ContextCompat import androidx.core.content.IntentCompat -import com.wireguard.android.Application -import com.wireguard.android.BuildConfig -import com.wireguard.android.activity.MainActivity -import com.wireguard.android.util.UserKnobs -import com.wireguard.android.util.applicationScope +import page.onram.wirevpn.Application +import page.onram.wirevpn.BuildConfig +import page.onram.wirevpn.activity.MainActivity +import page.onram.wirevpn.util.UserKnobs +import page.onram.wirevpn.util.applicationScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -46,7 +46,7 @@ import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.seconds object Updater { - private const val TAG = "WireGuard/Updater" + private const val TAG = "WireVPN/Updater" private const val UPDATE_URL_FMT = "https://download.wireguard.com/android-client/%s" private const val APK_NAME_PREFIX = BuildConfig.APPLICATION_ID + "-" private const val APK_NAME_SUFFIX = ".apk" @@ -376,9 +376,14 @@ object Updater { /* Hello copy and paste artist! Before you go remove these next two lines, * I kindly ask that you actually think about what you're doing more globally, * and instead remove this entire file from your project. Thank you very much! */ - if (!context.packageName.startsWith("com.wireguard.")) + if (!context.packageName.startsWith("page.onram.wirevpn.")) throw RuntimeException("Too much code got copy and pasted") + // Wire VPN is distributed via its own F-Droid repository; the upstream + // auto-updater points at the official WireGuard app and its signature, + // so it is disabled for this fork. + return + if (installerIsGooglePlay(context)) return diff --git a/ui/src/main/java/com/wireguard/android/util/AdminKnobs.kt b/ui/src/main/java/page/onram/wirevpn/util/AdminKnobs.kt similarity index 86% rename from ui/src/main/java/com/wireguard/android/util/AdminKnobs.kt rename to ui/src/main/java/page/onram/wirevpn/util/AdminKnobs.kt index 2c23910b..5782b326 100644 --- a/ui/src/main/java/com/wireguard/android/util/AdminKnobs.kt +++ b/ui/src/main/java/page/onram/wirevpn/util/AdminKnobs.kt @@ -3,11 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.util +package page.onram.wirevpn.util import android.content.RestrictionsManager import androidx.core.content.getSystemService -import com.wireguard.android.Application +import page.onram.wirevpn.Application object AdminKnobs { private val restrictions: RestrictionsManager? = Application.get().getSystemService() diff --git a/ui/src/main/java/com/wireguard/android/util/BiometricAuthenticator.kt b/ui/src/main/java/page/onram/wirevpn/util/BiometricAuthenticator.kt similarity index 98% rename from ui/src/main/java/com/wireguard/android/util/BiometricAuthenticator.kt rename to ui/src/main/java/page/onram/wirevpn/util/BiometricAuthenticator.kt index 064ea04d..16e015c6 100644 --- a/ui/src/main/java/com/wireguard/android/util/BiometricAuthenticator.kt +++ b/ui/src/main/java/page/onram/wirevpn/util/BiometricAuthenticator.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.util +package page.onram.wirevpn.util import android.os.Handler import android.os.Looper @@ -13,7 +13,7 @@ import androidx.biometric.BiometricManager import androidx.biometric.BiometricManager.Authenticators import androidx.biometric.BiometricPrompt import androidx.fragment.app.Fragment -import com.wireguard.android.R +import page.onram.wirevpn.R object BiometricAuthenticator { diff --git a/ui/src/main/java/com/wireguard/android/util/ClipboardUtils.kt b/ui/src/main/java/page/onram/wirevpn/util/ClipboardUtils.kt similarity index 94% rename from ui/src/main/java/com/wireguard/android/util/ClipboardUtils.kt rename to ui/src/main/java/page/onram/wirevpn/util/ClipboardUtils.kt index 8968979f..837896f1 100644 --- a/ui/src/main/java/com/wireguard/android/util/ClipboardUtils.kt +++ b/ui/src/main/java/page/onram/wirevpn/util/ClipboardUtils.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.util +package page.onram.wirevpn.util import android.content.ClipData import android.content.ClipboardManager @@ -12,7 +12,7 @@ import android.widget.TextView import androidx.core.content.getSystemService import com.google.android.material.snackbar.Snackbar import com.google.android.material.textfield.TextInputEditText -import com.wireguard.android.R +import page.onram.wirevpn.R /** * Standalone utilities for interacting with the system clipboard. diff --git a/ui/src/main/java/com/wireguard/android/util/DownloadsFileSaver.kt b/ui/src/main/java/page/onram/wirevpn/util/DownloadsFileSaver.kt similarity index 98% rename from ui/src/main/java/com/wireguard/android/util/DownloadsFileSaver.kt rename to ui/src/main/java/page/onram/wirevpn/util/DownloadsFileSaver.kt index f78094b6..98251f66 100644 --- a/ui/src/main/java/com/wireguard/android/util/DownloadsFileSaver.kt +++ b/ui/src/main/java/page/onram/wirevpn/util/DownloadsFileSaver.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.util +package page.onram.wirevpn.util import android.Manifest import android.content.ContentValues @@ -17,7 +17,7 @@ import androidx.activity.ComponentActivity import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.core.content.ContextCompat -import com.wireguard.android.R +import page.onram.wirevpn.R import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext diff --git a/ui/src/main/java/com/wireguard/android/util/ErrorMessages.kt b/ui/src/main/java/page/onram/wirevpn/util/ErrorMessages.kt similarity index 93% rename from ui/src/main/java/com/wireguard/android/util/ErrorMessages.kt rename to ui/src/main/java/page/onram/wirevpn/util/ErrorMessages.kt index 4157ebf2..d28fcb8e 100644 --- a/ui/src/main/java/com/wireguard/android/util/ErrorMessages.kt +++ b/ui/src/main/java/page/onram/wirevpn/util/ErrorMessages.kt @@ -2,22 +2,22 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.util +package page.onram.wirevpn.util import android.content.res.Resources import android.os.RemoteException import com.google.zxing.ChecksumException import com.google.zxing.NotFoundException -import com.wireguard.android.Application -import com.wireguard.android.R -import com.wireguard.android.backend.BackendException -import com.wireguard.android.util.RootShell.RootShellException -import com.wireguard.config.BadConfigException -import com.wireguard.config.InetEndpoint -import com.wireguard.config.InetNetwork -import com.wireguard.config.ParseException -import com.wireguard.crypto.Key -import com.wireguard.crypto.KeyFormatException +import page.onram.wirevpn.Application +import page.onram.wirevpn.R +import page.onram.wirevpn.backend.BackendException +import page.onram.wirevpn.util.RootShell.RootShellException +import page.onram.wirevpn.config.BadConfigException +import page.onram.wirevpn.config.InetEndpoint +import page.onram.wirevpn.config.InetNetwork +import page.onram.wirevpn.config.ParseException +import page.onram.wirevpn.crypto.Key +import page.onram.wirevpn.crypto.KeyFormatException import java.net.InetAddress object ErrorMessages { diff --git a/ui/src/main/java/com/wireguard/android/util/Extensions.kt b/ui/src/main/java/page/onram/wirevpn/util/Extensions.kt similarity index 86% rename from ui/src/main/java/com/wireguard/android/util/Extensions.kt rename to ui/src/main/java/page/onram/wirevpn/util/Extensions.kt index c4b43951..864f85e6 100644 --- a/ui/src/main/java/com/wireguard/android/util/Extensions.kt +++ b/ui/src/main/java/page/onram/wirevpn/util/Extensions.kt @@ -3,15 +3,15 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.util +package page.onram.wirevpn.util import android.content.Context import android.util.TypedValue import androidx.annotation.AttrRes import androidx.lifecycle.lifecycleScope import androidx.preference.Preference -import com.wireguard.android.Application -import com.wireguard.android.activity.SettingsActivity +import page.onram.wirevpn.Application +import page.onram.wirevpn.activity.SettingsActivity import kotlinx.coroutines.CoroutineScope fun Context.resolveAttribute(@AttrRes attrRes: Int): Int { diff --git a/ui/src/main/java/com/wireguard/android/util/QrCodeFromFileScanner.kt b/ui/src/main/java/page/onram/wirevpn/util/QrCodeFromFileScanner.kt similarity index 98% rename from ui/src/main/java/com/wireguard/android/util/QrCodeFromFileScanner.kt rename to ui/src/main/java/page/onram/wirevpn/util/QrCodeFromFileScanner.kt index 4ea2dc7a..87ee0797 100644 --- a/ui/src/main/java/com/wireguard/android/util/QrCodeFromFileScanner.kt +++ b/ui/src/main/java/page/onram/wirevpn/util/QrCodeFromFileScanner.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.util +package page.onram.wirevpn.util import android.content.ContentResolver import android.graphics.Bitmap diff --git a/ui/src/main/java/com/wireguard/android/util/QuantityFormatter.kt b/ui/src/main/java/page/onram/wirevpn/util/QuantityFormatter.kt similarity index 96% rename from ui/src/main/java/com/wireguard/android/util/QuantityFormatter.kt rename to ui/src/main/java/page/onram/wirevpn/util/QuantityFormatter.kt index abac57c5..44882418 100644 --- a/ui/src/main/java/com/wireguard/android/util/QuantityFormatter.kt +++ b/ui/src/main/java/page/onram/wirevpn/util/QuantityFormatter.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.util +package page.onram.wirevpn.util import android.icu.text.ListFormatter import android.icu.text.MeasureFormat @@ -11,8 +11,8 @@ import android.icu.text.RelativeDateTimeFormatter import android.icu.util.Measure import android.icu.util.MeasureUnit import android.os.Build -import com.wireguard.android.Application -import com.wireguard.android.R +import page.onram.wirevpn.Application +import page.onram.wirevpn.R import java.util.Locale import kotlin.time.Duration.Companion.seconds diff --git a/ui/src/main/java/com/wireguard/android/util/TunnelImporter.kt b/ui/src/main/java/page/onram/wirevpn/util/TunnelImporter.kt similarity index 96% rename from ui/src/main/java/com/wireguard/android/util/TunnelImporter.kt rename to ui/src/main/java/page/onram/wirevpn/util/TunnelImporter.kt index 18a37ef6..e4c19863 100644 --- a/ui/src/main/java/com/wireguard/android/util/TunnelImporter.kt +++ b/ui/src/main/java/page/onram/wirevpn/util/TunnelImporter.kt @@ -3,18 +3,18 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.util +package page.onram.wirevpn.util import android.content.ContentResolver import android.net.Uri import android.provider.OpenableColumns import android.util.Log import androidx.fragment.app.FragmentManager -import com.wireguard.android.Application -import com.wireguard.android.R -import com.wireguard.android.fragment.ConfigNamingDialogFragment -import com.wireguard.android.model.ObservableTunnel -import com.wireguard.config.Config +import page.onram.wirevpn.Application +import page.onram.wirevpn.R +import page.onram.wirevpn.fragment.ConfigNamingDialogFragment +import page.onram.wirevpn.model.ObservableTunnel +import page.onram.wirevpn.config.Config import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob diff --git a/ui/src/main/java/com/wireguard/android/util/UserKnobs.kt b/ui/src/main/java/page/onram/wirevpn/util/UserKnobs.kt similarity index 98% rename from ui/src/main/java/com/wireguard/android/util/UserKnobs.kt rename to ui/src/main/java/page/onram/wirevpn/util/UserKnobs.kt index ca051739..b94758ca 100644 --- a/ui/src/main/java/com/wireguard/android/util/UserKnobs.kt +++ b/ui/src/main/java/page/onram/wirevpn/util/UserKnobs.kt @@ -3,13 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.util +package page.onram.wirevpn.util import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.stringPreferencesKey import androidx.datastore.preferences.core.stringSetPreferencesKey -import com.wireguard.android.Application +import page.onram.wirevpn.Application import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map diff --git a/ui/src/main/java/com/wireguard/android/viewmodel/ConfigProxy.kt b/ui/src/main/java/page/onram/wirevpn/viewmodel/ConfigProxy.kt similarity index 93% rename from ui/src/main/java/com/wireguard/android/viewmodel/ConfigProxy.kt rename to ui/src/main/java/page/onram/wirevpn/viewmodel/ConfigProxy.kt index 7f39b461..db267542 100644 --- a/ui/src/main/java/com/wireguard/android/viewmodel/ConfigProxy.kt +++ b/ui/src/main/java/page/onram/wirevpn/viewmodel/ConfigProxy.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.viewmodel +package page.onram.wirevpn.viewmodel import android.os.Build import android.os.Parcel @@ -10,9 +10,9 @@ import android.os.Parcelable import androidx.core.os.ParcelCompat import androidx.databinding.ObservableArrayList import androidx.databinding.ObservableList -import com.wireguard.config.BadConfigException -import com.wireguard.config.Config -import com.wireguard.config.Peer +import page.onram.wirevpn.config.BadConfigException +import page.onram.wirevpn.config.Config +import page.onram.wirevpn.config.Peer class ConfigProxy : Parcelable { val `interface`: InterfaceProxy diff --git a/ui/src/main/java/com/wireguard/android/viewmodel/InterfaceProxy.kt b/ui/src/main/java/page/onram/wirevpn/viewmodel/InterfaceProxy.kt similarity index 92% rename from ui/src/main/java/com/wireguard/android/viewmodel/InterfaceProxy.kt rename to ui/src/main/java/page/onram/wirevpn/viewmodel/InterfaceProxy.kt index 25c2fd19..feaf6eeb 100644 --- a/ui/src/main/java/com/wireguard/android/viewmodel/InterfaceProxy.kt +++ b/ui/src/main/java/page/onram/wirevpn/viewmodel/InterfaceProxy.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.viewmodel +package page.onram.wirevpn.viewmodel import android.os.Parcel import android.os.Parcelable @@ -10,13 +10,13 @@ import androidx.databinding.BaseObservable import androidx.databinding.Bindable import androidx.databinding.ObservableArrayList import androidx.databinding.ObservableList -import com.wireguard.android.BR -import com.wireguard.config.Attribute -import com.wireguard.config.BadConfigException -import com.wireguard.config.Interface -import com.wireguard.crypto.Key -import com.wireguard.crypto.KeyFormatException -import com.wireguard.crypto.KeyPair +import page.onram.wirevpn.BR +import page.onram.wirevpn.config.Attribute +import page.onram.wirevpn.config.BadConfigException +import page.onram.wirevpn.config.Interface +import page.onram.wirevpn.crypto.Key +import page.onram.wirevpn.crypto.KeyFormatException +import page.onram.wirevpn.crypto.KeyPair class InterfaceProxy : BaseObservable, Parcelable { @get:Bindable diff --git a/ui/src/main/java/com/wireguard/android/viewmodel/PeerProxy.kt b/ui/src/main/java/page/onram/wirevpn/viewmodel/PeerProxy.kt similarity index 98% rename from ui/src/main/java/com/wireguard/android/viewmodel/PeerProxy.kt rename to ui/src/main/java/page/onram/wirevpn/viewmodel/PeerProxy.kt index 15bf8a08..f665eeb8 100644 --- a/ui/src/main/java/com/wireguard/android/viewmodel/PeerProxy.kt +++ b/ui/src/main/java/page/onram/wirevpn/viewmodel/PeerProxy.kt @@ -2,7 +2,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.viewmodel +package page.onram.wirevpn.viewmodel import android.os.Parcel import android.os.Parcelable @@ -11,10 +11,10 @@ import androidx.databinding.Bindable import androidx.databinding.Observable import androidx.databinding.Observable.OnPropertyChangedCallback import androidx.databinding.ObservableList -import com.wireguard.android.BR -import com.wireguard.config.Attribute -import com.wireguard.config.BadConfigException -import com.wireguard.config.Peer +import page.onram.wirevpn.BR +import page.onram.wirevpn.config.Attribute +import page.onram.wirevpn.config.BadConfigException +import page.onram.wirevpn.config.Peer import java.lang.ref.WeakReference class PeerProxy : BaseObservable, Parcelable { diff --git a/ui/src/main/java/com/wireguard/android/widget/KeyInputFilter.kt b/ui/src/main/java/page/onram/wirevpn/widget/KeyInputFilter.kt similarity index 95% rename from ui/src/main/java/com/wireguard/android/widget/KeyInputFilter.kt rename to ui/src/main/java/page/onram/wirevpn/widget/KeyInputFilter.kt index 548760c5..1f386954 100644 --- a/ui/src/main/java/com/wireguard/android/widget/KeyInputFilter.kt +++ b/ui/src/main/java/page/onram/wirevpn/widget/KeyInputFilter.kt @@ -2,12 +2,12 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.widget +package page.onram.wirevpn.widget import android.text.InputFilter import android.text.SpannableStringBuilder import android.text.Spanned -import com.wireguard.crypto.Key +import page.onram.wirevpn.crypto.Key /** * InputFilter for entering WireGuard private/public keys encoded with base64. diff --git a/ui/src/main/java/com/wireguard/android/widget/MultiselectableRelativeLayout.kt b/ui/src/main/java/page/onram/wirevpn/widget/MultiselectableRelativeLayout.kt similarity index 95% rename from ui/src/main/java/com/wireguard/android/widget/MultiselectableRelativeLayout.kt rename to ui/src/main/java/page/onram/wirevpn/widget/MultiselectableRelativeLayout.kt index 9b3ec401..3754ff2c 100644 --- a/ui/src/main/java/com/wireguard/android/widget/MultiselectableRelativeLayout.kt +++ b/ui/src/main/java/page/onram/wirevpn/widget/MultiselectableRelativeLayout.kt @@ -2,13 +2,13 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.widget +package page.onram.wirevpn.widget import android.content.Context import android.util.AttributeSet import android.view.View import android.widget.RelativeLayout -import com.wireguard.android.R +import page.onram.wirevpn.R class MultiselectableRelativeLayout @JvmOverloads constructor( context: Context? = null, diff --git a/ui/src/main/java/com/wireguard/android/widget/NameInputFilter.kt b/ui/src/main/java/page/onram/wirevpn/widget/NameInputFilter.kt similarity index 94% rename from ui/src/main/java/com/wireguard/android/widget/NameInputFilter.kt rename to ui/src/main/java/page/onram/wirevpn/widget/NameInputFilter.kt index 93b77ba9..6fcddac4 100644 --- a/ui/src/main/java/com/wireguard/android/widget/NameInputFilter.kt +++ b/ui/src/main/java/page/onram/wirevpn/widget/NameInputFilter.kt @@ -2,12 +2,12 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.widget +package page.onram.wirevpn.widget import android.text.InputFilter import android.text.SpannableStringBuilder import android.text.Spanned -import com.wireguard.android.backend.Tunnel +import page.onram.wirevpn.backend.Tunnel /** * InputFilter for entering WireGuard configuration names (Linux interface names). diff --git a/ui/src/main/java/com/wireguard/android/widget/SlashDrawable.kt b/ui/src/main/java/page/onram/wirevpn/widget/SlashDrawable.kt similarity index 99% rename from ui/src/main/java/com/wireguard/android/widget/SlashDrawable.kt rename to ui/src/main/java/page/onram/wirevpn/widget/SlashDrawable.kt index c69e6d8b..601d3894 100644 --- a/ui/src/main/java/com/wireguard/android/widget/SlashDrawable.kt +++ b/ui/src/main/java/page/onram/wirevpn/widget/SlashDrawable.kt @@ -3,7 +3,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.widget +package page.onram.wirevpn.widget import android.animation.ObjectAnimator import android.content.res.ColorStateList diff --git a/ui/src/main/java/com/wireguard/android/widget/ToggleSwitch.kt b/ui/src/main/java/page/onram/wirevpn/widget/ToggleSwitch.kt similarity index 97% rename from ui/src/main/java/com/wireguard/android/widget/ToggleSwitch.kt rename to ui/src/main/java/page/onram/wirevpn/widget/ToggleSwitch.kt index 9b79706b..06b77339 100644 --- a/ui/src/main/java/com/wireguard/android/widget/ToggleSwitch.kt +++ b/ui/src/main/java/page/onram/wirevpn/widget/ToggleSwitch.kt @@ -3,7 +3,7 @@ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.widget +package page.onram.wirevpn.widget import android.content.Context import android.os.Parcelable diff --git a/ui/src/main/java/com/wireguard/android/widget/TvCardView.kt b/ui/src/main/java/page/onram/wirevpn/widget/TvCardView.kt similarity index 95% rename from ui/src/main/java/com/wireguard/android/widget/TvCardView.kt rename to ui/src/main/java/page/onram/wirevpn/widget/TvCardView.kt index de301313..52b5e519 100644 --- a/ui/src/main/java/com/wireguard/android/widget/TvCardView.kt +++ b/ui/src/main/java/page/onram/wirevpn/widget/TvCardView.kt @@ -3,13 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package com.wireguard.android.widget +package page.onram.wirevpn.widget import android.content.Context import android.util.AttributeSet import android.view.View import com.google.android.material.card.MaterialCardView -import com.wireguard.android.R +import page.onram.wirevpn.R class TvCardView(context: Context?, attrs: AttributeSet?) : MaterialCardView(context, attrs) { var isUp: Boolean = false diff --git a/ui/src/main/res/drawable/ic_launcher_foreground.xml b/ui/src/main/res/drawable/ic_launcher_foreground.xml index 044d2e08..fc827434 100644 --- a/ui/src/main/res/drawable/ic_launcher_foreground.xml +++ b/ui/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,5 +1,4 @@ - - - - - - - - - - - - - - + + diff --git a/ui/src/main/res/layout-sw600dp/main_activity.xml b/ui/src/main/res/layout-sw600dp/main_activity.xml index ef1d4053..f383d45d 100644 --- a/ui/src/main/res/layout-sw600dp/main_activity.xml +++ b/ui/src/main/res/layout-sw600dp/main_activity.xml @@ -21,7 +21,7 @@ - + + type="page.onram.wirevpn.fragment.AppListDialogFragment" /> + type="page.onram.wirevpn.databinding.ObservableKeyedArrayList<String, ApplicationData>" /> - + + type="page.onram.wirevpn.databinding.ObservableKeyedArrayList<String, page.onram.wirevpn.model.ApplicationData>" /> + type="page.onram.wirevpn.model.ApplicationData" /> - + diff --git a/ui/src/main/res/layout/tunnel_creator_activity.xml b/ui/src/main/res/layout/tunnel_creator_activity.xml index 82273db2..d3f589d3 100644 --- a/ui/src/main/res/layout/tunnel_creator_activity.xml +++ b/ui/src/main/res/layout/tunnel_creator_activity.xml @@ -12,7 +12,7 @@ diff --git a/ui/src/main/res/layout/tunnel_detail_fragment.xml b/ui/src/main/res/layout/tunnel_detail_fragment.xml index aae3e397..836f6866 100644 --- a/ui/src/main/res/layout/tunnel_detail_fragment.xml +++ b/ui/src/main/res/layout/tunnel_detail_fragment.xml @@ -8,21 +8,21 @@ - + - + + type="page.onram.wirevpn.fragment.TunnelDetailFragment" /> + type="page.onram.wirevpn.model.ObservableTunnel" /> + type="page.onram.wirevpn.config.Config" /> - - + + type="page.onram.wirevpn.config.Peer" /> - + - + - + + type="page.onram.wirevpn.fragment.TunnelEditorFragment" /> + type="page.onram.wirevpn.viewmodel.ConfigProxy" /> - + - + + type="androidx.databinding.ObservableList<page.onram.wirevpn.viewmodel.PeerProxy>" /> + type="page.onram.wirevpn.viewmodel.PeerProxy" /> + type="page.onram.wirevpn.fragment.TunnelEditorFragment" /> - + + type="page.onram.wirevpn.fragment.TunnelListFragment" /> + type="page.onram.wirevpn.databinding.ObservableKeyedRecyclerViewAdapter.RowConfigurationHandler" /> + type="page.onram.wirevpn.databinding.ObservableKeyedArrayList<String, ObservableTunnel>" /> - + - + + type="page.onram.wirevpn.databinding.ObservableKeyedArrayList<String, ObservableTunnel>" /> + type="page.onram.wirevpn.model.ObservableTunnel" /> + type="page.onram.wirevpn.fragment.TunnelListFragment" /> - - - + diff --git a/ui/src/main/res/layout/tv_activity.xml b/ui/src/main/res/layout/tv_activity.xml index f42808b3..6d6db6b6 100644 --- a/ui/src/main/res/layout/tv_activity.xml +++ b/ui/src/main/res/layout/tv_activity.xml @@ -10,9 +10,9 @@ - + - + + type="page.onram.wirevpn.databinding.ObservableKeyedArrayList<String, KeyedFile>" /> + type="page.onram.wirevpn.databinding.ObservableKeyedArrayList<String, ObservableTunnel>" /> + type="page.onram.wirevpn.databinding.ObservableKeyedRecyclerViewAdapter.RowConfigurationHandler" /> + type="page.onram.wirevpn.databinding.ObservableKeyedRecyclerViewAdapter.RowConfigurationHandler" /> - + - + - + + type="page.onram.wirevpn.model.ObservableTunnel" /> - - + diff --git a/ui/src/main/res/mipmap-hdpi/ic_launcher.png b/ui/src/main/res/mipmap-hdpi/ic_launcher.png index 45daa9a1e39f9d117b4c510ffdd8fe011bf6c07e..8973c588217b85701be585dda6a42a93e2bbc499 100644 GIT binary patch literal 4387 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 literal 4990 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 diff --git a/ui/src/main/res/mipmap-hdpi/ic_launcher_round.png b/ui/src/main/res/mipmap-hdpi/ic_launcher_round.png index 41c38a153336f1769246708260f4f2de445f4f41..8973c588217b85701be585dda6a42a93e2bbc499 100644 GIT binary patch literal 4387 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 literal 5988 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 SB(kjl0000=1nlM=e-)U>UVYZ6c_xT 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 AEC2ui diff --git a/ui/src/main/res/mipmap-xxhdpi/ic_launcher.png b/ui/src/main/res/mipmap-xxhdpi/ic_launcher.png index 4010a271f0a5ca72280f4247829f4185cceb1684..c1e283544b4b1a0082f7d580eb197b853bbc028a 100644 GIT binary patch literal 9667 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 literal 11777 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 diff --git a/ui/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/ui/src/main/res/mipmap-xxhdpi/ic_launcher_round.png index 1569994a983e547ab1c88ce2345163b773074b81..c1e283544b4b1a0082f7d580eb197b853bbc028a 100644 GIT binary patch literal 9667 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 literal 15449 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 P00000NkvXXu0mjfGFJD8 diff --git a/ui/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/ui/src/main/res/mipmap-xxxhdpi/ic_launcher.png index d208e7a24da8a6015d41274311aac395b5568d1b..58f6513bb1aede8e1bc2efc6bb938ca8df8cae8d 100644 GIT binary patch literal 13003 zcmZX5byOQ&^lcI>1Pe}amqLL;k)pwhdvS*%g<_>RMMII|E=7v-;ZD)uPJu!wZl$=p zzx4Os`{S*bwUWt7&YZdT&dfRc?6W6ALroqJLJ0u?0CE+1aFI#L=OmqEX+@utC?zl|{j|tTm6GA(;IORGO%E>@NFkQF8oFjVK{~ ze`xg2gTDkJ|462%cjMW&EitU)lmGpC<~re$g8=6)iE|T*-zlX#UEvUH&s~2)=mkE? z{4It<=d2EGZ}c&3c&ig81Awf#Nr7WnG@YZOjaBpyD5K>`O^Ok6d-FoI^UxlGoK&-| z$4-{Mx61l+fy7(C$fysfU6PhD0p0+Q!$tkf>m(%%#=SlO=Tdl=USKapP%O57y2v#e zG3&Q)rF^wG0y~zf_I&y(j3qr%mV9Y-0P0DPSHo;d)EF-v0)MnmbQ0vfseTM(@C-i3 z?>a^6%9DOW@b+l_LfUOBKWWedvdbw8^26B11+sL5HN54uO|%#ZyxTo8zDOiAWGk)` zr@NAXt>AI#fS_>1BCFfz0W~^5+F~?s!fSXHLUf&$Q z=K-9<_*&Bny&p;Sd-T5GUqj4u8-ezsYZ0>LG7<^DDEx?se}?rd0@T?o6q%wZ%{@Z3 zsMaj2ef5@n7rOpjo%=TtPo-hLqyTtZ;WLB}&X5CbFdgK9^%x)?qF-+4J|~Gi)5w@e zW5%Vu^JE~CDX>lByDAJ)l#|Sqb*l~5A6#Vt6k%H^Vgitra<-e0mUzT(n3sa<60TdT zTf8iY9tg^9$On92nGnH5a&lg!XS|4g)f+SM_nAnj2UBQ#381pUxh^ojI6KY36)6pt zz@jXUhZ2W_%NuMrNx}PuXKT>Q>~)S%!RHnv!SF4Hb8fI0wkm<>bhH0TW9shGk$Vdp zQ|PhhSx*(W^$d44}rU0%!WIh-FR;~2< zldm;BLzm6=X&Y#%r?#QoW`tEpmhxF-+&E-H^SD?phD6C&0g=pX2Le>gMETkMrF{)ca7-bpBhDS)J-c^5N4c1_^`ab?g?w567C)xpyzvOl~7*v+5Dp_%} zI``r)ljD_GvZ8ws6vh#lEYfM`nk~2M!)VF?AN@5Ep8yva19x0v1em*$N+~eBsP<@-c6&c_c`EStVEO{H zl%3u*QY$w7z1G-Q(* zW$uW`b)~To^OrrI!Ke%d>8v_S*=!acpvJ2Yd zB@WCz6b#AIr~nOl_6uKp6WxvDK0xSKizXpo$(LE-`WCw<4X1k^T6jXtjKGSE|8^rU zW?P+mvt9Y(WFh95Dj2`E{wlCpCC4F24drxN<=7=kvCzsxN8=1%Up?n+>5jrluyy&y z9Bl2Ru)KD58uAReA+675KhP)z#=T0v!3E$N=?4WO$CWEIx1w6Is2mdIuoGaw(P#>{ z>-!T%na5=Kx3QQFoPd_D>Y-Xt`OJvOf8)!oXFryPa?yLr0Ztii!@+YYNdXv>UQKmD zbVtQ3R|YXspL;-SvU#zDHZ;6)r7e?6RKRU-vc_Q%mAKfdeB4 z#esO&L@f3f{cR--jUxPXktz+y2?gP4dh%�JC(k0SDtBWd>T&ce`!UO!tK{&v9gS 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%0D~iRqQ6v4Gp4;^D^(&#Kf(3I5b2}m} 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 YUo_NBgBDaHAOHXW07*qoM6N<$g2zxw*#H0l diff --git a/ui/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/ui/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png index 1d4cc6d020ed0e602851e3a115a9c3c86f92756a..58f6513bb1aede8e1bc2efc6bb938ca8df8cae8d 100644 GIT binary patch literal 13003 zcmZX5byOQ&^lcI>1Pe}amqLL;k)pwhdvS*%g<_>RMMII|E=7v-;ZD)uPJu!wZl$=p zzx4Os`{S*bwUWt7&YZdT&dfRc?6W6ALroqJLJ0u?0CE+1aFI#L=OmqEX+@utC?zl|{j|tTm6GA(;IORGO%E>@NFkQF8oFjVK{~ ze`xg2gTDkJ|462%cjMW&EitU)lmGpC<~re$g8=6)iE|T*-zlX#UEvUH&s~2)=mkE? z{4It<=d2EGZ}c&3c&ig81Awf#Nr7WnG@YZOjaBpyD5K>`O^Ok6d-FoI^UxlGoK&-| z$4-{Mx61l+fy7(C$fysfU6PhD0p0+Q!$tkf>m(%%#=SlO=Tdl=USKapP%O57y2v#e zG3&Q)rF^wG0y~zf_I&y(j3qr%mV9Y-0P0DPSHo;d)EF-v0)MnmbQ0vfseTM(@C-i3 z?>a^6%9DOW@b+l_LfUOBKWWedvdbw8^26B11+sL5HN54uO|%#ZyxTo8zDOiAWGk)` zr@NAXt>AI#fS_>1BCFfz0W~^5+F~?s!fSXHLUf&$Q z=K-9<_*&Bny&p;Sd-T5GUqj4u8-ezsYZ0>LG7<^DDEx?se}?rd0@T?o6q%wZ%{@Z3 zsMaj2ef5@n7rOpjo%=TtPo-hLqyTtZ;WLB}&X5CbFdgK9^%x)?qF-+4J|~Gi)5w@e zW5%Vu^JE~CDX>lByDAJ)l#|Sqb*l~5A6#Vt6k%H^Vgitra<-e0mUzT(n3sa<60TdT zTf8iY9tg^9$On92nGnH5a&lg!XS|4g)f+SM_nAnj2UBQ#381pUxh^ojI6KY36)6pt zz@jXUhZ2W_%NuMrNx}PuXKT>Q>~)S%!RHnv!SF4Hb8fI0wkm<>bhH0TW9shGk$Vdp zQ|PhhSx*(W^$d44}rU0%!WIh-FR;~2< zldm;BLzm6=X&Y#%r?#QoW`tEpmhxF-+&E-H^SD?phD6C&0g=pX2Le>gMETkMrF{)ca7-bpBhDS)J-c^5N4c1_^`ab?g?w567C)xpyzvOl~7*v+5Dp_%} zI``r)ljD_GvZ8ws6vh#lEYfM`nk~2M!)VF?AN@5Ep8yva19x0v1em*$N+~eBsP<@-c6&c_c`EStVEO{H zl%3u*QY$w7z1G-Q(* zW$uW`b)~To^OrrI!Ke%d>8v_S*=!acpvJ2Yd zB@WCz6b#AIr~nOl_6uKp6WxvDK0xSKizXpo$(LE-`WCw<4X1k^T6jXtjKGSE|8^rU zW?P+mvt9Y(WFh95Dj2`E{wlCpCC4F24drxN<=7=kvCzsxN8=1%Up?n+>5jrluyy&y z9Bl2Ru)KD58uAReA+675KhP)z#=T0v!3E$N=?4WO$CWEIx1w6Is2mdIuoGaw(P#>{ z>-!T%na5=Kx3QQFoPd_D>Y-Xt`OJvOf8)!oXFryPa?yLr0Ztii!@+YYNdXv>UQKmD zbVtQ3R|YXspL;-SvU#zDHZ;6)r7e?6RKRU-vc_Q%mAKfdeB4 z#esO&L@f3f{cR--jUxPXktz+y2?gP4dh%�JC(k0SDtBWd>T&ce`!UO!tK{&v9gS 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%0D~iRqQ6v4Gp4;^D^(&#Kf(3I5b2}m} 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�XHq;RCt8stpnLnPkNk(Rpdi4=Y5RxplAk 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تحديد محرك تخزين الرجاء تثبيت مدير ملفات لتتمكن من تصفح الملفات أضف نفقاً لتبدأ - ♥️ تبرع لمشروع وايرجارد - كل مساهمة تساعد - شكرًا لك على دعم مشروع\n\nWireGuard! للأسف، نظرًا لسياسات Google، لا يُسمح لنا بالارتباط بجزء من صفحة الويب الخاصة بالمشروع حيث يمكنك التبرع. نأمل أن تتمكن من معرفة ذلك!\n\nشكرًا مرة أخرى على مساهمتك. + + تعطيل تصدير التكوين تعطيل تصدير الإعدادات يجعل المفاتيح الخاصة غير متاحة خوادم DNS diff --git a/ui/src/main/res/values-ca-rES/strings.xml b/ui/src/main/res/values-ca-rES/strings.xml index f2fe06cb..00e9f37c 100644 --- a/ui/src/main/res/values-ca-rES/strings.xml +++ b/ui/src/main/res/values-ca-rES/strings.xml @@ -107,9 +107,8 @@ Seleccioneu un disc d\'emmagatzematge Si us plau, instsleu un gestor de fitxers per navegar pels arxius Afegeix un túnel per començar - ♥ Donar al Projecte WireGuard - Totes les contribucions ajuden - Gràcies per donar suport al Projecte WireGuard!\n\nMalauradament, a causa de les polítiques de Google, no estem permesos a enllaçar a la part del web del projecte on pots realitzar una donació. Esperem que puguis trobar-ho!\n\nGràcies de nou per la teva contribució. + + Desactiva l\'exportació de configuracions Desactivar l\'exportacio de configuracions fa que les claus privades siguin menys accessibles Servidors DNS diff --git a/ui/src/main/res/values-cs-rCZ/strings.xml b/ui/src/main/res/values-cs-rCZ/strings.xml index 24568a8b..bea7427f 100644 --- a/ui/src/main/res/values-cs-rCZ/strings.xml +++ b/ui/src/main/res/values-cs-rCZ/strings.xml @@ -133,9 +133,8 @@ Vyberte úložný disk Prosím nainstalujte nástroj pro správu souborů pro procházení souborů Přidejte tunel, abyste mohli začít - ♥ Přispět na projekt WireGuard - Každý příspěvek pomáhá - Děkujeme, že podporujete projekt WireGuard!\n\nBohužel, kvůli pravidlům Googlu, nám není dovoleno odkazovat na část webové stránky projektu, kde můžete provést dar. Doufáme, že to zvládnete nějakým způsobem!\n\nJeště jednou děkujeme za váš příspěvek. + + Zakázat export konfigurace Zakázání exportu konfigurace ztíží přístup k privátním klíčům DNS servery diff --git a/ui/src/main/res/values-da-rDK/strings.xml b/ui/src/main/res/values-da-rDK/strings.xml index 7b9b4491..5ade5523 100644 --- a/ui/src/main/res/values-da-rDK/strings.xml +++ b/ui/src/main/res/values-da-rDK/strings.xml @@ -107,9 +107,8 @@ Vælg et lagerdrev Installér venligst et filhåndteringsværktøj til at gennemse filer Tilføj en tunnel for at komme i gang - ♥ Donér til WireGuard projektet - Et hvert bidrag hjælper - Tak fordi du støttede WireGuard-projektet!\n\nDesværre, på grund af Googles politikker, har vi ikke tilladelse til at linke til den del af projektets webside, hvor du kan donere. Forhåbentlig kan du finde frem til dette!\n\nVi takker igen for dit bidrag. + + Deaktivér eksportering af konfiguration Deaktivering af config eksport gør private nøgler mindre tilgængelige DNS-servere diff --git a/ui/src/main/res/values-de/strings.xml b/ui/src/main/res/values-de/strings.xml index 9e0aa973..1aad3343 100644 --- a/ui/src/main/res/values-de/strings.xml +++ b/ui/src/main/res/values-de/strings.xml @@ -107,9 +107,8 @@ Speicherlaufwerk auswählen Bitte installieren Sie ein Dateiverwaltungsprogramm, um Dateien zu durchsuchen Fügen Sie einen Tunnel hinzu, um loszulegen - ♥ Spende an das WireGuard-Projekt - Jeder Beitrag hilft - Vielen Dank für Ihre Unterstützung des WireGuard-Projekts!\n\nLeider ist es uns aufgrund der Google-Richtlinien nicht gestattet, den Abschnitt der Projekt-Webseite zu verlinken, wo Sie hätten spenden können. Hoffentlich finden Sie das heraus!\n\nNochmals vielen Dank für Ihren Beitrag. + + Konfigurationsexport deaktivieren Durch Deaktivieren des Konfigurationsexports werden private Schlüssel unzugänglicher DNS-Server diff --git a/ui/src/main/res/values-es-rES/strings.xml b/ui/src/main/res/values-es-rES/strings.xml index 1376ac31..8d9affbb 100644 --- a/ui/src/main/res/values-es-rES/strings.xml +++ b/ui/src/main/res/values-es-rES/strings.xml @@ -107,9 +107,8 @@ Selecciones un dispositivo de almacenamiento Por favor, instale una herramienta de gestión de archivos para navegar por archivos Agregue un túnel para empezar - ♥ Donar al Proyecto WireGuard - Todas las contribuciones ayudan - ¡Gracias por apoyar el proyecto WireGuard!\n\nLamentablemente, debido a las políticas de Google, no estamos autorizados a enlazar a la parte de la página web del proyecto donde puedes hacer una donación. ¡Esperemos que puedas averiguar esto!\n\nGracias de nuevo por tu contribución. + + Inhabilitar la exportación de configuración Desactivar la exportación de configuración hace que las claves privadas sean menos accesibles Servidores DNS diff --git a/ui/src/main/res/values-et-rEE/strings.xml b/ui/src/main/res/values-et-rEE/strings.xml index 9beaafd9..6162f215 100644 --- a/ui/src/main/res/values-et-rEE/strings.xml +++ b/ui/src/main/res/values-et-rEE/strings.xml @@ -107,10 +107,7 @@ Vali salvestusseade Failide vaatamiseks paigalda failide haldusvahend Alustamiseks lisa uus tunnel - ♥ Anneta WireGuard\'i projektile - Iga panus aitab - Aitäh, et toetad WireGuard\'i projekti!\n\nKahjuks ei saa me Google\'i eeskirjade tõttu linkida projekti veebilehele, kus saab annetusi teha. Loodetavasti leiad selle ise!\n\n -Aitäh veelkord sinu panuse eest. + Keela seadistuste eksportimine Seadistuste eksportimise keelamine teeb privaatvõtmetele ligipääsu keerulisemaks DNS-serverid diff --git a/ui/src/main/res/values-fa-rIR/strings.xml b/ui/src/main/res/values-fa-rIR/strings.xml index 03f01cb1..f5d737d0 100644 --- a/ui/src/main/res/values-fa-rIR/strings.xml +++ b/ui/src/main/res/values-fa-rIR/strings.xml @@ -108,9 +108,8 @@ حافظه ذخیره سازی موردنظر را انتخاب کنید برای مدیریت پوشه های حافظه، یک برنامه مدیریت فایل نصب کنید یک پروفایل تونل برای شروع انتخاب کنید - ♥ کمک مالی به پروژه WireGuard - هر کمک شما تاثیرگذار است - از اینکه از پروژه WireGuard حمایت می‌کنید متشکریم!\n\nمتأسفانه، به دلیل خط‌مشی‌های Google، ما مجاز به پیوند دادن به بخشی از صفحه وب پروژه که می‌توانید در آن کمک مالی کنید، نداریم. امیدواریم بتوانید این را درک کنید!\n\nباز هم از مشارکت شما سپاسگزاریم. + + غیرفعال سازی خروجی گرفتن از پیکربندی ها غیرفعال سازی خروجی گرفتن، دسترسی به کلیدهای خصوصی را کم می کند سرورهای DNS diff --git a/ui/src/main/res/values-fr/strings.xml b/ui/src/main/res/values-fr/strings.xml index d4d4b95f..4b4067b1 100644 --- a/ui/src/main/res/values-fr/strings.xml +++ b/ui/src/main/res/values-fr/strings.xml @@ -107,9 +107,8 @@ Sélectionner un disque de stockage Veuillez installer un utilitaire de gestion de fichiers pour parcourir les fichiers Ajouter un tunnel pour commencer - ♥ Faire un don au projet WireGuard - Chaque contribution aide - Merci de votre soutien au projet WireGuard !\n\nMalheureusement, en raisons des politiques de Google, nous ne pouvons pas vous rediriger vers la page vous permettant de faire un don. Heureusement, vous pouvez le trouver par vous-même !\n\nMerci encore pour votre soutien. + + Désactiver l\'export de configuration La désactivation de l\'export de configuration rend les clés privées moins accessibles Serveurs DNS diff --git a/ui/src/main/res/values-hu-rHU/strings.xml b/ui/src/main/res/values-hu-rHU/strings.xml index f16370e0..a7226e04 100644 --- a/ui/src/main/res/values-hu-rHU/strings.xml +++ b/ui/src/main/res/values-hu-rHU/strings.xml @@ -48,9 +48,8 @@ Jelöjle ki a mentéshez a meghatjót Kérem installáljon egy fájlkezelőt az állományok használatához Add hozzá az indításhoz az alagutat - ♥ Kérlek támogasd a WireGuard Projectet - Minden hozzájárulás segítség - Köszönjük hogy támogatja a WireGuard projektet!\n\nSajnos a Google szabályai miatt, sajnos nem adhatjuk itt meg a támogatásokat fogadó weboldal linkjét. Remélem ezt ki tudod deríteni!\n\nMégegyszer köszönjük a támogatásod. + + A konfiguráció exportálásának tiltása Ha letiltja a konfiguráció exportját akkor a privát kulcsok nem lesznek hozzáférhetőek DNS szerverek diff --git a/ui/src/main/res/values-in/strings.xml b/ui/src/main/res/values-in/strings.xml index d665eec1..87a090d0 100644 --- a/ui/src/main/res/values-in/strings.xml +++ b/ui/src/main/res/values-in/strings.xml @@ -94,9 +94,8 @@ Pilih lokasi penyimpanan Silakan instal aplikasi file manajer untuk memilih file Tambahkan tunnel untuk memulai - Donasi ke Proyek WireGuard - Setiap kontribusi anda sangat membantu - Terima kasih telah mendung Proyek WireGuard!\n\nAkan tetapi, dikarenakan kebijakan Google, Kami tidak diizinkan untuk menautkan bagian halaman website yang dapat digunakan untuk melakukan donasi. Semoga anda dapat menemukan solusi untuk kendala ini!\n\nTerima kasih sekali lagi atas kontribusi anda. + + Nonaktifkan ekspor konfigurasi Menonaktifkan ekspor konfigurasi akan membuat kunci pribadi sulit diakses Server DNS diff --git a/ui/src/main/res/values-it/strings.xml b/ui/src/main/res/values-it/strings.xml index 8fba2592..b4a17f05 100644 --- a/ui/src/main/res/values-it/strings.xml +++ b/ui/src/main/res/values-it/strings.xml @@ -107,9 +107,8 @@ Seleziona un\'unità di archiviazione Installa un\'utilità di gestione file per sfogliare i file Aggiungi un tunnel per iniziare - ♥ Dona al progetto WireGuard - Ogni contributo aiuta - Grazie per il sostegno al progetto WireGuard!\n\nPurtroppo, a causa delle politiche di Google, non siamo autorizzati a linkare la pagina del progetto dove puoi fare una donazione. Speriamo che la troverai!\n\nGrazie ancora per il tuo contributo. + + Disattiva esportazione config Disabilitare l\'esportazione della configurazione rende le chiavi private meno accessibili Server DNS diff --git a/ui/src/main/res/values-ja/strings.xml b/ui/src/main/res/values-ja/strings.xml index 78c8b5f3..9e355fa4 100644 --- a/ui/src/main/res/values-ja/strings.xml +++ b/ui/src/main/res/values-ja/strings.xml @@ -94,9 +94,8 @@ ストレージを選択 ファイルを参照するにはファイル管理アプリをインストールしてください トンネルを追加して開始する - ♥ WireGuard プロジェクトに寄付する - すべての貢献が役立ちます - WireGuard プロジェクトを支援していただきありがとうございます!\n\n残念ながら、Google のポリシーの影響で寄付のページへのリンクを記載することができません。見つけていただけることを願っています。\n\nもう一度、あなたの貢献に深く感謝します。 + + 設定のエクスポートを無効にする 設定のエクスポートを無効にすると、秘密鍵にアクセスされにくくなります DNS サーバ diff --git a/ui/src/main/res/values-ko-rKR/strings.xml b/ui/src/main/res/values-ko-rKR/strings.xml index 8120d436..1a9aae80 100644 --- a/ui/src/main/res/values-ko-rKR/strings.xml +++ b/ui/src/main/res/values-ko-rKR/strings.xml @@ -94,9 +94,8 @@ 저장소를 선택 파일을 찾는 데 사용할 파일 관리자를 설치하시오 시작하려면 터널을 추가하시오 - ♥ WireGuard 프로젝트에 기부해주세요 - 모든 기여가 도움이 됩니다 - WireGuard 프로젝트를 지원해 주셔서 감사합니다!\n\n안타깝게도 Google 정책으로 인해 프로젝트 웹페이지에서 기부할 수 있는 부분에 대한 링크가 허용되지 않습니다. 이 문제를 해결할 수 있기를 바랍니다!\n\n기여해 주셔서 다시 한번 감사드립니다. + + 설정 내보내기 기능을 중지 설정 내보내기 기능을 중지하면 개인키 유출을 줄일 수 있음 DNS 서버 diff --git a/ui/src/main/res/values-nl-rNL/strings.xml b/ui/src/main/res/values-nl-rNL/strings.xml index 0aaa7c70..0c824481 100644 --- a/ui/src/main/res/values-nl-rNL/strings.xml +++ b/ui/src/main/res/values-nl-rNL/strings.xml @@ -107,9 +107,8 @@ Selecteer een opslaglocatie Installeer een bestandsbeheer applicatie Voeg een tunnel toe om te beginnen - ♥️ Doneer aan het WireGuard Project - Elke bijdrage helpt - Bedankt voor het steunen van het WireGuard Project!\n\nHelaas, als gevolg van Google beleid, We mogen niet linken naar de webpagina van het project waar u een donatie kunt doen. Hopelijk kunt u deze zelf wel vinden!\n\nNogmaals bedankt voor uw bijdrage. + + Config export uitschakelen Het uitschakelen van configuratie export maakt privésleutels minder toegankelijk DNS-servers diff --git a/ui/src/main/res/values-no-rNO/strings.xml b/ui/src/main/res/values-no-rNO/strings.xml index 244cab55..6ad03320 100644 --- a/ui/src/main/res/values-no-rNO/strings.xml +++ b/ui/src/main/res/values-no-rNO/strings.xml @@ -107,9 +107,8 @@ Velg en lagringsenhet Vennligst installer et filhåndteringsverktøy for å bla i filer Opprett en ny tunnel for å komme i gang - ♥ Donér til WireGuard-prosjektet - Hvert bidrag hjelper - Takk for at du støtter WireGuard-prosjektet!\n\nPå grunn av Googles retningslinjer, kan vi dessverre ikke linke til den delen av prosjektets nettside der du kan donere. Forhåpentligvis klarer du å finne denne selv!\n\nVi takker igjen for ditt bidrag. + + Deaktiver eksport av konfigurasjon Deaktivering av konfigurasjonseksport gjør private nøkler mindre tilgjengelig DNS tjenere diff --git a/ui/src/main/res/values-pa-rIN/strings.xml b/ui/src/main/res/values-pa-rIN/strings.xml index 8ab9d4cd..6aef39c1 100644 --- a/ui/src/main/res/values-pa-rIN/strings.xml +++ b/ui/src/main/res/values-pa-rIN/strings.xml @@ -107,9 +107,8 @@ ਸਟੋਰੇਜ਼ ਡਰਾਈਵ ਚੁਣੋ ਫਾਇਲਾਂ ਬਰਾਊਜ਼ ਕਰਨ ਲਈ ਫਾਇਲ ਪਰਬੰਧਕੀ ਸਹੂਲਤ ਇੰਸਟਾਲ ਕਰੋ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਟਨਲ ਜੋੜੋ - ♥ ਵਾਇਰਗਾਰਡ ਪਰੋਜੈਕਟ ਨੂੰ ਦਾਨ ਦਿਓ - ਹਰ ਯੋਗਦਾਨ ਮਦਦਗਾਰ ਹੈ - ਵਾਇਰਗਾਰਡ (WireGuard) ਪ੍ਰੋਜੈਕਟ ਦੀ ਮਦਦ ਕਰਨ ਲਈ ਤੁਹਾਡਾ ਧੰਨਵਾਦ ਹੈ!\n\nਅਫ਼ਸੋਸ ਹੈ ਕਿ Google ਦੀਆਂ ਨੀਤੀਆਂ ਕਰਕੇ ਪ੍ਰੋਜੈਕਟ ਦੇ ਵੈੱਬ-ਸਫ਼ੇ, ਜਿੱਥੇ ਤੁਸੀਂ ਦਾਨ ਦੇ ਸਕਦੇ ਹੋ, ਸਾਨੂੰ ਇੱਥੇ ਨਹੀਂ ਲਿੰਕ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ। ਆਸ ਕਰਦੇ ਹਾਂ ਕਿ ਤੁਸੀਂ ਇਹ ਲੱਭ ਲਵੋਗੇ!\n\nਤੁਹਾਡੇ ਯੋਗਦਾਨ ਵਾਸਤੇ ਇੱਕ ਵਾਰ ਫੇਰ ਧੰਨਵਾਦ ਹੈ। + + ਸੰਰਚਨਾ ਐਕਸਪੋਰਟ ਕਰਨ ਨੂੰ ਅਸਮਰੱਥ ਕਰੋ ਸੰਰਚਨਾ ਐਕਸਪੋਰਟ ਕਰਨ ਉੱਤੇ ਰੋਕ ਲਾਉਣ ਨਾਲ ਪ੍ਰਾਈਵੇਟ ਕੁੰਜੀਆਂ ਲਈ ਪਹੁੰਚ ਘਟੇਗੀ DNS ਸਰਵਰ diff --git a/ui/src/main/res/values-pl-rPL/strings.xml b/ui/src/main/res/values-pl-rPL/strings.xml index 1a0f0fad..8ae6a172 100644 --- a/ui/src/main/res/values-pl-rPL/strings.xml +++ b/ui/src/main/res/values-pl-rPL/strings.xml @@ -133,9 +133,8 @@ Wybierz dysk pamięci Zainstaluj narzędzie do zarządzania plikami, aby przeglądać pliki Dodaj tunel, aby rozpocząć - ♥ Wpłać na rzecz projektu WireGuard - Każdy wkład pomaga - Dziękujemy za wsparcie projektu WireGuard!\n\nNiestety, ze względu na zasady Google, nie możemy umieszczać linków do części strony projektu, w której możesz przekazać darowiznę. Mamy nadzieję, że uda Ci się to rozgryźć!\n\nJeszcze raz dziękujemy za Twój wkład. + + Wyłącz eksportowanie konfiguracji Wyłączenie eksportowania konfiguracji sprawi, że klucze prywatne będą mniej dostępne Serwery DNS diff --git a/ui/src/main/res/values-pt-rBR/strings.xml b/ui/src/main/res/values-pt-rBR/strings.xml index d3a14455..bcf42d2a 100644 --- a/ui/src/main/res/values-pt-rBR/strings.xml +++ b/ui/src/main/res/values-pt-rBR/strings.xml @@ -107,9 +107,8 @@ Selecione uma unidade de armazenamento Por favor, instale um utilitário de gerenciamento de arquivos para procurar arquivos Adicione um túnel para começar - ♥️ Doar para o projeto WireGuard - Todas as contribuições ajudam - Obrigado por apoiar o Projeto WireGuard!\n\nInfelizmente, devido às políticas do Google, não temos permissão para vincular a parte da página do projeto onde você pode fazer uma doação. Esperamos que você consiga descobrir isso!\n\nObrigado novamente pela sua contribuição. + + Desativar exportação de configuração Desativar a exportação de configuração torna as chaves privadas menos acessíveis Servidores DNS diff --git a/ui/src/main/res/values-ro-rRO/strings.xml b/ui/src/main/res/values-ro-rRO/strings.xml index 16ee62f0..c49a8827 100644 --- a/ui/src/main/res/values-ro-rRO/strings.xml +++ b/ui/src/main/res/values-ro-rRO/strings.xml @@ -120,9 +120,8 @@ Selectează o unitate de stocare Instalează un serviciu de administrare a fișierelor pentru a căuta fișiere Adaugă un tunel pentru a începe - ♥ Donează pentru proiectul WireGuard - Fiecare contribuţie ajută - Vă mulțumim pentru sprijinul acordat Proiectului WireGuard!\n\nDin păcate, din cauza politicilor Google, nu avem voie să punem un link către pagina web a proiectului unde poți face o donație. Sperăm că vă puteți descurca!\n\nMulțumim din nou pentru contribuție. + + Dezactivează exportarea configurației Dezactivarea exportării configurației face mai puțin accesibile cheile private Servere DNS diff --git a/ui/src/main/res/values-ru/strings.xml b/ui/src/main/res/values-ru/strings.xml index 231ca930..3e5a6a83 100644 --- a/ui/src/main/res/values-ru/strings.xml +++ b/ui/src/main/res/values-ru/strings.xml @@ -133,9 +133,8 @@ Выберите накопитель Пожалуйста, установите утилиту управления файлами для их просмотра Добавьте туннель, чтобы начать - ♥ Пожертвовать проекту WireGuard - Каждое пожертвование помогает - Спасибо за поддержку проекта WireGuard!\n\nК сожалению, из-за политики Google, нельзя размещать ссылку на тот раздел сайта проекта, где можно сделать пожертвование. Надеемся, вы сможете разобраться самостоятельно!\n\nЕщё раз спасибо за ваш вклад. + + Отключить экспорт конфигурации Отключение экспорта конфигурации делает приватные ключи менее доступными DNS-серверы diff --git a/ui/src/main/res/values-sl/strings.xml b/ui/src/main/res/values-sl/strings.xml index f2ca4f44..b4a452be 100644 --- a/ui/src/main/res/values-sl/strings.xml +++ b/ui/src/main/res/values-sl/strings.xml @@ -133,9 +133,8 @@ Izberite podatkovni pogon Prosim namesti orodje za upravljanje datotek za njihov ogled Za začetek dodaj tunel - ♥ Doniraj za projekt WireGuard - Vsak prispevek šteje - Hvala, ker podpirate projekt WireGuard!\n\nŽal zaradi Googlove politike ne smemo objaviti povezave na del spletne strani projekta, kjer lahko opravite donacijo. Upamo, da se boste lahko znašli sami!\n\nŠe enkrat hvala za vaš prispevek. + + Onemogoči izvoz nastavitev Onemogočenje nastavitev za izvoz nastavitev naredi zasebne ključe manj dostopne Strežniki DNS diff --git a/ui/src/main/res/values-sv-rSE/strings.xml b/ui/src/main/res/values-sv-rSE/strings.xml index b477e3f0..7dead5d3 100644 --- a/ui/src/main/res/values-sv-rSE/strings.xml +++ b/ui/src/main/res/values-sv-rSE/strings.xml @@ -107,9 +107,8 @@ Välj en lagringsenhet Installera ett filhanteringsverktyg för att bläddra bland filer Lägg till en tunnel för att komma igång - ♥ Donera till WireGuard projektet - Varje bidrag hjälper - Tack för att du stödjer WireGuard projektet!\n\nPå grund av Googles policyer får vi dessvärre inte länka till den del av projektets webbsida där du kan göra en donation. Förhoppningsvis kan du hitta dit ändå!\n\nTack igen för ditt bidrag. + + Inaktivera export av konfiguration Inaktivering av konfigurationsexport gör privata nycklar mindre tillgängliga DNS-servrar diff --git a/ui/src/main/res/values-tr-rTR/strings.xml b/ui/src/main/res/values-tr-rTR/strings.xml index 3ffb7770..df190884 100644 --- a/ui/src/main/res/values-tr-rTR/strings.xml +++ b/ui/src/main/res/values-tr-rTR/strings.xml @@ -107,9 +107,8 @@ Bir depolama sürücüsü seçin Dosyalara göz atmak için lütfen bir dosya yönetim aracı yükleyin Başlamak için bir tünel ekleyin - ♥ WireGuard projesine bağış yap - Tüm bağışlarınız bizim için değerli - WireGuard projesini desteklediğiniz için teşekkür ederiz!\n\nNe yazık ki Google\'ın politikaları nedeniyle web sitemizin bağış yapabileceğiniz bölümüne bağlantı veremiyoruz. Umarız ilgili sayfayı kendiniz bulabilirsiniz.\n\nKatkılarınız için tekrar teşekkür ederiz. + + Yapılandırmayı dışa aktarmayı devre dışı bırak Yapıalandırmayı dışa aktarmayı devre dışı bırakırsanız özel anahtarlara erişmek zorlaşır DNS sunucuları diff --git a/ui/src/main/res/values-uk-rUA/strings.xml b/ui/src/main/res/values-uk-rUA/strings.xml index 089546e8..6efa9feb 100644 --- a/ui/src/main/res/values-uk-rUA/strings.xml +++ b/ui/src/main/res/values-uk-rUA/strings.xml @@ -133,9 +133,8 @@ Виберіть диск зберігання Будь ласка, встановіть провідник для перегляду файлів Додайте тунель, щоб почати - ♥️ Пожертвуйте на проект WireGuard - Кожен внесок допомагає - Дякуємо за підтримку проекту WireGuard!\n\nНа жаль, через політику Google нам заборонено розміщувати посилання на веб-сторінку проекту, де можна зробити пожертву. Сподіваємося на розуміння!\n\nЩе раз дякую за ваш внесок. + + Вимкнути експорт конфігурації Вимкнення експорту налаштувань робить приватні ключі менш доступними DNS-сервери diff --git a/ui/src/main/res/values-vi-rVN/strings.xml b/ui/src/main/res/values-vi-rVN/strings.xml index 79d8d6c3..5c83fa62 100644 --- a/ui/src/main/res/values-vi-rVN/strings.xml +++ b/ui/src/main/res/values-vi-rVN/strings.xml @@ -94,9 +94,8 @@ Chọn bộ lưu trữ Vui lòng cài đặt tệp tiện ích lưu trữ để tìm kiếm các tệp Thêm một tunnel để bắt đầu - ❤️ Đóng góp cho Dự án Wireguard - Mọi đóng góp đều giúp ích - Cảm ơn bạn đã ủng hộ WireGuard!\n\nThật tiếc, dựa trên điều khoản của Google, chúng tôi không thể đưa vào liên kết dẫn đến trang đóng góp ở trang chủ của dự án. Mong rằng bạn có thể tìm cách cho việc này!\n\nXin cảm ơn bạn một lần nữa vì đã đóng góp. + + Vô hiệu hóa xuất cấu hình Vô hiệu hóa xuất cấu hình sẽ giúp giảm khả năng truy cập vào private keys DNS servers diff --git a/ui/src/main/res/values-zh-rCN/strings.xml b/ui/src/main/res/values-zh-rCN/strings.xml index 7757e2fe..a1b72b9f 100644 --- a/ui/src/main/res/values-zh-rCN/strings.xml +++ b/ui/src/main/res/values-zh-rCN/strings.xml @@ -94,9 +94,8 @@ 选择一个存储驱动器 请安装一个文件管理工具以浏览文件 添加第一条网络隧道 - ♥ 为 WireGuard 捐赠 - 无论多寡,聚沙成塔 - 感谢您对 WireGuard 项目的支持!\n\n只可惜,受谷歌的政策所限,我们不能在此展示项目捐赠页面的链接,还望您自行访问捐赠页面!\n\n再次感谢您的贡献。 + + 禁止导出配置 禁止导出配置可降低私钥泄露的风险 DNS 服务器 diff --git a/ui/src/main/res/values-zh-rTW/strings.xml b/ui/src/main/res/values-zh-rTW/strings.xml index 332feded..b6daa120 100644 --- a/ui/src/main/res/values-zh-rTW/strings.xml +++ b/ui/src/main/res/values-zh-rTW/strings.xml @@ -94,9 +94,8 @@ 選擇一個儲存裝置 請安裝一個檔案管理程式以便瀏覽檔案 新增第一個通道 - ♥ 捐贈給 WireGuard 專案 - 任何的貢獻都能幫助我們 - 感謝您支援 Wireguard 計畫!\n\n由於 Google 的政策不允許我們將計畫官網的捐款連結放在應用程式中,希望您能自行造訪我們的官網來進行捐款!\n\n再次感謝您的貢獻。 + + 禁止匯出設定檔 禁止匯出設定檔可以降低私鑰被存取的機會 DNS 伺服器 diff --git a/ui/src/main/res/values/ic_launcher_background.xml b/ui/src/main/res/values/ic_launcher_background.xml index 500aaabb..290ff3d1 100644 --- a/ui/src/main/res/values/ic_launcher_background.xml +++ b/ui/src/main/res/values/ic_launcher_background.xml @@ -3,5 +3,5 @@ ~ SPDX-License-Identifier: Apache-2.0 --> - #871719 + #16233F diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index 32e797e6..8f26585c 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -66,7 +66,7 @@ External apps may toggle tunnels (advanced) Allow remote control apps Allowed IPs - WireGuard + Wire VPN %1$s\'s %2$s %s %1$s in %2$s @@ -93,7 +93,7 @@ Cannot rename configuration file “%s” Cannot save configuration for “%1$s”: %2$s Successfully saved configuration for “%s” - Create WireGuard Tunnel + Create Wire VPN Tunnel Cannot create local binary directory Cannot create file in downloads directory Create from scratch @@ -111,9 +111,6 @@ Select a storage drive Please install a file management utility to browse files Add a tunnel to get started - ♥ Donate to the WireGuard Project - Every contribution helps - Thank you for supporting the WireGuard Project!\n\nUnfortunately, due to Google\'s policies, we\'re not allowed to link to the part of the project webpage where you can make a donation. Hopefully you can figure this out!\n\nThanks again for your contribution. Disable config exporting Disabling config exporting makes private keys less accessible DNS servers @@ -180,8 +177,8 @@ number Cannot parse %1$s “%2$s” Peer - control WireGuard tunnels, enabling and disabling tunnels at will, potentially misdirecting Internet traffic - control WireGuard tunnels + control Wire VPN tunnels, enabling and disabling tunnels at will, potentially misdirecting Internet traffic + control Wire VPN tunnels Persistent keepalive Pre-shared key enabled @@ -203,7 +200,7 @@ Shell failed to start: %d Success. The application will now restart… Toggle All - Error toggling WireGuard tunnel: %s + Error toggling Wire VPN tunnel: %s wg and wg-quick are already installed Unable to install command-line tools (no root?) Install optional tools for scripting @@ -249,7 +246,7 @@ %1$s backend %2$s Checking %s backend version Unknown %s version - WireGuard for Android v%s + Wire VPN for Android v%s VPN service not authorized by user Unable to start Android VPN service Unable to export tunnels: %s diff --git a/ui/src/main/res/xml/preferences.xml b/ui/src/main/res/xml/preferences.xml index a7f9151f..1132dad5 100644 --- a/ui/src/main/res/xml/preferences.xml +++ b/ui/src/main/res/xml/preferences.xml @@ -4,7 +4,7 @@ --> - - - + + - - + + - +