Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Commit 93ce74a

Browse files
authored
UI fixes (#3177)
1 parent e32c2f1 commit 93ce74a

12 files changed

Lines changed: 160 additions & 61 deletions

File tree

app/src/common/shared/org/mozilla/vrbrowser/browser/PermissionDelegate.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,16 @@ public void onContentPermissionRequest(GeckoSession aSession, String aUri, int a
180180
} else if (aType == PERMISSION_MEDIA_KEY_SYSTEM_ACCESS) {
181181
WindowWidget windowWidget = mWidgetManager.getFocusedWindow();
182182
Runnable enableDrm = () -> {
183+
Session session = SessionStore.get().getSession(aSession);
183184
if (SettingsStore.getInstance(mContext).isDrmContentPlaybackEnabled()) {
185+
if (session != null) {
186+
session.setDrmState(SessionState.DRM_ALLOWED);
187+
}
184188
callback.grant();
185189
} else {
190+
if (session != null) {
191+
session.setDrmState(SessionState.DRM_BLOCKED);
192+
}
186193
callback.reject();
187194
}
188195
};

app/src/common/shared/org/mozilla/vrbrowser/browser/engine/Session.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public class Session implements ContentBlocking.Delegate, GeckoSession.Navigatio
7878
private transient CopyOnWriteArrayList<GeckoSession.SelectionActionDelegate> mSelectionActionListeners;
7979
private transient CopyOnWriteArrayList<WebXRStateChangedListener> mWebXRStateListeners;
8080
private transient CopyOnWriteArrayList<PopUpStateChangedListener> mPopUpStateStateListeners;
81+
private transient CopyOnWriteArrayList<DrmStateChangedListener> mDrmStateStateListeners;
8182

8283
private SessionState mState;
8384
private transient CopyOnWriteArrayList<Runnable> mQueuedCalls = new CopyOnWriteArrayList<>();
@@ -103,6 +104,10 @@ public interface PopUpStateChangedListener {
103104
void onPopUpStateChanged(Session aSession, @SessionState.PopupState int aPopUpState);
104105
}
105106

107+
public interface DrmStateChangedListener {
108+
void onDrmStateChanged(Session aSession, @SessionState.DrmState int aDrmState);
109+
}
110+
106111
@IntDef(value = { SESSION_OPEN, SESSION_DO_NOT_OPEN})
107112
public @interface SessionOpenModeFlags {}
108113
public static final int SESSION_OPEN = 0;
@@ -135,6 +140,7 @@ private void initialize() {
135140
mBitmapChangedListeners = new CopyOnWriteArrayList<>();
136141
mWebXRStateListeners = new CopyOnWriteArrayList<>();
137142
mPopUpStateStateListeners = new CopyOnWriteArrayList<>();
143+
mDrmStateStateListeners = new CopyOnWriteArrayList<>();
138144

139145
if (mPrefs != null) {
140146
mPrefs.registerOnSharedPreferenceChangeListener(this);
@@ -181,6 +187,7 @@ protected void shutdown() {
181187
mBitmapChangedListeners.clear();
182188
mWebXRStateListeners.clear();
183189
mPopUpStateStateListeners.clear();
190+
mDrmStateStateListeners.clear();
184191

185192
if (mPrefs != null) {
186193
mPrefs.unregisterOnSharedPreferenceChangeListener(this);
@@ -209,6 +216,10 @@ private void dumpAllState() {
209216
for (PopUpStateChangedListener listener: mPopUpStateStateListeners) {
210217
dumpState(listener);
211218
}
219+
220+
for (DrmStateChangedListener listener: mDrmStateStateListeners) {
221+
dumpState(listener);
222+
}
212223
}
213224

214225
private void dumpState(GeckoSession.NavigationDelegate aListener) {
@@ -247,6 +258,10 @@ private void dumpState(PopUpStateChangedListener aListener) {
247258
aListener.onPopUpStateChanged(this, mState.mPopUpState);
248259
}
249260

261+
private void dumpState(DrmStateChangedListener aListener) {
262+
aListener.onDrmStateChanged(this, mState.mDrmState);
263+
}
264+
250265
private void flushQueuedEvents() {
251266
for (Runnable call: mQueuedCalls) {
252267
call.run();
@@ -352,6 +367,15 @@ public void removePopUpStateChangedListener(PopUpStateChangedListener aListener)
352367
mPopUpStateStateListeners.remove(aListener);
353368
}
354369

370+
public void addDrmStateChangedListener(DrmStateChangedListener aListener) {
371+
mDrmStateStateListeners.add(aListener);
372+
dumpState(aListener);
373+
}
374+
375+
public void removeDrmStateChangedListener(DrmStateChangedListener aListener) {
376+
mDrmStateStateListeners.remove(aListener);
377+
}
378+
355379
private void setupSessionListeners(GeckoSession aSession) {
356380
aSession.setNavigationDelegate(this);
357381
aSession.setProgressDelegate(this);
@@ -841,6 +865,17 @@ public void setPopUpState(@SessionState.PopupState int aPopUpstate) {
841865
return mState.mPopUpState;
842866
}
843867

868+
public void setDrmState(@SessionState.DrmState int aDrmState) {
869+
mState.mDrmState = aDrmState;
870+
for (DrmStateChangedListener listener: mDrmStateStateListeners) {
871+
dumpState(listener);
872+
}
873+
}
874+
875+
public @SessionState.DrmState int getDrmState() {
876+
return mState.mDrmState;
877+
}
878+
844879
// Session Settings
845880

846881
protected void setServo(final boolean enabled) {
@@ -937,6 +972,7 @@ public void onLocationChange(@NonNull GeckoSession aSession, String aUri) {
937972
}
938973

939974
setPopUpState(SessionState.POPUP_UNUSED);
975+
setDrmState(SessionState.DRM_UNUSED);
940976

941977
mState.mPreviousUri = mState.mUri;
942978
mState.mUri = aUri;

app/src/common/shared/org/mozilla/vrbrowser/browser/engine/SessionState.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ public class SessionState {
3434
public static final int POPUP_ALLOWED = 1;
3535
public static final int POPUP_BLOCKED = 2;
3636

37+
@IntDef(value = { DRM_UNUSED, DRM_ALLOWED, DRM_BLOCKED})
38+
public @interface DrmState {}
39+
public static final int DRM_UNUSED = 0;
40+
public static final int DRM_ALLOWED = 1;
41+
public static final int DRM_BLOCKED = 2;
42+
3743
private transient boolean mIsActive;
3844
public boolean mCanGoBack;
3945
public boolean mCanGoForward;
@@ -50,6 +56,7 @@ public class SessionState {
5056
public transient ArrayList<Media> mMediaElements = new ArrayList<>();
5157
public transient @WebXRState int mWebXRState = WEBXR_UNUSED;
5258
public transient @PopupState int mPopUpState = POPUP_UNUSED;
59+
public transient @PopupState int mDrmState = DRM_UNUSED;
5360
@JsonAdapter(SessionState.GeckoSessionStateAdapter.class)
5461
public GeckoSession.SessionState mSessionState;
5562
public long mLastUse;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,6 @@ public void setHovered(boolean hovered) {
125125
}
126126

127127
public void setLinkClickListener(@NonNull ViewUtils.LinkClickableSpan listener) {
128-
ViewUtils.setTextViewHTML(mDescriptionView, mDescriptionView.getText().toString(), listener::onClick);
128+
ViewUtils.setTextViewHTML(mDescriptionView, mDescriptionView.getText().toString(), listener);
129129
}
130130
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
7979
};
8080

8181
public void setLinkClickListener(@NonNull ViewUtils.LinkClickableSpan listener) {
82-
ViewUtils.setTextViewHTML(mSwitchDescription, mText, listener::onClick);
82+
ViewUtils.setTextViewHTML(mSwitchDescription, mSwitchDescription.getText().toString(), listener);
8383
}
8484

8585
public void setValue(boolean value, boolean doApply) {

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

Lines changed: 78 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import android.view.inputmethod.EditorInfo;
2727
import android.view.inputmethod.InputConnection;
2828

29+
import androidx.annotation.DrawableRes;
2930
import androidx.annotation.IntDef;
3031
import androidx.annotation.NonNull;
3132
import androidx.annotation.Nullable;
@@ -86,7 +87,7 @@ public class WindowWidget extends UIWidget implements SessionChangeListener,
8687
GeckoSession.ContentDelegate, GeckoSession.NavigationDelegate, VideoAvailabilityListener,
8788
GeckoSession.HistoryDelegate, GeckoSession.ProgressDelegate, GeckoSession.SelectionActionDelegate,
8889
Session.WebXRStateChangedListener, Session.PopUpStateChangedListener,
89-
SharedPreferences.OnSharedPreferenceChangeListener {
90+
Session.DrmStateChangedListener, SharedPreferences.OnSharedPreferenceChangeListener {
9091

9192
@IntDef(value = { SESSION_RELEASE_DISPLAY, SESSION_DO_NOT_RELEASE_DISPLAY})
9293
public @interface OldSessionDisplayAction {}
@@ -256,6 +257,7 @@ void setupListeners(Session aSession) {
256257
aSession.addSelectionActionListener(this);
257258
aSession.addWebXRStateChangedListener(this);
258259
aSession.addPopUpStateChangedListener(this);
260+
aSession.addDrmStateChangedListener(this);
259261
}
260262

261263
void cleanListeners(Session aSession) {
@@ -268,6 +270,7 @@ void cleanListeners(Session aSession) {
268270
aSession.removeSelectionActionListener(this);
269271
aSession.removeWebXRStateChangedListener(this);
270272
aSession.removePopUpStateChangedListener(this);
273+
aSession.removeDrmStateChangedListener(this);
271274
}
272275

273276
@Override
@@ -1266,46 +1269,73 @@ public void showAlert(String title, @NonNull String msg, @Nullable PromptDialogW
12661269
mAlertDialog.releaseWidget();
12671270
mAlertDialog = null;
12681271
});
1272+
mAlertDialog.setLinkDelegate((widget, url) -> {
1273+
mWidgetManager.openNewTabForeground(url);
1274+
mAlertDialog.hide(REMOVE_WIDGET);
1275+
mAlertDialog.releaseWidget();
1276+
mAlertDialog = null;
1277+
});
12691278
mAlertDialog.show(REQUEST_FOCUS);
12701279
}
12711280

1272-
public void showConfirmPrompt(String title, @NonNull String msg, @NonNull String[] btnMsg, @Nullable PromptDialogWidget.Delegate callback) {
1273-
if (mConfirmDialog == null) {
1274-
mConfirmDialog = new PromptDialogWidget(getContext());
1275-
mConfirmDialog.setButtons(new int[] {
1276-
R.string.cancel_button,
1277-
R.string.ok_button
1278-
});
1279-
mConfirmDialog.setCheckboxVisible(false);
1280-
mConfirmDialog.setDescriptionVisible(false);
1281-
}
1282-
mConfirmDialog.setTitle(title);
1283-
mConfirmDialog.setBody(msg);
1284-
mConfirmDialog.setButtons(btnMsg);
1285-
mConfirmDialog.setButtonsDelegate(index -> {
1286-
mConfirmDialog.hide(REMOVE_WIDGET);
1287-
if (callback != null) {
1288-
callback.onButtonClicked(index);
1289-
}
1290-
mConfirmDialog.releaseWidget();
1291-
mConfirmDialog = null;
1292-
});
1293-
mConfirmDialog.show(REQUEST_FOCUS);
1281+
public void showConfirmPrompt(@NonNull String title,
1282+
@NonNull String msg,
1283+
@NonNull String[] btnMsg,
1284+
@Nullable PromptDialogWidget.Delegate callback) {
1285+
showConfirmPrompt(-1,
1286+
title,
1287+
msg,
1288+
btnMsg,
1289+
null,
1290+
callback);
1291+
}
1292+
1293+
public void showConfirmPrompt(@DrawableRes int icon,
1294+
@NonNull String title,
1295+
@NonNull String msg,
1296+
@NonNull String[] btnMsg,
1297+
@Nullable PromptDialogWidget.Delegate callback) {
1298+
showConfirmPrompt(icon,
1299+
title,
1300+
msg,
1301+
btnMsg,
1302+
null,
1303+
callback);
12941304
}
12951305

12961306
public void showConfirmPrompt(@NonNull String title,
12971307
@NonNull String msg,
12981308
@NonNull String[] btnMsg,
12991309
@NonNull String checkBoxText,
13001310
@Nullable PromptDialogWidget.Delegate callback) {
1311+
showConfirmPrompt(-1,
1312+
title,
1313+
msg,
1314+
btnMsg,
1315+
checkBoxText,
1316+
callback);
1317+
}
1318+
1319+
public void showConfirmPrompt(@DrawableRes int icon,
1320+
@NonNull String title,
1321+
@NonNull String msg,
1322+
@NonNull String[] btnMsg,
1323+
@Nullable String checkBoxText,
1324+
@Nullable PromptDialogWidget.Delegate callback) {
13011325
if (mConfirmDialog == null) {
13021326
mConfirmDialog = new PromptDialogWidget(getContext());
13031327
mConfirmDialog.setButtons(new int[] {
13041328
R.string.cancel_button,
13051329
R.string.ok_button
13061330
});
1307-
mConfirmDialog.setCheckboxVisible(true);
1308-
mConfirmDialog.setCheckboxText(checkBoxText);
1331+
mConfirmDialog.setCheckboxVisible(false);
1332+
if (checkBoxText != null) {
1333+
mConfirmDialog.setCheckboxVisible(true);
1334+
mConfirmDialog.setCheckboxText(checkBoxText);
1335+
}
1336+
if (icon != -1) {
1337+
mConfirmDialog.setIcon(icon);
1338+
}
13091339
mConfirmDialog.setDescriptionVisible(false);
13101340
}
13111341
mConfirmDialog.setTitle(title);
@@ -1319,10 +1349,16 @@ public void showConfirmPrompt(@NonNull String title,
13191349
mConfirmDialog.releaseWidget();
13201350
mConfirmDialog = null;
13211351
});
1352+
mConfirmDialog.setLinkDelegate((widget, url) -> {
1353+
mWidgetManager.openNewTabForeground(url);
1354+
mConfirmDialog.hide(REMOVE_WIDGET);
1355+
mConfirmDialog.releaseWidget();
1356+
mConfirmDialog = null;
1357+
});
13221358
mConfirmDialog.show(REQUEST_FOCUS);
13231359
}
13241360

1325-
public void showDialog(@NonNull String title, @NonNull @StringRes int description, @NonNull @StringRes int [] btnMsg,
1361+
public void showDialog(@NonNull String title, @StringRes int description, @NonNull @StringRes int [] btnMsg,
13261362
@Nullable PromptDialogWidget.Delegate buttonsCallback, @Nullable Runnable linkCallback) {
13271363
mAppDialog = new PromptDialogWidget(getContext());
13281364
mAppDialog.setIconVisible(false);
@@ -1338,7 +1374,8 @@ public void showDialog(@NonNull String title, @NonNull @StringRes int descripti
13381374
}
13391375
mAppDialog.releaseWidget();
13401376
});
1341-
mAppDialog.setLinkDelegate(() -> {
1377+
mConfirmDialog.setLinkDelegate((widget, url) -> {
1378+
mWidgetManager.openNewTabForeground(url);
13421379
mAppDialog.hide(REMOVE_WIDGET);
13431380
if (linkCallback != null) {
13441381
linkCallback.run();
@@ -1351,11 +1388,12 @@ public void showDialog(@NonNull String title, @NonNull @StringRes int descripti
13511388

13521389
public void showFirstTimeDrmDialog(@NonNull Runnable callback) {
13531390
showConfirmPrompt(
1354-
getContext().getString(R.string.drm_first_use_title),
1355-
getContext().getString(R.string.drm_first_use_body),
1391+
R.drawable.ic_icon_drm_allowed,
1392+
getContext().getString(R.string.drm_first_use_title_v1),
1393+
getContext().getString(R.string.drm_first_use_body_v1, getResources().getString(R.string.sumo_drm_url)),
13561394
new String[]{
1357-
getContext().getString(R.string.drm_first_use_do_not_enable),
1358-
getContext().getString(R.string.drm_first_use_enable),
1395+
getContext().getString(R.string.drm_first_use_do_not_allow),
1396+
getContext().getString(R.string.drm_first_use_allow),
13591397
},
13601398
index -> {
13611399
// We remove the prefs listener before the first DRM update to avoid reloading the session
@@ -1493,6 +1531,7 @@ public void startDownload(@NonNull DownloadJob downloadJob, boolean showConfirmD
14931531
Runnable download = () -> {
14941532
if (showConfirmDialog) {
14951533
mWidgetManager.getFocusedWindow().showConfirmPrompt(
1534+
R.drawable.ic_icon_downloads,
14961535
getResources().getString(R.string.download_confirm_title),
14971536
downloadJob.getFilename(),
14981537
new String[]{
@@ -1988,4 +2027,12 @@ public void onPopUpStateChanged(Session aSession, @SessionState.PopupState int a
19882027
mViewModel.setIsPopUpBlocked(aPopUpState == SessionState.POPUP_BLOCKED);
19892028
mViewModel.setIsPopUpAvailable(aPopUpState != SessionState.POPUP_UNUSED);
19902029
}
2030+
2031+
// DrmStateChangedListener
2032+
2033+
@Override
2034+
public void onDrmStateChanged(Session aSession, @SessionState.DrmState int aDrmState) {
2035+
mViewModel.setIsDrmUsed(aDrmState == SessionState.DRM_BLOCKED ||
2036+
aDrmState == SessionState.DRM_ALLOWED);
2037+
}
19912038
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66
package org.mozilla.vrbrowser.ui.widgets.dialogs;
77

88
import android.content.Context;
9+
import android.view.View;
910

1011
import androidx.annotation.NonNull;
1112

1213
import org.mozilla.vrbrowser.R;
1314
import org.mozilla.vrbrowser.browser.SettingsStore;
1415
import org.mozilla.vrbrowser.utils.SystemUtils;
16+
import org.mozilla.vrbrowser.utils.ViewUtils;
1517

1618
import java.util.ArrayList;
1719

@@ -73,7 +75,7 @@ public void updateUI() {
7375
setTitle(R.string.crash_dialog_heading);
7476
setBody(getContext().getString(R.string.crash_dialog_message, getContext().getString(R.string.app_name)));
7577
setCheckboxText(R.string.crash_dialog_send_data);
76-
setLinkDelegate(() -> {
78+
setLinkDelegate((widget, url) -> {
7779
mWidgetManager.openNewTabForeground(getContext().getString(R.string.crash_dialog_learn_more_url));
7880
onDismiss();
7981
});

0 commit comments

Comments
 (0)