Show Avatar next to tabs when main top bar is disabled (#2973)
This commit is contained in:
parent
11cf420320
commit
4de778d7d4
3 changed files with 157 additions and 70 deletions
|
@ -384,9 +384,11 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje
|
||||||
|
|
||||||
private fun setupDrawer(savedInstanceState: Bundle?, addSearchButton: Boolean) {
|
private fun setupDrawer(savedInstanceState: Bundle?, addSearchButton: Boolean) {
|
||||||
|
|
||||||
binding.mainToolbar.setNavigationOnClickListener {
|
val drawerOpenClickListener = View.OnClickListener { binding.mainDrawerLayout.open() }
|
||||||
binding.mainDrawerLayout.open()
|
|
||||||
}
|
binding.mainToolbar.setNavigationOnClickListener(drawerOpenClickListener)
|
||||||
|
binding.topNavAvatar.setOnClickListener(drawerOpenClickListener)
|
||||||
|
binding.bottomNavAvatar.setOnClickListener(drawerOpenClickListener)
|
||||||
|
|
||||||
header = AccountHeaderView(this).apply {
|
header = AccountHeaderView(this).apply {
|
||||||
headerBackgroundScaleType = ImageView.ScaleType.CENTER_CROP
|
headerBackgroundScaleType = ImageView.ScaleType.CENTER_CROP
|
||||||
|
@ -576,7 +578,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje
|
||||||
val actionBarSize = ThemeUtils.getDimension(this, R.attr.actionBarSize)
|
val actionBarSize = ThemeUtils.getDimension(this, R.attr.actionBarSize)
|
||||||
val fabMargin = resources.getDimensionPixelSize(R.dimen.fabMargin)
|
val fabMargin = resources.getDimensionPixelSize(R.dimen.fabMargin)
|
||||||
(binding.composeButton.layoutParams as CoordinatorLayout.LayoutParams).bottomMargin = actionBarSize + fabMargin
|
(binding.composeButton.layoutParams as CoordinatorLayout.LayoutParams).bottomMargin = actionBarSize + fabMargin
|
||||||
binding.tabLayout.hide()
|
binding.topNav.hide()
|
||||||
binding.bottomTabLayout
|
binding.bottomTabLayout
|
||||||
} else {
|
} else {
|
||||||
binding.bottomNav.hide()
|
binding.bottomNav.hide()
|
||||||
|
@ -749,10 +751,40 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadDrawerAvatar(avatarUrl: String, showPlaceholder: Boolean) {
|
private fun loadDrawerAvatar(avatarUrl: String, showPlaceholder: Boolean) {
|
||||||
val navIconSize = resources.getDimensionPixelSize(R.dimen.avatar_toolbar_nav_icon_size)
|
|
||||||
|
|
||||||
|
val hideTopToolbar = preferences.getBoolean(PrefKeys.HIDE_TOP_TOOLBAR, false)
|
||||||
val animateAvatars = preferences.getBoolean("animateGifAvatars", false)
|
val animateAvatars = preferences.getBoolean("animateGifAvatars", false)
|
||||||
|
|
||||||
|
if (hideTopToolbar) {
|
||||||
|
val navOnBottom = preferences.getString("mainNavPosition", "top") == "bottom"
|
||||||
|
|
||||||
|
val avatarView = if (navOnBottom) {
|
||||||
|
binding.bottomNavAvatar.show()
|
||||||
|
binding.bottomNavAvatar
|
||||||
|
} else {
|
||||||
|
binding.topNavAvatar.show()
|
||||||
|
binding.topNavAvatar
|
||||||
|
}
|
||||||
|
|
||||||
|
if (animateAvatars) {
|
||||||
|
Glide.with(this)
|
||||||
|
.load(avatarUrl)
|
||||||
|
.placeholder(R.drawable.avatar_default)
|
||||||
|
.into(avatarView)
|
||||||
|
} else {
|
||||||
|
Glide.with(this)
|
||||||
|
.asBitmap()
|
||||||
|
.load(avatarUrl)
|
||||||
|
.placeholder(R.drawable.avatar_default)
|
||||||
|
.into(avatarView)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
binding.bottomNavAvatar.hide()
|
||||||
|
binding.topNavAvatar.hide()
|
||||||
|
|
||||||
|
val navIconSize = resources.getDimensionPixelSize(R.dimen.avatar_toolbar_nav_icon_size)
|
||||||
|
|
||||||
if (animateAvatars) {
|
if (animateAvatars) {
|
||||||
glide.asDrawable()
|
glide.asDrawable()
|
||||||
.load(avatarUrl)
|
.load(avatarUrl)
|
||||||
|
@ -768,20 +800,26 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje
|
||||||
|
|
||||||
override fun onLoadStarted(placeholder: Drawable?) {
|
override fun onLoadStarted(placeholder: Drawable?) {
|
||||||
if (placeholder != null) {
|
if (placeholder != null) {
|
||||||
binding.mainToolbar.navigationIcon = FixedSizeDrawable(placeholder, navIconSize, navIconSize)
|
binding.mainToolbar.navigationIcon =
|
||||||
|
FixedSizeDrawable(placeholder, navIconSize, navIconSize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
|
override fun onResourceReady(
|
||||||
|
resource: Drawable,
|
||||||
|
transition: Transition<in Drawable>?
|
||||||
|
) {
|
||||||
if (resource is Animatable) {
|
if (resource is Animatable) {
|
||||||
resource.start()
|
resource.start()
|
||||||
}
|
}
|
||||||
binding.mainToolbar.navigationIcon = FixedSizeDrawable(resource, navIconSize, navIconSize)
|
binding.mainToolbar.navigationIcon =
|
||||||
|
FixedSizeDrawable(resource, navIconSize, navIconSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onLoadCleared(placeholder: Drawable?) {
|
override fun onLoadCleared(placeholder: Drawable?) {
|
||||||
if (placeholder != null) {
|
if (placeholder != null) {
|
||||||
binding.mainToolbar.navigationIcon = FixedSizeDrawable(placeholder, navIconSize, navIconSize)
|
binding.mainToolbar.navigationIcon =
|
||||||
|
FixedSizeDrawable(placeholder, navIconSize, navIconSize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -800,22 +838,32 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje
|
||||||
|
|
||||||
override fun onLoadStarted(placeholder: Drawable?) {
|
override fun onLoadStarted(placeholder: Drawable?) {
|
||||||
if (placeholder != null) {
|
if (placeholder != null) {
|
||||||
binding.mainToolbar.navigationIcon = FixedSizeDrawable(placeholder, navIconSize, navIconSize)
|
binding.mainToolbar.navigationIcon =
|
||||||
|
FixedSizeDrawable(placeholder, navIconSize, navIconSize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
|
override fun onResourceReady(
|
||||||
binding.mainToolbar.navigationIcon = FixedSizeDrawable(BitmapDrawable(resources, resource), navIconSize, navIconSize)
|
resource: Bitmap,
|
||||||
|
transition: Transition<in Bitmap>?
|
||||||
|
) {
|
||||||
|
binding.mainToolbar.navigationIcon = FixedSizeDrawable(
|
||||||
|
BitmapDrawable(resources, resource),
|
||||||
|
navIconSize,
|
||||||
|
navIconSize
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onLoadCleared(placeholder: Drawable?) {
|
override fun onLoadCleared(placeholder: Drawable?) {
|
||||||
if (placeholder != null) {
|
if (placeholder != null) {
|
||||||
binding.mainToolbar.navigationIcon = FixedSizeDrawable(placeholder, navIconSize, navIconSize)
|
binding.mainToolbar.navigationIcon =
|
||||||
|
FixedSizeDrawable(placeholder, navIconSize, navIconSize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun fetchAnnouncements() {
|
private fun fetchAnnouncements() {
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
|
|
|
@ -29,6 +29,22 @@
|
||||||
app:layout_scrollFlags="scroll|enterAlways"
|
app:layout_scrollFlags="scroll|enterAlways"
|
||||||
app:navigationContentDescription="@string/action_open_drawer" />
|
app:navigationContentDescription="@string/action_open_drawer" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/topNav"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<com.google.android.material.imageview.ShapeableImageView
|
||||||
|
android:id="@+id/topNavAvatar"
|
||||||
|
android:layout_width="36dp"
|
||||||
|
android:layout_height="36dp"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
android:background="@drawable/avatar_default"
|
||||||
|
app:shapeAppearance="@style/ShapeAppearance.Avatar" />
|
||||||
|
|
||||||
<com.google.android.material.tabs.TabLayout
|
<com.google.android.material.tabs.TabLayout
|
||||||
android:id="@+id/tabLayout"
|
android:id="@+id/tabLayout"
|
||||||
style="@style/TuskyTabAppearance"
|
style="@style/TuskyTabAppearance"
|
||||||
|
@ -37,6 +53,7 @@
|
||||||
app:tabGravity="fill"
|
app:tabGravity="fill"
|
||||||
app:tabMaxWidth="0dp"
|
app:tabMaxWidth="0dp"
|
||||||
app:tabMode="fixed" />
|
app:tabMode="fixed" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
@ -56,14 +73,31 @@
|
||||||
app:contentInsetStart="0dp"
|
app:contentInsetStart="0dp"
|
||||||
app:fabAlignmentMode="end">
|
app:fabAlignmentMode="end">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<com.google.android.material.imageview.ShapeableImageView
|
||||||
|
android:id="@+id/bottomNavAvatar"
|
||||||
|
android:layout_width="36dp"
|
||||||
|
android:layout_height="36dp"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
android:background="@drawable/avatar_default"
|
||||||
|
app:shapeAppearance="@style/ShapeAppearance.Avatar" />
|
||||||
|
|
||||||
<com.google.android.material.tabs.TabLayout
|
<com.google.android.material.tabs.TabLayout
|
||||||
android:id="@+id/bottomTabLayout"
|
android:id="@+id/bottomTabLayout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:tabIndicator="@null"
|
|
||||||
app:tabGravity="fill"
|
app:tabGravity="fill"
|
||||||
|
app:tabIndicator="@null"
|
||||||
app:tabMode="fixed" />
|
app:tabMode="fixed" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</com.google.android.material.bottomappbar.BottomAppBar>
|
</com.google.android.material.bottomappbar.BottomAppBar>
|
||||||
|
|
||||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
|
@ -82,8 +116,8 @@
|
||||||
android:id="@+id/progressBar"
|
android:id="@+id/progressBar"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:visibility="gone"
|
android:layout_gravity="center"
|
||||||
android:layout_gravity="center" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
|
|
||||||
|
|
|
@ -167,4 +167,9 @@
|
||||||
<item name="materialDrawerDrawCircularShadow">false</item>
|
<item name="materialDrawerDrawCircularShadow">false</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="ShapeAppearance.Avatar" parent="ShapeAppearance.MaterialComponents">
|
||||||
|
<item name="cornerFamily">rounded</item>
|
||||||
|
<item name="cornerSize">12.5%</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue