forked from PeterCxy/OpenEUICC
lay out the profile download dialog
This commit is contained in:
parent
c44ec22a63
commit
9c376d0a3c
|
@ -6,6 +6,7 @@
|
|||
<entry key="app/src/main/res/layout/activity_main.xml" value="0.19375" />
|
||||
<entry key="app/src/main/res/layout/euicc_profile.xml" value="0.19375" />
|
||||
<entry key="app/src/main/res/layout/fragment_euicc.xml" value="0.19375" />
|
||||
<entry key="app/src/main/res/layout/fragment_profile_download.xml" value="0.19375" />
|
||||
<entry key="app/src/main/res/menu/activity_main_slot_spinner.xml" value="0.19375" />
|
||||
</map>
|
||||
</option>
|
||||
|
|
|
@ -39,6 +39,10 @@ class EuiccManagementFragment(private val channel: EuiccChannel) : Fragment() {
|
|||
binding.profileList.adapter = adapter
|
||||
binding.profileList.layoutManager =
|
||||
LinearLayoutManager(view.context, LinearLayoutManager.VERTICAL, false)
|
||||
|
||||
binding.fab.setOnClickListener {
|
||||
ProfileDownloadFragment(channel).show(childFragmentManager, ProfileDownloadFragment.TAG)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
package im.angry.openeuicc.ui
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.Window
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import im.angry.openeuicc.R
|
||||
import im.angry.openeuicc.core.EuiccChannel
|
||||
import im.angry.openeuicc.databinding.FragmentProfileDownloadBinding
|
||||
import im.angry.openeuicc.util.setWidthPercent
|
||||
|
||||
class ProfileDownloadFragment(val channel: EuiccChannel) : DialogFragment() {
|
||||
companion object {
|
||||
const val TAG = "ProfileDownloadFragment"
|
||||
}
|
||||
|
||||
private var _binding: FragmentProfileDownloadBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
_binding = FragmentProfileDownloadBinding.inflate(inflater, container, false)
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
binding.toolbar.apply {
|
||||
setTitle(R.string.profile_download)
|
||||
setNavigationOnClickListener {
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setWidthPercent(95)
|
||||
}
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
return super.onCreateDialog(savedInstanceState).also {
|
||||
it.window?.requestFeature(Window.FEATURE_NO_TITLE)
|
||||
it.setCanceledOnTouchOutside(false)
|
||||
}
|
||||
}
|
||||
}
|
28
app/src/main/java/im/angry/openeuicc/util/UiUtils.kt
Normal file
28
app/src/main/java/im/angry/openeuicc/util/UiUtils.kt
Normal file
|
@ -0,0 +1,28 @@
|
|||
package im.angry.openeuicc.util
|
||||
|
||||
import android.content.res.Resources
|
||||
import android.graphics.Rect
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.DialogFragment
|
||||
|
||||
// Source: <https://stackoverflow.com/questions/12478520/how-to-set-dialogfragments-width-and-height>
|
||||
/**
|
||||
* Call this method (in onActivityCreated or later) to set
|
||||
* the width of the dialog to a percentage of the current
|
||||
* screen width.
|
||||
*/
|
||||
fun DialogFragment.setWidthPercent(percentage: Int) {
|
||||
val percent = percentage.toFloat() / 100
|
||||
val dm = Resources.getSystem().displayMetrics
|
||||
val rect = dm.run { Rect(0, 0, widthPixels, heightPixels) }
|
||||
val percentWidth = rect.width() * percent
|
||||
dialog?.window?.setLayout(percentWidth.toInt(), ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this method (in onActivityCreated or later)
|
||||
* to make the dialog near-full screen.
|
||||
*/
|
||||
fun DialogFragment.setFullScreen() {
|
||||
dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||
}
|
58
app/src/main/res/layout/fragment_profile_download.xml
Normal file
58
app/src/main/res/layout/fragment_profile_download.xml
Normal file
|
@ -0,0 +1,58 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:theme="@style/Theme.OpenEUICC"
|
||||
android:background="?attr/colorPrimary"
|
||||
android:elevation="4dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintWidth_percent="1"
|
||||
app:navigationIcon="?homeAsUpIndicator" />
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/profile_download_server"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="15dp"
|
||||
android:hint="@string/profile_download_server"
|
||||
style="@style/Widget.OpenEUICC.Input"
|
||||
app:layout_constraintTop_toBottomOf="@id/toolbar"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintWidth_percent=".8">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:theme="@style/Theme.OpenEUICC.Input.Cursor"/>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/profile_download_code"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginVertical="15dp"
|
||||
android:hint="@string/profile_download_code"
|
||||
style="@style/Widget.OpenEUICC.Input"
|
||||
app:layout_constraintTop_toBottomOf="@id/profile_download_server"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintWidth_percent=".8">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:theme="@style/Theme.OpenEUICC.Input.Cursor"/>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -7,4 +7,8 @@
|
|||
<string name="disabled">Disabled</string>
|
||||
<string name="provider">Provider:</string>
|
||||
<string name="iccid">ICCID:</string>
|
||||
|
||||
<string name="profile_download">New eSIM</string>
|
||||
<string name="profile_download_server">Server (RSP / SM-DP+)</string>
|
||||
<string name="profile_download_code">Activation Code</string>
|
||||
</resources>
|
|
@ -9,8 +9,21 @@
|
|||
<item name="colorSecondary">@color/pink_600</item>
|
||||
<item name="colorSecondaryVariant">@color/pink_800</item>
|
||||
<item name="colorOnSecondary">@color/white</item>
|
||||
<item name="colorAccent">?attr/colorSecondary</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<style name="Theme.OpenEUICC.Input.Cursor" parent="ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox">
|
||||
<item name="colorControlActivated">?attr/colorSecondary</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.OpenEUICC.Input" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
|
||||
<item name="boxBackgroundColor">@android:color/transparent</item>
|
||||
<item name="boxStrokeColor">?attr/colorSecondary</item>
|
||||
<item name="hintTextColor">?attr/colorSecondary</item>
|
||||
</style>
|
||||
|
||||
|
||||
</resources>
|
Loading…
Reference in a new issue