Skip to content

Commit 5b84273

Browse files
committed
Faster loading for device detail view
1 parent 9610732 commit 5b84273

12 files changed

+37
-44
lines changed

app/src/main/java/li/klass/fhem/adapter/devices/core/OverviewDeviceAdapter.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ abstract class OverviewDeviceAdapter : DeviceAdapter() {
8989
throw IllegalStateException("no overview strategy found, default should always be present")
9090
}
9191

92-
suspend fun createOverviewView(convertView: View?, rawDevice: FhemDevice, context: Context): View {
92+
fun createOverviewView(convertView: View?, rawDevice: FhemDevice, context: Context): View {
9393
val stopWatch = StopWatch()
9494
stopWatch.start()
9595
val viewStrategy = getMostSpecificOverviewStrategy(rawDevice)

app/src/main/java/li/klass/fhem/adapter/devices/genericui/HolderActionRow.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import org.apmem.tools.layouts.FlowLayout
3636

3737
abstract class HolderActionRow<I>(private val description: String, private val layout: Int) {
3838

39-
suspend fun createRow(context: Context, viewGroup: ViewGroup, device: FhemDevice, connectionId: String?): TableRow {
39+
fun createRow(context: Context, viewGroup: ViewGroup, device: FhemDevice, connectionId: String?): TableRow {
4040
val inflater = LayoutInflater.from(context)
4141
val row = inflater.inflate(layout, viewGroup, false) as TableRow
4242

@@ -59,7 +59,7 @@ abstract class HolderActionRow<I>(private val description: String, private val l
5959

6060
abstract fun getItems(device: FhemDevice): List<I>
6161

62-
abstract suspend fun viewFor(item: I, device: FhemDevice, inflater: LayoutInflater, context: Context, viewGroup: ViewGroup, connectionId: String?): View?
62+
abstract fun viewFor(item: I, device: FhemDevice, inflater: LayoutInflater, context: Context, viewGroup: ViewGroup, connectionId: String?): View?
6363

6464
companion object {
6565

app/src/main/java/li/klass/fhem/adapter/devices/genericui/WebCmdActionRow.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ open class WebCmdActionRow(
4545
) : HolderActionRow<String>(description, layout) {
4646
override fun getItems(device: FhemDevice): List<String> = device.webCmd
4747

48-
override suspend fun viewFor(item: String, device: FhemDevice, inflater: LayoutInflater,
49-
context: Context, viewGroup: ViewGroup, connectionId: String?): View {
48+
override fun viewFor(item: String, device: FhemDevice, inflater: LayoutInflater,
49+
context: Context, viewGroup: ViewGroup, connectionId: String?): View {
5050

5151
val container = inflater.inflate(R.layout.webcmd_row_element, viewGroup, false)
5252
val button = container.findViewById<ToggleButton>(R.id.toggleButton)!!

app/src/main/java/li/klass/fhem/adapter/devices/strategy/DefaultViewStrategy.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ constructor(
4747
) : ViewStrategy() {
4848

4949

50-
override suspend fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View {
50+
override fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View {
5151
var myView = convertView
5252
val stopWatch = StopWatch()
5353
stopWatch.start()

app/src/main/java/li/klass/fhem/adapter/devices/strategy/DimmableStrategy.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ constructor(
5050
val applicationProperties: ApplicationProperties
5151
) : ViewStrategy() {
5252

53-
override suspend fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View {
53+
override fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View {
5454
val myView = when {
5555
convertView == null || convertView.tag == null -> {
5656
val v = layoutInflater.inflate(R.layout.device_overview_generic, null)

app/src/main/java/li/klass/fhem/adapter/devices/strategy/LightSceneDeviceViewStrategy.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class LightSceneDeviceViewStrategy @Inject constructor(
4747
val stateUiService: StateUiService
4848
) : ViewStrategy() {
4949

50-
override suspend fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View {
50+
override fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View {
5151
val layout = layoutInflater.inflate(R.layout.device_overview_generic, null) as TableLayout
5252
layout.removeAllViews()
5353

@@ -62,7 +62,7 @@ class LightSceneDeviceViewStrategy @Inject constructor(
6262
}
6363
}
6464

65-
override suspend fun viewFor(item: String, device: FhemDevice, inflater: LayoutInflater, context: Context, viewGroup: ViewGroup, connectionId: String?): View {
65+
override fun viewFor(item: String, device: FhemDevice, inflater: LayoutInflater, context: Context, viewGroup: ViewGroup, connectionId: String?): View {
6666
val button = inflater.inflate(R.layout.lightscene_button, viewGroup, false) as Button
6767
setSceneButtonProperties(device, item, button, context)
6868
return button

app/src/main/java/li/klass/fhem/adapter/devices/strategy/ToggleableStrategy.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class ToggleableStrategy
5252
private val toggleableService: ToggleableService,
5353
private val stateUiService: StateUiService) : ViewStrategy() {
5454

55-
override suspend fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View {
55+
override fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View {
5656
var myView = convertView
5757
val stopWatch = StopWatch()
5858
stopWatch.start()

app/src/main/java/li/klass/fhem/adapter/devices/strategy/ViewStrategy.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import li.klass.fhem.adapter.devices.core.deviceItems.XmlDeviceViewItem
3333
import li.klass.fhem.domain.core.FhemDevice
3434

3535
abstract class ViewStrategy {
36-
abstract suspend fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View
36+
abstract fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View
3737

3838
protected fun setTextView(textView: TextView?, value: String?) {
3939
val myValue = if (value == null) "" else value

app/src/main/java/li/klass/fhem/adapter/devices/strategy/WeatherDeviceViewStrategy.kt

+3-10
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ import android.view.LayoutInflater
2929
import android.view.View
3030
import android.widget.ImageView
3131
import kotlinx.android.synthetic.main.device_overview_weather.view.*
32-
import kotlinx.coroutines.Dispatchers
33-
import kotlinx.coroutines.coroutineScope
34-
import kotlinx.coroutines.withContext
3532
import li.klass.fhem.GlideApp
3633
import li.klass.fhem.R
3734
import li.klass.fhem.adapter.devices.core.GenericDeviceOverviewViewHolder
@@ -48,16 +45,12 @@ class WeatherDeviceViewStrategy @Inject constructor(
4845
) : ViewStrategy() {
4946

5047
@SuppressLint("InflateParams")
51-
override suspend fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View {
48+
override fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View {
5249
val view = layoutInflater.inflate(R.layout.device_overview_weather, null)
5350
defaultViewStrategy.fillDeviceOverviewView(view, rawDevice, GenericDeviceOverviewViewHolder(view), deviceItems, layoutInflater)
5451

55-
coroutineScope {
56-
val url = withContext(Dispatchers.IO) {
57-
weatherService.iconFor(rawDevice)
58-
}
59-
setWeatherIconIn(view.weatherImage, url)
60-
}
52+
val url = weatherService.iconFor(rawDevice)
53+
setWeatherIconIn(view.weatherImage, url)
6154
return view
6255
}
6356

app/src/main/java/li/klass/fhem/adapter/devices/strategy/WebcmdStrategy.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ import javax.inject.Singleton
4444
class WebcmdStrategy @Inject
4545
constructor(val hookProvider: DeviceHookProvider, val stateUiService: StateUiService) : ViewStrategy() {
4646

47-
override suspend fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View {
47+
override fun createOverviewView(layoutInflater: LayoutInflater, convertView: View?, rawDevice: FhemDevice, deviceItems: List<XmlDeviceViewItem>, connectionId: String?): View {
4848
var myView = convertView
4949
if (myView == null || myView.tag == null) {
5050
myView = layoutInflater.inflate(R.layout.device_overview_generic, null)
@@ -61,13 +61,13 @@ constructor(val hookProvider: DeviceHookProvider, val stateUiService: StateUiSer
6161
override fun supports(fhemDevice: FhemDevice): Boolean =
6262
hookProvider.buttonHookFor(fhemDevice) == WEBCMD_DEVICE
6363

64-
private suspend fun addOverviewSwitchActionRow(holder: GenericDeviceOverviewViewHolder, device: FhemDevice, connectionId: String?) {
64+
private fun addOverviewSwitchActionRow(holder: GenericDeviceOverviewViewHolder, device: FhemDevice, connectionId: String?) {
6565
val layout = holder.tableLayout
6666
addWebCmdOverviewActionRow(layout.context, device, layout, connectionId)
6767
}
6868

69-
private suspend fun addWebCmdOverviewActionRow(context: Context, device: FhemDevice,
70-
tableLayout: TableLayout, connectionId: String?) {
69+
private fun addWebCmdOverviewActionRow(context: Context, device: FhemDevice,
70+
tableLayout: TableLayout, connectionId: String?) {
7171
tableLayout.addView(WebCmdActionRow(stateUiService, context, HolderActionRow.LAYOUT_OVERVIEW, device.aliasOrName)
7272
.createRow(context, tableLayout, device, connectionId))
7373
}

app/src/main/java/li/klass/fhem/devices/list/ui/DeviceListFragment.kt

+18-18
Original file line numberDiff line numberDiff line change
@@ -207,32 +207,32 @@ abstract class DeviceListFragment : BaseFragment() {
207207
LOGGER.debug("updateWith - update dummyConnectionNotification, time=${stopWatch.time}")
208208
}
209209

210+
private fun firstChildOf(layout: CardView) = when (layout.childCount) {
211+
0 -> null
212+
else -> layout.getChildAt(0)
213+
}
214+
210215
private fun createDeviceView(device: FhemDevice, view: View) {
211-
GlobalScope.launch(Dispatchers.Main) {
212-
fun firstChildOf(layout: CardView) = when (layout.childCount) {
213-
0 -> null
214-
else -> layout.getChildAt(0)
215-
}
216+
LOGGER.info("createDeviceView(name=${device.name})")
216217

217-
val stopWatch = StopWatch()
218-
stopWatch.start()
218+
val stopWatch = StopWatch()
219+
stopWatch.start()
219220

220-
LOGGER.debug("bind - getAdapterFor device=${device.name}, time=${stopWatch.time}")
221+
LOGGER.debug("bind - getAdapterFor device=${device.name}, time=${stopWatch.time}")
221222

222-
val contentView = genericOverviewDetailDeviceAdapter.createOverviewView(firstChildOf(view.card), device, view.context)
223+
val contentView = genericOverviewDetailDeviceAdapter.createOverviewView(firstChildOf(view.card), device, view.context)
223224

224-
LOGGER.debug("bind - creating view for device=${device.name}, time=${stopWatch.time}")
225+
LOGGER.debug("bind - creating view for device=${device.name}, time=${stopWatch.time}")
225226

226-
view.card.removeAllViews()
227-
view.card.addView(contentView)
227+
view.card.removeAllViews()
228+
view.card.addView(contentView)
228229

229-
LOGGER.debug("bind - adding content view device=${device.name}, time=${stopWatch.time}")
230+
LOGGER.debug("bind - adding content view device=${device.name}, time=${stopWatch.time}")
230231

231-
view.setOnClickListener { onClick(device) }
232-
view.setOnLongClickListener { onLongClick(device) }
232+
view.setOnClickListener { onClick(device) }
233+
view.setOnLongClickListener { onLongClick(device) }
233234

234-
LOGGER.debug("bind - finished device=${device.name}, time=${stopWatch.time}")
235-
}
235+
LOGGER.debug("bind - finished device=${device.name}, time=${stopWatch.time}")
236236
}
237237

238238
private fun onClick(device: FhemDevice) {
@@ -257,6 +257,6 @@ abstract class DeviceListFragment : BaseFragment() {
257257

258258
companion object {
259259
private val LOGGER = LoggerFactory.getLogger(DeviceListFragment::class.java)
260-
val DEFAULT_COLUMN_WIDTH = 350
260+
const val DEFAULT_COLUMN_WIDTH = 350
261261
}
262262
}

app/src/main/res/values/styles.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@
217217

218218
<style name="deviceOverviewTable">
219219
<item name="android:background">?backgroundColorSecondary</item>
220-
<item name="android:layout_width">fill_parent</item>
220+
<item name="android:layout_width">wrap_content</item>
221221
<item name="android:layout_height">wrap_content</item>
222222

223223
<item name="android:layout_marginLeft">10dp</item>

0 commit comments

Comments
 (0)