diff --git a/app-common/src/main/java/im/angry/openeuicc/di/DefaultUiComponentFactory.kt b/app-common/src/main/java/im/angry/openeuicc/di/DefaultUiComponentFactory.kt index 86af007..32550d6 100644 --- a/app-common/src/main/java/im/angry/openeuicc/di/DefaultUiComponentFactory.kt +++ b/app-common/src/main/java/im/angry/openeuicc/di/DefaultUiComponentFactory.kt @@ -1,9 +1,13 @@ package im.angry.openeuicc.di +import androidx.fragment.app.Fragment import im.angry.openeuicc.core.EuiccChannel import im.angry.openeuicc.ui.EuiccManagementFragment +import im.angry.openeuicc.ui.NoEuiccPlaceholderFragment open class DefaultUiComponentFactory : UiComponentFactory { override fun createEuiccManagementFragment(channel: EuiccChannel): EuiccManagementFragment = EuiccManagementFragment.newInstance(channel.slotId, channel.portId) + + override fun createNoEuiccPlaceholderFragment(): Fragment = NoEuiccPlaceholderFragment() } \ No newline at end of file diff --git a/app-common/src/main/java/im/angry/openeuicc/di/UiComponentFactory.kt b/app-common/src/main/java/im/angry/openeuicc/di/UiComponentFactory.kt index d311876..4e09a70 100644 --- a/app-common/src/main/java/im/angry/openeuicc/di/UiComponentFactory.kt +++ b/app-common/src/main/java/im/angry/openeuicc/di/UiComponentFactory.kt @@ -1,8 +1,10 @@ package im.angry.openeuicc.di +import androidx.fragment.app.Fragment import im.angry.openeuicc.core.EuiccChannel import im.angry.openeuicc.ui.EuiccManagementFragment interface UiComponentFactory { fun createEuiccManagementFragment(channel: EuiccChannel): EuiccManagementFragment + fun createNoEuiccPlaceholderFragment(): Fragment } \ No newline at end of file diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt index c7699e0..2d80e33 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt @@ -25,12 +25,11 @@ open class MainActivity : AppCompatActivity(), OpenEuiccContextMarker { } private lateinit var spinnerAdapter: ArrayAdapter + private lateinit var spinnerItem: MenuItem private lateinit var spinner: Spinner private val fragments = arrayListOf() - private lateinit var noEuiccPlaceholder: View - protected lateinit var tm: TelephonyManager override fun onCreate(savedInstanceState: Bundle?) { @@ -38,7 +37,10 @@ open class MainActivity : AppCompatActivity(), OpenEuiccContextMarker { setContentView(R.layout.activity_main) setSupportActionBar(requireViewById(R.id.toolbar)) - noEuiccPlaceholder = requireViewById(R.id.no_euicc_placeholder) + supportFragmentManager.beginTransaction().replace( + R.id.fragment_root, + appContainer.uiComponentFactory.createNoEuiccPlaceholderFragment() + ).commit() tm = telephonyManager @@ -53,7 +55,11 @@ open class MainActivity : AppCompatActivity(), OpenEuiccContextMarker { menuInflater.inflate(R.menu.activity_main, menu) if (!this::spinner.isInitialized) { - spinner = menu.findItem(R.id.spinner).actionView as Spinner + spinnerItem = menu.findItem(R.id.spinner) + spinner = spinnerItem.actionView as Spinner + if (spinnerAdapter.isEmpty) { + spinnerItem.isVisible = false + } spinner.adapter = spinnerAdapter spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected( @@ -108,7 +114,9 @@ open class MainActivity : AppCompatActivity(), OpenEuiccContextMarker { } if (fragments.isNotEmpty()) { - noEuiccPlaceholder.visibility = View.GONE + if (this@MainActivity::spinner.isInitialized) { + spinnerItem.isVisible = true + } supportFragmentManager.beginTransaction().replace(R.id.fragment_root, fragments.first()).commit() } } diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/NoEuiccPlaceholderFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/NoEuiccPlaceholderFragment.kt new file mode 100644 index 0000000..e9e44b1 --- /dev/null +++ b/app-common/src/main/java/im/angry/openeuicc/ui/NoEuiccPlaceholderFragment.kt @@ -0,0 +1,18 @@ +package im.angry.openeuicc.ui + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import im.angry.openeuicc.common.R + +class NoEuiccPlaceholderFragment : Fragment() { + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_no_euicc_placeholder, container, false) + } +} \ No newline at end of file diff --git a/app-common/src/main/res/layout/activity_main.xml b/app-common/src/main/res/layout/activity_main.xml index 74b7799..4f1020d 100644 --- a/app-common/src/main/res/layout/activity_main.xml +++ b/app-common/src/main/res/layout/activity_main.xml @@ -21,15 +21,6 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" - app:layout_constraintTop_toBottomOf="@id/toolbar"> - - + app:layout_constraintTop_toBottomOf="@id/toolbar"/> \ No newline at end of file diff --git a/app-common/src/main/res/layout/fragment_no_euicc_placeholder.xml b/app-common/src/main/res/layout/fragment_no_euicc_placeholder.xml new file mode 100644 index 0000000..b040fda --- /dev/null +++ b/app-common/src/main/res/layout/fragment_no_euicc_placeholder.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app-common/src/main/res/values/strings.xml b/app-common/src/main/res/values/strings.xml index 040c910..5218785 100644 --- a/app-common/src/main/res/values/strings.xml +++ b/app-common/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ - No eUICC card on this device is accessible by this app.\nInsert a supported eUICC card, or try out the privileged OpenEUICC app instead. + No removable eUICC card accessible by this app is detected on this device. Unknown Help diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/UnprivilegedOpenEuiccApplication.kt b/app-unpriv/src/main/java/im/angry/openeuicc/UnprivilegedOpenEuiccApplication.kt index 23e7be9..5541501 100644 --- a/app-unpriv/src/main/java/im/angry/openeuicc/UnprivilegedOpenEuiccApplication.kt +++ b/app-unpriv/src/main/java/im/angry/openeuicc/UnprivilegedOpenEuiccApplication.kt @@ -1,12 +1,17 @@ package im.angry.openeuicc import android.content.Intent +import im.angry.openeuicc.di.UnprivilegedAppContainer import im.angry.openeuicc.ui.LogsActivity import im.angry.openeuicc.util.* import kotlinx.coroutines.runBlocking import kotlin.system.exitProcess class UnprivilegedOpenEuiccApplication : OpenEuiccApplication() { + override val appContainer by lazy { + UnprivilegedAppContainer(this) + } + override fun onCreate() { super.onCreate() diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedAppContainer.kt b/app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedAppContainer.kt new file mode 100644 index 0000000..22d5a62 --- /dev/null +++ b/app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedAppContainer.kt @@ -0,0 +1,9 @@ +package im.angry.openeuicc.di + +import android.content.Context + +class UnprivilegedAppContainer(context: Context) : DefaultAppContainer(context) { + override val uiComponentFactory by lazy { + UnprivilegedUiComponentFactory() + } +} \ No newline at end of file diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedUiComponentFactory.kt b/app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedUiComponentFactory.kt new file mode 100644 index 0000000..f117038 --- /dev/null +++ b/app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedUiComponentFactory.kt @@ -0,0 +1,9 @@ +package im.angry.openeuicc.di + +import androidx.fragment.app.Fragment +import im.angry.openeuicc.ui.UnprivilegedNoEuiccPlaceholderFragment + +class UnprivilegedUiComponentFactory : DefaultUiComponentFactory() { + override fun createNoEuiccPlaceholderFragment(): Fragment = + UnprivilegedNoEuiccPlaceholderFragment() +} \ No newline at end of file diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedNoEuiccPlaceholderFragment.kt b/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedNoEuiccPlaceholderFragment.kt new file mode 100644 index 0000000..92cda23 --- /dev/null +++ b/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedNoEuiccPlaceholderFragment.kt @@ -0,0 +1,29 @@ +package im.angry.openeuicc.ui + +import android.content.Intent +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 UnprivilegedNoEuiccPlaceholderFragment : Fragment() { + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + val view = inflater.inflate( + R.layout.fragment_no_euicc_placeholder_unprivileged, + container, + false + ) + + view.findViewById(R.id.compatibility_check).setOnClickListener { + startActivity(Intent(requireContext(), CompatibilityCheckActivity::class.java)) + } + + return view + } +} \ No newline at end of file diff --git a/app-unpriv/src/main/res/layout/fragment_no_euicc_placeholder_unprivileged.xml b/app-unpriv/src/main/res/layout/fragment_no_euicc_placeholder_unprivileged.xml new file mode 100644 index 0000000..7f9e65c --- /dev/null +++ b/app-unpriv/src/main/res/layout/fragment_no_euicc_placeholder_unprivileged.xml @@ -0,0 +1,28 @@ + + + + + + + + \ No newline at end of file