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:
Alexander Capehart 2022-11-22 11:15:02 -07:00
parent 668fe86479
commit 0598409ca5
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
3 changed files with 107 additions and 88 deletions

View file

@ -25,6 +25,7 @@
- Allowed light/dark theme to be customized on Android 12+
- All information now scrolls in the playback view
- A month is now shown for song/album dates when available
- Added loading indicator to song properties view
#### What's Fixed
- Fixed issue where the scroll popup would not display correctly in landscape mode [#230]

View file

@ -22,6 +22,7 @@ import android.text.format.Formatter
import android.view.LayoutInflater
import androidx.appcompat.app.AlertDialog
import androidx.core.view.isGone
import androidx.core.view.isInvisible
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import org.oxycblt.auxio.R
@ -64,8 +65,10 @@ class SongDetailDialog : ViewBindingDialogFragment<DialogSongDetailBinding>() {
if (song != null) {
if (song.info != null) {
binding.detailLoading.isInvisible = true
binding.detailContainer.isInvisible = false
val context = requireContext()
binding.detailContainer.isGone = false
binding.detailFileName.setText(song.song.path.name)
binding.detailRelativeDir.setText(song.song.path.parent.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)
}
} else {
binding.detailContainer.isGone = true
binding.detailLoading.isInvisible = false
binding.detailContainer.isInvisible = true
}
} else {
findNavController().navigateUp()

View file

@ -10,129 +10,143 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/detail_container"
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingStart="@dimen/spacing_large"
android:paddingEnd="@dimen/spacing_large"
android:showDividers="middle"
android:visibility="gone"
tools:visibility="visible">
android:animateLayoutChanges="true">
<com.google.android.material.textfield.TextInputLayout
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/detail_loading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/lbl_file_name"
app:expandedHintEnabled="false">
android:paddingStart="@dimen/spacing_large"
android:paddingEnd="@dimen/spacing_large"
android:layout_gravity="center"
android:indeterminate="true"
app:indeterminateAnimationType="disjoint" />
<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
<LinearLayout
android:id="@+id/detail_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_medium"
android:hint="@string/lbl_relative_path"
app:expandedHintEnabled="false">
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingStart="@dimen/spacing_large"
android:paddingEnd="@dimen/spacing_large">
<org.oxycblt.auxio.detail.ReadOnlyTextInput
android:id="@+id/detail_relative_dir"
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="viewStart"
tools:text="/path/to" />
android:hint="@string/lbl_file_name"
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
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_medium"
android:hint="@string/lbl_format"
app:expandedHintEnabled="false">
</com.google.android.material.textfield.TextInputLayout>
<org.oxycblt.auxio.detail.ReadOnlyTextInput
android:id="@+id/detail_format"
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="viewStart"
tools:text="MP3" />
android:layout_marginTop="@dimen/spacing_medium"
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
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_medium"
android:hint="@string/lbl_size"
app:expandedHintEnabled="false">
</com.google.android.material.textfield.TextInputLayout>
<org.oxycblt.auxio.detail.ReadOnlyTextInput
android:id="@+id/detail_size"
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="viewStart"
tools:text="16 MB" />
android:layout_marginTop="@dimen/spacing_medium"
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
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">
</com.google.android.material.textfield.TextInputLayout>
<org.oxycblt.auxio.detail.ReadOnlyTextInput
android:id="@+id/detail_duration"
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="viewStart"
tools:text="3:20" />
android:layout_marginTop="@dimen/spacing_medium"
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
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_medium"
android:hint="@string/lbl_bitrate"
app:expandedHintEnabled="false">
</com.google.android.material.textfield.TextInputLayout>
<org.oxycblt.auxio.detail.ReadOnlyTextInput
android:id="@+id/detail_bitrate"
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="viewStart"
tools:text="320 kb/s" />
android:layout_marginTop="@dimen/spacing_medium"
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
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">
</com.google.android.material.textfield.TextInputLayout>
<org.oxycblt.auxio.detail.ReadOnlyTextInput
android:id="@+id/detail_sample_rate"
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="viewStart"
tools:text="44100 Hz" />
android:layout_marginTop="@dimen/spacing_medium"
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>