Update Android Regist UI

This commit is contained in:
Florian Märkl 2019-10-15 13:16:19 +02:00
commit cbc24bd58d
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
4 changed files with 133 additions and 7 deletions

View file

@ -22,6 +22,8 @@ import android.os.Bundle
import android.view.View
import android.view.Window
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import com.metallic.chiaki.R
import com.metallic.chiaki.common.ext.RevealActivity
import com.metallic.chiaki.lib.RegistInfo
@ -41,16 +43,43 @@ class RegistActivity: AppCompatActivity(), RevealActivity
override val revealIntent: Intent get() = intent
override val revealRootLayout: View get() = rootLayout
private lateinit var viewModel: RegistViewModel
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_regist)
handleReveal()
viewModel = ViewModelProviders.of(this).get(RegistViewModel::class.java)
hostEditText.setText(intent.getStringExtra(EXTRA_HOST) ?: "255.255.255.255")
broadcastCheckBox.isChecked = intent.getBooleanExtra(EXTRA_BROADCAST, true)
registButton.setOnClickListener { doRegist() }
ps4VersionRadioGroup.check(when(viewModel.ps4Version.value ?: RegistViewModel.PS4Version.GE_7) {
RegistViewModel.PS4Version.GE_7 -> R.id.ps4VersionGE7RadioButton
RegistViewModel.PS4Version.LT_7 -> R.id.ps4VersionLT7RadioButton
})
ps4VersionRadioGroup.setOnCheckedChangeListener { _, checkedId ->
viewModel.ps4Version.value = when(checkedId)
{
R.id.ps4VersionGE7RadioButton -> RegistViewModel.PS4Version.GE_7
R.id.ps4VersionLT7RadioButton -> RegistViewModel.PS4Version.LT_7
else -> RegistViewModel.PS4Version.GE_7
}
}
viewModel.ps4Version.observe(this, Observer {
psnAccountIdHelpGroup.visibility = if(it == RegistViewModel.PS4Version.GE_7) View.VISIBLE else View.GONE
psnIdTextInputLayout.hint = getString(when(it)
{
RegistViewModel.PS4Version.GE_7 -> R.string.hint_regist_psn_account_id
RegistViewModel.PS4Version.LT_7 -> R.string.hint_regist_psn_online_id
})
})
}
private fun doRegist()
@ -64,7 +93,15 @@ class RegistActivity: AppCompatActivity(), RevealActivity
val pinValid = pin.length == PIN_LENGTH
hostEditText.error = if(!hostValid) getString(R.string.regist_host_invalid) else null
psnIdEditText.error = if(!psnIdValid) getString(R.string.regist_psn_id_invalid) else null
psnIdEditText.error =
if(!psnIdValid)
getString(when(viewModel.ps4Version.value ?: RegistViewModel.PS4Version.GE_7)
{
RegistViewModel.PS4Version.GE_7 -> R.string.regist_psn_account_id_invalid
RegistViewModel.PS4Version.LT_7 -> R.string.regist_psn_online_id_invalid
})
else
null
pinEditText.error = if(!pinValid) getString(R.string.regist_pin_invalid, PIN_LENGTH) else null
if(!hostValid || !psnIdValid || !pinValid)

View file

@ -0,0 +1,31 @@
/*
* This file is part of Chiaki.
*
* Chiaki is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Chiaki is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Chiaki. If not, see <https://www.gnu.org/licenses/>.
*/
package com.metallic.chiaki.regist
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class RegistViewModel: ViewModel()
{
enum class PS4Version {
GE_7,
LT_7
}
val ps4Version = MutableLiveData<PS4Version>(PS4Version.GE_7)
}

View file

@ -11,7 +11,8 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
android:padding="16dp"
android:animateLayoutChanges="true">
<ImageView
android:id="@+id/iconImageView"
@ -58,16 +59,67 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/hostTextInputLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:text="@string/regist_broadcast"/>
<RadioGroup
android:id="@+id/ps4VersionRadioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintTop_toBottomOf="@id/broadcastCheckBox">
<com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/ps4VersionGE7RadioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/regist_option_ps4_ge_7"
android:layout_weight="1"
android:checked="true"/>
<com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/ps4VersionLT7RadioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/regist_option_ps4_lt_7"
android:layout_weight="1"/>
</RadioGroup>
<com.google.android.material.textview.MaterialTextView
android:id="@+id/psnAccountIdHelpTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/ps4VersionRadioGroup"
android:text="@string/regist_psn_account_id_help"
android:gravity="center_horizontal"
android:textAppearance="?attr/textAppearanceBody1"
android:alpha="0.6"
android:layout_marginTop="8dp"/>
<com.google.android.material.textview.MaterialTextView
android:id="@+id/psnAccountIdHelpURLTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/psnAccountIdHelpTextView"
android:text="@string/regist_psn_account_id_help_url"
android:textSize="12sp"
android:gravity="center_horizontal"
android:autoLink="web"
android:textAppearance="?attr/textAppearanceBody1"/>
<androidx.constraintlayout.widget.Group
android:id="@+id/psnAccountIdHelpGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible"
app:constraint_referenced_ids="psnAccountIdHelpTextView,psnAccountIdHelpURLTextView"/>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/psnIdTextInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_regist_psn_id"
android:hint="@string/hint_regist_psn_online_id"
app:startIconDrawable="@drawable/ic_psn_id"
app:layout_constraintTop_toBottomOf="@id/broadcastCheckBox"
app:layout_constraintTop_toBottomOf="@id/psnAccountIdHelpURLTextView"
android:layout_marginTop="16dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/psnIdEditText"

View file

@ -20,11 +20,17 @@
<string name="title_regist">Register Console</string>
<string name="hint_regist_host">Host</string>
<string name="regist_broadcast">Broadcast</string>
<string name="hint_regist_psn_id">PSN ID (username, case-sensitive)</string>
<string name="regist_option_ps4_lt_7">PS4 &lt; 7.0</string>
<string name="regist_option_ps4_ge_7">PS4 ≥ 7.0</string>
<string name="regist_psn_account_id_help">About obtaining your Account ID, see</string>
<string name="regist_psn_account_id_help_url">https://github.com/thestr4ng3r/chiaki/blob/master/README.md#obtaining-your-psn-accountid</string>
<string name="hint_regist_psn_online_id">PSN Online ID (username, case-sensitive)</string>
<string name="hint_regist_psn_account_id">PSN Account ID (8 bytes, base64)</string>
<string name="hint_regist_pin">PIN</string>
<string name="action_regist">Register</string>
<string name="regist_host_invalid">Please enter a valid host name</string>
<string name="regist_psn_id_invalid">Please enter a valid PSN ID</string>
<string name="regist_psn_online_id_invalid">Please enter a valid PSN ID</string>
<string name="regist_psn_account_id_invalid">Please enter a valid 8-byte Account ID in Base64</string>
<string name="regist_pin_invalid">Please enter a valid %d-digit PIN</string>
<string name="action_share_log">Share Log</string>
<string name="regist_info_success">Regist successful.</string>