Compare commits

...

2 commits

Author SHA1 Message Date
Peter Cai 02ef31199b jmp: Customize source code URL
All checks were successful
/ build-debug (push) Successful in 3m55s
/ release (push) Successful in 3m59s
2024-03-19 20:02:22 -04:00
Peter Cai bcc563aa83 jmp: Customize default placeholder when eUICC is missing 2024-03-19 20:00:35 -04:00
10 changed files with 113 additions and 5 deletions

View file

@ -2,8 +2,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="im.angry.openeuicc.UnprivilegedOpenEuiccApplication"
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"

View file

@ -0,0 +1,9 @@
package im.angry.openeuicc
import im.angry.openeuicc.di.JmpAppContainer
class JmpSimManagerApplication : UnprivilegedOpenEuiccApplication() {
override val appContainer by lazy {
JmpAppContainer(this)
}
}

View file

@ -0,0 +1,9 @@
package im.angry.openeuicc.di
import android.content.Context
class JmpAppContainer(context: Context) : UnprivilegedAppContainer(context) {
override val uiComponentFactory by lazy {
JmpUiComponentFactory()
}
}

View file

@ -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()
}

View file

@ -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
}
}

View file

@ -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"
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>

View file

@ -1,4 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">JMP SIM Manager</string>
<string name="no_euicc">No JMP eSIM Adapter found on this device.</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>
</resources>

View file

@ -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)
}

View file

@ -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()
}

View file

@ -3,7 +3,7 @@ package im.angry.openeuicc.di
import androidx.fragment.app.Fragment
import im.angry.openeuicc.ui.UnprivilegedNoEuiccPlaceholderFragment
class UnprivilegedUiComponentFactory : DefaultUiComponentFactory() {
open class UnprivilegedUiComponentFactory : DefaultUiComponentFactory() {
override fun createNoEuiccPlaceholderFragment(): Fragment =
UnprivilegedNoEuiccPlaceholderFragment()
}