detail: add loading indicator to song detail
Add a loading indicator to the song detail view. This should make the loading process clearer for some songs that take longer to load.
This commit is contained in:
parent
668fe86479
commit
0598409ca5
3 changed files with 107 additions and 88 deletions
|
@ -25,6 +25,7 @@
|
||||||
- Allowed light/dark theme to be customized on Android 12+
|
- Allowed light/dark theme to be customized on Android 12+
|
||||||
- All information now scrolls in the playback view
|
- All information now scrolls in the playback view
|
||||||
- A month is now shown for song/album dates when available
|
- A month is now shown for song/album dates when available
|
||||||
|
- Added loading indicator to song properties view
|
||||||
|
|
||||||
#### What's Fixed
|
#### What's Fixed
|
||||||
- Fixed issue where the scroll popup would not display correctly in landscape mode [#230]
|
- Fixed issue where the scroll popup would not display correctly in landscape mode [#230]
|
||||||
|
|
|
@ -22,6 +22,7 @@ import android.text.format.Formatter
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
|
import androidx.core.view.isInvisible
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import org.oxycblt.auxio.R
|
import org.oxycblt.auxio.R
|
||||||
|
@ -64,8 +65,10 @@ class SongDetailDialog : ViewBindingDialogFragment<DialogSongDetailBinding>() {
|
||||||
|
|
||||||
if (song != null) {
|
if (song != null) {
|
||||||
if (song.info != null) {
|
if (song.info != null) {
|
||||||
|
binding.detailLoading.isInvisible = true
|
||||||
|
binding.detailContainer.isInvisible = false
|
||||||
|
|
||||||
val context = requireContext()
|
val context = requireContext()
|
||||||
binding.detailContainer.isGone = false
|
|
||||||
binding.detailFileName.setText(song.song.path.name)
|
binding.detailFileName.setText(song.song.path.name)
|
||||||
binding.detailRelativeDir.setText(song.song.path.parent.resolveName(context))
|
binding.detailRelativeDir.setText(song.song.path.parent.resolveName(context))
|
||||||
binding.detailFormat.setText(song.info.resolvedMimeType.resolveName(context))
|
binding.detailFormat.setText(song.info.resolvedMimeType.resolveName(context))
|
||||||
|
@ -86,7 +89,8 @@ class SongDetailDialog : ViewBindingDialogFragment<DialogSongDetailBinding>() {
|
||||||
binding.detailSampleRate.setText(R.string.def_sample_rate)
|
binding.detailSampleRate.setText(R.string.def_sample_rate)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
binding.detailContainer.isGone = true
|
binding.detailLoading.isInvisible = false
|
||||||
|
binding.detailContainer.isInvisible = true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
findNavController().navigateUp()
|
findNavController().navigateUp()
|
||||||
|
|
|
@ -10,129 +10,143 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<LinearLayout
|
<FrameLayout
|
||||||
android:id="@+id/detail_container"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:animateLayoutChanges="true">
|
||||||
android:paddingStart="@dimen/spacing_large"
|
|
||||||
android:paddingEnd="@dimen/spacing_large"
|
|
||||||
android:showDividers="middle"
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible">
|
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||||
|
android:id="@+id/detail_loading"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:hint="@string/lbl_file_name"
|
android:paddingStart="@dimen/spacing_large"
|
||||||
app:expandedHintEnabled="false">
|
android:paddingEnd="@dimen/spacing_large"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:indeterminate="true"
|
||||||
|
app:indeterminateAnimationType="disjoint" />
|
||||||
|
|
||||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
<LinearLayout
|
||||||
android:id="@+id/detail_file_name"
|
android:id="@+id/detail_container"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textAlignment="viewStart"
|
|
||||||
tools:text="file.mp3" />
|
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginTop="@dimen/spacing_medium"
|
android:orientation="vertical"
|
||||||
android:hint="@string/lbl_relative_path"
|
android:paddingStart="@dimen/spacing_large"
|
||||||
app:expandedHintEnabled="false">
|
android:paddingEnd="@dimen/spacing_large">
|
||||||
|
|
||||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/detail_relative_dir"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAlignment="viewStart"
|
android:hint="@string/lbl_file_name"
|
||||||
tools:text="/path/to" />
|
app:expandedHintEnabled="false">
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||||
|
android:id="@+id/detail_file_name"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
tools:text="file.mp3" />
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="@dimen/spacing_medium"
|
|
||||||
android:hint="@string/lbl_format"
|
|
||||||
app:expandedHintEnabled="false">
|
|
||||||
|
|
||||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/detail_format"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAlignment="viewStart"
|
android:layout_marginTop="@dimen/spacing_medium"
|
||||||
tools:text="MP3" />
|
android:hint="@string/lbl_relative_path"
|
||||||
|
app:expandedHintEnabled="false">
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||||
|
android:id="@+id/detail_relative_dir"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
tools:text="/path/to" />
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="@dimen/spacing_medium"
|
|
||||||
android:hint="@string/lbl_size"
|
|
||||||
app:expandedHintEnabled="false">
|
|
||||||
|
|
||||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/detail_size"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAlignment="viewStart"
|
android:layout_marginTop="@dimen/spacing_medium"
|
||||||
tools:text="16 MB" />
|
android:hint="@string/lbl_format"
|
||||||
|
app:expandedHintEnabled="false">
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||||
|
android:id="@+id/detail_format"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
tools:text="MP3" />
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="@dimen/spacing_medium"
|
|
||||||
android:hint="@string/lbl_sort_duration"
|
|
||||||
app:expandedHintEnabled="false">
|
|
||||||
|
|
||||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/detail_duration"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAlignment="viewStart"
|
android:layout_marginTop="@dimen/spacing_medium"
|
||||||
tools:text="3:20" />
|
android:hint="@string/lbl_size"
|
||||||
|
app:expandedHintEnabled="false">
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||||
|
android:id="@+id/detail_size"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
tools:text="16 MB" />
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="@dimen/spacing_medium"
|
|
||||||
android:hint="@string/lbl_bitrate"
|
|
||||||
app:expandedHintEnabled="false">
|
|
||||||
|
|
||||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/detail_bitrate"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAlignment="viewStart"
|
android:layout_marginTop="@dimen/spacing_medium"
|
||||||
tools:text="320 kb/s" />
|
android:hint="@string/lbl_sort_duration"
|
||||||
|
app:expandedHintEnabled="false">
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||||
|
android:id="@+id/detail_duration"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
tools:text="3:20" />
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="@dimen/spacing_medium"
|
|
||||||
android:hint="@string/lbl_sample_rate"
|
|
||||||
app:expandedHintEnabled="false">
|
|
||||||
|
|
||||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/detail_sample_rate"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAlignment="viewStart"
|
android:layout_marginTop="@dimen/spacing_medium"
|
||||||
tools:text="44100 Hz" />
|
android:hint="@string/lbl_bitrate"
|
||||||
|
app:expandedHintEnabled="false">
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||||
|
android:id="@+id/detail_bitrate"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
tools:text="320 kb/s" />
|
||||||
|
|
||||||
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/spacing_medium"
|
||||||
|
android:hint="@string/lbl_sample_rate"
|
||||||
|
app:expandedHintEnabled="false">
|
||||||
|
|
||||||
|
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||||
|
android:id="@+id/detail_sample_rate"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
tools:text="44100 Hz" />
|
||||||
|
|
||||||
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
</androidx.core.widget.NestedScrollView>
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue