blob: a39389cf1ad2a25e2589afcedc4ae75ece80291b [file] [log] [blame]
Timi Rautamäkie83f9e12022-03-16 13:21:30 +00001/*
Michael Bestasec050052024-02-14 20:35:43 +02002 * SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
3 * SPDX-License-Identifier: Apache-2.0
Timi Rautamäkie83f9e12022-03-16 13:21:30 +00004 */
5
6package org.lineageos.setupwizard;
7
8import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON_OVERLAY;
9import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY;
10import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY;
11
Michael Bestasa5ba5df2023-07-15 16:19:36 +030012import static com.android.systemui.shared.recents.utilities.Utilities.isLargeScreen;
13
Timi Rautamäkie83f9e12022-03-16 13:21:30 +000014import static org.lineageos.internal.util.DeviceKeysConstants.KEY_MASK_APP_SWITCH;
15import static org.lineageos.setupwizard.SetupWizardApp.DISABLE_NAV_KEYS;
16import static org.lineageos.setupwizard.SetupWizardApp.NAVIGATION_OPTION_KEY;
17
18import android.animation.Animator;
19import android.animation.AnimatorListenerAdapter;
Timi Rautamäkie83f9e12022-03-16 13:21:30 +000020import android.os.Bundle;
21import android.os.UserHandle;
Timi Rautamäkie83f9e12022-03-16 13:21:30 +000022import android.view.View;
23import android.widget.CheckBox;
24import android.widget.RadioButton;
25import android.widget.RadioGroup;
Timi Rautamäkie83f9e12022-03-16 13:21:30 +000026
27import com.airbnb.lottie.LottieAnimationView;
Timi Rautamäkie83f9e12022-03-16 13:21:30 +000028
29import lineageos.providers.LineageSettings;
30
31import org.lineageos.setupwizard.util.SetupWizardUtils;
32
33public class NavigationSettingsActivity extends BaseSetupWizardActivity {
34
Timi Rautamäkie83f9e12022-03-16 13:21:30 +000035 private SetupWizardApp mSetupWizardApp;
36
37 private String mSelection = NAV_BAR_MODE_GESTURAL_OVERLAY;
38
39 private CheckBox mHideGesturalHint;
40
41 @Override
42 protected void onCreate(Bundle savedInstanceState) {
43 super.onCreate(savedInstanceState);
44
45 mSetupWizardApp = (SetupWizardApp) getApplication();
46 boolean navBarEnabled = false;
47 if (mSetupWizardApp.getSettingsBundle().containsKey(DISABLE_NAV_KEYS)) {
48 navBarEnabled = mSetupWizardApp.getSettingsBundle().getBoolean(DISABLE_NAV_KEYS);
49 }
50
51 int deviceKeys = getResources().getInteger(
52 org.lineageos.platform.internal.R.integer.config_deviceHardwareKeys);
53 boolean hasHomeKey = (deviceKeys & KEY_MASK_APP_SWITCH) != 0;
54
55 getGlifLayout().setDescriptionText(getString(R.string.navigation_summary));
56 setNextText(R.string.next);
57
58 int available = 3;
59 // Hide unavailable navigation modes
Bruno Martins70551982022-03-22 20:07:33 +000060 if (!SetupWizardUtils.isPackageInstalled(this, NAV_BAR_MODE_GESTURAL_OVERLAY)) {
Timi Rautamäkie83f9e12022-03-16 13:21:30 +000061 findViewById(R.id.radio_gesture).setVisibility(View.GONE);
62 ((RadioButton) findViewById(R.id.radio_sw_keys)).setChecked(true);
63 available--;
64 }
65
Bruno Martins70551982022-03-22 20:07:33 +000066 if (!SetupWizardUtils.isPackageInstalled(this, NAV_BAR_MODE_2BUTTON_OVERLAY)) {
Timi Rautamäkie83f9e12022-03-16 13:21:30 +000067 findViewById(R.id.radio_two_button).setVisibility(View.GONE);
68 available--;
69 }
70
Bruno Martins70551982022-03-22 20:07:33 +000071 if (!SetupWizardUtils.isPackageInstalled(this, NAV_BAR_MODE_3BUTTON_OVERLAY)) {
Timi Rautamäkie83f9e12022-03-16 13:21:30 +000072 findViewById(R.id.radio_sw_keys).setVisibility(View.GONE);
73 available--;
74 }
75
Timi Rautamäkie83f9e12022-03-16 13:21:30 +000076 // Hide this page if the device has hardware keys but didn't enable navbar
77 // or if there's <= 1 available navigation modes
78 if (!navBarEnabled && hasHomeKey || available <= 1) {
79 mSetupWizardApp.getSettingsBundle().putString(NAVIGATION_OPTION_KEY,
80 NAV_BAR_MODE_3BUTTON_OVERLAY);
Oliver Scottf58c0f42024-01-08 14:52:12 -050081 finishAction(RESULT_OK);
Timi Rautamäkie83f9e12022-03-16 13:21:30 +000082 }
83
84 final LottieAnimationView navigationIllustration =
85 findViewById(R.id.navigation_illustration);
86 final RadioGroup radioGroup = findViewById(R.id.navigation_radio_group);
87 mHideGesturalHint = findViewById(R.id.hide_navigation_hint);
Michael Bestasa5ba5df2023-07-15 16:19:36 +030088
Oliver Scott76644612024-01-10 17:16:28 -050089 radioGroup.setOnCheckedChangeListener((group, checkedId) -> {
90 switch (checkedId) {
Timi Rautamäkie83f9e12022-03-16 13:21:30 +000091 case R.id.radio_gesture:
92 mSelection = NAV_BAR_MODE_GESTURAL_OVERLAY;
93 navigationIllustration
94 .setAnimation(R.raw.lottie_system_nav_fully_gestural);
95 revealHintCheckbox();
96 break;
97 case R.id.radio_two_button:
98 mSelection = NAV_BAR_MODE_2BUTTON_OVERLAY;
99 navigationIllustration.setAnimation(R.raw.lottie_system_nav_2_button);
100 hideHintCheckBox();
101 break;
102 case R.id.radio_sw_keys:
103 mSelection = NAV_BAR_MODE_3BUTTON_OVERLAY;
104 navigationIllustration.setAnimation(R.raw.lottie_system_nav_3_button);
105 hideHintCheckBox();
106 break;
Timi Rautamäkie83f9e12022-03-16 13:21:30 +0000107 }
Oliver Scott76644612024-01-10 17:16:28 -0500108
109 navigationIllustration.playAnimation();
Timi Rautamäkie83f9e12022-03-16 13:21:30 +0000110 });
111 }
112
113 private void revealHintCheckbox() {
Alessandro Astone0fa84172022-04-04 17:33:18 +0200114 mHideGesturalHint.animate().cancel();
115
Timi Rautamäkie83f9e12022-03-16 13:21:30 +0000116 if (mHideGesturalHint.getVisibility() == View.VISIBLE) {
117 return;
118 }
119
120 mHideGesturalHint.setVisibility(View.VISIBLE);
121 mHideGesturalHint.setAlpha(0.0f);
122 mHideGesturalHint.animate()
Oliver Scott76644612024-01-10 17:16:28 -0500123 .translationY(0)
124 .alpha(1.0f)
125 .setListener(null);
Timi Rautamäkie83f9e12022-03-16 13:21:30 +0000126 }
127
128 private void hideHintCheckBox() {
129 if (mHideGesturalHint.getVisibility() == View.INVISIBLE) {
130 return;
131 }
132
133 mHideGesturalHint.animate()
Oliver Scott76644612024-01-10 17:16:28 -0500134 .translationY(-mHideGesturalHint.getHeight())
135 .alpha(0.0f)
136 .setListener(new AnimatorListenerAdapter() {
137 @Override
138 public void onAnimationEnd(Animator animation) {
139 super.onAnimationEnd(animation);
140 mHideGesturalHint.setVisibility(View.INVISIBLE);
141 }
142 });
Timi Rautamäkie83f9e12022-03-16 13:21:30 +0000143 }
144
145 @Override
146 protected void onNextPressed() {
147 mSetupWizardApp.getSettingsBundle().putString(NAVIGATION_OPTION_KEY, mSelection);
LuK133778e7d4e2025-03-24 14:56:53 +0100148 boolean hideHint = mHideGesturalHint.isChecked();
149 LineageSettings.System.putIntForUser(getContentResolver(),
150 LineageSettings.System.NAVIGATION_BAR_HINT, hideHint ? 0 : 1,
151 UserHandle.USER_CURRENT);
Oliver Scott04c9f462024-01-06 20:36:13 -0500152 super.onNextPressed();
Timi Rautamäkie83f9e12022-03-16 13:21:30 +0000153 }
154
155 @Override
156 protected int getLayoutResId() {
157 return R.layout.setup_navigation;
158 }
159
160 @Override
161 protected int getTitleResId() {
162 return R.string.setup_navigation;
163 }
164
165 @Override
166 protected int getIconResId() {
167 return R.drawable.ic_navigation;
168 }
Timi Rautamäkie83f9e12022-03-16 13:21:30 +0000169}