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

Commit 9ccaa39

Browse files
MortimerGorokeianhzo
authored andcommitted
Implement Copy Paste (#2004)
* Implement Copy Paste (#1883) * Implement Copy Paste * Address review feedback * Fix rebase issue * Copy paste improvements (#1994)
1 parent ba4fbea commit 9ccaa39

37 files changed

+1088
-514
lines changed

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

Lines changed: 49 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import org.mozilla.geckoview.AllowOrDeny;
2222
import org.mozilla.geckoview.ContentBlocking;
23+
import org.mozilla.geckoview.GeckoResponse;
2324
import org.mozilla.geckoview.GeckoResult;
2425
import org.mozilla.geckoview.GeckoRuntime;
2526
import org.mozilla.geckoview.GeckoSession;
@@ -54,7 +55,7 @@
5455
public class SessionStack implements ContentBlocking.Delegate, GeckoSession.NavigationDelegate,
5556
GeckoSession.ProgressDelegate, GeckoSession.ContentDelegate, GeckoSession.TextInputDelegate,
5657
GeckoSession.PromptDelegate, GeckoSession.MediaDelegate, GeckoSession.HistoryDelegate,
57-
SharedPreferences.OnSharedPreferenceChangeListener {
58+
GeckoSession.SelectionActionDelegate, SharedPreferences.OnSharedPreferenceChangeListener {
5859

5960
private static final String LOGTAG = SystemUtils.createLogtag(SessionStack.class);
6061
// You can test a local file using: "resource://android/assets/webvr/index.html"
@@ -66,6 +67,7 @@ public class SessionStack implements ContentBlocking.Delegate, GeckoSession.Navi
6667
private transient LinkedList<SessionChangeListener> mSessionChangeListeners;
6768
private transient LinkedList<GeckoSession.TextInputDelegate> mTextInputListeners;
6869
private transient LinkedList<VideoAvailabilityListener> mVideoAvailabilityListeners;
70+
private transient LinkedList<GeckoSession.SelectionActionDelegate> mSelectionActionListeners;
6971
private transient UserAgentOverride mUserAgentOverride;
7072

7173
private transient GeckoSession mCurrentSession;
@@ -92,6 +94,7 @@ protected SessionStack(Context context, GeckoRuntime runtime, boolean usePrivate
9294
mSessionChangeListeners = new LinkedList<>();
9395
mTextInputListeners = new LinkedList<>();
9496
mVideoAvailabilityListeners = new LinkedList<>();
97+
mSelectionActionListeners = new LinkedList<>();
9598

9699
if (mPrefs != null) {
97100
mPrefs.registerOnSharedPreferenceChangeListener(this);
@@ -122,6 +125,7 @@ protected void shutdown() {
122125
mSessionChangeListeners.clear();
123126
mTextInputListeners.clear();
124127
mVideoAvailabilityListeners.clear();
128+
mSelectionActionListeners.clear();
125129

126130
if (mPrefs != null) {
127131
mPrefs.unregisterOnSharedPreferenceChangeListener(this);
@@ -267,6 +271,27 @@ public void removeVideoAvailabilityListener(VideoAvailabilityListener aListener)
267271
mVideoAvailabilityListeners.remove(aListener);
268272
}
269273

274+
public void addSelectionActionListener(GeckoSession.SelectionActionDelegate aListener) {
275+
mSelectionActionListeners.add(aListener);
276+
}
277+
278+
public void removeSelectionActionListener(GeckoSession.ContentDelegate aListener) {
279+
mSelectionActionListeners.remove(aListener);
280+
}
281+
282+
private void setUpListeners(GeckoSession aSession) {
283+
aSession.setNavigationDelegate(this);
284+
aSession.setProgressDelegate(this);
285+
aSession.setContentDelegate(this);
286+
aSession.getTextInput().setDelegate(this);
287+
aSession.setPermissionDelegate(mPermissionDelegate);
288+
aSession.setPromptDelegate(mPromptDelegate);
289+
aSession.setContentBlockingDelegate(this);
290+
aSession.setMediaDelegate(this);
291+
aSession.setHistoryDelegate(this);
292+
aSession.setSelectionActionDelegate(this);
293+
}
294+
270295
public void restore(SessionStack store, int currentSessionId) {
271296
mSessions.clear();
272297

@@ -301,16 +326,8 @@ public void restore(SessionStack store, int currentSessionId) {
301326
}
302327

303328
int newSessionId = state.mSession.hashCode();
329+
setUpListeners(state.mSession);
304330

305-
state.mSession.setNavigationDelegate(this);
306-
state.mSession.setProgressDelegate(this);
307-
state.mSession.setContentDelegate(this);
308-
state.mSession.getTextInput().setDelegate(this);
309-
state.mSession.setPermissionDelegate(mPermissionDelegate);
310-
state.mSession.setPromptDelegate(mPromptDelegate);
311-
state.mSession.setContentBlockingDelegate(this);
312-
state.mSession.setMediaDelegate(this);
313-
state.mSession.setHistoryDelegate(this);
314331
for (SessionChangeListener listener: mSessionChangeListeners) {
315332
listener.onNewSession(state.mSession, newSessionId);
316333
}
@@ -368,15 +385,7 @@ private int createSession(@NonNull SessionSettings aSettings) {
368385
state.mSession.getSettings().setSuspendMediaWhenInactive(aSettings.isSuspendMediaWhenInactiveEnabled());
369386
state.mSession.getSettings().setUserAgentMode(aSettings.getUserAgentMode());
370387
state.mSession.getSettings().setUserAgentOverride(aSettings.getUserAgentOverride());
371-
state.mSession.setNavigationDelegate(this);
372-
state.mSession.setProgressDelegate(this);
373-
state.mSession.setContentDelegate(this);
374-
state.mSession.getTextInput().setDelegate(this);
375-
state.mSession.setPermissionDelegate(mPermissionDelegate);
376-
state.mSession.setPromptDelegate(mPromptDelegate);
377-
state.mSession.setContentBlockingDelegate(this);
378-
state.mSession.setMediaDelegate(this);
379-
state.mSession.setHistoryDelegate(this);
388+
setUpListeners(state.mSession);
380389
for (SessionChangeListener listener: mSessionChangeListeners) {
381390
listener.onNewSession(state.mSession, result);
382391
}
@@ -417,6 +426,7 @@ private void removeSession(int aSessionId) {
417426
session.setContentBlockingDelegate(null);
418427
session.setMediaDelegate(null);
419428
session.setHistoryDelegate(null);
429+
session.setSelectionActionDelegate(this);
420430
mSessions.remove(aSessionId);
421431
for (SessionChangeListener listener: mSessionChangeListeners) {
422432
listener.onRemoveSession(session, aSessionId);
@@ -1419,4 +1429,24 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin
14191429
}
14201430
}
14211431
}
1432+
1433+
// GeckoSession.SelectionActionDelegate
1434+
1435+
@Override
1436+
public void onShowActionRequest(@NonNull GeckoSession aSession, @NonNull Selection selection, @NonNull String[] strings, @NonNull GeckoResponse<String> geckoResponse) {
1437+
if (aSession == mCurrentSession) {
1438+
for (GeckoSession.SelectionActionDelegate listener : mSelectionActionListeners) {
1439+
listener.onShowActionRequest(aSession, selection, strings, geckoResponse);
1440+
}
1441+
}
1442+
}
1443+
1444+
@Override
1445+
public void onHideAction(@NonNull GeckoSession aSession, int aHideReason) {
1446+
if (aSession == mCurrentSession) {
1447+
for (GeckoSession.SelectionActionDelegate listener : mSelectionActionListeners) {
1448+
listener.onHideAction(aSession, aHideReason);
1449+
}
1450+
}
1451+
}
14221452
}

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

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

app/src/common/shared/org/mozilla/vrbrowser/ui/callbacks/ContextMenuClickCallback.java

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

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

Lines changed: 0 additions & 104 deletions
This file was deleted.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.mozilla.vrbrowser.ui.views;
2+
3+
import android.content.Context;
4+
import android.util.AttributeSet;
5+
6+
import org.jetbrains.annotations.NotNull;
7+
import org.jetbrains.annotations.Nullable;
8+
9+
import mozilla.components.ui.autocomplete.InlineAutocompleteEditText;
10+
11+
public class CustomInlineAutocompleteEditText extends InlineAutocompleteEditText {
12+
private OnSelectionChangedCallback mSelectionCallback;
13+
interface OnSelectionChangedCallback {
14+
void onSelectionChanged(int selectionStart, int selectionEnd);
15+
}
16+
17+
public CustomInlineAutocompleteEditText(@NotNull Context ctx, @Nullable AttributeSet attrs, int defStyleAttr) {
18+
super(ctx, attrs, defStyleAttr);
19+
}
20+
21+
public CustomInlineAutocompleteEditText(@NotNull Context ctx, @Nullable AttributeSet attrs) {
22+
super(ctx, attrs);
23+
}
24+
25+
public CustomInlineAutocompleteEditText(@NotNull Context ctx) {
26+
super(ctx);
27+
}
28+
29+
@Override
30+
public void onSelectionChanged(int selStart, int selEnd) {
31+
super.onSelectionChanged(selStart, selEnd);
32+
if (mSelectionCallback != null) {
33+
mSelectionCallback.onSelectionChanged(selStart, selEnd);
34+
}
35+
}
36+
37+
public void setOnSelectionChangedCallback(@Nullable OnSelectionChangedCallback aCallback) {
38+
mSelectionCallback = aCallback;
39+
}
40+
}

0 commit comments

Comments
 (0)