diff --git a/android/app/src/main/java/com/metallic/chiaki/lib/Chiaki.kt b/android/app/src/main/java/com/metallic/chiaki/lib/Chiaki.kt
index c6ef9c4..5579fbc 100644
--- a/android/app/src/main/java/com/metallic/chiaki/lib/Chiaki.kt
+++ b/android/app/src/main/java/com/metallic/chiaki/lib/Chiaki.kt
@@ -58,8 +58,23 @@ class ErrorCode(val value: Int)
var isSuccess = value == 0
}
-class ChiakiLog(val levelMask: Int)
+class ChiakiLog(val levelMask: Int, val callback: (level: Int, text: String) -> Unit)
{
+ companion object
+ {
+ fun formatLog(level: Int, text: String) =
+ "[${when(level)
+ {
+ Level.DEBUG.value -> "D"
+ Level.VERBOSE.value -> "V"
+ Level.INFO.value -> "I"
+ Level.WARNING.value -> "W"
+ Level.ERROR.value -> "E"
+ else -> "?"
+ }
+ }] $text"
+ }
+
enum class Level(val value: Int)
{
DEBUG(1 shl 4),
@@ -72,7 +87,7 @@ class ChiakiLog(val levelMask: Int)
private fun log(level: Int, text: String)
{
- Log.i("ChiakiJavaLog", "level $level, text $text")
+ callback(level, text)
}
}
diff --git a/android/app/src/main/java/com/metallic/chiaki/regist/ChiakiRxLog.kt b/android/app/src/main/java/com/metallic/chiaki/regist/ChiakiRxLog.kt
new file mode 100644
index 0000000..362cce4
--- /dev/null
+++ b/android/app/src/main/java/com/metallic/chiaki/regist/ChiakiRxLog.kt
@@ -0,0 +1,40 @@
+/*
+ * 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 .
+ */
+
+package com.metallic.chiaki.regist
+
+import com.metallic.chiaki.lib.ChiakiLog
+import io.reactivex.Observable
+import io.reactivex.subjects.BehaviorSubject
+import java.util.concurrent.locks.ReentrantLock
+import kotlin.concurrent.withLock
+
+class ChiakiRxLog(levelMask: Int)
+{
+ private val accSubject: BehaviorSubject = BehaviorSubject.create().also {
+ it.onNext("")
+ }
+ private val accMutex = ReentrantLock()
+ val logText: Observable get() = accSubject
+
+ val log = ChiakiLog(levelMask, callback = { level, text ->
+ accMutex.withLock {
+ val cur = accSubject.value ?: ""
+ accSubject.onNext(cur + (if(cur.isEmpty()) "" else "\n") + text)
+ }
+ })
+}
\ No newline at end of file
diff --git a/android/app/src/main/java/com/metallic/chiaki/regist/RegistExecuteActivity.kt b/android/app/src/main/java/com/metallic/chiaki/regist/RegistExecuteActivity.kt
index 058e973..b03ca3e 100644
--- a/android/app/src/main/java/com/metallic/chiaki/regist/RegistExecuteActivity.kt
+++ b/android/app/src/main/java/com/metallic/chiaki/regist/RegistExecuteActivity.kt
@@ -18,10 +18,15 @@
package com.metallic.chiaki.regist
import android.os.Bundle
+import android.text.method.ScrollingMovementMethod
+import android.util.Log
import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import com.metallic.chiaki.R
import com.metallic.chiaki.lib.RegistInfo
+import kotlinx.android.synthetic.main.activity_regist_execute.*
+import kotlin.math.max
class RegistExecuteActivity: AppCompatActivity()
{
@@ -42,9 +47,17 @@ class RegistExecuteActivity: AppCompatActivity()
viewModel = ViewModelProviders.of(this).get(RegistExecuteViewModel::class.java)
+ logTextView.setHorizontallyScrolling(true)
+ logTextView.movementMethod = ScrollingMovementMethod()
+ viewModel.logText.observe(this, Observer {
+ logTextView.text = it
+ val scrollY = logTextView.layout.getLineBottom(logTextView.lineCount - 1) - logTextView.height + logTextView.paddingTop + logTextView.paddingBottom
+ logTextView.scrollTo(0, max(scrollY, 0))
+ })
+
val registInfo = RegistInfo(
intent.getStringExtra(EXTRA_HOST) ?: return,
- intent.getBooleanExtra(EXTRA_BROADCAST, false) ?: return,
+ intent.getBooleanExtra(EXTRA_BROADCAST, false),
intent.getStringExtra(EXTRA_PSN_ID) ?: return,
intent.getIntExtra(EXTRA_PIN, 0).toUInt()
)
diff --git a/android/app/src/main/java/com/metallic/chiaki/regist/RegistExecuteViewModel.kt b/android/app/src/main/java/com/metallic/chiaki/regist/RegistExecuteViewModel.kt
index 1a536ff..2a049af 100644
--- a/android/app/src/main/java/com/metallic/chiaki/regist/RegistExecuteViewModel.kt
+++ b/android/app/src/main/java/com/metallic/chiaki/regist/RegistExecuteViewModel.kt
@@ -20,6 +20,7 @@ package com.metallic.chiaki.regist
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
+import com.metallic.chiaki.common.ext.toLiveData
import com.metallic.chiaki.lib.*
class RegistExecuteViewModel: ViewModel()
@@ -36,16 +37,18 @@ class RegistExecuteViewModel: ViewModel()
private val _state = MutableLiveData(State.IDLE)
val state: LiveData get() = _state
- private val log = ChiakiLog(ChiakiLog.Level.ALL.value/* and ChiakiLog.Level.VERBOSE.value.inv()*/)
+ private val log = ChiakiRxLog(ChiakiLog.Level.ALL.value/* and ChiakiLog.Level.VERBOSE.value.inv()*/)
private var regist: Regist? = null
+ val logText: LiveData = log.logText.toLiveData()
+
fun start(info: RegistInfo)
{
if(regist != null)
return
try
{
- regist = Regist(info, log, this::registEvent)
+ regist = Regist(info, log.log, this::registEvent)
_state.value = State.RUNNING
}
catch(error: CreateError)
diff --git a/android/app/src/main/res/drawable/ic_share.xml b/android/app/src/main/res/drawable/ic_share.xml
new file mode 100644
index 0000000..e3fe874
--- /dev/null
+++ b/android/app/src/main/res/drawable/ic_share.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/android/app/src/main/res/layout/activity_regist_execute.xml b/android/app/src/main/res/layout/activity_regist_execute.xml
index 2ab963a..235b0a9 100644
--- a/android/app/src/main/res/layout/activity_regist_execute.xml
+++ b/android/app/src/main/res/layout/activity_regist_execute.xml
@@ -1,10 +1,66 @@
+ android:layout_height="match_parent"
+ android:padding="8dp">
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index c9e2df3..bd3337d 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -26,4 +26,5 @@
Please enter a valid host name
Please enter a valid PSN ID
Please enter a valid %d-digit PIN
+ Share Log
diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml
index 5ade4e0..eea547b 100644
--- a/android/app/src/main/res/values/styles.xml
+++ b/android/app/src/main/res/values/styles.xml
@@ -69,6 +69,7 @@
- ?attr/colorOnSecondary
- ?attr/colorSecondary
- ?attr/colorOnSecondary
+ - ?attr/colorOnSecondary