You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-08-10 22:11:50 +02:00
This commit is contained in:
@@ -18,7 +18,6 @@ import net.cozic.joplin.audio.SpeechToTextPackage
|
|||||||
import net.cozic.joplin.versioninfo.SystemVersionInformationPackage
|
import net.cozic.joplin.versioninfo.SystemVersionInformationPackage
|
||||||
import net.cozic.joplin.share.SharePackage
|
import net.cozic.joplin.share.SharePackage
|
||||||
import net.cozic.joplin.ssl.SslPackage
|
import net.cozic.joplin.ssl.SslPackage
|
||||||
import net.cozic.joplin.textinput.TextInputPackage
|
|
||||||
|
|
||||||
class MainApplication : Application(), ReactApplication {
|
class MainApplication : Application(), ReactApplication {
|
||||||
override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(this, object : DefaultReactNativeHost(this) {
|
override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(this, object : DefaultReactNativeHost(this) {
|
||||||
@@ -27,7 +26,6 @@ class MainApplication : Application(), ReactApplication {
|
|||||||
// Packages that cannot be autolinked yet can be added manually here, for example:
|
// Packages that cannot be autolinked yet can be added manually here, for example:
|
||||||
add(SharePackage())
|
add(SharePackage())
|
||||||
add(SslPackage())
|
add(SslPackage())
|
||||||
add(TextInputPackage())
|
|
||||||
add(SystemVersionInformationPackage())
|
add(SystemVersionInformationPackage())
|
||||||
add(SpeechToTextPackage())
|
add(SpeechToTextPackage())
|
||||||
}
|
}
|
||||||
|
@@ -1,63 +0,0 @@
|
|||||||
package net.cozic.joplin.textinput;
|
|
||||||
|
|
||||||
import android.text.Selection;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
|
|
||||||
import com.facebook.react.bridge.NativeModule;
|
|
||||||
import com.facebook.react.bridge.ReactApplicationContext;
|
|
||||||
import com.facebook.react.bridge.ReadableArray;
|
|
||||||
import com.facebook.react.uimanager.ViewManager;
|
|
||||||
import com.facebook.react.views.textinput.ReactEditText;
|
|
||||||
import com.facebook.react.views.textinput.ReactTextInputManager;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class provides a workaround for <a href="https://github.com/facebook/react-native/issues/29911">
|
|
||||||
* https://github.com/facebook/react-native/issues/29911</a>
|
|
||||||
*
|
|
||||||
* The reason the editor is scrolled seems to be due to this block in
|
|
||||||
* <pre>android.widget.Editor#onFocusChanged:</pre>
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
* // The DecorView does not have focus when the 'Done' ExtractEditText button is
|
|
||||||
* // pressed. Since it is the ViewAncestor's mView, it requests focus before
|
|
||||||
* // ExtractEditText clears focus, which gives focus to the ExtractEditText.
|
|
||||||
* // This special case ensure that we keep current selection in that case.
|
|
||||||
* // It would be better to know why the DecorView does not have focus at that time.
|
|
||||||
* if (((mTextView.isInExtractedMode()) || mSelectionMoved)
|
|
||||||
* && selStart >= 0 && selEnd >= 0) {
|
|
||||||
* Selection.setSelection((Spannable)mTextView.getText(),selStart,selEnd);
|
|
||||||
* }
|
|
||||||
* </pre>
|
|
||||||
* When using native Android TextView mSelectionMoved is false so this block is skipped,
|
|
||||||
* with RN however it's true and this is where the scrolling comes from.
|
|
||||||
*
|
|
||||||
* The below workaround resets the selection before a focus event is passed on to the native component.
|
|
||||||
* This way when the above condition is reached <pre>selStart == selEnd == -1</pre> and no scrolling
|
|
||||||
* happens.
|
|
||||||
*/
|
|
||||||
public class TextInputPackage implements com.facebook.react.ReactPackage {
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {
|
|
||||||
return Collections.singletonList(new ReactTextInputManager() {
|
|
||||||
@Override
|
|
||||||
public void receiveCommand(ReactEditText reactEditText, String commandId, @Nullable ReadableArray args) {
|
|
||||||
if ("focus".equals(commandId) || "focusTextInput".equals(commandId)) {
|
|
||||||
Selection.removeSelection(reactEditText.getText());
|
|
||||||
}
|
|
||||||
super.receiveCommand(reactEditText, commandId, args);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user