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/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/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_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" />
|
<entry key="app/src/main/res/menu/activity_main_slot_spinner.xml" value="0.19375" />
|
||||||
</map>
|
</map>
|
||||||
</option>
|
</option>
|
||||||
|
|
|
@ -39,6 +39,10 @@ class EuiccManagementFragment(private val channel: EuiccChannel) : Fragment() {
|
||||||
binding.profileList.adapter = adapter
|
binding.profileList.adapter = adapter
|
||||||
binding.profileList.layoutManager =
|
binding.profileList.layoutManager =
|
||||||
LinearLayoutManager(view.context, LinearLayoutManager.VERTICAL, false)
|
LinearLayoutManager(view.context, LinearLayoutManager.VERTICAL, false)
|
||||||
|
|
||||||
|
binding.fab.setOnClickListener {
|
||||||
|
ProfileDownloadFragment(channel).show(childFragmentManager, ProfileDownloadFragment.TAG)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
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="disabled">Disabled</string>
|
||||||
<string name="provider">Provider:</string>
|
<string name="provider">Provider:</string>
|
||||||
<string name="iccid">ICCID:</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>
|
</resources>
|
|
@ -9,8 +9,21 @@
|
||||||
<item name="colorSecondary">@color/pink_600</item>
|
<item name="colorSecondary">@color/pink_600</item>
|
||||||
<item name="colorSecondaryVariant">@color/pink_800</item>
|
<item name="colorSecondaryVariant">@color/pink_800</item>
|
||||||
<item name="colorOnSecondary">@color/white</item>
|
<item name="colorOnSecondary">@color/white</item>
|
||||||
|
<item name="colorAccent">?attr/colorSecondary</item>
|
||||||
<!-- Status bar color. -->
|
<!-- Status bar color. -->
|
||||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||||
<!-- Customize your theme here. -->
|
<!-- Customize your theme here. -->
|
||||||
</style>
|
</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>
|
</resources>
|
Loading…
Reference in a new issue