Update manual onboarding screens to prevent the button from overlapping elements (#3909)

* Update manual onboarding screen to prevent the button from overlapping elements

* Limit to 2 lines of text

* Switch to ScrollView

* Add padding for round devices

* Review comments
This commit is contained in:
Daniel Shokouhi 2023-10-05 06:58:08 -07:00 committed by GitHub
parent a14441ff1a
commit d7a08d3b08
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 161 additions and 101 deletions

View file

@ -10,6 +10,7 @@ import androidx.wear.activity.ConfirmationActivity
import dagger.hilt.android.AndroidEntryPoint
import io.homeassistant.companion.android.databinding.ActivityIntegrationBinding
import io.homeassistant.companion.android.home.HomeActivity
import io.homeassistant.companion.android.util.adjustInset
import javax.inject.Inject
import io.homeassistant.companion.android.common.R as commonR
@ -39,17 +40,20 @@ class MobileAppIntegrationActivity : AppCompatActivity(), MobileAppIntegrationVi
binding = ActivityIntegrationBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.serverUrl.setText(Build.MODEL)
binding.deviceName.setText(Build.MODEL)
binding.finish.setOnClickListener {
presenter.onRegistrationAttempt(serverId, binding.serverUrl.text.toString())
presenter.onRegistrationAttempt(serverId, binding.deviceName.text.toString())
}
adjustInset(applicationContext, binding, null)
}
override fun onResume() {
super.onResume()
binding.loadingView.visibility = View.GONE
binding.constraintLayout.visibility = View.VISIBLE
}
override fun deviceRegistered() {
@ -61,6 +65,7 @@ class MobileAppIntegrationActivity : AppCompatActivity(), MobileAppIntegrationVi
override fun showLoading() {
binding.loadingView.visibility = View.VISIBLE
binding.constraintLayout.visibility = View.GONE
}
override fun showError() {
@ -74,6 +79,7 @@ class MobileAppIntegrationActivity : AppCompatActivity(), MobileAppIntegrationVi
}
startActivity(intent)
binding.loadingView.visibility = View.GONE
binding.constraintLayout.visibility = View.VISIBLE
}
override fun onDestroy() {

View file

@ -12,6 +12,7 @@ import dagger.hilt.android.AndroidEntryPoint
import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.databinding.ActivityManualSetupBinding
import io.homeassistant.companion.android.onboarding.integration.MobileAppIntegrationActivity
import io.homeassistant.companion.android.util.adjustInset
import javax.inject.Inject
import io.homeassistant.companion.android.common.R as commonR
@ -36,8 +37,10 @@ class ManualSetupActivity : AppCompatActivity(), ManualSetupView {
setContentView(binding.root)
binding.buttonNext.setOnClickListener {
presenter.onNextClicked(this, findViewById<EditText>(R.id.server_url).text.toString())
presenter.onNextClicked(this, findViewById<EditText>(R.id.device_name).text.toString())
}
adjustInset(applicationContext, null, binding)
}
override fun startIntegration(serverId: Int) {
@ -46,6 +49,7 @@ class ManualSetupActivity : AppCompatActivity(), ManualSetupView {
override fun showLoading() {
binding.loadingView.visibility = View.VISIBLE
binding.constraintLayout.visibility = View.GONE
}
override fun showContinueOnPhone() {
@ -59,6 +63,7 @@ class ManualSetupActivity : AppCompatActivity(), ManualSetupView {
}
startActivity(confirmation)
binding.loadingView.visibility = View.GONE
binding.constraintLayout.visibility = View.VISIBLE
}
override fun showError(@StringRes message: Int) {
@ -72,12 +77,14 @@ class ManualSetupActivity : AppCompatActivity(), ManualSetupView {
}
startActivity(intent)
binding.loadingView.visibility = View.GONE
binding.constraintLayout.visibility = View.VISIBLE
}
override fun onResume() {
super.onResume()
binding.loadingView.visibility = View.GONE
binding.constraintLayout.visibility = View.VISIBLE
}
override fun onDestroy() {

View file

@ -0,0 +1,23 @@
package io.homeassistant.companion.android.util
import android.content.Context
import android.content.res.Resources
import io.homeassistant.companion.android.databinding.ActivityIntegrationBinding
import io.homeassistant.companion.android.databinding.ActivityManualSetupBinding
private const val FACTOR = 0.146467f // c = a * sqrt(2)
fun adjustInset(
context: Context,
integrationBinding: ActivityIntegrationBinding? = null,
manualSetupBinding: ActivityManualSetupBinding? = null
) {
if (context.resources.configuration.isScreenRound) {
val inset = (FACTOR * Resources.getSystem().displayMetrics.widthPixels).toInt()
if (integrationBinding != null) {
integrationBinding.linearLayout.setPadding(inset, inset, inset, inset)
} else {
manualSetupBinding?.linearLayout?.setPadding(inset, inset, inset, inset)
}
}
}

View file

@ -1,60 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.wear.widget.BoxInsetLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/box_inset_layout_padding"
tools:context=".onboarding.integration.MobileAppIntegrationActivity"
tools:deviceIds="wear">
android:layout_height="match_parent">
<requestFocus />
<androidx.constraintlayout.widget.ConstraintLayout
<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/inner_frame_layout_padding"
app:layout_boxedEdges="all">
android:layout_height="wrap_content"
android:gravity="center"
tools:context=".onboarding.integration.MobileAppIntegrationActivity"
tools:deviceIds="wear"
android:orientation="vertical">
<EditText
android:id="@+id/server_url"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:ems="10"
android:hint="@string/device_name"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
android:importantForAutofill="no" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/constraint_layout"
android:padding="@dimen/inner_frame_layout_padding"
app:layout_boxedEdges="all">
<TextView
android:id="@+id/textView"
style="@style/HeaderText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/registerDevice"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/device_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:ems="10"
android:minHeight="48dp"
android:hint="@string/device_name"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
android:importantForAutofill="no" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/finish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:contentDescription="@string/button_forward"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/ic_button_check" />
<TextView
android:id="@+id/textView"
style="@style/HeaderText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/registerDevice"
android:textAlignment="center"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/finish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:contentDescription="@string/button_forward"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/device_name"
app:srcCompat="@drawable/ic_button_check" />
<io.homeassistant.companion.android.util.LoadingView
android:id="@+id/loading_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:loading_text="@string/attempting_registration"
android:visibility="gone" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.wear.widget.BoxInsetLayout>
<io.homeassistant.companion.android.util.LoadingView
android:id="@+id/loading_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:loading_text="@string/attempting_registration"
android:visibility="gone" />
</LinearLayout>
</ScrollView>

View file

@ -1,58 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.wear.widget.BoxInsetLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
<ScrollView xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/box_inset_layout_padding"
tools:deviceIds="wear">
android:layout_height="match_parent">
<requestFocus />
<androidx.constraintlayout.widget.ConstraintLayout
<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/inner_frame_layout_padding"
app:layout_boxedEdges="all">
android:layout_height="wrap_content"
android:id="@+id/linear_layout"
android:gravity="center"
tools:deviceIds="wear"
android:orientation="vertical">
<EditText
android:id="@+id/server_url"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:ems="10"
android:hint="@string/input_url_hint"
android:inputType="textNoSuggestions"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
android:importantForAutofill="no" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/constraint_layout"
android:padding="@dimen/inner_frame_layout_padding"
app:layout_boxedEdges="all">
<TextView
android:id="@+id/textView"
style="@style/HeaderText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/choose_server"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/device_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:ems="10"
android:minHeight="48dp"
android:hint="@string/input_url_hint"
android:inputType="textNoSuggestions"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
android:importantForAutofill="no"
tools:ignore="TextFields" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/button_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/button_forward"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/ic_button_arrow_forward" />
<TextView
android:id="@+id/textView"
style="@style/HeaderText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/manual_title"
android:textAlignment="center"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/button_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:contentDescription="@string/button_forward"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/device_name"
app:srcCompat="@drawable/ic_button_arrow_forward" />
<io.homeassistant.companion.android.util.LoadingView
android:id="@+id/loading_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:loading_text="@string/attempting_connection"
android:visibility="gone" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.wear.widget.BoxInsetLayout>
<io.homeassistant.companion.android.util.LoadingView
android:id="@+id/loading_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:loading_text="@string/attempting_connection"
android:visibility="gone" />
</LinearLayout>
</ScrollView>