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+
|
||||
- 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]
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue