blob: c2631c923e4519630d7e3fbf7f6dcac20945858f [file] [log] [blame]
Robert Snoeberger7dffd372020-04-01 17:32:44 -04001/*
2 * Copyright (C) 2020 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.systemui.media
18
Robert Snoeberger7dffd372020-04-01 17:32:44 -040019import android.text.format.DateUtils
Robert Snoeberger7dffd372020-04-01 17:32:44 -040020import androidx.annotation.UiThread
21import androidx.lifecycle.Observer
Fabian Kozynski8a9516d2020-06-19 17:26:54 -040022import com.android.systemui.R
Robert Snoeberger7dffd372020-04-01 17:32:44 -040023
Robert Snoeberger7dffd372020-04-01 17:32:44 -040024/**
25 * Observer for changes from SeekBarViewModel.
26 *
27 * <p>Updates the seek bar views in response to changes to the model.
28 */
Robert Snoeberger45be3fb2020-05-19 02:00:43 -040029class SeekBarObserver(private val holder: PlayerViewHolder) : Observer<SeekBarViewModel.Progress> {
Robert Snoeberger7dffd372020-04-01 17:32:44 -040030
Fabian Kozynski8a9516d2020-06-19 17:26:54 -040031 val seekBarDefaultMaxHeight = holder.seekBar.context.resources
32 .getDimensionPixelSize(R.dimen.qs_media_enabled_seekbar_height)
33 val seekBarDisabledHeight = holder.seekBar.context.resources
34 .getDimensionPixelSize(R.dimen.qs_media_disabled_seekbar_height)
35
Robert Snoeberger7dffd372020-04-01 17:32:44 -040036 /** Updates seek bar views when the data model changes. */
37 @UiThread
38 override fun onChanged(data: SeekBarViewModel.Progress) {
Robert Snoebergera9b8d7f2020-04-07 17:44:51 -040039 if (!data.enabled) {
Fabian Kozynski1b9ca1e2020-06-22 21:10:39 -040040 if (holder.seekBar.maxHeight != seekBarDisabledHeight) {
Fabian Kozynski8a9516d2020-06-19 17:26:54 -040041 holder.seekBar.maxHeight = seekBarDisabledHeight
42 }
Fabian Kozynski1b9ca1e2020-06-22 21:10:39 -040043 holder.seekBar.setEnabled(false)
Robert Snoeberger45be3fb2020-05-19 02:00:43 -040044 holder.seekBar.getThumb().setAlpha(0)
45 holder.seekBar.setProgress(0)
46 holder.elapsedTimeView.setText("")
47 holder.totalTimeView.setText("")
Robert Snoebergera9b8d7f2020-04-07 17:44:51 -040048 return
49 }
50
Robert Snoeberger45be3fb2020-05-19 02:00:43 -040051 holder.seekBar.getThumb().setAlpha(if (data.seekAvailable) 255 else 0)
52 holder.seekBar.setEnabled(data.seekAvailable)
Robert Snoebergera9b8d7f2020-04-07 17:44:51 -040053
Fabian Kozynski1b9ca1e2020-06-22 21:10:39 -040054 if (holder.seekBar.maxHeight != seekBarDefaultMaxHeight) {
55 holder.seekBar.maxHeight = seekBarDefaultMaxHeight
Fabian Kozynski8a9516d2020-06-19 17:26:54 -040056 }
57
Robert Snoeberger7dffd372020-04-01 17:32:44 -040058 data.elapsedTime?.let {
Robert Snoeberger45be3fb2020-05-19 02:00:43 -040059 holder.seekBar.setProgress(it)
60 holder.elapsedTimeView.setText(DateUtils.formatElapsedTime(
Robert Snoeberger7dffd372020-04-01 17:32:44 -040061 it / DateUtils.SECOND_IN_MILLIS))
62 }
63
64 data.duration?.let {
Robert Snoeberger45be3fb2020-05-19 02:00:43 -040065 holder.seekBar.setMax(it)
66 holder.totalTimeView.setText(DateUtils.formatElapsedTime(
Robert Snoeberger7dffd372020-04-01 17:32:44 -040067 it / DateUtils.SECOND_IN_MILLIS))
68 }
69 }
70}