mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-03-12 05:25:23 -07:00
Much better Host Animations on Android
This commit is contained in:
parent
16791b7704
commit
bf57359929
android/app
@ -68,5 +68,4 @@ dependencies {
|
||||
kapt "androidx.room:room-compiler:$room_version"
|
||||
implementation "androidx.room:room-ktx:$room_version"
|
||||
implementation "androidx.room:room-rxjava2:$room_version"
|
||||
|
||||
}
|
||||
|
@ -37,6 +37,16 @@ class DiscoveredDisplayHost(
|
||||
override val host get() = discoveredHost.hostAddr ?: ""
|
||||
override val name get() = discoveredHost.hostName ?: registeredHost?.ps4Nickname
|
||||
override val id get() = discoveredHost.hostId ?: registeredHost?.ps4Mac?.toString()
|
||||
|
||||
override fun equals(other: Any?): Boolean =
|
||||
if(other !is DiscoveredDisplayHost)
|
||||
false
|
||||
else
|
||||
other.discoveredHost == discoveredHost && other.registeredHost == registeredHost
|
||||
|
||||
override fun hashCode() = 31 * (registeredHost?.hashCode() ?: 0) + discoveredHost.hashCode()
|
||||
|
||||
override fun toString() = "DiscoveredDisplayHost{${registeredHost}, ${discoveredHost}}"
|
||||
}
|
||||
|
||||
class ManualDisplayHost(
|
||||
@ -47,4 +57,14 @@ class ManualDisplayHost(
|
||||
override val host get() = manualHost.host
|
||||
override val name get() = registeredHost?.ps4Nickname
|
||||
override val id get() = registeredHost?.ps4Mac?.toString()
|
||||
|
||||
override fun equals(other: Any?): Boolean =
|
||||
if(other !is ManualDisplayHost)
|
||||
false
|
||||
else
|
||||
other.manualHost == manualHost && other.registeredHost == registeredHost
|
||||
|
||||
override fun hashCode() = 31 * (registeredHost?.hashCode() ?: 0) + manualHost.hashCode()
|
||||
|
||||
override fun toString() = "ManualDisplayHost{${registeredHost}, ${manualHost}}"
|
||||
}
|
@ -17,8 +17,11 @@
|
||||
|
||||
package com.metallic.chiaki.main
|
||||
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.animation.AnimationUtils
|
||||
import androidx.recyclerview.widget.DiffUtil
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.metallic.chiaki.R
|
||||
import com.metallic.chiaki.common.DiscoveredDisplayHost
|
||||
@ -27,13 +30,22 @@ import com.metallic.chiaki.common.ext.inflate
|
||||
import com.metallic.chiaki.lib.DiscoveryHost
|
||||
import kotlinx.android.synthetic.main.item_display_host.view.*
|
||||
|
||||
class DisplayHostDiffCallback(val old: List<DisplayHost>, val new: List<DisplayHost>): DiffUtil.Callback()
|
||||
{
|
||||
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int) = (old[oldItemPosition] == new[newItemPosition])
|
||||
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int) = (old[oldItemPosition] == new[newItemPosition])
|
||||
override fun getOldListSize() = old.size
|
||||
override fun getNewListSize() = new.size
|
||||
}
|
||||
|
||||
class DisplayHostRecyclerViewAdapter(val clickCallback: (DisplayHost) -> Unit): RecyclerView.Adapter<DisplayHostRecyclerViewAdapter.ViewHolder>()
|
||||
{
|
||||
var hosts: List<DisplayHost> = listOf()
|
||||
set(value)
|
||||
{
|
||||
val diff = DiffUtil.calculateDiff(DisplayHostDiffCallback(field, value))
|
||||
field = value
|
||||
notifyDataSetChanged()
|
||||
diff.dispatchUpdatesTo(this)
|
||||
}
|
||||
|
||||
class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView)
|
||||
|
@ -77,8 +77,10 @@ class MainActivity : AppCompatActivity()
|
||||
hostsRecyclerView.adapter = recyclerViewAdapter
|
||||
hostsRecyclerView.layoutManager = LinearLayoutManager(this)
|
||||
viewModel.displayHosts.observe(this, Observer {
|
||||
val top = hostsRecyclerView.computeVerticalScrollOffset() == 0
|
||||
recyclerViewAdapter.hosts = it
|
||||
hostsRecyclerView.scheduleLayoutAnimation()
|
||||
if(top)
|
||||
hostsRecyclerView.scrollToPosition(0)
|
||||
})
|
||||
|
||||
viewModel.discoveryActive.observe(this, Observer { active ->
|
||||
|
@ -34,7 +34,7 @@ class ChiakiRxLog(levelMask: Int)
|
||||
val log = ChiakiLog(levelMask, callback = { level, text ->
|
||||
accMutex.withLock {
|
||||
val cur = accSubject.value ?: ""
|
||||
accSubject.onNext(cur + (if(cur.isEmpty()) "" else "\n") + text)
|
||||
accSubject.onNext(cur + (if(cur.isEmpty()) "" else "\n") + ChiakiLog.formatLog(level, text))
|
||||
}
|
||||
})
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:duration="200">
|
||||
<translate
|
||||
android:fromXDelta="20%"
|
||||
android:toXDelta="0"
|
||||
android:interpolator="@android:anim/decelerate_interpolator"/>
|
||||
|
||||
<alpha
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0"
|
||||
android:interpolator="@android:anim/decelerate_interpolator"/>
|
||||
</set>
|
@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layoutAnimation
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:animation="@anim/item_drop"
|
||||
android:delay="15%"
|
||||
android:animationOrder="normal" />
|
@ -14,7 +14,6 @@
|
||||
android:paddingBottom="8dp"
|
||||
android:clipToPadding="false"
|
||||
android:clipChildren="false"
|
||||
android:layoutAnimation="@anim/layout_drop"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
|
||||
|
||||
<FrameLayout
|
||||
@ -108,6 +107,7 @@
|
||||
|
||||
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:id="@+id/appBarLayout"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent">
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
|
@ -61,7 +61,8 @@
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_marginBottom="32dp">
|
||||
android:layout_marginBottom="32dp"
|
||||
android:layout_marginRight="32dp">
|
||||
|
||||
<com.metallic.chiaki.touchcontrols.ButtonView
|
||||
android:id="@+id/crossButtonView"
|
||||
|
Loading…
x
Reference in New Issue
Block a user