From 93302654900bae87abc6b8790b469e72aa19a31f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 30 Dec 2023 11:28:35 -0500 Subject: [PATCH] feat: Add a basic settings activity --- app-common/build.gradle | 1 + app-common/src/main/AndroidManifest.xml | 4 ++++ .../im/angry/openeuicc/ui/MainActivity.kt | 12 ++++++++++ .../im/angry/openeuicc/ui/SettingsActivity.kt | 24 +++++++++++++++++++ .../im/angry/openeuicc/ui/SettingsFragment.kt | 24 +++++++++++++++++++ .../java/im/angry/openeuicc/util/Utils.kt | 14 +++++++++++ .../src/main/res/menu/activity_main.xml | 5 ++++ app-common/src/main/res/values/strings.xml | 6 +++++ app-common/src/main/res/xml/pref_settings.xml | 14 +++++++++++ 9 files changed, 104 insertions(+) create mode 100644 app-common/src/main/java/im/angry/openeuicc/ui/SettingsActivity.kt create mode 100644 app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt create mode 100644 app-common/src/main/java/im/angry/openeuicc/util/Utils.kt create mode 100644 app-common/src/main/res/xml/pref_settings.xml diff --git a/app-common/build.gradle b/app-common/build.gradle index 5d258d1..1e9cecb 100644 --- a/app-common/build.gradle +++ b/app-common/build.gradle @@ -35,6 +35,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.10.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation "androidx.preference:preference-ktx:1.2.1" implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.2' implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" implementation "androidx.cardview:cardview:1.0.0" diff --git a/app-common/src/main/AndroidManifest.xml b/app-common/src/main/AndroidManifest.xml index 2492952..a260db1 100644 --- a/app-common/src/main/AndroidManifest.xml +++ b/app-common/src/main/AndroidManifest.xml @@ -8,6 +8,10 @@ + + { + startActivity(Intent(this, SettingsActivity::class.java)); + true + } + else -> super.onOptionsItemSelected(item) + } + + protected open fun createEuiccManagementFragment(channel: EuiccChannel): EuiccManagementFragment = EuiccManagementFragment.newInstance(channel.slotId, channel.portId) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/SettingsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/SettingsActivity.kt new file mode 100644 index 0000000..f23fffd --- /dev/null +++ b/app-common/src/main/java/im/angry/openeuicc/ui/SettingsActivity.kt @@ -0,0 +1,24 @@ +package im.angry.openeuicc.ui + +import android.os.Bundle +import android.view.MenuItem +import androidx.appcompat.app.AppCompatActivity + +class SettingsActivity: AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + supportActionBar!!.setDisplayHomeAsUpEnabled(true) + supportFragmentManager.beginTransaction() + .replace(android.R.id.content, SettingsFragment()) + .commit() + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean = + when (item.itemId) { + android.R.id.home -> { + finish() + true + } + else -> super.onOptionsItemSelected(item) + } +} \ No newline at end of file diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt new file mode 100644 index 0000000..f832e9f --- /dev/null +++ b/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt @@ -0,0 +1,24 @@ +package im.angry.openeuicc.ui + +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import androidx.preference.Preference +import androidx.preference.PreferenceFragmentCompat +import im.angry.openeuicc.common.R +import im.angry.openeuicc.util.* + +class SettingsFragment: PreferenceFragmentCompat() { + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.pref_settings, rootKey) + + findPreference("pref_info_app_version") + ?.summary = requireContext().selfAppVersion + + findPreference("pref_info_source_code") + ?.setOnPreferenceClickListener { + startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(it.summary.toString()))) + true + } + } +} \ No newline at end of file diff --git a/app-common/src/main/java/im/angry/openeuicc/util/Utils.kt b/app-common/src/main/java/im/angry/openeuicc/util/Utils.kt new file mode 100644 index 0000000..e5a7d2e --- /dev/null +++ b/app-common/src/main/java/im/angry/openeuicc/util/Utils.kt @@ -0,0 +1,14 @@ +package im.angry.openeuicc.util + +import android.content.Context +import android.content.pm.PackageManager +import java.lang.RuntimeException + +val Context.selfAppVersion: String + get() = + try { + val pInfo = packageManager.getPackageInfo(packageName, 0) + pInfo.versionName + } catch (e: PackageManager.NameNotFoundException) { + throw RuntimeException(e) + } \ No newline at end of file diff --git a/app-common/src/main/res/menu/activity_main.xml b/app-common/src/main/res/menu/activity_main.xml index 9d1f42c..13275ab 100644 --- a/app-common/src/main/res/menu/activity_main.xml +++ b/app-common/src/main/res/menu/activity_main.xml @@ -7,4 +7,9 @@ app:actionViewClass="android.widget.Spinner" android:background="?android:attr/colorPrimary" app:showAsAction="always" /> + + \ 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 c60a762..e983e06 100644 --- a/app-common/src/main/res/values/strings.xml +++ b/app-common/src/main/res/values/strings.xml @@ -32,4 +32,10 @@ New nickname Are you sure you want to delete the profile %s? This operation is irreversible. + + Settings + Info + App Version + Source Code + https://gitea.angry.im/PeterCxy/OpenEUICC \ No newline at end of file diff --git a/app-common/src/main/res/xml/pref_settings.xml b/app-common/src/main/res/xml/pref_settings.xml new file mode 100644 index 0000000..3e4edfe --- /dev/null +++ b/app-common/src/main/res/xml/pref_settings.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file