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

Commit a360c20

Browse files
authored
Use App executors instead of ThreadUtils (#3091)
1 parent deefeeb commit a360c20

File tree

10 files changed

+40
-108
lines changed

10 files changed

+40
-108
lines changed

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

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package org.mozilla.vrbrowser;
22

33
import android.os.Handler;
4+
import android.os.HandlerThread;
45
import android.os.Looper;
56

7+
import androidx.annotation.NonNull;
8+
69
import java.util.concurrent.Executor;
710
import java.util.concurrent.Executors;
811

9-
import androidx.annotation.NonNull;
10-
1112
public class AppExecutors {
1213

1314
private final Executor mDiskIO;
@@ -16,14 +17,19 @@ public class AppExecutors {
1617

1718
private final Executor mMainThread;
1819

20+
private final HandlerThread mBackgroundThread;
21+
private Handler mBackgroundHandler;
22+
1923
private AppExecutors(Executor diskIO, Executor networkIO, Executor mainThread) {
2024
this.mDiskIO = diskIO;
2125
this.mNetworkIO = networkIO;
2226
this.mMainThread = mainThread;
27+
mBackgroundThread = new HandlerThread("BackgroundThread");
2328
}
2429

2530
public AppExecutors() {
26-
this(Executors.newSingleThreadExecutor(), Executors.newFixedThreadPool(3),
31+
this(Executors.newSingleThreadExecutor(),
32+
Executors.newFixedThreadPool(3),
2733
new MainThreadExecutor());
2834
}
2935

@@ -39,6 +45,14 @@ public Executor mainThread() {
3945
return mMainThread;
4046
}
4147

48+
public Handler backgroundThread() {
49+
if (!mBackgroundThread.isAlive()) {
50+
mBackgroundThread.start();
51+
mBackgroundHandler = new Handler(mBackgroundThread.getLooper());
52+
}
53+
return mBackgroundHandler;
54+
}
55+
4256
private static class MainThreadExecutor implements Executor {
4357
private Handler mainThreadHandler = new Handler(Looper.getMainLooper());
4458

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
import org.mozilla.vrbrowser.browser.content.TrackingProtectionStore;
1919
import org.mozilla.vrbrowser.db.SitePermission;
2020
import org.mozilla.vrbrowser.utils.SystemUtils;
21-
import org.mozilla.vrbrowser.utils.ThreadUtils;
2221
import org.mozilla.vrbrowser.utils.UrlUtils;
2322

2423
import java.util.ArrayList;
2524
import java.util.LinkedList;
2625
import java.util.List;
26+
import java.util.concurrent.Executor;
2727

2828
public class SessionStore implements GeckoSession.PermissionDelegate{
2929
private static final String LOGTAG = SystemUtils.createLogtag(SessionStore.class);
@@ -38,6 +38,7 @@ public static SessionStore get() {
3838
return mInstance;
3939
}
4040

41+
private Executor mMainExecutor;
4142
private Context mContext;
4243
private GeckoRuntime mRuntime;
4344
private ArrayList<Session> mSessions;
@@ -55,6 +56,7 @@ private SessionStore() {
5556

5657
public void setContext(Context context, Bundle aExtras) {
5758
mContext = context;
59+
mMainExecutor = ((VRBrowserApplication)context.getApplicationContext()).getExecutors().mainThread();
5860

5961
// FIXME: Once GeckoView has a prefs API
6062
SessionUtils.vrPrefsWorkAround(context, aExtras);
@@ -199,7 +201,7 @@ void sessionActiveStateChanged() {
199201
if (count > MAX_GECKO_SESSIONS) {
200202
Log.d(LOGTAG, "Too many GeckoSessions. Active: " + activeCount + " Inactive: " + inactiveCount + " Suspended: " + suspendedCount);
201203
mSuspendPending = true;
202-
ThreadUtils.postToUiThread(this::limitInactiveSessions);
204+
mMainExecutor.execute(this::limitInactiveSessions);
203205
}
204206
}
205207

app/src/common/shared/org/mozilla/vrbrowser/ui/adapters/LanguagesAdapter.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,20 @@
1616
import androidx.recyclerview.widget.RecyclerView;
1717

1818
import org.mozilla.vrbrowser.R;
19+
import org.mozilla.vrbrowser.VRBrowserApplication;
1920
import org.mozilla.vrbrowser.databinding.LanguageItemBinding;
2021
import org.mozilla.vrbrowser.ui.callbacks.LanguageItemCallback;
21-
import org.mozilla.vrbrowser.utils.ThreadUtils;
2222
import org.mozilla.vrbrowser.utils.ViewUtils;
2323

2424
import java.util.Collections;
2525
import java.util.List;
26+
import java.util.concurrent.Executor;
2627

2728
public class LanguagesAdapter extends RecyclerView.Adapter<LanguagesAdapter.LanguageViewHolder> {
2829

2930
private static final int ICON_ANIMATION_DURATION = 200;
3031

32+
private Executor mMainExecutor;
3133
private List<Language> mLanguagesList;
3234
private boolean mIsPreferred;
3335

@@ -40,6 +42,7 @@ public class LanguagesAdapter extends RecyclerView.Adapter<LanguagesAdapter.Lang
4042
private final LanguageItemCallback mLanguageItemCallback;
4143

4244
public LanguagesAdapter(@NonNull Context context, @Nullable LanguageItemCallback clickCallback, boolean isPreferred) {
45+
mMainExecutor = ((VRBrowserApplication)context.getApplicationContext()).getExecutors().mainThread();
4346
mLanguageItemCallback = clickCallback;
4447
mIsPreferred = isPreferred;
4548

@@ -67,7 +70,7 @@ public void addItem(Language language) {
6770
notifyItemInserted(mLanguagesList.indexOf(language));
6871
// This shouldn't be necessary but for some reason the last list item is not refreshed
6972
// if we don't do a full refresh. Might be another RecyclerView bug.
70-
ThreadUtils.postToUiThread(() -> notifyDataSetChanged());
73+
mMainExecutor.execute(this::notifyDataSetChanged);
7174
}
7275

7376
public void addItemAlphabetical(Language language) {

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import org.mozilla.vrbrowser.ui.widgets.TooltipWidget;
3030
import org.mozilla.vrbrowser.ui.widgets.UIWidget;
3131
import org.mozilla.vrbrowser.ui.widgets.WidgetPlacement;
32-
import org.mozilla.vrbrowser.utils.ThreadUtils;
3332
import org.mozilla.vrbrowser.utils.ViewUtils;
3433

3534
public class UIButton extends AppCompatImageButton implements CustomUIButton {
@@ -150,11 +149,11 @@ public void setCurvedTooltip(boolean aEnabled) {
150149
public boolean onHoverEvent(MotionEvent event) {
151150
if (getTooltipText() != null) {
152151
if (event.getAction() == MotionEvent.ACTION_HOVER_ENTER) {
153-
ThreadUtils.postDelayedToUiThread(mShowTooltipRunnable, mTooltipDelay);
152+
postDelayed(mShowTooltipRunnable, mTooltipDelay);
154153

155154
} else if (event.getAction() == MotionEvent.ACTION_HOVER_EXIT) {
156-
ThreadUtils.removeCallbacksFromUiThread(mShowTooltipRunnable);
157-
ThreadUtils.postToUiThread(mHideTooltipRunnable);
155+
removeCallbacks(mShowTooltipRunnable);
156+
post(mHideTooltipRunnable);
158157
}
159158
}
160159

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
import androidx.annotation.StringRes;
1111

1212
import org.mozilla.vrbrowser.R;
13+
import org.mozilla.vrbrowser.VRBrowserApplication;
1314
import org.mozilla.vrbrowser.ui.views.UIButton;
1415
import org.mozilla.vrbrowser.ui.widgets.NotificationManager.Notification.NotificationPosition;
15-
import org.mozilla.vrbrowser.utils.ThreadUtils;
1616

1717
import java.util.HashMap;
1818
import java.util.Iterator;
@@ -166,7 +166,7 @@ public static void show(int notificationId, @NonNull Notification notification)
166166
}
167167

168168
Runnable hideTask = () -> hide(notificationId);
169-
ThreadUtils.postDelayedToUiThread(hideTask, notification.mDuration);
169+
notification.mView.postDelayed(hideTask, notification.mDuration);
170170

171171
mData.put(notificationId, new NotificationData(notificationView, notification, hideTask));
172172
}
@@ -192,7 +192,7 @@ public static void hideAll() {
192192
}
193193

194194
private static void hideNotification(@NonNull NotificationData data) {
195-
ThreadUtils.removeCallbacksFromUiThread(data.mHideTask);
195+
data.mNotificationView.removeCallbacks(data.mHideTask);
196196

197197
data.mNotificationView.hide(UIWidget.REMOVE_WIDGET);
198198

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import org.mozilla.vrbrowser.ui.widgets.WidgetManagerDelegate;
3434
import org.mozilla.vrbrowser.ui.widgets.WidgetPlacement;
3535
import org.mozilla.vrbrowser.utils.LocaleUtils;
36-
import org.mozilla.vrbrowser.utils.ThreadUtils;
3736

3837
public class VoiceSearchWidget extends UIDialog implements WidgetManagerDelegate.PermissionListener,
3938
Application.ActivityLifecycleCallbacks {
@@ -298,7 +297,7 @@ public void show(@ShowFlags int aShowFlags) {
298297
if (index == PromptDialogWidget.POSITIVE) {
299298
SettingsStore.getInstance(getContext()).setSpeechDataCollectionEnabled(true);
300299
}
301-
ThreadUtils.postToUiThread(() -> show(aShowFlags));
300+
post(() -> show(aShowFlags));
302301
},
303302
() -> {
304303
mWidgetManager.openNewTabForeground(getResources().getString(R.string.private_policy_url));

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@
2121
import org.mozilla.vrbrowser.ui.widgets.WidgetManagerDelegate;
2222
import org.mozilla.vrbrowser.ui.widgets.WidgetPlacement;
2323
import org.mozilla.vrbrowser.utils.LocaleUtils;
24-
import org.mozilla.vrbrowser.utils.ThreadUtils;
25-
26-
import java.util.Collections;
27-
import java.util.List;
2824

2925
public class ContentLanguageOptionsView extends SettingsView {
3026

@@ -126,7 +122,7 @@ private void saveCurrentLanguages() {
126122
}
127123

128124
private void refreshLanguages() {
129-
ThreadUtils.postToUiThread(() -> {
125+
post(() -> {
130126
mPreferredAdapter.setLanguageList(LocaleUtils.getPreferredLanguages(getContext()));
131127
mAvailableAdapter.setLanguageList(LocaleUtils.getAvailableLanguages(getContext()));
132128
});

app/src/common/shared/org/mozilla/vrbrowser/utils/AnimationHelper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public static void scaleIn(@NonNull View aView, long duration, long delay, final
121121
public void onAnimationEnd(Animator animation) {
122122
super.onAnimationEnd(animation);
123123
if (aCallback != null)
124-
ThreadUtils.postToUiThread(aCallback);
124+
aView.post(aCallback);
125125
}
126126
}).setUpdateListener(animation -> aView.invalidate());
127127
}
@@ -134,15 +134,15 @@ public static void scaleOut(@NonNull View aView, long duration, long delay, fina
134134
public void onAnimationEnd(Animator animation) {
135135
super.onAnimationEnd(animation);
136136
if (aCallback != null)
137-
ThreadUtils.postToUiThread(aCallback);
137+
aView.post(aCallback);
138138
}
139139
}).setUpdateListener(animation -> aView.invalidate());
140140
}
141141

142142
public static void scaleTo(@NonNull View aView, float scaleX, float scaleY, long duration, long delay, final Runnable aCallback) {
143143
if (aView.getScaleX() == scaleX && aView.getScaleY() == scaleY) {
144144
if (aCallback != null) {
145-
ThreadUtils.postToUiThread(aCallback);
145+
aView.post(aCallback);
146146
}
147147
return;
148148
}
@@ -151,7 +151,7 @@ public static void scaleTo(@NonNull View aView, float scaleX, float scaleY, long
151151
public void onAnimationEnd(Animator animation) {
152152
super.onAnimationEnd(animation);
153153
if (aCallback != null) {
154-
ThreadUtils.postToUiThread(aCallback);
154+
aView.post(aCallback);
155155
}
156156
}
157157
}).setUpdateListener(animation -> aView.invalidate());

app/src/common/shared/org/mozilla/vrbrowser/utils/SystemUtils.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.mozilla.vrbrowser.BuildConfig;
1414
import org.mozilla.vrbrowser.R;
1515
import org.mozilla.vrbrowser.VRBrowserActivity;
16+
import org.mozilla.vrbrowser.VRBrowserApplication;
1617

1718
import java.io.BufferedReader;
1819
import java.io.File;
@@ -59,7 +60,7 @@ public static String createLogtag(@NonNull Class aClass) {
5960
private static final String CRASH_STATS_URL = "https://crash-stats.mozilla.com/report/index/";
6061

6162
private static void sendCrashFiles(@NonNull Context context, @NonNull final String aDumpFile, @NonNull final String aExtraFile) {
62-
ThreadUtils.postToBackgroundThread(() -> {
63+
((VRBrowserApplication)context.getApplicationContext()).getExecutors().backgroundThread().post(() -> {
6364
try {
6465
GeckoResult<String> result = CrashReporter.sendCrashReport(context, new File(aDumpFile), new File(aExtraFile), context.getString(R.string.crash_app_name));
6566

app/src/common/shared/org/mozilla/vrbrowser/utils/ThreadUtils.java

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

0 commit comments

Comments
 (0)