Merge "Controls UI - Fix crash on missing control" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-04-28 20:11:46 +00:00
committed by Android (Google) Code Review

View File

@@ -167,11 +167,17 @@ class ControlsUiControllerImpl @Inject constructor (
private fun reload(parent: ViewGroup) { private fun reload(parent: ViewGroup) {
if (hidden) return if (hidden) return
controlsListingController.get().removeCallback(listingCallback)
controlsController.get().unsubscribe()
val fadeAnim = ObjectAnimator.ofFloat(parent, "alpha", 1.0f, 0.0f) val fadeAnim = ObjectAnimator.ofFloat(parent, "alpha", 1.0f, 0.0f)
fadeAnim.setInterpolator(AccelerateInterpolator(1.0f)) fadeAnim.setInterpolator(AccelerateInterpolator(1.0f))
fadeAnim.setDuration(FADE_IN_MILLIS) fadeAnim.setDuration(FADE_IN_MILLIS)
fadeAnim.addListener(object : AnimatorListenerAdapter() { fadeAnim.addListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) { override fun onAnimationEnd(animation: Animator) {
controlViewsById.clear()
controlsById.clear()
show(parent, dismissGlobalActions) show(parent, dismissGlobalActions)
val showAnim = ObjectAnimator.ofFloat(parent, "alpha", 0.0f, 1.0f) val showAnim = ObjectAnimator.ofFloat(parent, "alpha", 0.0f, 1.0f)
showAnim.setInterpolator(DecelerateInterpolator(1.0f)) showAnim.setInterpolator(DecelerateInterpolator(1.0f))
@@ -445,21 +451,23 @@ class ControlsUiControllerImpl @Inject constructor (
val listView = parent.requireViewById(R.id.global_actions_controls_list) as ViewGroup val listView = parent.requireViewById(R.id.global_actions_controls_list) as ViewGroup
var lastRow: ViewGroup = createRow(inflater, listView) var lastRow: ViewGroup = createRow(inflater, listView)
selectedStructure.controls.forEach { selectedStructure.controls.forEach {
if (lastRow.getChildCount() == maxColumns) {
lastRow = createRow(inflater, listView)
}
val baseLayout = inflater.inflate(
R.layout.controls_base_item, lastRow, false) as ViewGroup
lastRow.addView(baseLayout)
val cvh = ControlViewHolder(
baseLayout,
controlsController.get(),
uiExecutor,
bgExecutor
)
val key = ControlKey(selectedStructure.componentName, it.controlId) val key = ControlKey(selectedStructure.componentName, it.controlId)
cvh.bindData(controlsById.getValue(key)) controlsById.get(key)?.let {
controlViewsById.put(key, cvh) if (lastRow.getChildCount() == maxColumns) {
lastRow = createRow(inflater, listView)
}
val baseLayout = inflater.inflate(
R.layout.controls_base_item, lastRow, false) as ViewGroup
lastRow.addView(baseLayout)
val cvh = ControlViewHolder(
baseLayout,
controlsController.get(),
uiExecutor,
bgExecutor
)
cvh.bindData(it)
controlViewsById.put(key, cvh)
}
} }
// add spacers if necessary to keep control size consistent // add spacers if necessary to keep control size consistent
@@ -525,7 +533,6 @@ class ControlsUiControllerImpl @Inject constructor (
if (newSelection != selectedStructure) { if (newSelection != selectedStructure) {
selectedStructure = newSelection selectedStructure = newSelection
updatePreferences(selectedStructure) updatePreferences(selectedStructure)
controlsListingController.get().removeCallback(listingCallback)
reload(parent) reload(parent)
} }
} }
@@ -546,6 +553,7 @@ class ControlsUiControllerImpl @Inject constructor (
parent.removeAllViews() parent.removeAllViews()
controlsById.clear() controlsById.clear()
controlViewsById.clear() controlViewsById.clear()
controlsListingController.get().removeCallback(listingCallback) controlsListingController.get().removeCallback(listingCallback)
RenderInfo.clearCache() RenderInfo.clearCache()