From df3a37b0a390e9073ac13722e741634a31ac34bd Mon Sep 17 00:00:00 2001 From: Viktor De Pasquale Date: Sat, 26 Oct 2019 12:41:34 +0200 Subject: [PATCH] Updated developer section to be horizontally scrollable instead of vertically In order to make room for more information --- .../magisk/model/entity/recycler/HomeItems.kt | 49 ++++- .../magisk/redesign/home/HomeFragment.kt | 8 + .../magisk/redesign/home/HomeViewModel.kt | 11 +- app/src/main/res/layout/fragment_home_md2.xml | 196 ++---------------- app/src/main/res/layout/item_developer.xml | 77 ++++--- .../main/res/layout/item_developer_link.xml | 48 +++++ app/src/main/res/values/strings_md2.xml | 2 + 7 files changed, 175 insertions(+), 216 deletions(-) create mode 100644 app/src/main/res/layout/item_developer_link.xml diff --git a/app/src/main/java/com/topjohnwu/magisk/model/entity/recycler/HomeItems.kt b/app/src/main/java/com/topjohnwu/magisk/model/entity/recycler/HomeItems.kt index e8a7eafae..fb049d9ba 100644 --- a/app/src/main/java/com/topjohnwu/magisk/model/entity/recycler/HomeItems.kt +++ b/app/src/main/java/com/topjohnwu/magisk/model/entity/recycler/HomeItems.kt @@ -10,7 +10,7 @@ sealed class HomeItem : ComparableRvItem() { abstract val title: Int abstract val link: String - override val layoutRes = R.layout.item_developer + override val layoutRes = R.layout.item_developer_link override fun contentSameAs(other: HomeItem) = itemSameAs(other) override fun itemSameAs(other: HomeItem) = this == other @@ -20,6 +20,9 @@ sealed class HomeItem : ComparableRvItem() { return icon == other.icon && title == other.title && link == other.link } + override fun hashCode() = + icon.hashCode() + title.hashCode() + link.hashCode() + layoutRes.hashCode() + // region Children sealed class PayPal : HomeItem() { override val icon = R.drawable.ic_paypal @@ -72,3 +75,47 @@ sealed class HomeItem : ComparableRvItem() { } // endregion } + +sealed class DeveloperItem : ComparableRvItem() { + + abstract val items: List + abstract val icon: Int + abstract val name: Int + + override val layoutRes = R.layout.item_developer + + override fun contentSameAs(other: DeveloperItem) = itemSameAs(other) + override fun itemSameAs(other: DeveloperItem) = this == other + + override fun equals(other: Any?): Boolean { + if (other !is DeveloperItem) return false + return icon == other.icon && name == other.name && items == other.items + } + + override fun hashCode() = + icon.hashCode() + name.hashCode() + items.hashCode() + layoutRes.hashCode() + + //region Children + object Mainline : DeveloperItem() { + override val items = + listOf(HomeItem.PayPal.Mainline, HomeItem.Patreon, HomeItem.Twitter.Mainline) + override val icon = R.drawable.ic_mainline_dev + override val name = R.string.home_links_mainline + } + + object App : DeveloperItem() { + override val items = + listOf(HomeItem.PayPal.App, HomeItem.Twitter.App) + override val icon = R.drawable.ic_mainline_dev + override val name = R.string.home_links_app + } + + object Project : DeveloperItem() { + override val items = + listOf(HomeItem.Github, HomeItem.Xda) + override val icon = R.drawable.ic_project + override val name = R.string.home_links_project + } + //endregion + +} diff --git a/app/src/main/java/com/topjohnwu/magisk/redesign/home/HomeFragment.kt b/app/src/main/java/com/topjohnwu/magisk/redesign/home/HomeFragment.kt index b78a466fe..3bb316104 100644 --- a/app/src/main/java/com/topjohnwu/magisk/redesign/home/HomeFragment.kt +++ b/app/src/main/java/com/topjohnwu/magisk/redesign/home/HomeFragment.kt @@ -1,6 +1,9 @@ package com.topjohnwu.magisk.redesign.home import android.graphics.Insets +import android.os.Bundle +import android.view.View +import androidx.recyclerview.widget.LinearSnapHelper import com.topjohnwu.magisk.R import com.topjohnwu.magisk.databinding.FragmentHomeMd2Binding import com.topjohnwu.magisk.redesign.compat.CompatFragment @@ -17,4 +20,9 @@ class HomeFragment : CompatFragment() { super.onStart() activity.title = resources.getString(R.string.section_home) } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + LinearSnapHelper().attachToRecyclerView(binding.homeSupportList) + } } \ No newline at end of file diff --git a/app/src/main/java/com/topjohnwu/magisk/redesign/home/HomeViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/redesign/home/HomeViewModel.kt index 71c0c7e7d..fe3d43591 100644 --- a/app/src/main/java/com/topjohnwu/magisk/redesign/home/HomeViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/redesign/home/HomeViewModel.kt @@ -13,6 +13,7 @@ import com.topjohnwu.magisk.model.entity.ManagerJson import com.topjohnwu.magisk.model.entity.UpdateInfo import com.topjohnwu.magisk.model.entity.internal.DownloadSubject.Magisk import com.topjohnwu.magisk.model.entity.internal.DownloadSubject.Manager +import com.topjohnwu.magisk.model.entity.recycler.DeveloperItem import com.topjohnwu.magisk.model.entity.recycler.HomeItem import com.topjohnwu.magisk.model.events.OpenInappLinkEvent import com.topjohnwu.magisk.model.events.dialog.EnvFixDialog @@ -67,15 +68,13 @@ class HomeViewModel( } } - val itemsMainline = - listOf(HomeItem.PayPal.Mainline, HomeItem.Patreon, HomeItem.Twitter.Mainline) - val itemsApp = - listOf(HomeItem.PayPal.App, HomeItem.Twitter.App) - val itemsProject = - listOf(HomeItem.Github, HomeItem.Xda) + val items = listOf(DeveloperItem.Mainline, DeveloperItem.App, DeveloperItem.Project) val itemBinding = itemBindingOf { it.bindExtra(BR.viewModel, this) } + val itemDeveloperBinding = itemBindingOf { + it.bindExtra(BR.viewModel, this) + } private var shownDialog = false diff --git a/app/src/main/res/layout/fragment_home_md2.xml b/app/src/main/res/layout/fragment_home_md2.xml index 7f795f294..a1ab032e9 100644 --- a/app/src/main/res/layout/fragment_home_md2.xml +++ b/app/src/main/res/layout/fragment_home_md2.xml @@ -5,6 +5,8 @@ + + @@ -29,9 +31,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:clipToPadding="false" - android:orientation="vertical" - android:paddingStart="@dimen/l1" - android:paddingEnd="@dimen/l1"> + android:orientation="vertical"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_marginTop="@dimen/l2" + android:clipToPadding="false" + android:orientation="horizontal" + android:paddingStart="@dimen/l1" + android:paddingEnd="@dimen/l1" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + tools:listitem="@layout/item_developer" /> + type="com.topjohnwu.magisk.model.entity.recycler.DeveloperItem" /> + tools:layout_gravity="center|start"> + app:layout_constraintTop_toTopOf="parent" + tools:srcCompat="@drawable/ic_mainline_dev" /> - + android:layout_marginStart="@dimen/l1" + app:layout_constrainedWidth="true" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0" + app:layout_constraintStart_toEndOf="@+id/developer_icon" + app:layout_constraintTop_toTopOf="parent"> - + + + + + + + + + diff --git a/app/src/main/res/layout/item_developer_link.xml b/app/src/main/res/layout/item_developer_link.xml new file mode 100644 index 000000000..0ba09df85 --- /dev/null +++ b/app/src/main/res/layout/item_developer_link.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings_md2.xml b/app/src/main/res/values/strings_md2.xml index 24ba8bf27..ecd5d13c7 100644 --- a/app/src/main/res/values/strings_md2.xml +++ b/app/src/main/res/values/strings_md2.xml @@ -19,6 +19,8 @@ can be updated! is loading… + \@topjohnwu + \@diareuse Project links PayPal Patreon