Skip to content

Commit b7c8d9b

Browse files
committed
Show a warning when disabling hand tracking
The hand tracking setting is ephemeral, hand tracking is automatically restored on the next app launch to prevent issues with unavailable controllers. Users have been confused because indeed it looks like that their preferences are not saved, but that's done on purpouse. We must inform them about the volatility of the setting. From now on a warning text with a color animation is shown when disabling the hand tracking switch.
1 parent 86d72cc commit b7c8d9b

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

app/src/common/shared/com/igalia/wolvic/ui/widgets/settings/ControllerOptionsView.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55

66
package com.igalia.wolvic.ui.widgets.settings;
77

8+
import android.animation.ValueAnimator;
89
import android.content.Context;
10+
import android.graphics.Color;
911
import android.graphics.Point;
1012
import android.view.LayoutInflater;
1113

@@ -22,6 +24,8 @@
2224

2325
class ControllerOptionsView extends SettingsView {
2426

27+
private static final int HAND_TRACKING_WARNING_HIGHLIGHT_DURATION = 1000;
28+
private static final int HAND_TRACKING_WARNING_HIGHLIGHT_START_DELAY = 300;
2529
private OptionsControllerBinding mBinding;
2630

2731
public ControllerOptionsView(Context aContext, WidgetManagerDelegate aWidgetManager) {
@@ -161,10 +165,35 @@ private void setPointerMode(@WidgetManagerDelegate.PointerMode int value, boolea
161165
}
162166
}
163167

168+
private void showHandTrackingWarningIfNeeded(boolean enabled) {
169+
if (enabled) {
170+
mBinding.handtrackingSwitchWarning.setVisibility(GONE);
171+
} else {
172+
mBinding.handtrackingSwitchWarning.setVisibility(VISIBLE);
173+
174+
int highlightColor = getContext().getResources().getColor(R.color.eggplant);
175+
int targetColor = highlightColor & 0x00FFFFFF; // clear alpha
176+
177+
mBinding.handtrackingSwitchWarning.setBackgroundColor(highlightColor);
178+
179+
ValueAnimator animator = ValueAnimator.ofArgb(highlightColor, targetColor);
180+
animator.setDuration(HAND_TRACKING_WARNING_HIGHLIGHT_DURATION);
181+
animator.setStartDelay(HAND_TRACKING_WARNING_HIGHLIGHT_START_DELAY);
182+
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
183+
@Override
184+
public void onAnimationUpdate(ValueAnimator valueAnimator) {
185+
mBinding.handtrackingSwitchWarning.setBackgroundColor((int) valueAnimator.getAnimatedValue());
186+
}
187+
});
188+
animator.start();
189+
}
190+
}
191+
164192
private void setHandTrackingEnabled(boolean value, boolean doApply) {
165193
mBinding.handtrackingSwitch.setOnCheckedChangeListener(null);
166194
mBinding.handtrackingSwitch.setValue(value, false);
167195
mBinding.handtrackingSwitch.setOnCheckedChangeListener(mHandtrackingListener);
196+
showHandTrackingWarningIfNeeded(value);
168197

169198
if (doApply) {
170199
mWidgetManager.setHandTrackingEnabled(value);

app/src/main/res/layout/options_controller.xml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,36 @@
7272
android:layout_height="wrap_content"
7373
app:description="@string/controller_options_handtracking" />
7474

75+
<RelativeLayout
76+
android:id="@+id/handtracking_switch_warning"
77+
android:layout_width="match_parent"
78+
android:layout_height="wrap_content"
79+
android:gravity="center_vertical"
80+
android:visibility="gone"
81+
android:paddingBottom="8dp">
82+
83+
<ImageView
84+
android:id="@+id/info_icon"
85+
android:layout_width="24dp"
86+
android:layout_height="24dp"
87+
android:layout_alignParentStart="true"
88+
android:layout_alignParentTop="true"
89+
android:layout_marginStart="24dp"
90+
android:src="@drawable/ic_addons_info" />
91+
92+
<TextView
93+
android:id="@+id/setting_description"
94+
style="@style/settingsText"
95+
android:layout_alignParentTop="true"
96+
android:layout_centerVertical="true"
97+
android:layout_marginStart="12dp"
98+
android:layout_marginEnd="24dp"
99+
android:layout_toEndOf="@id/info_icon"
100+
android:text="@string/disable_hand_tracking_dialog_body"
101+
android:textAlignment="textStart" />
102+
103+
</RelativeLayout>
104+
75105
<com.igalia.wolvic.ui.views.settings.RadioGroupVSetting
76106
android:id="@+id/window_selection_radio"
77107
android:layout_width="match_parent"

app/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2615,4 +2615,7 @@ the Select` button. When clicked it bookmarks all the previously selected tabs -
26152615
<string name="controller_options_hover_to_select">Hover</string>
26162616
<string name="announcements_title">Announcements</string>
26172617

2618+
<!-- Shown in the controller options view when disabling the hand tracking switch -->
2619+
<string name="disable_hand_tracking_dialog_body">Hand tracking is disabled temporarily. It will be automatically re-enabled on next launch. This option is not persistent on purpose to avoid issues when controllers are unavailable.</string>
2620+
26182621
</resources>

0 commit comments

Comments
 (0)