Compare commits
43 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0d40947852 | |||
| 6038cfe319 | |||
| 514dba0b0e | |||
| da9a2de793 | |||
| d661476f35 | |||
| dde4bd13f4 | |||
| 734aebb3cf | |||
| c60ba8e103 | |||
| cb7d6a5fc2 | |||
| b4ea193de2 | |||
| 654932a9f0 | |||
| a46849de40 | |||
| 0818abf71b | |||
| 0673cf370a | |||
| e424b8eee0 | |||
| 8d76f0eeac | |||
| 991cd2a156 | |||
| 0e3a57f948 | |||
| 316abf0a3d | |||
| a671d8d01f | |||
| 9dbebc9b5d | |||
| 02b23ab3db | |||
| 5d73d4b17d | |||
| 0518c3efd3 | |||
| 0d75c849f0 | |||
| 28f7be0f4c | |||
| d588ba78c1 | |||
| a4bd4f4305 | |||
| b112194786 | |||
| 75132b917c | |||
| ee1cdc8433 | |||
| d57f129fa1 | |||
| 8b2cf8cb8d | |||
| 14687acc73 | |||
| 267332afa4 | |||
| 02ef31199b | |||
| bcc563aa83 | |||
| 2270e4aa53 | |||
| a4c474a405 | |||
| 85156ca77e | |||
| 937af2867a | |||
| a379307815 | |||
| b37c1088b0 |
42 changed files with 359 additions and 144 deletions
|
|
@ -3,9 +3,7 @@ name: Build Debug APKs
|
|||
on:
|
||||
push:
|
||||
branches:
|
||||
- '*'
|
||||
tags:
|
||||
- '*'
|
||||
- 'jmp'
|
||||
|
||||
jobs:
|
||||
build-debug:
|
||||
|
|
@ -37,12 +35,14 @@ jobs:
|
|||
uses: https://gitea.angry.im/actions/setup-android@v3
|
||||
|
||||
- name: Build Debug APKs
|
||||
run: ./gradlew --no-daemon assembleDebug :app:assembleDebugMagiskModuleDir
|
||||
run: ./gradlew --no-daemon :app-unpriv:assembleJmpDebug
|
||||
|
||||
- name: Build Debug Bundle
|
||||
run: ./gradlew --no-daemon :app-unpriv:bundleJmpDebug
|
||||
|
||||
- name: Copy Artifacts
|
||||
run: |
|
||||
find . -name 'app*-debug.apk' -exec cp {} . \;
|
||||
cp -r app/build/magisk/debug ./magisk-debug
|
||||
|
||||
- name: Upload APK Artifacts
|
||||
uses: https://gitea.angry.im/actions/upload-artifact@v3
|
||||
|
|
@ -50,10 +50,3 @@ jobs:
|
|||
name: Debug APKs
|
||||
compression-level: 0
|
||||
path: app*-debug.apk
|
||||
|
||||
- name: Upload Magisk Artifacts
|
||||
uses: https://gitea.angry.im/actions/upload-artifact@v3
|
||||
with:
|
||||
name: magisk-debug
|
||||
compression-level: 0
|
||||
path: magisk-debug
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ name: Build Release
|
|||
|
||||
on:
|
||||
push:
|
||||
tags: '*'
|
||||
tags: 'jmp-v*'
|
||||
|
||||
jobs:
|
||||
release:
|
||||
|
|
@ -33,17 +33,23 @@ jobs:
|
|||
- name: Setup Android SDK
|
||||
uses: https://gitea.angry.im/actions/setup-android@v3
|
||||
|
||||
- name: Build Release APK (Unprivileged / EasyEUICC only)
|
||||
run: ./gradlew --no-daemon :app-unpriv:assembleRelease
|
||||
- name: Build Release APK
|
||||
run: ./gradlew --no-daemon :app-unpriv:assembleJmpRelease
|
||||
|
||||
- name: Build Release Bundle
|
||||
run: ./gradlew --no-daemon :app-unpriv:bundleJmpRelease
|
||||
|
||||
- name: Copy Debug Symbols to Release Path
|
||||
run: cp app-unpriv/build/outputs/native-debug-symbols/release/native-debug-symbols.zip app-unpriv/build/outputs/apk/release/
|
||||
run: cp app-unpriv/build/outputs/native-debug-symbols/jmpRelease/native-debug-symbols.zip app-unpriv/build/outputs/apk/jmp/release/
|
||||
|
||||
- name: Copy Bundle to Release Path
|
||||
run: cp app-unpriv/build/outputs/bundle/jmpRelease/app-unpriv-jmp-release.aab app-unpriv/build/outputs/apk/jmp/release/
|
||||
|
||||
- name: Create Release
|
||||
uses: https://gitea.angry.im/actions/forgejo-release@v1
|
||||
with:
|
||||
direction: upload
|
||||
release-dir: app-unpriv/build/outputs/apk/release
|
||||
release-dir: app-unpriv/build/outputs/apk/jmp/release
|
||||
url: https://gitea.angry.im
|
||||
token: ${{ secrets.FORGEJO_TOKEN }}
|
||||
# Release details are expected to be edited manually
|
||||
|
|
|
|||
1
.idea/.name
generated
Normal file
1
.idea/.name
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
OpenEUICC
|
||||
2
.idea/compiler.xml
generated
2
.idea/compiler.xml
generated
|
|
@ -3,4 +3,4 @@
|
|||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel target="1.7" />
|
||||
</component>
|
||||
</project>
|
||||
</project>
|
||||
2
.idea/kotlinc.xml
generated
2
.idea/kotlinc.xml
generated
|
|
@ -3,4 +3,4 @@
|
|||
<component name="KotlinJpsPluginSettings">
|
||||
<option name="version" value="1.9.24" />
|
||||
</component>
|
||||
</project>
|
||||
</project>
|
||||
1
LAST_RELEASE_VERCODE
Normal file
1
LAST_RELEASE_VERCODE
Normal file
|
|
@ -0,0 +1 @@
|
|||
301
|
||||
124
README.md
124
README.md
|
|
@ -1,125 +1,11 @@
|
|||
<img src="https://gitea.angry.im/PeterCxy/OpenEUICC/media/branch/master/art/OpenEUICCBG.svg" width="512" height="300">
|
||||
JMP SIM Manager
|
||||
---
|
||||
|
||||
A fully free and open-source Local Profile Assistant implementation for Android devices.
|
||||
This is a soft fork and branded version of [OpenEUICC](https://gitea.angry.im/PeterCxy/OpenEUICC) for the purpose of the [JMP eSIM Adapter](https://jmp.chat/esim-adapter).
|
||||
|
||||
__Google is threatening to lock down the Android platform in 2026. OpenEUICC and EasyEUICC, as Free Software projects, will never accept Google's proposed third-party developer verification flow. Join us in Keeping Android Open at <https://keepandroidopen.org/>.__
|
||||
The eSIM Adapter is a removable eSIM chip that enables the use of downloaded eSIM profiles on any device with a modem. New profiles can be downloaded with the JMP SIM Manager on an Android device, or through a PC/SC smart card reader plugged into the Android device. [lpac](https://github.com/estkme-group/lpac) is available for use on a Linux/Windows/macOS PC.
|
||||
|
||||
There are two variants of this project, OpenEUICC and [EasyEUICC](https://easyeuicc.org):
|
||||
|
||||
| | OpenEUICC | EasyEUICC |
|
||||
|:------------------------------|:-------------------------------:|:-------------------:|
|
||||
| Privileged | Must be installed as system app | No |
|
||||
| Internal eSIM | Supported | Unsupported |
|
||||
| External eSIM [^1] | Supported | Supported |
|
||||
| USB Readers | Supported | Supported |
|
||||
| Requires allowlisting by eSIM | No | Yes -- except USB |
|
||||
| System Integration | Partial [^2] | No |
|
||||
| Minimum Android Version | Android 11 or higher | Android 9 or higher |
|
||||
|
||||
[^1]: Also known as "Removable eSIM"
|
||||
[^2]: Carrier Partner API unimplemented yet
|
||||
|
||||
Some side notes:
|
||||
|
||||
1. When privileged, OpenEUICC supports any eUICC chip that implements the [SGP.22] standard, internal or external.
|
||||
However, there is **no guarantee** that external (removable) eSIMs actually follow the standard.
|
||||
Please **DO NOT** submit bug reports for non-functioning removable eSIMs.
|
||||
They are **NOT** officially supported unless they also support / are supported by EasyEUICC, the unprivileged
|
||||
variant.
|
||||
2. Both variants support accessing eUICC chips through USB CCID readers,
|
||||
regardless of whether the chip contains the correct ARA-M hash to allow for unprivileged access.
|
||||
However, only `T=0` readers that use the standard [USB CCID protocol][usb-ccid] are supported.
|
||||
3. Prebuilt release-mode EasyEUICC apks can be downloaded [here][releases].
|
||||
For OpenEUICC, no official release is currently provided and only debug mode APKs and Magisk modules can be found in
|
||||
the [CI page][actions].
|
||||
4. For removable eSIM chip vendors: to have your chip supported by official builds of EasyEUICC when inserted,
|
||||
include the ARA-M hash `2A2FA878BC7C3354C2CF82935A5945A3EDAE4AFA`.
|
||||
|
||||
[sgp.22]: https://www.gsma.com/solutions-and-impact/technologies/esim/gsma_resources/sgp-22-v2-2-2/ "SGP.22 v2.2.2"
|
||||
|
||||
[usb-ccid]: https://en.wikipedia.org/wiki/CCID_%28protocol%29 "USB CCID Protocol"
|
||||
|
||||
[releases]: https://gitea.angry.im/PeterCxy/OpenEUICC/releases "EasyEUICC Releases"
|
||||
|
||||
[actions]: https://gitea.angry.im/PeterCxy/OpenEUICC/actions "OpenEUICC Actions"
|
||||
|
||||
**This project is Free Software licensed under GNU GPL v3, WITHOUT the "or later" clause.**
|
||||
Any modification and derivative work **MUST** be released under the SAME license, which means, at the very least, that
|
||||
the source code **MUST** be available upon request.
|
||||
|
||||
**If you are releasing a modification of this app, you are kindly asked to make changes to at least the app name and
|
||||
package name.**
|
||||
|
||||
# Building (Gradle)
|
||||
|
||||
Make sure you have all submodules cloned and updated by running
|
||||
|
||||
```shell
|
||||
git submodule update --init
|
||||
```
|
||||
|
||||
A file `keystore.properties` is required in the root directory. Template:
|
||||
|
||||
```ini
|
||||
storePassword=my-store-password
|
||||
keyPassword=my-password
|
||||
keyAlias=my-key
|
||||
unprivKeyPassword=my-unpriv-password
|
||||
unprivKeyAlias=my-unpriv-key
|
||||
storeFile=/path/to/android/keystore
|
||||
```
|
||||
|
||||
Note that you must have a Java-compatible keystore generated first.
|
||||
|
||||
To build the privileged OpenEUICC:
|
||||
|
||||
```shell
|
||||
./gradlew :app:assembleRelease
|
||||
```
|
||||
|
||||
For EasyEUICC:
|
||||
|
||||
```shell
|
||||
./gradlew :app-unpriv:assembleRelease
|
||||
```
|
||||
|
||||
# Building (AOSP)
|
||||
|
||||
There are two ways to include OpenEUICC in your AOSP-based system image:
|
||||
|
||||
1. Include this project and its [dependencies](https://gitea.angry.im/PeterCxy/android_prebuilts_openeuicc-deps) inside
|
||||
the AOSP tree.
|
||||
|
||||
- If inclusion in `manifest.xml` is required, remember to set the `sync-s` option to clone submodules.
|
||||
- The module name is `OpenEUICC`. You can include it in `PRODUCT_PACKAGES`, or simply build it standalone using `mm`.
|
||||
- Compilation of this project is **only** tested against the latest AOSP release version. The app itself should be
|
||||
compatible with older AOSP versions, but the source may not compile against an older AOSP source tree.
|
||||
|
||||
2. If compilation against AOSP source tree is not possible, consider [building with gradle](#building-gradle) and import
|
||||
the apk as a prebuilt.
|
||||
|
||||
- No official `Android.bp` is provided for this case but it should be straightforward to write.
|
||||
- You might want to include [`privapp_whitelist_im.angry.openeuicc.xml`] as well.
|
||||
|
||||
[`privapp_whitelist_im.angry.openeuicc.xml`]: privapp_whitelist_im.angry.openeuicc.xml "OpenEUICC Privapp Whitelist"
|
||||
|
||||
# FAQs
|
||||
|
||||
- Q: Do you provide prebuilt binaries for OpenEUICC? \
|
||||
A: Debug-mode APKs and Magisk modules are available continuously as an artifact of the [Actions] CI used by this
|
||||
project. However, these debug-mode APKs are **not** intended for inclusion inside system images, nor are they
|
||||
supported by the developer in any sense. If you are a custom ROM developer, either include the entire OpenEUICC
|
||||
repository in your AOSP source tree, or generate an APK using `gradle` and import that as a prebuilt system app. Note
|
||||
that you might want [`privapp_whitelist_im.angry.openeuicc.xml`] as well.
|
||||
|
||||
- Q: Can EasyEUICC manage my phone's internal eSIM? \
|
||||
A: No. For EasyEUICC to work, the eSIM chip MUST proactively grant access via its ARA-M field.
|
||||
|
||||
- Q: Removable eSIMs? Are they a joke? \
|
||||
A: No, even though the name "removable embedded SIM" can sound like an oxymoron. In fact, there can be many advantages
|
||||
to these chips compared to fully embedded ones. For example, the ability to transfer eSIM profiles without carrier
|
||||
support or approval, or the ability to use eSIM on devices that do not and may never get the support, such as Wi-Fi
|
||||
hotspots.
|
||||
Releases can be found in the [release page](https://gitea.angry.im/jmp-sim/jmp-sim-manager/releases).
|
||||
|
||||
# Copyright
|
||||
|
||||
|
|
|
|||
|
|
@ -30,13 +30,23 @@ android {
|
|||
|
||||
buildTypes {
|
||||
defaultConfig {
|
||||
versionNameSuffix = "-unpriv"
|
||||
//versionNameSuffix = "-unpriv"
|
||||
}
|
||||
release {
|
||||
isMinifyEnabled = false
|
||||
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
|
||||
}
|
||||
}
|
||||
flavorDimensions += "variant"
|
||||
productFlavors {
|
||||
create("jmp") {
|
||||
dimension = "variant"
|
||||
applicationId = "chat.jmp.simmanager"
|
||||
// See: Signing.kt
|
||||
signingConfig = signingConfigs.getByName("config")
|
||||
isDefault = true
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
|
|
@ -44,6 +54,15 @@ android {
|
|||
kotlinOptions {
|
||||
jvmTarget = "1.8"
|
||||
}
|
||||
packaging {
|
||||
jniLibs {
|
||||
useLegacyPackaging = true
|
||||
}
|
||||
}
|
||||
dependenciesInfo {
|
||||
// Disable dependency metadata -- breaks compatibility with F-Droid
|
||||
includeInApk = false
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
|
|
|||
14
app-unpriv/src/jmp/AndroidManifest.xml
Normal file
14
app-unpriv/src/jmp/AndroidManifest.xml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
<application
|
||||
tools:replace="android:icon,android:roundIcon,android:name"
|
||||
android:name="im.angry.openeuicc.JmpSimManagerApplication"
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher_jmp"
|
||||
android:roundIcon="@mipmap/ic_launcher_jmp"
|
||||
android:label="@string/app_name"
|
||||
android:supportsRtl="true"
|
||||
android:localeConfig="@xml/locale_config"
|
||||
android:theme="@style/Theme.OpenEUICC" />
|
||||
</manifest>
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
package im.angry.openeuicc
|
||||
|
||||
import im.angry.openeuicc.di.JmpAppContainer
|
||||
|
||||
class JmpSimManagerApplication : UnprivilegedOpenEuiccApplication() {
|
||||
override val appContainer by lazy {
|
||||
JmpAppContainer(this)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
package im.angry.openeuicc.di
|
||||
|
||||
import android.content.Context
|
||||
|
||||
class JmpAppContainer(context: Context) : UnprivilegedAppContainer(context) {
|
||||
override val uiComponentFactory by lazy {
|
||||
JmpUiComponentFactory()
|
||||
}
|
||||
|
||||
override val customizableTextProvider by lazy {
|
||||
JmpCustomizableTextProvider(context)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package im.angry.openeuicc.di
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import androidx.core.net.toUri
|
||||
import im.angry.easyeuicc.R
|
||||
|
||||
class JmpCustomizableTextProvider(private val context: Context) :
|
||||
UnprivilegedCustomizableTextProvider(context) {
|
||||
override val websiteUri: Uri
|
||||
get() = context.getString(R.string.purchase_sim_url).toUri()
|
||||
override val noEuiccExplanation: String
|
||||
get() = context.getString(R.string.no_euicc_jmp)
|
||||
override val profileSwitchingTimeoutMessage: String
|
||||
get() = context.getString(R.string.enable_disable_timeout_jmp)
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
package im.angry.openeuicc.di
|
||||
|
||||
import androidx.fragment.app.Fragment
|
||||
import im.angry.openeuicc.ui.JmpNoEuiccPlaceholderFragment
|
||||
|
||||
class JmpUiComponentFactory : UnprivilegedUiComponentFactory() {
|
||||
override fun createNoEuiccPlaceholderFragment(): Fragment =
|
||||
JmpNoEuiccPlaceholderFragment()
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
package im.angry.openeuicc.ui
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import im.angry.easyeuicc.R
|
||||
|
||||
class JmpNoEuiccPlaceholderFragment : Fragment() {
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
val view = inflater.inflate(
|
||||
R.layout.fragment_no_euicc_placeholder_jmp,
|
||||
container,
|
||||
false
|
||||
)
|
||||
|
||||
view.findViewById<View>(R.id.compatibility_check).setOnClickListener {
|
||||
startActivity(Intent(requireContext(), QuickCompatibilityActivity::class.java))
|
||||
}
|
||||
|
||||
view.findViewById<View>(R.id.purchase_esim).setOnClickListener {
|
||||
startActivity(
|
||||
Intent(
|
||||
Intent.ACTION_VIEW,
|
||||
Uri.parse(getString(R.string.purchase_sim_url))
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
return view
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="96dp"
|
||||
android:height="96dp"
|
||||
android:viewportHeight="100"
|
||||
android:viewportWidth="100">
|
||||
|
||||
<path
|
||||
android:pathData="M1,1 H99 V99 H1Z"
|
||||
android:strokeColor="?android:attr/colorAccent"
|
||||
android:strokeWidth="2">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:endColor="#130036"
|
||||
android:endX="50"
|
||||
android:endY="99"
|
||||
android:startColor="#7401CF"
|
||||
android:startX="50"
|
||||
android:startY="1"
|
||||
android:type="linear" />
|
||||
</aapt:attr>
|
||||
</path>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="210dp"
|
||||
android:height="210dp"
|
||||
android:viewportWidth="210"
|
||||
android:viewportHeight="210">
|
||||
<path
|
||||
android:pathData="m95.17,55.853 l-29.489,29.489v58.977c0,2.703 0.962,5.016 2.887,6.941 1.925,1.925 4.24,2.887 6.943,2.887h58.977c2.703,0 5.018,-0.963 6.943,-2.887 1.925,-1.925 2.887,-4.238 2.887,-6.941V65.681c0,-2.703 -0.962,-5.016 -2.887,-6.941 -1.925,-1.925 -4.24,-2.887 -6.943,-2.887z"
|
||||
android:strokeWidth="6.38014"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="m74.928,88.813c-2.065,4.027 -2.065,9.301 -2.065,19.845L72.863,112.425c0,10.544 0,15.819 2.065,19.845 1.816,3.543 4.715,6.423 8.279,8.228 1.245,0.629 2.606,1.068 4.203,1.369 0.85,0.161 1.456,0.915 1.434,1.775l-0.092,3.919c-0.016,0.726 0.866,1.102 1.386,0.589l4.111,-4.078c1.001,-0.992 2.36,-1.547 3.776,-1.539 1.567,0.016 3.275,0.016 5.151,0.016l3.789,0c10.61,0 15.917,0 19.969,-2.052 3.564,-1.805 6.463,-4.686 8.28,-8.228 2.065,-4.027 2.065,-9.301 2.065,-19.845l0,-3.766c0,-10.544 0,-15.819 -2.065,-19.845C133.397,85.271 130.498,82.39 126.934,80.585 122.882,78.533 117.575,78.533 106.965,78.533l-3.789,0c-10.61,0 -15.917,0 -19.969,2.052 -3.564,1.805 -6.463,4.686 -8.279,8.228z"
|
||||
android:fillType="evenOdd">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:startY="78.53296"
|
||||
android:startX="105.070526"
|
||||
android:endY="140.1298"
|
||||
android:endX="105.070526"
|
||||
android:type="linear">
|
||||
<item android:offset="0" android:color="#FF93D2FF"/>
|
||||
<item android:offset="0.229167" android:color="#FF4A9BD5"/>
|
||||
<item android:offset="0.7188" android:color="#FF398BD7"/>
|
||||
<item android:offset="1" android:color="#FF1960CC"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:pathData="m133.604,102.178c-2.77,-2.157 -6.732,-3.68 -11.453,-4.396 -0.9,-0.137 -1.816,0.104 -2.527,0.666 -0.709,0.562 -1.149,1.39 -1.21,2.289L117.351,116.109c-0.025,0.349 -0.514,0.349 -0.539,0.001L115.527,98.559c-0.126,-1.984 -1.621,-3.55 -3.646,-3.812 -2.039,-0.264 -3.903,0.88 -4.536,2.784 -0.021,0.06 -0.039,0.122 -0.055,0.182l-2.943,11.245c-0.156,0.594 -0.952,0.615 -1.139,0.03L99.778,98.186c-0.597,-1.909 -2.503,-3.118 -4.534,-2.875 -2.029,0.243 -3.573,1.864 -3.67,3.865l-0.598,13.168c-0.015,0.334 -0.475,0.361 -0.529,0.033L88.57,101.029c-0.293,-1.783 -1.997,-3.001 -3.798,-2.718 -1.804,0.283 -3.026,1.958 -2.73,3.743l2.693,16.277c0.293,2.377 -0.431,4.01 -1.941,4.369 -1.382,0.328 -3.305,-0.487 -4.267,-3.052 -0.64,-1.7 -2.545,-2.572 -4.258,-1.952 -1.712,0.62 -2.586,2.5 -1.95,4.195 1.72,4.584 5.305,6.921 8.8,7.339 1.115,0.132 2.22,0.071 3.252,-0.176 1.957,-0.466 3.83,-1.625 5.153,-3.445 0.275,-0.379 0.857,-0.148 0.836,0.327l-0.106,2.352c-0.075,1.665 1.249,3.076 2.957,3.158 1.71,0.074 3.155,-1.208 3.231,-2.873l0.731,-16.087c0.017,-0.381 0.527,-0.453 0.643,-0.091l2.295,7.229c0.521,1.664 2.064,2.799 3.843,2.837 0.014,-0 0.029,-0 0.041,-0 1.8,0.018 3.378,-1.088 3.933,-2.753 0.021,-0.06 0.037,-0.122 0.055,-0.182l1.745,-6.665c0.099,-0.372 0.619,-0.32 0.647,0.065l1.182,16.147c0.115,1.571 1.444,2.778 3.029,2.811 0.093,0.002 0.186,0.001 0.281,-0.005 1.706,-0.115 2.99,-1.554 2.867,-3.217 -0.025,-0.35 0.33,-0.578 0.625,-0.41 0.413,0.237 0.884,0.386 1.392,0.421 0.064,0.004 0.131,0.006 0.196,0.008 1.712,0.019 3.157,-1.285 3.277,-2.995l0.318,-4.59c0.037,-0.53 0.438,-0.952 0.945,-1 9.346,-0.858 13.079,-5.544 13.384,-9.605 0.224,-3.045 -1.287,-5.994 -4.264,-8.31zM125.167,113.511c-0.571,0.088 -1.075,-0.399 -1.034,-0.999l0.443,-6.428c0.044,-0.612 0.63,-1.022 1.188,-0.824 3.937,1.398 5.701,3.444 5.606,4.736 -0.091,1.235 -2.084,2.87 -6.204,3.514z"
|
||||
android:fillColor="#013255"
|
||||
android:fillAlpha="0.2"/>
|
||||
<path
|
||||
android:pathData="m134.639,100.182c-2.894,-2.156 -7.036,-3.677 -11.971,-4.39 -0.941,-0.137 -1.898,0.105 -2.642,0.667 -0.742,0.563 -1.201,1.391 -1.267,2.29l-1.118,15.373c-0.026,0.349 -0.537,0.349 -0.563,0.001L115.743,96.572c-0.131,-1.984 -1.693,-3.549 -3.81,-3.81 -2.131,-0.263 -4.081,0.882 -4.743,2.787 -0.022,0.06 -0.041,0.122 -0.058,0.182l-3.082,11.247c-0.163,0.594 -0.995,0.615 -1.191,0.03L99.278,96.207c-0.624,-1.909 -2.616,-3.117 -4.739,-2.873 -2.121,0.244 -3.736,1.866 -3.839,3.867l-0.631,13.168c-0.016,0.333 -0.497,0.361 -0.553,0.033L87.56,99.055c-0.306,-1.783 -2.086,-3 -3.97,-2.717 -1.886,0.284 -3.164,1.959 -2.856,3.744l2.807,16.276c0.305,2.377 -0.453,4.01 -2.032,4.37 -1.445,0.329 -3.455,-0.486 -4.459,-3.05 -0.669,-1.699 -2.66,-2.571 -4.45,-1.95 -1.79,0.621 -2.705,2.501 -2.041,4.196 1.796,4.583 5.543,6.919 9.196,7.335 1.165,0.132 2.321,0.07 3.4,-0.178 2.046,-0.467 4.005,-1.627 5.389,-3.448 0.288,-0.379 0.896,-0.149 0.873,0.327L89.306,126.313c-0.079,1.665 1.304,3.076 3.09,3.156 1.788,0.073 3.299,-1.209 3.379,-2.874l0.772,-16.088c0.018,-0.381 0.551,-0.454 0.672,-0.092l2.396,7.228c0.544,1.663 2.156,2.798 4.016,2.835 0.015,-0 0.03,-0 0.042,-0 1.882,0.017 3.533,-1.09 4.113,-2.755 0.022,-0.06 0.039,-0.122 0.058,-0.182l1.828,-6.666c0.103,-0.372 0.647,-0.32 0.676,0.065l1.228,16.146c0.119,1.571 1.508,2.778 3.166,2.81 0.097,0.001 0.194,0 0.294,-0.006 1.783,-0.116 3.126,-1.556 2.999,-3.218 -0.026,-0.35 0.345,-0.578 0.654,-0.41 0.431,0.237 0.924,0.386 1.455,0.42 0.067,0.004 0.137,0.006 0.205,0.008 1.79,0.018 3.301,-1.286 3.427,-2.997l0.335,-4.591c0.039,-0.53 0.458,-0.953 0.989,-1 9.771,-0.862 13.676,-5.551 13.996,-9.611 0.237,-3.045 -1.343,-5.993 -4.454,-8.308zM125.813,111.52c-0.597,0.088 -1.123,-0.398 -1.08,-0.998L125.2,104.093c0.046,-0.612 0.66,-1.022 1.242,-0.824 4.115,1.397 5.959,3.442 5.859,4.734 -0.096,1.235 -2.18,2.871 -6.488,3.517z"
|
||||
android:fillColor="#013255"
|
||||
android:fillAlpha="0.15"/>
|
||||
<path
|
||||
android:pathData="m134.722,99.167c-2.899,-2.15 -7.046,-3.666 -11.988,-4.378 -0.943,-0.136 -1.901,0.105 -2.646,0.666 -0.743,0.561 -1.203,1.387 -1.268,2.283l-1.121,15.33c-0.026,0.348 -0.538,0.348 -0.564,0.001l-1.336,-17.502c-0.131,-1.978 -1.695,-3.539 -3.815,-3.8 -2.134,-0.263 -4.087,0.879 -4.75,2.779 -0.022,0.06 -0.041,0.122 -0.058,0.182l-3.087,11.216c-0.163,0.592 -0.997,0.613 -1.193,0.03l-3.585,-10.77c-0.625,-1.904 -2.619,-3.108 -4.746,-2.864 -2.124,0.243 -3.742,1.861 -3.845,3.856l-0.633,13.132c-0.016,0.333 -0.498,0.36 -0.554,0.033l-1.959,-11.316c-0.306,-1.778 -2.089,-2.992 -3.975,-2.709 -1.889,0.283 -3.169,1.954 -2.86,3.734l2.81,16.231c0.305,2.371 -0.454,3.999 -2.035,4.358 -1.447,0.328 -3.46,-0.484 -4.466,-3.041 -0.67,-1.695 -2.663,-2.564 -4.456,-1.945 -1.793,0.619 -2.709,2.495 -2.044,4.184 1.799,4.57 5.551,6.899 9.209,7.314 1.167,0.132 2.325,0.07 3.405,-0.178 2.049,-0.466 4.011,-1.623 5.397,-3.438 0.288,-0.378 0.897,-0.148 0.875,0.326l-0.112,2.345c-0.08,1.66 1.306,3.067 3.094,3.147 1.79,0.073 3.304,-1.206 3.384,-2.866l0.774,-16.043c0.018,-0.38 0.552,-0.452 0.673,-0.092l2.399,7.208c0.544,1.659 2.159,2.79 4.022,2.827 0.015,-0 0.03,-0 0.042,-0 1.885,0.017 3.538,-1.087 4.119,-2.748 0.022,-0.06 0.039,-0.122 0.058,-0.182l1.831,-6.648c0.103,-0.371 0.648,-0.319 0.677,0.065l1.229,16.101c0.119,1.567 1.51,2.77 3.17,2.802 0.097,0.001 0.195,0 0.295,-0.006 1.786,-0.116 3.131,-1.551 3.003,-3.21 -0.026,-0.349 0.346,-0.577 0.655,-0.409 0.432,0.236 0.925,0.385 1.457,0.419 0.067,0.004 0.137,0.006 0.205,0.008 1.792,0.018 3.306,-1.283 3.432,-2.988l0.335,-4.578c0.039,-0.529 0.459,-0.95 0.99,-0.998 9.785,-0.86 13.696,-5.536 14.017,-9.585 0.237,-3.036 -1.345,-5.977 -4.459,-8.285zM125.883,110.474c-0.598,0.088 -1.125,-0.397 -1.082,-0.996l0.468,-6.41c0.046,-0.611 0.66,-1.019 1.244,-0.822 4.121,1.393 5.967,3.432 5.866,4.72 -0.096,1.231 -2.183,2.864 -6.497,3.507z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="m134.722,99.167c-2.898,-2.15 -7.046,-3.666 -11.988,-4.378 -0.943,-0.136 -1.901,0.105 -2.646,0.666 -0.743,0.561 -1.203,1.387 -1.268,2.283l-1.121,15.33c-0.026,0.348 -0.538,0.348 -0.564,0.001l-1.336,-17.502c-0.131,-1.978 -1.695,-3.539 -3.815,-3.8 -2.134,-0.263 -4.087,0.879 -4.75,2.779 -0.022,0.06 -0.041,0.122 -0.058,0.182l-3.087,11.216c-0.163,0.592 -0.997,0.613 -1.193,0.03l-3.585,-10.77c-0.624,-1.904 -2.619,-3.108 -4.746,-2.864 -2.124,0.243 -3.742,1.861 -3.845,3.856l-0.633,13.132c-0.016,0.333 -0.498,0.36 -0.554,0.033l-1.959,-11.316c-0.306,-1.778 -2.089,-2.992 -3.975,-2.709 -1.889,0.283 -3.169,1.954 -2.86,3.734l2.81,16.231c0.305,2.371 -0.454,3.999 -2.035,4.358 -1.447,0.328 -3.46,-0.484 -4.466,-3.041 -0.67,-1.695 -2.663,-2.564 -4.456,-1.945 -1.793,0.619 -2.709,2.495 -2.044,4.184 1.799,4.57 5.551,6.899 9.209,7.314 1.167,0.132 2.325,0.07 3.405,-0.178 2.049,-0.466 4.011,-1.623 5.397,-3.438 0.288,-0.378 0.897,-0.148 0.875,0.326l-0.112,2.345c-0.08,1.66 1.306,3.067 3.094,3.147 1.79,0.073 3.304,-1.206 3.384,-2.866l0.774,-16.043c0.018,-0.38 0.552,-0.452 0.673,-0.092l2.399,7.208c0.545,1.659 2.159,2.79 4.022,2.827 0.015,-0 0.03,-0 0.042,-0 1.885,0.017 3.538,-1.087 4.119,-2.748 0.022,-0.06 0.039,-0.122 0.058,-0.182l1.831,-6.648c0.103,-0.371 0.648,-0.319 0.677,0.065l1.229,16.101c0.119,1.567 1.51,2.77 3.17,2.802 0.097,0.001 0.195,0 0.295,-0.006 1.786,-0.116 3.131,-1.551 3.003,-3.21 -0.026,-0.349 0.346,-0.577 0.655,-0.409 0.432,0.236 0.925,0.385 1.457,0.419 0.067,0.004 0.137,0.006 0.205,0.008 1.792,0.018 3.306,-1.283 3.432,-2.988l0.335,-4.578c0.039,-0.529 0.459,-0.95 0.99,-0.998 9.786,-0.86 13.697,-5.536 14.017,-9.585 0.237,-3.036 -1.345,-5.977 -4.46,-8.285zM125.882,110.474c-0.598,0.088 -1.125,-0.397 -1.081,-0.996l0.468,-6.41c0.046,-0.611 0.661,-1.019 1.244,-0.822 4.121,1.393 5.967,3.432 5.867,4.72 -0.096,1.231 -2.183,2.864 -6.497,3.507z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:startY="91.803"
|
||||
android:startX="104.54753"
|
||||
android:endY="128.90585"
|
||||
android:endX="104.94141"
|
||||
android:type="linear">
|
||||
<item android:offset="0" android:color="#00FFFFFF"/>
|
||||
<item android:offset="1" android:color="#3D8DCDFC"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="210dp"
|
||||
android:height="210dp"
|
||||
android:viewportWidth="210"
|
||||
android:viewportHeight="210">
|
||||
<path
|
||||
android:pathData="M94.373,52.662 L62.492,84.064v60.254c0,3.46 1.368,6.745 3.82,9.197 2.453,2.453 5.739,3.822 9.199,3.822h58.977c3.46,0 6.746,-1.369 9.199,-3.822 2.452,-2.452 3.82,-5.737 3.82,-9.197L147.508,65.682c0,-3.46 -1.368,-6.745 -3.82,-9.197 -2.453,-2.453 -5.739,-3.822 -9.199,-3.822zM96.492,59.043h37.996c1.946,0 3.291,0.556 4.688,1.953 1.397,1.397 1.953,2.74 1.953,4.686v78.637c0,1.946 -0.556,3.288 -1.953,4.686 -1.397,1.397 -2.742,1.953 -4.688,1.953L75.512,150.957c-1.946,0 -3.291,-0.556 -4.688,-1.953 -1.397,-1.397 -1.953,-2.74 -1.953,-4.686L68.871,86.662Z"
|
||||
android:strokeWidth="0"
|
||||
android:fillColor="#000000"
|
||||
android:strokeColor="#00000000"/>
|
||||
<path
|
||||
android:pathData="M103.176,78.533C92.566,78.533 87.259,78.534 83.207,80.586C79.643,82.391 76.744,85.27 74.928,88.813C72.863,92.839 72.863,98.114 72.863,108.658L72.863,112.424C72.863,113.247 72.872,113.844 72.873,114.605C74.589,114.163 76.412,115.012 77.047,116.619C78.053,119.176 80.067,119.988 81.514,119.66C83.095,119.301 83.854,117.672 83.549,115.301L80.738,99.07C80.43,97.29 81.709,95.619 83.598,95.336C85.484,95.053 87.268,96.267 87.574,98.045L89.533,109.361C89.589,109.688 90.07,109.661 90.086,109.328L90.719,96.195C90.822,94.2 92.44,92.583 94.564,92.34C96.691,92.097 98.686,93.302 99.311,95.205L102.895,105.975C103.09,106.558 103.924,106.537 104.088,105.945L107.176,94.729C107.193,94.669 107.211,94.607 107.232,94.547C107.896,92.647 109.848,91.505 111.982,91.768C114.102,92.028 115.666,93.59 115.797,95.568L117.135,113.07C117.161,113.417 117.671,113.416 117.697,113.068L118.818,97.738C118.884,96.842 119.345,96.016 120.088,95.455C120.833,94.894 121.792,94.653 122.734,94.789C127.677,95.501 131.823,97.018 134.721,99.168C135.733,99.918 136.566,100.738 137.244,101.604C137.145,95.529 136.755,91.82 135.213,88.813C133.397,85.27 130.498,82.391 126.934,80.586C122.882,78.534 117.574,78.533 106.965,78.533L103.176,78.533zM126.293,102.199C125.784,102.154 125.31,102.534 125.27,103.068L124.801,109.479C124.757,110.077 125.285,110.563 125.883,110.475C130.196,109.831 132.283,108.198 132.379,106.967C132.48,105.678 130.635,103.639 126.514,102.246C126.441,102.221 126.366,102.206 126.293,102.199zM96.871,109.143C96.72,109.163 96.581,109.275 96.572,109.465L95.799,125.508C95.719,127.168 94.206,128.448 92.416,128.375C90.628,128.295 89.241,126.887 89.32,125.227L89.434,122.883C89.456,122.409 88.847,122.179 88.559,122.557C87.173,124.372 85.211,125.528 83.162,125.994C82.081,126.241 80.923,126.303 79.756,126.172C77.349,125.899 74.907,124.791 73.002,122.768C73.2,126.957 73.688,129.851 74.928,132.27C76.744,135.812 79.643,138.693 83.207,140.498C84.452,141.127 85.813,141.566 87.41,141.867C88.26,142.029 88.867,142.782 88.846,143.643L88.754,147.563C88.738,148.289 89.619,148.664 90.139,148.15L94.25,144.072C95.251,143.08 96.61,142.527 98.025,142.535C99.592,142.551 101.3,142.551 103.176,142.551L106.965,142.551C117.574,142.551 122.882,142.55 126.934,140.498C130.498,138.693 133.397,135.812 135.213,132.27C137.278,128.243 137.279,122.968 137.279,112.424L137.279,111.916C135.219,114.403 131.38,116.491 125.164,117.037C124.633,117.085 124.213,117.506 124.174,118.035L123.838,122.613C123.711,124.319 122.199,125.62 120.406,125.602C120.339,125.6 120.269,125.598 120.201,125.594C119.669,125.56 119.176,125.412 118.744,125.176C118.435,125.008 118.064,125.235 118.09,125.584C118.217,127.242 116.872,128.677 115.086,128.793C114.986,128.799 114.89,128.8 114.793,128.799C113.133,128.767 111.74,127.565 111.621,125.998L110.393,109.896C110.364,109.512 109.82,109.461 109.717,109.832L107.885,116.479C107.865,116.538 107.85,116.602 107.828,116.662C107.247,118.323 105.594,119.425 103.709,119.408C103.697,119.408 103.681,119.41 103.666,119.41C101.804,119.373 100.189,118.241 99.645,116.582L97.246,109.373C97.186,109.193 97.022,109.122 96.871,109.143z"
|
||||
android:strokeWidth="0.642739"
|
||||
android:fillColor="#000000"/>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/no_euicc_placeholder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="40dp"
|
||||
android:layout_marginEnd="40dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/no_euicc_jmp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/compatibility_check"
|
||||
android:text="@string/compatibility_check"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
app:layout_constraintTop_toBottomOf="@id/no_euicc_placeholder"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/purchase_esim"
|
||||
android:text="@string/purchase_esim"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
app:layout_constraintTop_toBottomOf="@id/compatibility_check"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
6
app-unpriv/src/jmp/res/mipmap/ic_launcher_jmp.xml
Normal file
6
app-unpriv/src/jmp/res/mipmap/ic_launcher_jmp.xml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<foreground android:drawable="@drawable/ic_launcher_jmp_foreground"/>
|
||||
<background android:drawable="@drawable/ic_launcher_jmp_background"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_jmp_monochrome"/>
|
||||
</adaptive-icon>
|
||||
6
app-unpriv/src/jmp/res/values-ja/strings.xml
Normal file
6
app-unpriv/src/jmp/res/values-ja/strings.xml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="no_euicc_jmp">このデバイスで JMP eSIM Adapter を見つかりません。JMP eSIM Adapter をデバイスに挿入、または USB リーダーに経由し接続してください。</string>
|
||||
<string name="purchase_esim">JMP eSIM Adapter を購入</string>
|
||||
<string name="enable_disable_timeout_jmp">eSIM チップがプロファイルの切り替えの待機中にタイムアウトしました。 SIM ツールキットの Tools -> Reboot を選択し、eSIM Adapter をリフレッシュしてください。</string>
|
||||
</resources>
|
||||
6
app-unpriv/src/jmp/res/values-zh-rCN/strings.xml
Normal file
6
app-unpriv/src/jmp/res/values-zh-rCN/strings.xml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="no_euicc_jmp">没有在此设备上发现 JMP eSIM Adapter。请将其插入本设备或 USB 读卡器。</string>
|
||||
<string name="purchase_esim">购入 JMP eSIM Adapter</string>
|
||||
<string name="enable_disable_timeout_jmp">等待 eSIM 芯片切换配置文件超时。请使用 SIM Toolkit 中的 Tools -> Reboot 手动刷新 eSIM Adapter。</string>
|
||||
</resources>
|
||||
10
app-unpriv/src/jmp/res/values/strings.xml
Normal file
10
app-unpriv/src/jmp/res/values/strings.xml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" translatable="false">JMP SIM Manager</string>
|
||||
<string name="no_euicc_jmp">No JMP eSIM Adapter found on this device. Insert one into the device or through a USB card reader.</string>
|
||||
<string name="purchase_esim">Buy JMP eSIM Adapter</string>
|
||||
<string name="purchase_sim_url" translatable="false">https://jmp.chat/esim-adapter</string>
|
||||
<string name="pref_info_source_code_url" translatable="false">https://gitea.angry.im/jmp-sim/jmp-sim-manager</string>
|
||||
|
||||
<string name="enable_disable_timeout_jmp">Timed out waiting for the eSIM chip to switch profiles. Please manually refresh the eSIM adapter by going to SIM Toolkit, and select Tools -> Reboot.</string>
|
||||
</resources>
|
||||
|
|
@ -7,7 +7,7 @@ import im.angry.openeuicc.util.*
|
|||
import kotlinx.coroutines.runBlocking
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
class UnprivilegedOpenEuiccApplication : OpenEuiccApplication() {
|
||||
open class UnprivilegedOpenEuiccApplication : OpenEuiccApplication() {
|
||||
override val appContainer by lazy {
|
||||
UnprivilegedAppContainer(this)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package im.angry.openeuicc.di
|
|||
import android.content.Context
|
||||
import im.angry.openeuicc.util.*
|
||||
|
||||
class UnprivilegedAppContainer(context: Context) : DefaultAppContainer(context) {
|
||||
open class UnprivilegedAppContainer(context: Context) : DefaultAppContainer(context) {
|
||||
override val uiComponentFactory by lazy {
|
||||
UnprivilegedUiComponentFactory()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import im.angry.openeuicc.util.*
|
|||
import javax.crypto.Mac
|
||||
import javax.crypto.spec.SecretKeySpec
|
||||
|
||||
class UnprivilegedCustomizableTextProvider(private val context: Context) : DefaultCustomizableTextProvider(context) {
|
||||
open class UnprivilegedCustomizableTextProvider(private val context: Context) : DefaultCustomizableTextProvider(context) {
|
||||
override val websiteUri: Uri
|
||||
get() {
|
||||
val parts = arrayOf(
|
||||
|
|
|
|||
|
|
@ -24,4 +24,4 @@ open class UnprivilegedUiComponentFactory : DefaultUiComponentFactory() {
|
|||
|
||||
open fun createQuickCompatibilityFragment(): Fragment =
|
||||
QuickCompatibilityFragment()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
1
fastlane/metadata/android/en-US/changelogs/278.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/278.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
Initial public release of JMP SIM Manager.
|
||||
1
fastlane/metadata/android/en-US/changelogs/280.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/280.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
Initial Google Play + F-Droid release of JMP SIM Manager.
|
||||
3
fastlane/metadata/android/en-US/changelogs/283.txt
Normal file
3
fastlane/metadata/android/en-US/changelogs/283.txt
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
- Added support for USB card readers (standard T=0 CCID protocol required)
|
||||
- UI improvements (partially to accomodate USB readers)
|
||||
- Fixed numerous crashes and stability issues
|
||||
1
fastlane/metadata/android/en-US/changelogs/285.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/285.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
Fix JNI crash on armv7 (32 bit) devices
|
||||
3
fastlane/metadata/android/en-US/changelogs/287.txt
Normal file
3
fastlane/metadata/android/en-US/changelogs/287.txt
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
- Fixes compatibility on some devices which require slower APDU commands (e.g. Google Pixel series)
|
||||
- Optimize long-running tasks (downloading, switching, etc.) to rely on true background services
|
||||
- Miscellaneous bugfixes
|
||||
4
fastlane/metadata/android/en-US/changelogs/292.txt
Normal file
4
fastlane/metadata/android/en-US/changelogs/292.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
- Brand new eSIM download wizard, with more detailed download progress and error diagnosis.
|
||||
- New menu option inside the main UI which brings up detailed information about each eSIM adapter, including their EID, free NVRAM space etc.
|
||||
- i18n translation for zh_CN and ja_JP (inherited from contribution to OpenEUICC)
|
||||
- Many miscellaneous bugfixes and improvements, including ones for USB readers.
|
||||
4
fastlane/metadata/android/en-US/changelogs/294.txt
Normal file
4
fastlane/metadata/android/en-US/changelogs/294.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
- Brand new eSIM download wizard, with more detailed download progress and error diagnosis.
|
||||
- New menu option inside the main UI which brings up detailed information about each eSIM adapter, including their EID, free NVRAM space etc.
|
||||
- i18n translation for zh_CN and ja_JP (inherited from contribution to OpenEUICC)
|
||||
- Many miscellaneous bugfixes and improvements, including ones for USB readers.
|
||||
7
fastlane/metadata/android/en-US/changelogs/299.txt
Normal file
7
fastlane/metadata/android/en-US/changelogs/299.txt
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
Many updates since the last release:
|
||||
|
||||
- Simplified compatibility checks without all the confusing "maybe"s
|
||||
- The eSIM download wizard now displays short, human-readable error messages whenever possible
|
||||
- UI no longer extends into navigation bar / status bar on some devices
|
||||
- Support for (potentially) upcoming eUICC variants with multiple Secure Elements
|
||||
- ...and a lot of bugfixes and improvements!
|
||||
4
fastlane/metadata/android/en-US/changelogs/301.txt
Normal file
4
fastlane/metadata/android/en-US/changelogs/301.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
- Full support for multi-SE eUICC chips via USB readers
|
||||
- Support for (some) TPDU-only USB UICC readers (thanks to Vladimir Serbinenko) with an option to force TPDU mode globally
|
||||
- You can now paste the full `LPA:` string into the input textbox for SM-DP+ address; that will automatically fill out the entire download form
|
||||
- Several UI / translation fixes and improvements, such as the bug where the wrong slot is sometimes selected when you click the `+` button from the main UI
|
||||
5
fastlane/metadata/android/en-US/full_description.txt
Normal file
5
fastlane/metadata/android/en-US/full_description.txt
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
JMP SIM Manager is a fully free and open-source companion app for the JMP eSIM Adapter. The JMP eSIM Adapter is a removable eSIM chip that enables any device, not just those with included eSIM chips, to make use of downloadable eSIMs.
|
||||
|
||||
JMP SIM Manager provides management features such as adding, deleting, enabling, and disabling eSIM profiles for the adapter, and is the easiest option to manage your eSIM Adapter on compatible Android host devices. The manager app is <strong>not</strong> required once a profile has been downloaded and enabled on the adapter. In other words, you can use a compatible Android device to download your eSIM profile of choice onto the adapter, and then insert the adapter into any device -- Wi-Fi hotspots, dumb phones, laptops -- and the adapter will simply appear as a regular SIM card to those devices.
|
||||
|
||||
This app also includes a quick compatibility check to determine whether your Android device can be used to manage a JMP eSIM Adapter. Although the eSIM Adapter will work with almost any device once an eSIM profile is loaded, management requires some specific features that may not be present on a small percentage of Android devices. However, even if your Android device is deemed incompatible, you can still manage the adapter from another Android device, using a PC/SC reader on a PC, or, as a final fallback, through the SIM Toolkit menu along with a self-hostable remote server to handle TLS termination.
|
||||
BIN
fastlane/metadata/android/en-US/images/icon.png
Normal file
BIN
fastlane/metadata/android/en-US/images/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 52 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
Normal file
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 60 KiB |
1
fastlane/metadata/android/en-US/short_description.txt
Normal file
1
fastlane/metadata/android/en-US/short_description.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
Companion app for the JMP eSIM Adapter
|
||||
1
fastlane/metadata/android/en-US/title.txt
Normal file
1
fastlane/metadata/android/en-US/title.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
JMP SIM Manager
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
LOCAL_PATH := $(call my-dir)
|
||||
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
|
||||
|
||||
# function to find all *.c files under a directory
|
||||
define all-c-files-under
|
||||
|
|
@ -33,6 +32,7 @@ include $(BUILD_STATIC_LIBRARY)
|
|||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := lpac-jni
|
||||
LOCAL_STATIC_LIBRARIES := lpac-euicc
|
||||
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
|
||||
LOCAL_C_INCLUDES := \
|
||||
$(LOCAL_PATH)/lpac
|
||||
LOCAL_SRC_FILES := \
|
||||
|
|
|
|||
14
prepare_release.sh
Executable file
14
prepare_release.sh
Executable file
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
new_version=$(($(git rev-list --first-parent --count HEAD) + 1))
|
||||
echo "New version code will be: ${new_version}"
|
||||
echo "${new_version}" > ./LAST_RELEASE_VERCODE
|
||||
|
||||
changelog_path="./fastlane/metadata/android/en-US/changelogs"
|
||||
mkdir -p ${changelog_path}
|
||||
changelog_file="${changelog_path}/${new_version}.txt"
|
||||
echo "Creating new changelog: ${changelog_file}"
|
||||
touch "${changelog_file}"
|
||||
echo "Please populate the changelog above, then create ONE commit, and tag the release."
|
||||
Loading…
Add table
Add a link
Reference in a new issue