Android Wakeup Dialog

This commit is contained in:
Florian Märkl 2019-10-25 17:27:02 +02:00
commit 83777c4fa4
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
6 changed files with 55 additions and 32 deletions

View file

@ -18,31 +18,30 @@
package com.metallic.chiaki.main package com.metallic.chiaki.main
import android.app.ActivityOptions import android.app.ActivityOptions
import android.app.AlertDialog
import android.content.Intent import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View import androidx.appcompat.app.AppCompatActivity
import android.view.animation.AnimationUtils
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.metallic.chiaki.R import com.metallic.chiaki.R
import com.metallic.chiaki.TestStartActivity import com.metallic.chiaki.TestStartActivity
import com.metallic.chiaki.common.DiscoveredDisplayHost import com.metallic.chiaki.common.DiscoveredDisplayHost
import com.metallic.chiaki.common.DisplayHost import com.metallic.chiaki.common.DisplayHost
import com.metallic.chiaki.common.Preferences import com.metallic.chiaki.common.Preferences
import com.metallic.chiaki.common.ext.RevealActivity
import com.metallic.chiaki.common.ext.putRevealExtra import com.metallic.chiaki.common.ext.putRevealExtra
import com.metallic.chiaki.common.getDatabase
import com.metallic.chiaki.common.ext.viewModelFactory import com.metallic.chiaki.common.ext.viewModelFactory
import com.metallic.chiaki.common.getDatabase
import com.metallic.chiaki.lib.ConnectInfo import com.metallic.chiaki.lib.ConnectInfo
import com.metallic.chiaki.lib.DiscoveryHost import com.metallic.chiaki.lib.DiscoveryHost
import com.metallic.chiaki.lib.RegistEventSuccess
import com.metallic.chiaki.regist.RegistActivity import com.metallic.chiaki.regist.RegistActivity
import com.metallic.chiaki.settings.SettingsActivity import com.metallic.chiaki.settings.SettingsActivity
import com.metallic.chiaki.stream.StreamActivity import com.metallic.chiaki.stream.StreamActivity
import io.reactivex.disposables.CompositeDisposable
import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() class MainActivity : AppCompatActivity()
@ -173,23 +172,38 @@ class MainActivity : AppCompatActivity()
val registeredHost = host.registeredHost val registeredHost = host.registeredHost
if(registeredHost != null) if(registeredHost != null)
{ {
if(host is DiscoveredDisplayHost && host.discoveredHost.state == DiscoveryHost.State.STANDBY) fun connect() {
{
// TODO: show AlertDialog
viewModel.discoveryManager.sendWakeup(host.host, registeredHost.rpRegistKey)
}
else
{
val connectInfo = ConnectInfo(host.host, registeredHost.rpRegistKey, registeredHost.rpKey, Preferences(this).videoProfile) val connectInfo = ConnectInfo(host.host, registeredHost.rpRegistKey, registeredHost.rpKey, Preferences(this).videoProfile)
Intent(this, StreamActivity::class.java).let { Intent(this, StreamActivity::class.java).let {
it.putExtra(StreamActivity.EXTRA_CONNECT_INFO, connectInfo) it.putExtra(StreamActivity.EXTRA_CONNECT_INFO, connectInfo)
startActivity(it) startActivity(it)
} }
} }
if(host is DiscoveredDisplayHost && host.discoveredHost.state == DiscoveryHost.State.STANDBY)
{
MaterialAlertDialogBuilder(this)
.setMessage(R.string.alert_message_standby_wakeup)
.setPositiveButton(R.string.action_wakeup) { _, _ ->
viewModel.discoveryManager.sendWakeup(host.host, registeredHost.rpRegistKey)
}
.setNeutralButton(R.string.action_connect_immediately) { _, _ ->
connect()
}
.setNegativeButton(R.string.action_connect_cancel_connect) { _, _ -> }
.create()
.show()
}
else
connect()
} }
else else
{ {
// TODO: show registration Intent(this, RegistActivity::class.java).let {
it.putExtra(RegistActivity.EXTRA_HOST, host.host)
it.putExtra(RegistActivity.EXTRA_BROADCAST, false)
startActivity(it)
}
} }
} }
} }

View file

@ -79,7 +79,7 @@ class RegistActivity: AppCompatActivity(), RevealActivity
viewModel.ps4Version.observe(this, Observer { viewModel.ps4Version.observe(this, Observer {
psnAccountIdHelpGroup.visibility = if(it == RegistViewModel.PS4Version.GE_7) View.VISIBLE else View.GONE psnAccountIdHelpGroup.visibility = if(it == RegistViewModel.PS4Version.GE_7) View.VISIBLE else View.GONE
psnIdTextInputLayout.hint = getString(when(it) psnIdTextInputLayout.hint = getString(when(it!!)
{ {
RegistViewModel.PS4Version.GE_7 -> R.string.hint_regist_psn_account_id RegistViewModel.PS4Version.GE_7 -> R.string.hint_regist_psn_account_id
RegistViewModel.PS4Version.LT_7 -> R.string.hint_regist_psn_online_id RegistViewModel.PS4Version.LT_7 -> R.string.hint_regist_psn_online_id

View file

@ -18,15 +18,15 @@
package com.metallic.chiaki.regist package com.metallic.chiaki.regist
import android.app.Activity import android.app.Activity
import android.app.AlertDialog
import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.text.method.ScrollingMovementMethod import android.text.method.ScrollingMovementMethod
import android.view.View import android.view.View
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders import androidx.lifecycle.ViewModelProviders
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.metallic.chiaki.R import com.metallic.chiaki.R
import com.metallic.chiaki.common.MacAddress import com.metallic.chiaki.common.MacAddress
import com.metallic.chiaki.common.ext.viewModelFactory import com.metallic.chiaki.common.ext.viewModelFactory
@ -55,6 +55,9 @@ class RegistExecuteActivity: AppCompatActivity()
.of(this, viewModelFactory { RegistExecuteViewModel(getDatabase(this)) }) .of(this, viewModelFactory { RegistExecuteViewModel(getDatabase(this)) })
.get(RegistExecuteViewModel::class.java) .get(RegistExecuteViewModel::class.java)
showDuplicateDialog()
return
logTextView.setHorizontallyScrolling(true) logTextView.setHorizontallyScrolling(true)
logTextView.movementMethod = ScrollingMovementMethod() logTextView.movementMethod = ScrollingMovementMethod()
viewModel.logText.observe(this, Observer { viewModel.logText.observe(this, Observer {
@ -123,7 +126,7 @@ class RegistExecuteActivity: AppCompatActivity()
val macStr = viewModel.host?.ps4Mac?.let { MacAddress(it).toString() } ?: "" val macStr = viewModel.host?.ps4Mac?.let { MacAddress(it).toString() } ?: ""
dialog = AlertDialog.Builder(this) dialog = MaterialAlertDialogBuilder(this)
.setMessage(getString(R.string.alert_regist_duplicate, macStr)) .setMessage(getString(R.string.alert_regist_duplicate, macStr))
.setNegativeButton(R.string.action_regist_discard) { _, _ -> } .setNegativeButton(R.string.action_regist_discard) { _, _ -> }
.setPositiveButton(R.string.action_regist_overwrite) { _, _ -> .setPositiveButton(R.string.action_regist_overwrite) { _, _ ->

View file

@ -30,6 +30,7 @@ import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.* import androidx.lifecycle.*
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.metallic.chiaki.* import com.metallic.chiaki.*
import com.metallic.chiaki.R import com.metallic.chiaki.R
import com.metallic.chiaki.lib.ConnectInfo import com.metallic.chiaki.lib.ConnectInfo
@ -142,7 +143,7 @@ class StreamActivity : AppCompatActivity()
{ {
dialog?.dismiss() dialog?.dismiss()
val reasonStr = state.reasonString val reasonStr = state.reasonString
val dialog = AlertDialog.Builder(this) val dialog = MaterialAlertDialogBuilder(this)
.setMessage(getString(R.string.alert_message_session_quit, state.reason.toString()) .setMessage(getString(R.string.alert_message_session_quit, state.reason.toString())
+ (if(reasonStr != null) "\n$reasonStr" else "")) + (if(reasonStr != null) "\n$reasonStr" else ""))
.setPositiveButton(R.string.action_reconnect) { _, _ -> .setPositiveButton(R.string.action_reconnect) { _, _ ->
@ -168,7 +169,7 @@ class StreamActivity : AppCompatActivity()
if(dialogContents != CreateErrorDialog) if(dialogContents != CreateErrorDialog)
{ {
dialog?.dismiss() dialog?.dismiss()
val dialog = AlertDialog.Builder(this) val dialog = MaterialAlertDialogBuilder(this)
.setMessage(getString(R.string.alert_message_session_create_error, state.error.errorCode.toString())) .setMessage(getString(R.string.alert_message_session_create_error, state.error.errorCode.toString()))
.setOnDismissListener { .setOnDismissListener {
dialog = null dialog = null
@ -190,7 +191,7 @@ class StreamActivity : AppCompatActivity()
val view = layoutInflater.inflate(R.layout.dialog_login_pin, null) val view = layoutInflater.inflate(R.layout.dialog_login_pin, null)
val pinEditText = view.findViewById<EditText>(R.id.pinEditText) val pinEditText = view.findViewById<EditText>(R.id.pinEditText)
val dialog = AlertDialog.Builder(this) val dialog = MaterialAlertDialogBuilder(this)
.setMessage( .setMessage(
if(state.pinIncorrect) if(state.pinIncorrect)
R.string.alert_message_login_pin_request_incorrect R.string.alert_message_login_pin_request_incorrect

View file

@ -8,6 +8,9 @@
<string name="alert_message_login_pin_request">Login PIN:</string> <string name="alert_message_login_pin_request">Login PIN:</string>
<string name="alert_message_login_pin_request_incorrect">Entered PIN was incorrect!\nLogin PIN:</string> <string name="alert_message_login_pin_request_incorrect">Entered PIN was incorrect!\nLogin PIN:</string>
<string name="action_reconnect">Reconnect</string> <string name="action_reconnect">Reconnect</string>
<string name="action_wakeup">Wakeup</string>
<string name="action_connect_immediately">Connect</string>
<string name="action_connect_cancel_connect">Cancel</string>
<string name="action_quit_session">Quit</string> <string name="action_quit_session">Quit</string>
<string name="action_login_pin_connect">Connect</string> <string name="action_login_pin_connect">Connect</string>
<string name="action_settings">Settings</string> <string name="action_settings">Settings</string>

View file

@ -8,6 +8,7 @@
<item name="colorOnSecondary">#000000</item> <item name="colorOnSecondary">#000000</item>
<item name="android:statusBarColor">?attr/colorPrimarySurface</item> <item name="android:statusBarColor">?attr/colorPrimarySurface</item>
<item name="android:navigationBarColor">?attr/colorPrimarySurface</item> <item name="android:navigationBarColor">?attr/colorPrimarySurface</item>
<item name="materialAlertDialogTheme">@style/AppTheme.AlertDialog</item>
<item name="android:windowActivityTransitions">true</item> <item name="android:windowActivityTransitions">true</item>
</style> </style>
@ -22,6 +23,15 @@
<item name="android:textColor">@color/floating_action_button_speed_dial_tint</item> <item name="android:textColor">@color/floating_action_button_speed_dial_tint</item>
</style> </style>
<style name="AppTheme.AlertDialog" parent="Theme.MaterialComponents.Dialog.Alert">
<item name="android:textColorPrimary">@android:color/primary_text_dark</item>
<item name="materialButtonStyle">@style/AppTheme.AlertDialog.Button</item>
</style>
<style name="AppTheme.AlertDialog.Button" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
<item name="android:textColor">@color/accent</item>
</style>
<style name="MageTheme" parent="Theme.MaterialComponents.NoActionBar"> <style name="MageTheme" parent="Theme.MaterialComponents.NoActionBar">
<item name="colorPrimary">@color/primary</item> <item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item> <item name="colorPrimaryDark">@color/primary_dark</item>
@ -48,7 +58,7 @@
<item name="android:windowActivityTransitions">true</item> <item name="android:windowActivityTransitions">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:alertDialogTheme">@style/MageTheme.AlertDialog</item> -<item name="materialAlertDialogTheme">@style/AppTheme.AlertDialog</item>
</style> </style>
<style name="MageTheme.Translucent" parent="MageTheme"> <style name="MageTheme.Translucent" parent="MageTheme">
@ -59,15 +69,6 @@
<item name="fontFamily">sans-serif-condensed-light</item> <item name="fontFamily">sans-serif-condensed-light</item>
</style> </style>
<style name="MageTheme.AlertDialog" parent="Theme.MaterialComponents.Dialog.Alert">
<item name="android:textColorPrimary">@android:color/primary_text_light</item>
<item name="materialButtonStyle">@style/MageTheme.AlertDialog.Button</item>
</style>
<style name="MageTheme.AlertDialog.Button" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
<item name="android:textColor">@color/accent</item>
</style>
<style name="MageTheme.TextInputStyle" parent="Widget.MaterialComponents.TextInputLayout.FilledBox"> <style name="MageTheme.TextInputStyle" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
<item name="hintTextColor">?attr/colorAccent</item> <item name="hintTextColor">?attr/colorAccent</item>
<item name="boxCornerRadiusTopStart">16dp</item> <item name="boxCornerRadiusTopStart">16dp</item>
@ -87,10 +88,11 @@
<item name="android:textColor">?attr/colorOnSecondary</item> <item name="android:textColor">?attr/colorOnSecondary</item>
</style> </style>
<style name="StreamTheme" parent="Theme.AppCompat.Light.NoActionBar"> <style name="StreamTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">@color/primary</item> <item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item> <item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item> <item name="colorAccent">@color/accent</item>
<item name="materialAlertDialogTheme">@style/AppTheme.AlertDialog</item>
<item name="android:windowBackground">@color/stream_background</item> <item name="android:windowBackground">@color/stream_background</item>
</style> </style>
</resources> </resources>