Browse Source
android: Add early access upgrade fragment
android: Add early access upgrade fragment
We now have a second build flavor that will determine whether the "Get Early Access" button appears.pull/15/merge
committed by
bunnei
13 changed files with 419 additions and 2 deletions
-
6src/android/app/build.gradle.kts
-
16src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/HomeSettingAdapter.kt
-
83src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EarlyAccessFragment.kt
-
18src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt
-
9src/android/app/src/main/res/drawable/ic_check_circle.xml
-
9src/android/app/src/main/res/drawable/ic_diamond.xml
-
9src/android/app/src/main/res/drawable/premium_background.xml
-
1src/android/app/src/main/res/layout/card_home_option.xml
-
242src/android/app/src/main/res/layout/fragment_early_access.xml
-
8src/android/app/src/main/res/navigation/home_navigation.xml
-
3src/android/app/src/main/res/values-night/yuzu_colors.xml
-
14src/android/app/src/main/res/values/strings.xml
-
3src/android/app/src/main/res/values/yuzu_colors.xml
@ -0,0 +1,83 @@ |
|||||
|
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project |
||||
|
// SPDX-License-Identifier: GPL-2.0-or-later |
||||
|
|
||||
|
package org.yuzu.yuzu_emu.fragments |
||||
|
|
||||
|
import android.content.Intent |
||||
|
import android.net.Uri |
||||
|
import android.os.Bundle |
||||
|
import android.view.LayoutInflater |
||||
|
import android.view.View |
||||
|
import android.view.ViewGroup |
||||
|
import androidx.core.view.ViewCompat |
||||
|
import androidx.core.view.WindowInsetsCompat |
||||
|
import androidx.core.view.updatePadding |
||||
|
import androidx.fragment.app.Fragment |
||||
|
import androidx.fragment.app.activityViewModels |
||||
|
import androidx.navigation.fragment.findNavController |
||||
|
import com.google.android.material.transition.MaterialSharedAxis |
||||
|
import org.yuzu.yuzu_emu.R |
||||
|
import org.yuzu.yuzu_emu.databinding.FragmentEarlyAccessBinding |
||||
|
import org.yuzu.yuzu_emu.model.HomeViewModel |
||||
|
|
||||
|
class EarlyAccessFragment : Fragment() { |
||||
|
private var _binding: FragmentEarlyAccessBinding? = null |
||||
|
private val binding get() = _binding!! |
||||
|
|
||||
|
private val homeViewModel: HomeViewModel by activityViewModels() |
||||
|
|
||||
|
override fun onCreate(savedInstanceState: Bundle?) { |
||||
|
super.onCreate(savedInstanceState) |
||||
|
enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) |
||||
|
returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) |
||||
|
} |
||||
|
|
||||
|
override fun onCreateView( |
||||
|
inflater: LayoutInflater, |
||||
|
container: ViewGroup?, |
||||
|
savedInstanceState: Bundle? |
||||
|
): View { |
||||
|
_binding = FragmentEarlyAccessBinding.inflate(layoutInflater) |
||||
|
return binding.root |
||||
|
} |
||||
|
|
||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { |
||||
|
homeViewModel.setNavigationVisibility(visible = false, animated = true) |
||||
|
homeViewModel.setStatusBarShadeVisibility(visible = false) |
||||
|
|
||||
|
binding.toolbarAbout.setNavigationOnClickListener { |
||||
|
parentFragmentManager.primaryNavigationFragment?.findNavController()?.popBackStack() |
||||
|
} |
||||
|
|
||||
|
binding.getEarlyAccessButton.setOnClickListener { openLink(getString(R.string.play_store_link)) } |
||||
|
|
||||
|
setInsets() |
||||
|
} |
||||
|
|
||||
|
private fun openLink(link: String) { |
||||
|
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(link)) |
||||
|
startActivity(intent) |
||||
|
} |
||||
|
|
||||
|
private fun setInsets() = |
||||
|
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _: View, windowInsets: WindowInsetsCompat -> |
||||
|
val barInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) |
||||
|
val cutoutInsets = windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout()) |
||||
|
|
||||
|
val leftInsets = barInsets.left + cutoutInsets.left |
||||
|
val rightInsets = barInsets.right + cutoutInsets.right |
||||
|
|
||||
|
val mlpAppBar = binding.appbarEa.layoutParams as ViewGroup.MarginLayoutParams |
||||
|
mlpAppBar.leftMargin = leftInsets |
||||
|
mlpAppBar.rightMargin = rightInsets |
||||
|
binding.appbarEa.layoutParams = mlpAppBar |
||||
|
|
||||
|
binding.scrollEa.updatePadding( |
||||
|
left = leftInsets, |
||||
|
right = rightInsets, |
||||
|
bottom = barInsets.bottom |
||||
|
) |
||||
|
|
||||
|
windowInsets |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,9 @@ |
|||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
||||
|
android:width="24dp" |
||||
|
android:height="24dp" |
||||
|
android:viewportWidth="24" |
||||
|
android:viewportHeight="24"> |
||||
|
<path |
||||
|
android:fillColor="?attr/colorControlNormal" |
||||
|
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z" /> |
||||
|
</vector> |
||||
@ -0,0 +1,9 @@ |
|||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
||||
|
android:width="24dp" |
||||
|
android:height="24dp" |
||||
|
android:viewportWidth="24" |
||||
|
android:viewportHeight="24"> |
||||
|
<path |
||||
|
android:fillColor="?attr/colorControlNormal" |
||||
|
android:pathData="M19,3H5L2,9l10,12L22,9L19,3zM9.62,8l1.5,-3h1.76l1.5,3H9.62zM11,10v6.68L5.44,10H11zM13,10h5.56L13,16.68V10zM19.26,8h-2.65l-1.5,-3h2.65L19.26,8zM6.24,5h2.65l-1.5,3H4.74L6.24,5z" /> |
||||
|
</vector> |
||||
@ -0,0 +1,9 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"> |
||||
|
<gradient |
||||
|
android:type="linear" |
||||
|
android:angle="45" |
||||
|
android:startColor="@color/yuzu_ea_background_start" |
||||
|
android:endColor="@color/yuzu_ea_background_end" /> |
||||
|
<corners android:radius="12dp" /> |
||||
|
</shape> |
||||
@ -0,0 +1,242 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<androidx.coordinatorlayout.widget.CoordinatorLayout |
||||
|
xmlns:android="http://schemas.android.com/apk/res/android" |
||||
|
xmlns:app="http://schemas.android.com/apk/res-auto" |
||||
|
android:id="@+id/coordinator_about" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="match_parent" |
||||
|
android:background="?attr/colorSurface"> |
||||
|
|
||||
|
<com.google.android.material.appbar.AppBarLayout |
||||
|
android:id="@+id/appbar_ea" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:fitsSystemWindows="true"> |
||||
|
|
||||
|
<com.google.android.material.appbar.MaterialToolbar |
||||
|
android:id="@+id/toolbar_about" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="?attr/actionBarSize" |
||||
|
app:navigationIcon="@drawable/ic_back" |
||||
|
app:title="@string/early_access" /> |
||||
|
|
||||
|
</com.google.android.material.appbar.AppBarLayout> |
||||
|
|
||||
|
<androidx.core.widget.NestedScrollView |
||||
|
android:id="@+id/scroll_ea" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="match_parent" |
||||
|
android:clipToPadding="false" |
||||
|
android:paddingBottom="20dp" |
||||
|
android:scrollbars="vertical" |
||||
|
android:fadeScrollbars="false" |
||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior"> |
||||
|
|
||||
|
<LinearLayout |
||||
|
android:id="@+id/card_ea" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="match_parent" |
||||
|
android:layout_marginVertical="32dp" |
||||
|
android:layout_marginHorizontal="20dp" |
||||
|
android:background="@drawable/premium_background" |
||||
|
android:orientation="vertical"> |
||||
|
|
||||
|
<com.google.android.material.textview.MaterialTextView |
||||
|
style="@style/TextAppearance.Material3.TitleLarge" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginTop="16dp" |
||||
|
android:layout_marginHorizontal="20dp" |
||||
|
android:text="@string/early_access_benefits" |
||||
|
android:textAlignment="center" |
||||
|
android:textStyle="bold" /> |
||||
|
|
||||
|
<LinearLayout |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginTop="32dp" |
||||
|
android:layout_marginHorizontal="20dp" |
||||
|
android:orientation="horizontal"> |
||||
|
|
||||
|
<ImageView |
||||
|
android:layout_width="24dp" |
||||
|
android:layout_height="24dp" |
||||
|
android:layout_gravity="center_vertical" |
||||
|
android:src="@drawable/ic_check_circle" |
||||
|
app:tint="?attr/colorOnSurface" /> |
||||
|
|
||||
|
<com.google.android.material.textview.MaterialTextView |
||||
|
style="@style/TextAppearance.Material3.BodyLarge" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginStart="20dp" |
||||
|
android:text="@string/cutting_edge_features" |
||||
|
android:textAlignment="viewStart" |
||||
|
android:layout_gravity="start|center_vertical" /> |
||||
|
|
||||
|
</LinearLayout> |
||||
|
|
||||
|
<LinearLayout |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginTop="32dp" |
||||
|
android:layout_marginHorizontal="20dp" |
||||
|
android:orientation="horizontal"> |
||||
|
|
||||
|
<ImageView |
||||
|
android:layout_width="24dp" |
||||
|
android:layout_height="24dp" |
||||
|
android:layout_gravity="center_vertical" |
||||
|
android:src="@drawable/ic_check_circle" |
||||
|
app:tint="?attr/colorOnSurface" /> |
||||
|
|
||||
|
<com.google.android.material.textview.MaterialTextView |
||||
|
style="@style/TextAppearance.Material3.BodyLarge" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginStart="20dp" |
||||
|
android:text="@string/early_access_updates" |
||||
|
android:textAlignment="viewStart" |
||||
|
android:layout_gravity="start|center_vertical" /> |
||||
|
|
||||
|
</LinearLayout> |
||||
|
|
||||
|
<LinearLayout |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginTop="32dp" |
||||
|
android:layout_marginHorizontal="20dp" |
||||
|
android:orientation="horizontal"> |
||||
|
|
||||
|
<ImageView |
||||
|
android:layout_width="24dp" |
||||
|
android:layout_height="24dp" |
||||
|
android:layout_gravity="center_vertical" |
||||
|
android:src="@drawable/ic_check_circle" |
||||
|
app:tint="?attr/colorOnSurface" /> |
||||
|
|
||||
|
<com.google.android.material.textview.MaterialTextView |
||||
|
style="@style/TextAppearance.Material3.BodyLarge" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginStart="20dp" |
||||
|
android:text="@string/no_manual_installation" |
||||
|
android:textAlignment="viewStart" |
||||
|
android:layout_gravity="start|center_vertical" /> |
||||
|
|
||||
|
</LinearLayout> |
||||
|
|
||||
|
<LinearLayout |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginTop="32dp" |
||||
|
android:layout_marginHorizontal="20dp" |
||||
|
android:orientation="horizontal"> |
||||
|
|
||||
|
<ImageView |
||||
|
android:layout_width="24dp" |
||||
|
android:layout_height="24dp" |
||||
|
android:layout_gravity="center_vertical" |
||||
|
android:src="@drawable/ic_check_circle" |
||||
|
app:tint="?attr/colorOnSurface" /> |
||||
|
|
||||
|
<com.google.android.material.textview.MaterialTextView |
||||
|
style="@style/TextAppearance.Material3.BodyLarge" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginStart="20dp" |
||||
|
android:text="@string/prioritized_support" |
||||
|
android:textAlignment="viewStart" |
||||
|
android:layout_gravity="start|center_vertical" /> |
||||
|
|
||||
|
</LinearLayout> |
||||
|
|
||||
|
<LinearLayout |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginTop="32dp" |
||||
|
android:layout_marginHorizontal="20dp" |
||||
|
android:orientation="horizontal"> |
||||
|
|
||||
|
<ImageView |
||||
|
android:layout_width="24dp" |
||||
|
android:layout_height="24dp" |
||||
|
android:layout_gravity="center_vertical" |
||||
|
android:src="@drawable/ic_check_circle" |
||||
|
app:tint="?attr/colorOnSurface" /> |
||||
|
|
||||
|
<com.google.android.material.textview.MaterialTextView |
||||
|
style="@style/TextAppearance.Material3.BodyLarge" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginStart="20dp" |
||||
|
android:text="@string/helping_game_preservation" |
||||
|
android:textAlignment="viewStart" |
||||
|
android:layout_gravity="start|center_vertical" /> |
||||
|
|
||||
|
</LinearLayout> |
||||
|
|
||||
|
<LinearLayout |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginTop="32dp" |
||||
|
android:layout_marginHorizontal="20dp" |
||||
|
android:orientation="horizontal"> |
||||
|
|
||||
|
<ImageView |
||||
|
android:layout_width="24dp" |
||||
|
android:layout_height="24dp" |
||||
|
android:layout_gravity="center_vertical" |
||||
|
android:src="@drawable/ic_check_circle" |
||||
|
app:tint="?attr/colorOnSurface" /> |
||||
|
|
||||
|
<com.google.android.material.textview.MaterialTextView |
||||
|
style="@style/TextAppearance.Material3.BodyLarge" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginStart="20dp" |
||||
|
android:text="@string/our_eternal_gratitude" |
||||
|
android:textAlignment="viewStart" |
||||
|
android:layout_gravity="start|center_vertical" /> |
||||
|
|
||||
|
</LinearLayout> |
||||
|
|
||||
|
<com.google.android.material.textview.MaterialTextView |
||||
|
style="@style/TextAppearance.Material3.TitleLarge" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:text="@string/are_you_interested" |
||||
|
android:layout_marginTop="80dp" |
||||
|
android:layout_marginHorizontal="20dp" |
||||
|
android:textStyle="bold" |
||||
|
android:textAlignment="center" /> |
||||
|
|
||||
|
<com.google.android.material.card.MaterialCardView |
||||
|
style="?attr/materialCardViewFilledStyle" |
||||
|
android:id="@+id/get_early_access_button" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginTop="16dp" |
||||
|
android:layout_marginHorizontal="20dp" |
||||
|
android:layout_marginBottom="28dp" |
||||
|
android:background="?attr/selectableItemBackground" |
||||
|
android:backgroundTint="@android:color/black"> |
||||
|
|
||||
|
<com.google.android.material.textview.MaterialTextView |
||||
|
style="@style/TextAppearance.Material3.TitleLarge" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:text="@string/get_early_access" |
||||
|
android:layout_marginHorizontal="20dp" |
||||
|
android:layout_marginVertical="8dp" |
||||
|
android:textColor="@android:color/white" |
||||
|
android:textStyle="bold" |
||||
|
android:textAlignment="center" /> |
||||
|
|
||||
|
</com.google.android.material.card.MaterialCardView> |
||||
|
|
||||
|
</LinearLayout> |
||||
|
|
||||
|
</androidx.core.widget.NestedScrollView> |
||||
|
|
||||
|
</androidx.coordinatorlayout.widget.CoordinatorLayout> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue