Skip to content

Commit a5b0b81

Browse files
keianhzoAlexandre Lissy
authored andcommitted
Fixes UIDialog focus issues (MozillaReality#2351)
* Fix focus issues in dialogs * Refactored common behaviors to UIDialog * Just use WorldClickListener for UIDialog dismiss
1 parent cc0a57c commit a5b0b81

File tree

14 files changed

+25
-192
lines changed

14 files changed

+25
-192
lines changed

app/src/common/shared/org/mozilla/vrbrowser/ui/views/settings/RadioGroupSetting.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ public void onCheckedChanged(RadioGroup compoundButton, @IdRes int checkedId) {
103103
}
104104

105105
setChecked(checkedId, true);
106-
compoundButton.requestFocus();
107106
}
108107
};
109108

app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/NoInternetWidget.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,4 @@ protected void initializeWidgetPlacement(WidgetPlacement aPlacement) {
5353
aPlacement.visible = false;
5454
}
5555

56-
@Override
57-
public void show(int aShowFlags) {
58-
super.show(aShowFlags);
59-
60-
mWidgetManager.pushWorldBrightness(this, WidgetManagerDelegate.DEFAULT_DIM_BRIGHTNESS);
61-
}
62-
63-
@Override
64-
public void hide(int aHideFlags) {
65-
super.hide(aHideFlags);
66-
67-
mWidgetManager.popWorldBrightness(this);
68-
}
69-
7056
}

app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TabsWidget.java

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,10 @@
2020
import org.mozilla.vrbrowser.ui.widgets.dialogs.SendTabDialogWidget;
2121
import org.mozilla.vrbrowser.ui.widgets.dialogs.UIDialog;
2222
import org.mozilla.vrbrowser.utils.BitmapCache;
23-
import org.mozilla.vrbrowser.utils.ViewUtils;
2423

2524
import java.util.ArrayList;
2625

27-
public class TabsWidget extends UIDialog implements WidgetManagerDelegate.WorldClickListener {
26+
public class TabsWidget extends UIDialog {
2827
protected BitmapCache mBitmapCache;
2928
protected RecyclerView mTabsList;
3029
protected GridLayoutManager mLayoutManager;
@@ -136,8 +135,6 @@ private void initialize() {
136135
mAdapter.notifyDataSetChanged();
137136
updateSelectionMode();
138137
});
139-
140-
mWidgetManager.addWorldClickListener(this);
141138
}
142139

143140
public void attachToWindow(WindowWidget aWindow) {
@@ -147,9 +144,6 @@ public void attachToWindow(WindowWidget aWindow) {
147144

148145
@Override
149146
public void releaseWidget() {
150-
if (mWidgetManager != null) {
151-
mWidgetManager.removeWorldClickListener(this);
152-
}
153147
super.releaseWidget();
154148
}
155149

@@ -158,15 +152,13 @@ public void show(int aShowFlags) {
158152
super.show(aShowFlags);
159153
refreshTabs();
160154
invalidate();
161-
mWidgetManager.pushWorldBrightness(this, WidgetManagerDelegate.DEFAULT_DIM_BRIGHTNESS);
162155
mTabsList.requestFocusFromTouch();
163156
}
164157

165158
@Override
166159
public void hide(@HideFlags int aHideFlags) {
167160
super.hide(aHideFlags);
168161
mRenderer.clearSurface();
169-
mWidgetManager.popWorldBrightness(this);
170162
}
171163

172164
public void setTabDelegate(TabDelegate aDelegate) {
@@ -378,19 +370,4 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, Recycle
378370
}
379371
}
380372

381-
@Override
382-
public void onGlobalFocusChanged(View oldFocus, View newFocus) {
383-
if (ViewUtils.isEqualOrChildrenOf(this, oldFocus) && this.isVisible() &&
384-
!ViewUtils.isEqualOrChildrenOf(this, newFocus)) {
385-
onDismiss();
386-
}
387-
}
388-
389-
@Override
390-
public void onWorldClick() {
391-
if (this.isVisible()) {
392-
onDismiss();
393-
}
394-
}
395-
396373
}

app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/UIWidget.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -318,9 +318,9 @@ public void show(@ShowFlags int aShowFlags) {
318318
mWidgetManager.pushBackHandler(mBackHandler);
319319
}
320320

321-
setFocusableInTouchMode(false);
321+
setFocusableInTouchMode(true);
322322
if (aShowFlags == REQUEST_FOCUS) {
323-
requestFocusFromTouch();
323+
post(this::requestFocusFromTouch);
324324
} else if (aShowFlags == CLEAR_FOCUS) {
325325
clearFocus();
326326
}

app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/dialogs/BaseAppDialogWidget.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@ public void show(@ShowFlags int aShowFlags) {
8080
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
8181
super.show(aShowFlags);
8282

83-
mWidgetManager.pushWorldBrightness(this, WidgetManagerDelegate.DEFAULT_DIM_BRIGHTNESS);
84-
8583
ViewTreeObserver viewTreeObserver = getViewTreeObserver();
8684
if (viewTreeObserver.isAlive()) {
8785
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@@ -95,20 +93,6 @@ public void onGlobalLayout() {
9593
}
9694
}
9795

98-
public void hide(@HideFlags int aHideFlags) {
99-
super.hide(aHideFlags);
100-
mWidgetManager.popWorldBrightness(this);
101-
}
102-
103-
// WidgetManagerDelegate.FocusChangeListener
104-
105-
@Override
106-
public void onGlobalFocusChanged(View oldFocus, View newFocus) {
107-
if (oldFocus == this && isVisible() && findViewById(newFocus.getId()) == null) {
108-
onDismiss();
109-
}
110-
}
111-
11296
public void setButtonsDelegate(Delegate delegate) {
11397
mAppDialogDelegate = delegate;
11498
}

app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/dialogs/CrashDialogWidget.java

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@
1313

1414
import org.mozilla.vrbrowser.R;
1515
import org.mozilla.vrbrowser.audio.AudioEngine;
16-
import org.mozilla.vrbrowser.browser.engine.SessionStore;
1716
import org.mozilla.vrbrowser.browser.SettingsStore;
18-
import org.mozilla.vrbrowser.ui.widgets.WidgetManagerDelegate;
17+
import org.mozilla.vrbrowser.browser.engine.SessionStore;
1918
import org.mozilla.vrbrowser.ui.widgets.WidgetPlacement;
2019

2120
public class CrashDialogWidget extends UIDialog {
@@ -51,8 +50,6 @@ public CrashDialogWidget(Context aContext, AttributeSet aAttrs, int aDefStyle) {
5150
private void initialize(Context aContext) {
5251
inflate(aContext, R.layout.crash_dialog, this);
5352

54-
mWidgetManager.addFocusChangeListener(this);
55-
5653
mLearnMoreButton = findViewById(R.id.learnMoreButton);
5754
mDoNotSendButton = findViewById(R.id.dontSendButton);
5855
mSendDataButton = findViewById(R.id.sendDataButton);
@@ -106,13 +103,6 @@ private void initialize(Context aContext) {
106103
mAudio = AudioEngine.fromContext(aContext);
107104
}
108105

109-
@Override
110-
public void releaseWidget() {
111-
mWidgetManager.removeFocusChangeListener(this);
112-
113-
super.releaseWidget();
114-
}
115-
116106
@Override
117107
protected void initializeWidgetPlacement(WidgetPlacement aPlacement) {
118108
aPlacement.visible = false;
@@ -126,20 +116,6 @@ protected void initializeWidgetPlacement(WidgetPlacement aPlacement) {
126116
aPlacement.translationZ = WidgetPlacement.unitFromMeters(getContext(), R.dimen.crash_dialog_world_z);
127117
}
128118

129-
@Override
130-
public void show(@ShowFlags int aShowFlags) {
131-
super.show(aShowFlags);
132-
133-
mWidgetManager.pushWorldBrightness(this, WidgetManagerDelegate.DEFAULT_DIM_BRIGHTNESS);
134-
}
135-
136-
@Override
137-
public void hide(@HideFlags int aHideFlags) {
138-
super.hide(aHideFlags);
139-
140-
mWidgetManager.popWorldBrightness(this);
141-
}
142-
143119
public void setCrashDialogDelegate(CrashDialogDelegate aDelegate) {
144120
mCrashDialogDelegate = aDelegate;
145121
}

app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/dialogs/PermissionWidget.java

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,17 @@
1010
import android.text.SpannableStringBuilder;
1111
import android.util.AttributeSet;
1212
import android.util.Log;
13-
import android.view.View;
1413
import android.widget.Button;
1514
import android.widget.ImageView;
1615
import android.widget.TextView;
1716

1817
import org.mozilla.geckoview.GeckoSession;
1918
import org.mozilla.vrbrowser.R;
20-
import org.mozilla.vrbrowser.ui.widgets.UIWidget;
21-
import org.mozilla.vrbrowser.ui.widgets.WidgetManagerDelegate;
2219
import org.mozilla.vrbrowser.ui.widgets.WidgetPlacement;
23-
import org.mozilla.vrbrowser.utils.SystemUtils;
2420

2521
import java.net.URI;
2622

27-
public class PermissionWidget extends UIDialog implements WidgetManagerDelegate.FocusChangeListener {
23+
public class PermissionWidget extends UIDialog {
2824

2925
private TextView mPermissionMessage;
3026
private ImageView mPermissionIcon;
@@ -80,20 +76,6 @@ protected void initializeWidgetPlacement(WidgetPlacement aPlacement) {
8076
aPlacement.anchorY = 0.5f;
8177
}
8278

83-
@Override
84-
public void show(@ShowFlags int aShowFlags) {
85-
super.show(aShowFlags);
86-
87-
mWidgetManager.pushWorldBrightness(this, WidgetManagerDelegate.DEFAULT_DIM_BRIGHTNESS);
88-
}
89-
90-
@Override
91-
public void hide(@HideFlags int aHideFlag) {
92-
super.hide(aHideFlag);
93-
94-
mWidgetManager.popWorldBrightness(this);
95-
}
96-
9779
public void showPrompt(String aUri, PermissionType aType, GeckoSession.PermissionDelegate.Callback aCallback) {
9880
int messageId;
9981
int iconId;

app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/dialogs/RestartDialogWidget.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,17 +74,4 @@ protected void initializeWidgetPlacement(WidgetPlacement aPlacement) {
7474
aPlacement.translationZ = WidgetPlacement.unitFromMeters(getContext(), R.dimen.restart_dialog_world_z);
7575
}
7676

77-
@Override
78-
public void show(int aShowFlags) {
79-
super.show(aShowFlags);
80-
81-
mWidgetManager.pushWorldBrightness(this, WidgetManagerDelegate.DEFAULT_DIM_BRIGHTNESS);
82-
}
83-
84-
@Override
85-
public void hide(int aHideFlags) {
86-
super.hide(aHideFlags);
87-
88-
mWidgetManager.popWorldBrightness(this);
89-
}
9077
}

app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/dialogs/UIDialog.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22

33
import android.content.Context;
44
import android.util.AttributeSet;
5-
import android.view.View;
65

76
import org.mozilla.vrbrowser.ui.widgets.UIWidget;
87
import org.mozilla.vrbrowser.ui.widgets.WidgetManagerDelegate;
9-
import org.mozilla.vrbrowser.utils.ViewUtils;
108

11-
public abstract class UIDialog extends UIWidget implements WidgetManagerDelegate.FocusChangeListener {
9+
public abstract class UIDialog extends UIWidget implements WidgetManagerDelegate.WorldClickListener {
1210
public UIDialog(Context aContext) {
1311
super(aContext);
1412
initialize();
@@ -25,12 +23,12 @@ public UIDialog(Context aContext, AttributeSet aAttrs, int aDefStyle) {
2523
}
2624

2725
private void initialize() {
28-
mWidgetManager.addFocusChangeListener(this);
26+
mWidgetManager.addWorldClickListener(this);
2927
}
3028

3129
@Override
3230
public void releaseWidget() {
33-
mWidgetManager.removeFocusChangeListener(this);
31+
mWidgetManager.removeWorldClickListener(this);
3432
super.releaseWidget();
3533
}
3634

@@ -39,13 +37,24 @@ public boolean isDialog() {
3937
return true;
4038
}
4139

42-
// WidgetManagerDelegate.FocusChangeListener
40+
@Override
41+
public void show(int aShowFlags) {
42+
super.show(aShowFlags);
43+
44+
mWidgetManager.pushWorldBrightness(this, WidgetManagerDelegate.DEFAULT_DIM_BRIGHTNESS);
45+
}
46+
47+
@Override
48+
public void hide(int aHideFlags) {
49+
super.hide(aHideFlags);
50+
51+
mWidgetManager.popWorldBrightness(this);
52+
}
4353

4454
@Override
45-
public void onGlobalFocusChanged(View oldFocus, View newFocus) {
46-
if (!ViewUtils.isEqualOrChildrenOf(this, newFocus) && isVisible()) {
55+
public void onWorldClick() {
56+
if (this.isVisible()) {
4757
onDismiss();
4858
}
4959
}
50-
5160
}

app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/dialogs/WhatsNewWidget.java

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
import java.util.concurrent.Executor;
2727

28-
public class WhatsNewWidget extends UIDialog implements WidgetManagerDelegate.WorldClickListener {
28+
public class WhatsNewWidget extends UIDialog {
2929

3030
private Accounts mAccounts;
3131
private Runnable mSignInCallback;
@@ -80,22 +80,11 @@ protected void initializeWidgetPlacement(WidgetPlacement aPlacement) {
8080
WidgetPlacement.unitFromMeters(getContext(), R.dimen.window_world_z);
8181
}
8282

83-
@Override
84-
public void show(@ShowFlags int aShowFlags) {
85-
super.show(aShowFlags);
86-
87-
mWidgetManager.addWorldClickListener(this);
88-
mWidgetManager.pushWorldBrightness(this, WidgetManagerDelegate.DEFAULT_DIM_BRIGHTNESS);
89-
}
90-
9183
@Override
9284
public void hide(@HideFlags int aHideFlags) {
9385
super.hide(aHideFlags);
9486

9587
SettingsStore.getInstance(getContext()).setWhatsNewDisplayed(true);
96-
97-
mWidgetManager.popWorldBrightness(this);
98-
mWidgetManager.removeWorldClickListener(this);
9988
}
10089

10190
private void signIn(View view) {
@@ -124,11 +113,4 @@ private void startBrowsing(View view) {
124113
}
125114
}
126115

127-
// WidgetManagerDelegate.WorldClickListener
128-
129-
@Override
130-
public void onWorldClick() {
131-
onDismiss();
132-
}
133-
134116
}

0 commit comments

Comments
 (0)