WIP: feat: copy ara-m sha-1 in developer options #94

Closed
septs wants to merge 1 commit from septs:ara-m into master
8 changed files with 87 additions and 5 deletions

View file

@ -1,12 +1,16 @@
package im.angry.openeuicc.di
import androidx.fragment.app.Fragment
import androidx.preference.PreferenceFragmentCompat
import im.angry.openeuicc.ui.EuiccManagementFragment
import im.angry.openeuicc.ui.NoEuiccPlaceholderFragment
import im.angry.openeuicc.ui.SettingsFragment
open class DefaultUiComponentFactory : UiComponentFactory {
override fun createEuiccManagementFragment(slotId: Int, portId: Int): EuiccManagementFragment =
EuiccManagementFragment.newInstance(slotId, portId)
override fun createNoEuiccPlaceholderFragment(): Fragment = NoEuiccPlaceholderFragment()
override fun createSettingsFragment(): Fragment = SettingsFragment()
}

View file

@ -1,9 +1,11 @@
package im.angry.openeuicc.di
import androidx.fragment.app.Fragment
import androidx.preference.PreferenceFragmentCompat
import im.angry.openeuicc.ui.EuiccManagementFragment
interface UiComponentFactory {
fun createEuiccManagementFragment(slotId: Int, portId: Int): EuiccManagementFragment
fun createNoEuiccPlaceholderFragment(): Fragment
fun createSettingsFragment(): Fragment
}

View file

@ -4,10 +4,14 @@ import android.os.Bundle
import android.view.MenuItem
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import im.angry.openeuicc.OpenEuiccApplication
import im.angry.openeuicc.common.R
import im.angry.openeuicc.util.*
class SettingsActivity: AppCompatActivity() {
private val appContainer
get() = (application as OpenEuiccApplication).appContainer
override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge()
super.onCreate(savedInstanceState)
@ -15,8 +19,9 @@ class SettingsActivity: AppCompatActivity() {
setSupportActionBar(requireViewById(R.id.toolbar))
setupToolbarInsets()
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
val settingsFragment = appContainer.uiComponentFactory.createSettingsFragment()
supportFragmentManager.beginTransaction()
.replace(R.id.settings_container, SettingsFragment())
.replace(R.id.settings_container, settingsFragment)
.commit()
}

View file

@ -1,5 +1,6 @@
package im.angry.openeuicc.ui
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
@ -20,7 +21,7 @@ import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
class SettingsFragment: PreferenceFragmentCompat() {
open class SettingsFragment: PreferenceFragmentCompat() {
private lateinit var developerPref: PreferenceCategory
// Hidden developer options switch
@ -35,9 +36,9 @@ class SettingsFragment: PreferenceFragmentCompat() {
// Show / hide developer preference based on whether it is enabled
lifecycleScope.launch {
preferenceRepository.developerOptionsEnabledFlow.onEach {
developerPref.isVisible = it
}.collect()
preferenceRepository.developerOptionsEnabledFlow
.onEach { developerPref.isVisible = it }
.collect()
}
findPreference<Preference>("pref_info_app_version")?.apply {

View file

@ -2,8 +2,10 @@ package im.angry.openeuicc.di
import androidx.fragment.app.Fragment
import im.angry.openeuicc.ui.EuiccManagementFragment
import im.angry.openeuicc.ui.SettingsFragment
import im.angry.openeuicc.ui.UnprivilegedEuiccManagementFragment
import im.angry.openeuicc.ui.UnprivilegedNoEuiccPlaceholderFragment
import im.angry.openeuicc.ui.UnprivilegedSettingsFragment
class UnprivilegedUiComponentFactory : DefaultUiComponentFactory() {
override fun createEuiccManagementFragment(slotId: Int, portId: Int): EuiccManagementFragment =
@ -11,4 +13,7 @@ class UnprivilegedUiComponentFactory : DefaultUiComponentFactory() {
override fun createNoEuiccPlaceholderFragment(): Fragment =
UnprivilegedNoEuiccPlaceholderFragment()
override fun createSettingsFragment(): Fragment =
UnprivilegedSettingsFragment()
}

View file

@ -0,0 +1,50 @@
package im.angry.openeuicc.ui
import android.content.ClipData
import android.content.ClipboardManager
import android.content.pm.PackageManager
import android.os.Bundle
import android.widget.Toast
import androidx.preference.Preference
import androidx.preference.PreferenceCategory
import im.angry.easyeuicc.R
import im.angry.openeuicc.util.encodeHex
import java.security.MessageDigest
class UnprivilegedSettingsFragment : SettingsFragment() {
private val firstSigner by lazy {
val packageInfo = requireContext().let {
it.packageManager.getPackageInfo(
it.packageName,
PackageManager.GET_SIGNING_CERTIFICATES,
)
}
packageInfo.signingInfo!!.apkContentsSigners.first().let {
MessageDigest.getInstance("SHA-1")
.apply { update(it.toByteArray()) }
.digest()
}
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
super.onCreatePreferences(savedInstanceState, rootKey)
addPreferencesFromResource(R.xml.pref_unprivileged_settings)
findPreference<Preference>("pref_developer_ara_m")?.apply {
bindCategory(this, "pref_developer")
isVisible = true
summary = firstSigner.encodeHex()
setOnPreferenceClickListener {
requireContext().getSystemService(ClipboardManager::class.java)!!
.setPrimaryClip(ClipData.newPlainText("ara-m", summary))
Toast.makeText(requireContext(), R.string.toast_ara_m_copied, Toast.LENGTH_SHORT)
.show()
true
}
}
}
private fun bindCategory(preference: Preference, key: String) {
preference.parent!!.removePreference(preference)
findPreference<PreferenceCategory>(key)!!.addPreference(preference)
}
}

View file

@ -4,6 +4,12 @@
<string name="compatibility_check">Compatibility Check</string>
<string name="open_sim_toolkit">Open SIM Toolkit</string>
<!-- Settings -->
<string name="pref_developer_ara_m" translatable="false">ARA-M SHA-1</string>
<!-- Toast -->
<string name="toast_ara_m_copied">ARA-M SHA-1 copied to clipboard</string>
<!-- Compatibility Check Descriptions -->
<string name="compatibility_check_system_features">System Features</string>
<string name="compatibility_check_system_features_desc">Whether your device has all the required features for managing removable eUICC cards. For example, basic telephony and OMAPI support.</string>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
<Preference
app:enableCopying="true"
app:iconSpaceReserved="false"
app:isPreferenceVisible="false"
app:key="pref_developer_ara_m"
app:title="@string/pref_developer_ara_m" />
</PreferenceScreen>