diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 3708e74..ddfd9f9 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -44,7 +44,7 @@
android:configChanges="keyboard|keyboardHidden|orientation|screenSize" />
diff --git a/android/app/src/main/java/com/metallic/chiaki/common/ManualHost.kt b/android/app/src/main/java/com/metallic/chiaki/common/ManualHost.kt
index ecc5ca5..c265848 100644
--- a/android/app/src/main/java/com/metallic/chiaki/common/ManualHost.kt
+++ b/android/app/src/main/java/com/metallic/chiaki/common/ManualHost.kt
@@ -21,6 +21,7 @@ import androidx.room.*
import androidx.room.ForeignKey.SET_NULL
import io.reactivex.Completable
import io.reactivex.Flowable
+import io.reactivex.Single
@Entity(tableName = "manual_host",
foreignKeys = [
@@ -37,12 +38,37 @@ data class ManualHost(
@ColumnInfo(name = "registered_host") val registeredHost: Long?
)
+data class ManualHostAndRegisteredHost(
+ @Embedded(prefix = "manual_host_") val manualHost: ManualHost,
+ @Embedded val registeredHost: RegisteredHost?
+)
+
@Dao
interface ManualHostDao
{
+ @Query("SELECT * FROM manual_host WHERE id = :id")
+ fun getById(id: Long): Single
+
+ @Query("""SELECT
+ manual_host.id as manual_host_id,
+ manual_host.host as manual_host_host,
+ manual_host.registered_host as manual_host_registered_host,
+ registered_host.*
+ FROM manual_host LEFT OUTER JOIN registered_host ON manual_host.registered_host = registered_host.id WHERE manual_host.id = :id""")
+ fun getByIdWithRegisteredHost(id: Long): Single
+
@Query("SELECT * FROM manual_host")
fun getAll(): Flowable>
+ @Query("UPDATE manual_host SET registered_host = :registeredHostId WHERE id = :manualHostId")
+ fun assignRegisteredHost(manualHostId: Long, registeredHostId: Long?): Completable
+
@Insert
fun insert(host: ManualHost): Completable
+
+ @Delete
+ fun delete(host: ManualHost): Completable
+
+ @Update
+ fun update(host: ManualHost): Completable
}
\ No newline at end of file
diff --git a/android/app/src/main/java/com/metallic/chiaki/common/ext/RxLiveData.kt b/android/app/src/main/java/com/metallic/chiaki/common/ext/RxLiveData.kt
index 04ef832..6dc5ebf 100644
--- a/android/app/src/main/java/com/metallic/chiaki/common/ext/RxLiveData.kt
+++ b/android/app/src/main/java/com/metallic/chiaki/common/ext/RxLiveData.kt
@@ -20,7 +20,9 @@ package com.metallic.chiaki.common.ext
import androidx.lifecycle.LiveDataReactiveStreams
import io.reactivex.BackpressureStrategy
import io.reactivex.Observable
+import io.reactivex.Single
import org.reactivestreams.Publisher
fun Publisher.toLiveData() = LiveDataReactiveStreams.fromPublisher(this)
-fun Observable.toLiveData() = this.toFlowable(BackpressureStrategy.LATEST).toLiveData()
\ No newline at end of file
+fun Observable.toLiveData() = this.toFlowable(BackpressureStrategy.LATEST).toLiveData()
+fun Single.toLiveData() = this.toFlowable().toLiveData()
\ No newline at end of file
diff --git a/android/app/src/main/java/com/metallic/chiaki/main/DisplayHostRecyclerViewAdapter.kt b/android/app/src/main/java/com/metallic/chiaki/main/DisplayHostRecyclerViewAdapter.kt
index 8c37c14..b37eb4f 100644
--- a/android/app/src/main/java/com/metallic/chiaki/main/DisplayHostRecyclerViewAdapter.kt
+++ b/android/app/src/main/java/com/metallic/chiaki/main/DisplayHostRecyclerViewAdapter.kt
@@ -21,11 +21,15 @@ import android.util.Log
import android.view.View
import android.view.ViewGroup
import android.view.animation.AnimationUtils
+import android.widget.PopupMenu
+import androidx.core.view.isGone
+import androidx.core.view.isVisible
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.metallic.chiaki.R
import com.metallic.chiaki.common.DiscoveredDisplayHost
import com.metallic.chiaki.common.DisplayHost
+import com.metallic.chiaki.common.ManualDisplayHost
import com.metallic.chiaki.common.ext.inflate
import com.metallic.chiaki.lib.DiscoveryHost
import kotlinx.android.synthetic.main.item_display_host.view.*
@@ -38,7 +42,12 @@ class DisplayHostDiffCallback(val old: List, val new: List Unit): RecyclerView.Adapter()
+class DisplayHostRecyclerViewAdapter(
+ val clickCallback: (DisplayHost) -> Unit,
+ val wakeupCallback: (DisplayHost) -> Unit,
+ val editCallback: (DisplayHost) -> Unit,
+ val deleteCallback: (DisplayHost) -> Unit
+): RecyclerView.Adapter()
{
var hosts: List = listOf()
set(value)
@@ -91,6 +100,36 @@ class DisplayHostRecyclerViewAdapter(val clickCallback: (DisplayHost) -> Unit):
else
R.drawable.ic_console)
it.setOnClickListener { clickCallback(host) }
+
+ val canWakeup = host.registeredHost != null
+ val canEditDelete = host is ManualDisplayHost
+ if(canWakeup || canEditDelete)
+ {
+ it.menuButton.isVisible = true
+ it.menuButton.setOnClickListener { _ ->
+ val menu = PopupMenu(context, it.menuButton)
+ menu.menuInflater.inflate(R.menu.display_host, menu.menu)
+ menu.menu.findItem(R.id.action_wakeup).isVisible = canWakeup
+ menu.menu.findItem(R.id.action_edit).isVisible = canEditDelete
+ menu.menu.findItem(R.id.action_delete).isVisible = canEditDelete
+ menu.setOnMenuItemClickListener { menuItem ->
+ when(menuItem.itemId)
+ {
+ R.id.action_wakeup -> wakeupCallback(host)
+ R.id.action_edit -> editCallback(host)
+ R.id.action_delete -> deleteCallback(host)
+ else -> return@setOnMenuItemClickListener false
+ }
+ true
+ }
+ menu.show()
+ }
+ }
+ else
+ {
+ it.menuButton.isGone = true
+ it.menuButton.setOnClickListener(null)
+ }
}
}
}
\ No newline at end of file
diff --git a/android/app/src/main/java/com/metallic/chiaki/main/MainActivity.kt b/android/app/src/main/java/com/metallic/chiaki/main/MainActivity.kt
index d7124f2..7904b46 100644
--- a/android/app/src/main/java/com/metallic/chiaki/main/MainActivity.kt
+++ b/android/app/src/main/java/com/metallic/chiaki/main/MainActivity.kt
@@ -28,15 +28,12 @@ import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.metallic.chiaki.R
-import com.metallic.chiaki.common.DiscoveredDisplayHost
-import com.metallic.chiaki.common.DisplayHost
-import com.metallic.chiaki.common.Preferences
+import com.metallic.chiaki.common.*
import com.metallic.chiaki.common.ext.putRevealExtra
import com.metallic.chiaki.common.ext.viewModelFactory
-import com.metallic.chiaki.common.getDatabase
import com.metallic.chiaki.lib.ConnectInfo
import com.metallic.chiaki.lib.DiscoveryHost
-import com.metallic.chiaki.manualconsole.AddManualConsoleActivity
+import com.metallic.chiaki.manualconsole.EditManualConsoleActivity
import com.metallic.chiaki.regist.RegistActivity
import com.metallic.chiaki.settings.SettingsActivity
import com.metallic.chiaki.stream.StreamActivity
@@ -73,7 +70,7 @@ class MainActivity : AppCompatActivity()
.of(this, viewModelFactory { MainViewModel(getDatabase(this), Preferences(this)) })
.get(MainViewModel::class.java)
- val recyclerViewAdapter = DisplayHostRecyclerViewAdapter(this::hostTriggered)
+ val recyclerViewAdapter = DisplayHostRecyclerViewAdapter(this::hostTriggered, this::wakeupHost, this::editHost, this::deleteHost)
hostsRecyclerView.adapter = recyclerViewAdapter
hostsRecyclerView.layoutManager = LinearLayoutManager(this)
viewModel.displayHosts.observe(this, Observer {
@@ -153,7 +150,7 @@ class MainActivity : AppCompatActivity()
private fun addManualConsole()
{
- Intent(this, AddManualConsoleActivity::class.java).also {
+ Intent(this, EditManualConsoleActivity::class.java).also {
it.putRevealExtra(addManualButton, rootLayout)
startActivity(it, ActivityOptions.makeSceneTransitionAnimation(this).toBundle())
}
@@ -185,7 +182,7 @@ class MainActivity : AppCompatActivity()
MaterialAlertDialogBuilder(this)
.setMessage(R.string.alert_message_standby_wakeup)
.setPositiveButton(R.string.action_wakeup) { _, _ ->
- viewModel.discoveryManager.sendWakeup(host.host, registeredHost.rpRegistKey)
+ wakeupHost(host)
}
.setNeutralButton(R.string.action_connect_immediately) { _, _ ->
connect()
@@ -202,8 +199,40 @@ class MainActivity : AppCompatActivity()
Intent(this, RegistActivity::class.java).let {
it.putExtra(RegistActivity.EXTRA_HOST, host.host)
it.putExtra(RegistActivity.EXTRA_BROADCAST, false)
+ if(host is ManualDisplayHost)
+ it.putExtra(RegistActivity.EXTRA_ASSIGN_MANUAL_HOST_ID, host.manualHost.id)
startActivity(it)
}
}
}
+
+ private fun wakeupHost(host: DisplayHost)
+ {
+ val registeredHost = host.registeredHost ?: return
+ viewModel.discoveryManager.sendWakeup(host.host, registeredHost.rpRegistKey)
+ }
+
+ private fun editHost(host: DisplayHost)
+ {
+ if(host !is ManualDisplayHost)
+ return
+ Intent(this, EditManualConsoleActivity::class.java).also {
+ it.putExtra(EditManualConsoleActivity.EXTRA_MANUAL_HOST_ID, host.manualHost.id)
+ startActivity(it)
+ }
+ }
+
+ private fun deleteHost(host: DisplayHost)
+ {
+ if(host !is ManualDisplayHost)
+ return
+ MaterialAlertDialogBuilder(this)
+ .setMessage(getString(R.string.alert_message_delete_manual_host, host.manualHost.host))
+ .setPositiveButton(R.string.action_delete) { _, _ ->
+ viewModel.deleteManualHost(host.manualHost)
+ }
+ .setNegativeButton(R.string.action_keep) { _, _ -> }
+ .create()
+ .show()
+ }
}
diff --git a/android/app/src/main/java/com/metallic/chiaki/main/MainViewModel.kt b/android/app/src/main/java/com/metallic/chiaki/main/MainViewModel.kt
index ffb9d74..02940bc 100644
--- a/android/app/src/main/java/com/metallic/chiaki/main/MainViewModel.kt
+++ b/android/app/src/main/java/com/metallic/chiaki/main/MainViewModel.kt
@@ -18,10 +18,7 @@
package com.metallic.chiaki.main
import androidx.lifecycle.ViewModel
-import com.metallic.chiaki.common.AppDatabase
-import com.metallic.chiaki.common.DiscoveredDisplayHost
-import com.metallic.chiaki.common.ManualDisplayHost
-import com.metallic.chiaki.common.Preferences
+import com.metallic.chiaki.common.*
import com.metallic.chiaki.common.ext.toLiveData
import com.metallic.chiaki.discovery.DiscoveryManager
import com.metallic.chiaki.discovery.ps4Mac
@@ -29,6 +26,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.rxkotlin.Observables
import io.reactivex.rxkotlin.addTo
+import io.reactivex.schedulers.Schedulers
class MainViewModel(val database: AppDatabase, val preferences: Preferences): ViewModel()
{
@@ -64,6 +62,16 @@ class MainViewModel(val database: AppDatabase, val preferences: Preferences): Vi
discoveryManager.discoveryActive.toLiveData()
}
+ fun deleteManualHost(manualHost: ManualHost)
+ {
+ database.manualHostDao()
+ .delete(manualHost)
+ .onErrorComplete()
+ .subscribeOn(Schedulers.io())
+ .subscribe()
+ .addTo(disposable)
+ }
+
override fun onCleared()
{
super.onCleared()
diff --git a/android/app/src/main/java/com/metallic/chiaki/manualconsole/AddManualConsoleActivity.kt b/android/app/src/main/java/com/metallic/chiaki/manualconsole/EditManualConsoleActivity.kt
similarity index 82%
rename from android/app/src/main/java/com/metallic/chiaki/manualconsole/AddManualConsoleActivity.kt
rename to android/app/src/main/java/com/metallic/chiaki/manualconsole/EditManualConsoleActivity.kt
index df5d47d..01ed245 100644
--- a/android/app/src/main/java/com/metallic/chiaki/manualconsole/AddManualConsoleActivity.kt
+++ b/android/app/src/main/java/com/metallic/chiaki/manualconsole/EditManualConsoleActivity.kt
@@ -22,13 +22,11 @@ import android.os.Bundle
import android.view.View
import android.view.Window
import android.widget.AdapterView
-import android.widget.AdapterView.OnItemSelectedListener
import android.widget.ArrayAdapter
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import com.metallic.chiaki.R
-import com.metallic.chiaki.common.ManualHost
import com.metallic.chiaki.common.RegisteredHost
import com.metallic.chiaki.common.ext.RevealActivity
import com.metallic.chiaki.common.ext.viewModelFactory
@@ -36,27 +34,42 @@ import com.metallic.chiaki.common.getDatabase
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.rxkotlin.addTo
-import kotlinx.android.synthetic.main.activity_add_manual.*
+import kotlinx.android.synthetic.main.activity_edit_manual.*
-class AddManualConsoleActivity: AppCompatActivity(), RevealActivity
+class EditManualConsoleActivity: AppCompatActivity(), RevealActivity
{
+ companion object
+ {
+ const val EXTRA_MANUAL_HOST_ID = "manual_host_id"
+ }
+
override val revealIntent: Intent get() = intent
override val revealRootLayout: View get() = rootLayout
override val revealWindow: Window get() = window
- private lateinit var viewModel: AddManualConsoleViewModel
+ private lateinit var viewModel: EditManualConsoleViewModel
private val disposable = CompositeDisposable()
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_add_manual)
+ setContentView(R.layout.activity_edit_manual)
handleReveal()
viewModel = ViewModelProviders
- .of(this, viewModelFactory { AddManualConsoleViewModel(getDatabase(this)) })
- .get(AddManualConsoleViewModel::class.java)
+ .of(this, viewModelFactory {
+ EditManualConsoleViewModel(getDatabase(this),
+ if(intent.hasExtra(EXTRA_MANUAL_HOST_ID))
+ intent.getLongExtra(EXTRA_MANUAL_HOST_ID, 0)
+ else
+ null)
+ })
+ .get(EditManualConsoleViewModel::class.java)
+
+ viewModel.existingHost?.observe(this, Observer {
+ hostEditText.setText(it.host)
+ })
viewModel.selectedRegisteredHost.observe(this, Observer {
registeredHostTextView.setText(titleForRegisteredHost(it))
diff --git a/android/app/src/main/java/com/metallic/chiaki/manualconsole/AddManualConsoleViewModel.kt b/android/app/src/main/java/com/metallic/chiaki/manualconsole/EditManualConsoleViewModel.kt
similarity index 62%
rename from android/app/src/main/java/com/metallic/chiaki/manualconsole/AddManualConsoleViewModel.kt
rename to android/app/src/main/java/com/metallic/chiaki/manualconsole/EditManualConsoleViewModel.kt
index 7b0888c..512e153 100644
--- a/android/app/src/main/java/com/metallic/chiaki/manualconsole/AddManualConsoleViewModel.kt
+++ b/android/app/src/main/java/com/metallic/chiaki/manualconsole/EditManualConsoleViewModel.kt
@@ -17,6 +17,8 @@
package com.metallic.chiaki.manualconsole
+import android.util.Log
+import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.metallic.chiaki.common.AppDatabase
@@ -26,7 +28,7 @@ import com.metallic.chiaki.common.ext.toLiveData
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
-class AddManualConsoleViewModel(val database: AppDatabase): ViewModel()
+class EditManualConsoleViewModel(val database: AppDatabase, manualHostId: Long?): ViewModel()
{
val registeredHosts by lazy {
database.registeredHostDao().getAll().observeOn(AndroidSchedulers.mainThread())
@@ -39,10 +41,35 @@ class AddManualConsoleViewModel(val database: AppDatabase): ViewModel()
.toLiveData()
}
+ val existingHost: LiveData? =
+ if(manualHostId != null)
+ database.manualHostDao()
+ .getByIdWithRegisteredHost(manualHostId)
+ .toFlowable()
+ .doOnError {
+ Log.e("EditManualConsole", "Failed to fetch existing manual host", it)
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .doOnNext { hosts ->
+ selectedRegisteredHost.value = hosts.registeredHost
+ }
+ .map { hosts -> hosts.manualHost }
+ .toLiveData()
+ else
+ null
+
var selectedRegisteredHost = MutableLiveData(null)
fun saveHost(host: String) =
database.manualHostDao()
- .insert(ManualHost(host = host, registeredHost = selectedRegisteredHost.value?.id))
+ .let {
+ val registeredHost = selectedRegisteredHost.value?.id
+ val existingHost = existingHost?.value
+ if(existingHost != null)
+ it.update(ManualHost(id = existingHost.id, host = host, registeredHost = registeredHost))
+ else
+ it.insert(ManualHost(host = host, registeredHost = registeredHost))
+ }
.subscribeOn(Schedulers.io())
}
\ No newline at end of file
diff --git a/android/app/src/main/java/com/metallic/chiaki/regist/RegistActivity.kt b/android/app/src/main/java/com/metallic/chiaki/regist/RegistActivity.kt
index aaff1db..aa8b650 100644
--- a/android/app/src/main/java/com/metallic/chiaki/regist/RegistActivity.kt
+++ b/android/app/src/main/java/com/metallic/chiaki/regist/RegistActivity.kt
@@ -37,6 +37,7 @@ class RegistActivity: AppCompatActivity(), RevealActivity
{
const val EXTRA_HOST = "regist_host"
const val EXTRA_BROADCAST = "regist_broadcast"
+ const val EXTRA_ASSIGN_MANUAL_HOST_ID = "assign_manual_host_id"
private const val PIN_LENGTH = 8
@@ -130,6 +131,8 @@ class RegistActivity: AppCompatActivity(), RevealActivity
Intent(this, RegistExecuteActivity::class.java).also {
it.putExtra(RegistExecuteActivity.EXTRA_REGIST_INFO, registInfo)
+ if(intent.hasExtra(EXTRA_ASSIGN_MANUAL_HOST_ID))
+ it.putExtra(RegistExecuteActivity.EXTRA_ASSIGN_MANUAL_HOST_ID, intent.getLongExtra(EXTRA_ASSIGN_MANUAL_HOST_ID, 0L))
startActivityForResult(it, REQUEST_REGIST)
}
}
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 9bf06f0..4136248 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
@@ -40,6 +40,7 @@ class RegistExecuteActivity: AppCompatActivity()
companion object
{
const val EXTRA_REGIST_INFO = "regist_info"
+ const val EXTRA_ASSIGN_MANUAL_HOST_ID = "assign_manual_host_id"
const val RESULT_FAILED = Activity.RESULT_FIRST_USER
}
@@ -105,7 +106,11 @@ class RegistExecuteActivity: AppCompatActivity()
finish()
return
}
- viewModel.start(registInfo)
+ viewModel.start(registInfo,
+ if(intent.hasExtra(EXTRA_ASSIGN_MANUAL_HOST_ID))
+ intent.getLongExtra(EXTRA_ASSIGN_MANUAL_HOST_ID, 0)
+ else
+ null)
}
override fun onStop()
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 2b0187f..8be8343 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
@@ -56,13 +56,16 @@ class RegistExecuteViewModel(val database: AppDatabase): ViewModel()
var host: RegistHost? = null
private set
- fun start(info: RegistInfo)
+ private var assignManualHostId: Long? = null
+
+ fun start(info: RegistInfo, assignManualHostId: Long?)
{
if(regist != null)
return
try
{
regist = Regist(info, log.log, this::registEvent)
+ this.assignManualHostId = assignManualHostId
_state.value = State.RUNNING
}
catch(error: CreateError)
@@ -106,13 +109,23 @@ class RegistExecuteViewModel(val database: AppDatabase): ViewModel()
fun saveHost()
{
val host = host ?: return
+ val assignManualHostId = assignManualHostId
val dao = database.registeredHostDao()
+ val manualHostDao = database.manualHostDao()
val registeredHost = RegisteredHost(host)
dao.deleteByMac(registeredHost.ps4Mac)
.andThen(dao.insert(registeredHost))
+ .let {
+ if(assignManualHostId != null)
+ it.flatMapCompletable { registeredHostId ->
+ manualHostDao.assignRegisteredHost(assignManualHostId, registeredHostId)
+ }
+ else
+ it.ignoreElement()
+ }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
- .subscribe { _ -> /* No, IntelliJ, this "_ ->" IS necessary. */
+ .subscribe {
Log.i("RegistExecute", "Registered Host saved in db")
_state.value = State.SUCCESSFUL
}
diff --git a/android/app/src/main/java/com/metallic/chiaki/settings/SettingsRegisteredHostsFragment.kt b/android/app/src/main/java/com/metallic/chiaki/settings/SettingsRegisteredHostsFragment.kt
index 70c81cf..0306b84 100644
--- a/android/app/src/main/java/com/metallic/chiaki/settings/SettingsRegisteredHostsFragment.kt
+++ b/android/app/src/main/java/com/metallic/chiaki/settings/SettingsRegisteredHostsFragment.kt
@@ -62,10 +62,10 @@ class SettingsRegisteredHostsFragment: AppCompatDialogFragment(), TitleFragment
val host = viewModel.registeredHosts.value?.getOrNull(pos) ?: return
MaterialAlertDialogBuilder(viewHolder.itemView.context)
.setMessage(getString(R.string.alert_message_delete_registered_host, host.ps4Nickname, host.ps4Mac.toString()))
- .setPositiveButton(R.string.alert_action_delete_registered_host) { _, _ ->
+ .setPositiveButton(R.string.action_delete) { _, _ ->
viewModel.deleteHost(host)
}
- .setNegativeButton(R.string.alert_action_keep_registered_host) { _, _ ->
+ .setNegativeButton(R.string.action_keep) { _, _ ->
adapter.notifyItemChanged(pos) // to reset the swipe
}
.create()
diff --git a/android/app/src/main/res/drawable/ic_overflow.xml b/android/app/src/main/res/drawable/ic_overflow.xml
new file mode 100644
index 0000000..ecd0f0c
--- /dev/null
+++ b/android/app/src/main/res/drawable/ic_overflow.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/android/app/src/main/res/layout/activity_add_manual.xml b/android/app/src/main/res/layout/activity_edit_manual.xml
similarity index 98%
rename from android/app/src/main/res/layout/activity_add_manual.xml
rename to android/app/src/main/res/layout/activity_edit_manual.xml
index f806d60..0550aa9 100644
--- a/android/app/src/main/res/layout/activity_add_manual.xml
+++ b/android/app/src/main/res/layout/activity_edit_manual.xml
@@ -30,7 +30,7 @@
android:id="@+id/titleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:text="@string/title_add_manual"
+ android:text="@string/title_edit_manual"
android:textSize="32sp"
android:gravity="center"
android:layout_marginTop="16dp"
diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml
index 0642ac5..d7f88d4 100644
--- a/android/app/src/main/res/layout/activity_main.xml
+++ b/android/app/src/main/res/layout/activity_main.xml
@@ -11,7 +11,7 @@
android:id="@+id/hostsRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingBottom="8dp"
+ android:paddingBottom="96dp"
android:clipToPadding="false"
android:clipChildren="false"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
diff --git a/android/app/src/main/res/layout/item_display_host.xml b/android/app/src/main/res/layout/item_display_host.xml
index 1d4a953..21aedc5 100644
--- a/android/app/src/main/res/layout/item_display_host.xml
+++ b/android/app/src/main/res/layout/item_display_host.xml
@@ -37,6 +37,16 @@
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 6bd60de..e78c484 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -45,7 +45,7 @@
The console with MAC %s has already been registered. Should the previous record be overwritten?
Overwrite
Cancel
- Add Console Manually
+ Manual Console Entry
Save
Registered Console
Register on first Connection
@@ -59,8 +59,10 @@
Verbose Logging
Warning: This logs a LOT! Don\'t enable for regular use.
Are you sure you want to delete the registered console %s with ID %s?
- Delete
- Keep
+ Are you sure you want to delete the console entry for %s?
+ Keep
+ Delete
+ Edit
discovery_enabled