Compare commits
36 commits
Author | SHA1 | Date | |
---|---|---|---|
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 |
37 changed files with 335 additions and 90 deletions
|
@ -1,7 +1,7 @@
|
|||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'master'
|
||||
- 'jmp'
|
||||
|
||||
jobs:
|
||||
build-debug:
|
||||
|
@ -33,7 +33,10 @@ jobs:
|
|||
uses: https://gitea.angry.im/actions/setup-android@v3
|
||||
|
||||
- name: Build Debug APKs
|
||||
run: ./gradlew --no-daemon assembleDebug
|
||||
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 {} . \;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
on:
|
||||
push:
|
||||
tags: '*'
|
||||
tags: 'jmp-v*'
|
||||
|
||||
jobs:
|
||||
release:
|
||||
|
@ -31,17 +31,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
|
1
LAST_RELEASE_VERCODE
Normal file
1
LAST_RELEASE_VERCODE
Normal file
|
@ -0,0 +1 @@
|
|||
294
|
84
README.md
84
README.md
|
@ -1,85 +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).
|
||||
|
||||
There are two variants of this project:
|
||||
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.
|
||||
|
||||
- OpenEUICC: The full-fledged privileged variant.
|
||||
- Due to its privilege requirement, OpenEUICC must be placed inside `/system/priv-app` and be signed with the platform certificate.
|
||||
- The preferred way to including OpenEUICC in a system image is to [build it along with AOSP](#building-aosp).
|
||||
- __Note__: 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.
|
||||
- EasyEUICC: Unprivileged version that can run as a user app.
|
||||
- This version supports two modes of operation:
|
||||
1. Inserted, removable eSIMs: Due to obvious security requirements, EasyEUICC is only able to access eSIM chips whose [ARF/ARA](https://source.android.com/docs/core/connect/uicc#arf) contains the hash of EasyEUICC's signing certificate.
|
||||
2. USB CCID Card Readers: Only `T=0` readers that use the standard [USB CCID protocol](https://en.wikipedia.org/wiki/CCID_(protocol)) are supported. In this mode, EasyEUICC can access any eSIM chip loaded in the card reader regardless of their ARF/ARA, as long as they implement the [SGP.22 standard](https://www.gsma.com/solutions-and-impact/technologies/esim/wp-content/uploads/2021/07/SGP.22-v2.3.pdf).
|
||||
- Prebuilt release-mode EasyEUICC apks can be downloaded [here](https://gitea.angry.im/PeterCxy/OpenEUICC/releases)
|
||||
- For removable eSIM chip vendors: to have your chip supported by official builds of EasyEUICC when inserted, include the ARA-M hash `2A2FA878BC7C3354C2CF82935A5945A3EDAE4AFA`
|
||||
|
||||
__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.
|
||||
|
||||
FAQs
|
||||
===
|
||||
|
||||
- Q: Do you provide prebuilt binaries for OpenEUICC?
|
||||
- A: Debug-mode APKs are available continuously as an artifact of the [Actions](https://gitea.angry.im/PeterCxy/OpenEUICC/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: AOSP's Settings app seems to be confused by OpenEUICC (for example, disabling / enabling profiles from the Networks page do not work properly)
|
||||
- A: When your device has internal eSIM chip(s) __and__ you have inserted a removable eSIM chip, the Settings app can misbehave since it was never designed for this scenario. __Please prefer using OpenEUICC's own management interface whenever possible.__ In the future, there might be an option to exclude removable SIMs from being reported to the Android system.
|
||||
|
||||
- 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
|
||||
===
|
||||
|
|
|
@ -32,6 +32,16 @@ android {
|
|||
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
|
||||
|
@ -39,6 +49,10 @@ android {
|
|||
kotlinOptions {
|
||||
jvmTarget = "1.8"
|
||||
}
|
||||
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,12 @@
|
|||
package im.angry.openeuicc.di
|
||||
|
||||
import android.content.Context
|
||||
import im.angry.easyeuicc.R
|
||||
|
||||
class JmpCustomizableTextProvider(private val context: Context) :
|
||||
UnprivilegedCustomizableTextProvider(context) {
|
||||
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(), CompatibilityCheckActivity::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)
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package im.angry.openeuicc.di
|
|||
|
||||
import android.content.Context
|
||||
|
||||
class UnprivilegedAppContainer(context: Context) : DefaultAppContainer(context) {
|
||||
open class UnprivilegedAppContainer(context: Context) : DefaultAppContainer(context) {
|
||||
override val uiComponentFactory by lazy {
|
||||
UnprivilegedUiComponentFactory()
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package im.angry.openeuicc.di
|
|||
import android.content.Context
|
||||
import im.angry.easyeuicc.R
|
||||
|
||||
class UnprivilegedCustomizableTextProvider(private val context: Context) :
|
||||
open class UnprivilegedCustomizableTextProvider(private val context: Context) :
|
||||
DefaultCustomizableTextProvider(context) {
|
||||
override fun formatInternalChannelName(logicalSlotId: Int): String =
|
||||
context.getString(R.string.channel_name_format_unpriv, logicalSlotId)
|
||||
|
|
|
@ -7,7 +7,7 @@ import im.angry.openeuicc.ui.UnprivilegedEuiccManagementFragment
|
|||
import im.angry.openeuicc.ui.UnprivilegedNoEuiccPlaceholderFragment
|
||||
import im.angry.openeuicc.ui.UnprivilegedSettingsFragment
|
||||
|
||||
class UnprivilegedUiComponentFactory : DefaultUiComponentFactory() {
|
||||
open class UnprivilegedUiComponentFactory : DefaultUiComponentFactory() {
|
||||
override fun createEuiccManagementFragment(slotId: Int, portId: Int): EuiccManagementFragment =
|
||||
UnprivilegedEuiccManagementFragment.newInstance(slotId, portId)
|
||||
|
||||
|
|
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.
|
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
|
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
Reference in a new issue