@@ -22,14 +22,20 @@ import android.animation.ValueAnimator
22
22
import android.content.Context
23
23
import android.graphics.Color
24
24
import android.os.Build
25
+ import android.view.View
26
+ import android.view.ViewGroup
25
27
import android.view.Window
26
28
import android.widget.TextView
27
29
import androidx.annotation.ColorInt
28
30
import androidx.annotation.FloatRange
31
+ import androidx.annotation.IdRes
29
32
import androidx.appcompat.content.res.AppCompatResources
30
33
import androidx.core.graphics.toColor
31
34
import androidx.core.graphics.toColorInt
32
35
import androidx.core.view.isGone
36
+ import androidx.lifecycle.DefaultLifecycleObserver
37
+ import androidx.lifecycle.Lifecycle
38
+ import androidx.lifecycle.LifecycleOwner
33
39
import com.infomaniak.mail.R
34
40
import com.infomaniak.mail.data.models.correspondent.Correspondent
35
41
import com.infomaniak.mail.utils.extensions.updateNavigationBarColor
@@ -156,4 +162,32 @@ object UiUtils {
156
162
}
157
163
158
164
fun dividerDrawable (context : Context ) = AppCompatResources .getDrawable(context, R .drawable.divider)
165
+
166
+ fun saveFocusWhenNavigatingBack (getLayout : () -> ViewGroup , lifecycle : Lifecycle ) {
167
+ val lifecycleObserver = object : DefaultLifecycleObserver {
168
+ @IdRes
169
+ private var lastFocusViewId: Int? = null
170
+
171
+ override fun onDestroy (owner : LifecycleOwner ) {
172
+ lifecycle.removeObserver(this )
173
+ super .onDestroy(owner)
174
+ }
175
+
176
+ override fun onStart (owner : LifecycleOwner ) {
177
+ super .onStart(owner)
178
+ lastFocusViewId?.let { viewId ->
179
+ getLayout().findViewById<View >(viewId).requestFocus()
180
+ }
181
+ }
182
+
183
+ override fun onStop (owner : LifecycleOwner ) {
184
+ getLayout().focusedChild?.let {
185
+ lastFocusViewId = it.id
186
+ }
187
+ super .onStop(owner)
188
+ }
189
+ }
190
+
191
+ lifecycle.addObserver(lifecycleObserver)
192
+ }
159
193
}
0 commit comments