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

Commit c7f86ed

Browse files
keianhzoMortimerGoro
authored andcommitted
Dialogs refactoring (#2468)
* Dialogs refactoring Restart dialog refactored Crash dialog refactored Removed Max Windows dialog PopUp block dialog refactored Collect voice samples refactored Open Settings links in new tabs What's new and Sign Out dialogs refactored Voice Search Dialog refactored Added empty popup exceptions panel text Position adjustments Clear Cache dialog refactored Removed unused resources Browser alert and confirm refactor * Restore the Restart dialog checkbox * Fix broken crashcontent crashes receiver * Rename ClearCacheDialogWidget to ClearHistoryDialogWidget wip * Restore the Sad Fox icon for the crash dialog * Ensure that the crash dialog checkbox is always unchecked when showing * Move the sad fox icon it to the right folder
1 parent d655b7e commit c7f86ed

File tree

79 files changed

+965
-2354
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+965
-2354
lines changed

app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java

Lines changed: 14 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@
3636
import androidx.annotation.NonNull;
3737
import androidx.annotation.Nullable;
3838

39-
import org.mozilla.gecko.util.ThreadUtils;
40-
import org.mozilla.geckoview.CrashReporter;
41-
import org.mozilla.geckoview.GeckoResult;
4239
import org.mozilla.geckoview.GeckoRuntime;
4340
import org.mozilla.geckoview.GeckoSession;
4441
import org.mozilla.geckoview.GeckoVRManager;
@@ -62,15 +59,15 @@
6259
import org.mozilla.vrbrowser.ui.widgets.TrayWidget;
6360
import org.mozilla.vrbrowser.ui.widgets.UISurfaceTextureRenderer;
6461
import org.mozilla.vrbrowser.ui.widgets.UIWidget;
65-
import org.mozilla.vrbrowser.ui.widgets.menus.VideoProjectionMenuWidget;
6662
import org.mozilla.vrbrowser.ui.widgets.Widget;
6763
import org.mozilla.vrbrowser.ui.widgets.WidgetManagerDelegate;
6864
import org.mozilla.vrbrowser.ui.widgets.WidgetPlacement;
6965
import org.mozilla.vrbrowser.ui.widgets.WindowWidget;
7066
import org.mozilla.vrbrowser.ui.widgets.Windows;
7167
import org.mozilla.vrbrowser.ui.widgets.dialogs.CrashDialogWidget;
68+
import org.mozilla.vrbrowser.ui.widgets.dialogs.PromptDialogWidget;
7269
import org.mozilla.vrbrowser.ui.widgets.dialogs.WhatsNewWidget;
73-
import org.mozilla.vrbrowser.ui.widgets.prompts.ConfirmPromptWidget;
70+
import org.mozilla.vrbrowser.ui.widgets.menus.VideoProjectionMenuWidget;
7471
import org.mozilla.vrbrowser.utils.BitmapCache;
7572
import org.mozilla.vrbrowser.utils.ConnectivityReceiver;
7673
import org.mozilla.vrbrowser.utils.ConnectivityReceiver.Delegate;
@@ -79,13 +76,6 @@
7976
import org.mozilla.vrbrowser.utils.ServoUtils;
8077
import org.mozilla.vrbrowser.utils.SystemUtils;
8178

82-
import java.io.BufferedReader;
83-
import java.io.File;
84-
import java.io.FileInputStream;
85-
import java.io.IOException;
86-
import java.io.InputStreamReader;
87-
import java.net.URISyntaxException;
88-
import java.nio.charset.StandardCharsets;
8979
import java.util.ArrayList;
9080
import java.util.Arrays;
9181
import java.util.HashMap;
@@ -127,7 +117,6 @@ public void run() {
127117
static final int GestureSwipeRight = 1;
128118
static final int SwipeDelay = 1000; // milliseconds
129119
static final long RESET_CRASH_COUNT_DELAY = 5000;
130-
static final String CRASH_STATS_URL = "https://crash-stats.mozilla.com/report/index/";
131120

132121
static final String LOGTAG = SystemUtils.createLogtag(VRBrowserActivity.class);
133122
HashMap<Integer, Widget> mWidgets;
@@ -230,7 +219,7 @@ protected void onCreate(Bundle savedInstanceState) {
230219
// Create broadcast receiver for getting crash messages from crash process
231220
IntentFilter intentFilter = new IntentFilter();
232221
intentFilter.addAction(CrashReporterService.CRASH_ACTION);
233-
registerReceiver(mCrashReceiver, intentFilter, getString(R.string.app_permission_name), null);
222+
registerReceiver(mCrashReceiver, intentFilter, BuildConfig.APPLICATION_ID + "." + getString(R.string.app_permission_name), null);
234223

235224
mLastGesture = NoGesture;
236225
super.onCreate(savedInstanceState);
@@ -594,27 +583,12 @@ private void checkForCrash() {
594583
}
595584
boolean isCrashReportingEnabled = SettingsStore.getInstance(this).isCrashReportingEnabled();
596585
if (isCrashReportingEnabled) {
597-
postCrashFiles(files);
586+
SystemUtils.postCrashFiles(this, files);
587+
598588
} else {
599589
if (mCrashDialog == null) {
600-
mCrashDialog = new CrashDialogWidget(this);
590+
mCrashDialog = new CrashDialogWidget(this, files);
601591
}
602-
mCrashDialog.setCrashDialogDelegate(
603-
new CrashDialogWidget.CrashDialogDelegate() {
604-
@Override
605-
public void onSendData() {
606-
postCrashFiles(files);
607-
}
608-
609-
@Override
610-
public void onDoNotSendData() {
611-
for (String file : files) {
612-
Log.e(LOGTAG, "Deleting crashfile: " + file);
613-
getBaseContext().deleteFile(file);
614-
}
615-
}
616-
}
617-
);
618592
mCrashDialog.show(UIWidget.REQUEST_FOCUS);
619593
}
620594
}
@@ -629,65 +603,16 @@ private void handleContentCrashIntent(@NonNull final Intent intent) {
629603

630604
boolean isCrashReportingEnabled = SettingsStore.getInstance(this).isCrashReportingEnabled();
631605
if (isCrashReportingEnabled) {
632-
postCrashFiles(dumpFile, extraFile);
606+
SystemUtils.postCrashFiles(this, dumpFile, extraFile);
607+
633608
} else {
634609
if (mCrashDialog == null) {
635-
mCrashDialog = new CrashDialogWidget(this);
610+
mCrashDialog = new CrashDialogWidget(this, dumpFile, extraFile);
636611
}
637-
mCrashDialog.setCrashDialogDelegate(() -> postCrashFiles(dumpFile, extraFile));
638612
mCrashDialog.show(UIWidget.REQUEST_FOCUS);
639613
}
640614
}
641615

642-
private void sendCrashFiles(@NonNull final String aDumpFile, @NonNull final String aExtraFile) {
643-
try {
644-
GeckoResult<String> result = CrashReporter.sendCrashReport(VRBrowserActivity.this, new File(aDumpFile), new File(aExtraFile), getString(R.string.crash_app_name));
645-
646-
result.accept(crashID -> {
647-
Log.e(LOGTAG, "Submitted crash report id: " + crashID);
648-
Log.e(LOGTAG, "Report available at: " + CRASH_STATS_URL + crashID);
649-
}, ex -> {
650-
Log.e(LOGTAG, "Failed to submit crash report: " + (ex != null ? ex.getMessage() : "Exception is NULL"));
651-
});
652-
} catch (IOException | URISyntaxException e) {
653-
Log.e(LOGTAG, "Failed to send crash report: " + e.toString());
654-
}
655-
}
656-
657-
private void postCrashFiles(@NonNull final String aDumpFile, @NonNull final String aExtraFile) {
658-
ThreadUtils.postToBackgroundThread(() -> {
659-
sendCrashFiles(aDumpFile, aExtraFile);
660-
});
661-
}
662-
663-
private void postCrashFiles(final ArrayList<String> aFiles) {
664-
ThreadUtils.postToBackgroundThread(() -> {
665-
for (String file: aFiles) {
666-
try {
667-
ArrayList<String> list = new ArrayList<>(2);
668-
try (FileInputStream in = getBaseContext().openFileInput(file)) {
669-
try(BufferedReader br = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {
670-
String line;
671-
while((line = br.readLine()) != null) {
672-
list.add(line);
673-
}
674-
}
675-
} catch (IOException e) {
676-
e.printStackTrace();
677-
}
678-
if (list.size() < 2) {
679-
Log.e(LOGTAG, "Failed read crash dump file names from: " + file);
680-
return;
681-
}
682-
sendCrashFiles(list.get(0), list.get(1));
683-
} finally {
684-
Log.d(LOGTAG,"Removing crash file: " + file);
685-
getBaseContext().deleteFile(file);
686-
}
687-
}
688-
});
689-
}
690-
691616
@Override
692617
public void onTrimMemory(int level) {
693618

@@ -1109,7 +1034,7 @@ private void haltActivity(final int aReason) {
11091034
mWindows.getFocusedWindow().showAlert(
11101035
getString(R.string.not_entitled_title),
11111036
getString(R.string.not_entitled_message, getString(R.string.app_name)),
1112-
() -> VRBrowserActivity.this.finish());
1037+
index -> finish());
11131038
}
11141039
});
11151040
}
@@ -1135,18 +1060,10 @@ private void handlePoorPerformance() {
11351060
}
11361061
window.getSession().loadHomePage();
11371062
final String[] buttons = {getString(R.string.ok_button), getString(R.string.performance_unblock_page)};
1138-
window.showButtonPrompt(getString(R.string.performance_title), getString(R.string.performance_message), buttons, new ConfirmPromptWidget.ConfirmPromptDelegate() {
1139-
@Override
1140-
public void confirm(int index) {
1141-
if (index == GeckoSession.PromptDelegate.ButtonPrompt.Type.NEGATIVE) {
1142-
mPoorPerformanceWhiteList.add(originalUri);
1143-
window.getSession().loadUri(originalUri);
1144-
}
1145-
}
1146-
1147-
@Override
1148-
public void dismiss() {
1149-
1063+
window.showConfirmPrompt(getString(R.string.performance_title), getString(R.string.performance_message), buttons, index -> {
1064+
if (index == PromptDialogWidget.NEGATIVE) {
1065+
mPoorPerformanceWhiteList.add(originalUri);
1066+
window.getSession().loadUri(originalUri);
11501067
}
11511068
});
11521069
});

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ public void handlePermission(final String aUri, final PermissionWidget.Permissio
6868
mWidgetManager.addWidget(mPermissionWidget);
6969
}
7070

71-
mPermissionWidget.getPlacement().parentHandle = mParentWidgetHandle;
7271
mPermissionWidget.showPrompt(aUri, aType, aCallback);
7372
}
7473

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

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public GeckoResult<PromptResponse> onAlertPrompt(@NonNull GeckoSession geckoSess
132132
mPrompt = new AlertPromptWidget(mContext);
133133
mPrompt.getPlacement().parentHandle = mAttachedWindow.getHandle();
134134
mPrompt.getPlacement().parentAnchorY = 0.0f;
135-
mPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.base_app_dialog_y_distance);
135+
mPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.js_prompt_y_distance);
136136
mPrompt.setTitle(alertPrompt.title);
137137
mPrompt.setMessage(alertPrompt.message);
138138
mPrompt.setPromptDelegate(() -> result.complete(alertPrompt.dismiss()));
@@ -149,7 +149,7 @@ public GeckoResult<PromptResponse> onButtonPrompt(@NonNull GeckoSession geckoSes
149149
mPrompt = new ConfirmPromptWidget(mContext);
150150
mPrompt.getPlacement().parentHandle = mAttachedWindow.getHandle();
151151
mPrompt.getPlacement().parentAnchorY = 0.0f;
152-
mPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.base_app_dialog_y_distance);
152+
mPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.js_prompt_y_distance);
153153
mPrompt.setTitle(buttonPrompt.title);
154154
mPrompt.setMessage(buttonPrompt.message);
155155
((ConfirmPromptWidget)mPrompt).setButtons(new String[] {
@@ -180,7 +180,7 @@ public GeckoResult<PromptResponse> onTextPrompt(@NonNull GeckoSession geckoSessi
180180
mPrompt = new TextPromptWidget(mContext);
181181
mPrompt.getPlacement().parentHandle = mAttachedWindow.getHandle();
182182
mPrompt.getPlacement().parentAnchorY = 0.0f;
183-
mPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.base_app_dialog_y_distance);
183+
mPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.js_prompt_y_distance);
184184
mPrompt.setTitle(textPrompt.title);
185185
mPrompt.setMessage(textPrompt.message);
186186
((TextPromptWidget)mPrompt).setDefaultText(textPrompt.defaultValue);
@@ -208,7 +208,7 @@ public GeckoResult<PromptResponse> onAuthPrompt(@NonNull GeckoSession geckoSessi
208208
mPrompt = new AuthPromptWidget(mContext);
209209
mPrompt.getPlacement().parentHandle = mAttachedWindow.getHandle();
210210
mPrompt.getPlacement().parentAnchorY = 0.0f;
211-
mPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.base_app_dialog_y_distance);
211+
mPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.js_prompt_y_distance);
212212
mPrompt.setTitle(authPrompt.title);
213213
mPrompt.setMessage(authPrompt.message);
214214
((AuthPromptWidget)mPrompt).setAuthOptions(authPrompt.authOptions);
@@ -241,7 +241,7 @@ public GeckoResult<PromptResponse> onChoicePrompt(@NonNull GeckoSession geckoSes
241241
mPrompt = new ChoicePromptWidget(mContext);
242242
mPrompt.getPlacement().parentHandle = mAttachedWindow.getHandle();
243243
mPrompt.getPlacement().parentAnchorY = 0.0f;
244-
mPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.base_app_dialog_y_distance);
244+
mPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.js_prompt_y_distance);
245245
mPrompt.setTitle(choicePrompt.title);
246246
mPrompt.setMessage(choicePrompt.message);
247247
((ChoicePromptWidget)mPrompt).setChoices(choicePrompt.choices);
@@ -352,10 +352,6 @@ private void showPopUp(int sessionId, @NonNull Pair<String, LinkedList<PopUpRequ
352352
Optional<PopUpSite> site = mAllowedPopUpSites.stream().filter((item) -> item.url.equals(uri)).findFirst();
353353
if (!site.isPresent()) {
354354
mPopUpPrompt = new PopUpBlockDialogWidget(mContext);
355-
mPopUpPrompt.getPlacement().parentHandle = mAttachedWindow.getHandle();
356-
mPopUpPrompt.getPlacement().parentAnchorY = 0.0f;
357-
mPopUpPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.base_app_dialog_y_distance);
358-
mPopUpPrompt.setTitle(uri);
359355
mPopUpPrompt.setButtonsDelegate(index -> {
360356
boolean allowed = index != PopUpBlockDialogWidget.NEGATIVE;
361357
boolean askAgain = mPopUpPrompt.askAgain();
@@ -384,7 +380,14 @@ private void showPopUp(int sessionId, @NonNull Pair<String, LinkedList<PopUpRequ
384380
}
385381
});
386382
}
383+
384+
mPopUpPrompt.hide(UIWidget.REMOVE_WIDGET);
387385
});
386+
mPopUpPrompt.setDelegate(() -> mExecutors.mainThread().execute(() -> {
387+
if (mPopupDelegate != null) {
388+
mPopupDelegate.onPopUpAvailable();
389+
}
390+
}));
388391
mPopUpPrompt.show(UIWidget.REQUEST_FOCUS);
389392

390393
} else {
@@ -407,7 +410,7 @@ public GeckoResult<SlowScriptResponse> onSlowScript(@NonNull GeckoSession aSessi
407410
mSlowScriptPrompt = new ConfirmPromptWidget(mContext);
408411
mSlowScriptPrompt.getPlacement().parentHandle = mAttachedWindow.getHandle();
409412
mSlowScriptPrompt.getPlacement().parentAnchorY = 0.0f;
410-
mSlowScriptPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.base_app_dialog_y_distance);
413+
mSlowScriptPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.js_prompt_y_distance);
411414
mSlowScriptPrompt.setTitle(mContext.getResources().getString(R.string.slow_script_dialog_title));
412415
mSlowScriptPrompt.setMessage(mContext.getResources().getString(R.string.slow_script_dialog_description, aScriptFileName));
413416
mSlowScriptPrompt.setButtons(new String[]{

app/src/common/shared/org/mozilla/vrbrowser/crashreporting/CrashReporterService.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,21 @@
66
import android.os.Build;
77
import android.util.Log;
88

9+
import androidx.annotation.NonNull;
10+
import androidx.core.app.JobIntentService;
11+
912
import org.mozilla.geckoview.GeckoRuntime;
1013
import org.mozilla.vrbrowser.BuildConfig;
1114
import org.mozilla.vrbrowser.R;
1215
import org.mozilla.vrbrowser.VRBrowserActivity;
1316
import org.mozilla.vrbrowser.browser.SettingsStore;
1417
import org.mozilla.vrbrowser.utils.SystemUtils;
1518

16-
1719
import java.io.FileOutputStream;
1820
import java.io.IOException;
1921
import java.util.ArrayList;
2022
import java.util.UUID;
2123

22-
import androidx.annotation.NonNull;
23-
import androidx.core.app.JobIntentService;
24-
2524
public class CrashReporterService extends JobIntentService {
2625

2726
private static final String LOGTAG = SystemUtils.createLogtag(CrashReporterService.class);
@@ -128,7 +127,7 @@ protected void onHandleWork(@NonNull Intent intent) {
128127
Log.d(LOGTAG, "Content process crash " + intent);
129128
Intent broadcastIntent = new Intent(CRASH_ACTION);
130129
broadcastIntent.putExtra(DATA_TAG, intent);
131-
sendBroadcast(broadcastIntent, getString(R.string.app_permission_name));
130+
sendBroadcast(broadcastIntent, BuildConfig.APPLICATION_ID + "." + getString(R.string.app_permission_name));
132131
}
133132
}
134133

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,6 @@ private void initialize(@NonNull Context aContext) {
331331
mWidgetManager.addConnectivityListener(mConnectivityDelegate);
332332

333333
mVoiceSearchWidget = createChild(VoiceSearchWidget.class, false);
334-
mVoiceSearchWidget.getPlacement().parentAnchorY = 0.0f;
335-
mVoiceSearchWidget.getPlacement().translationY = WidgetPlacement.unitFromMeters(getContext(), R.dimen.base_app_dialog_y_distance);
336334
mVoiceSearchWidget.setDelegate(this);
337335

338336
mSuggestionsProvider = new SuggestionsProvider(getContext());

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

Lines changed: 0 additions & 56 deletions
This file was deleted.

0 commit comments

Comments
 (0)