forked from Ivasoft/mattermost-mobile
* Fix crash on Android when session expired notification is presented * react-native-notification patch for schedule fix on android and open local notification on iOS * Fix android scheduled session notification crash * patch react-native-navigation to support blur/focus AppState on Android * remove schedule session expired notification from login entry point * schedule session expired notification actions * add session manager * Handle open session expired notification
94 lines
3.5 KiB
Java
94 lines
3.5 KiB
Java
package com.mattermost.rnbeta;
|
|
|
|
import android.os.Bundle;
|
|
import androidx.annotation.Nullable;
|
|
|
|
import android.view.KeyEvent;
|
|
import android.content.res.Configuration;
|
|
|
|
import com.facebook.react.bridge.Arguments;
|
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
import com.facebook.react.bridge.ReactMethod;
|
|
import com.facebook.react.bridge.WritableMap;
|
|
import com.facebook.react.ReactActivityDelegate;
|
|
import com.facebook.react.ReactRootView;
|
|
import com.reactnativenavigation.NavigationActivity;
|
|
import com.github.emilioicai.hwkeyboardevent.HWKeyboardEventModule;
|
|
|
|
public class MainActivity extends NavigationActivity {
|
|
private boolean HWKeyboardConnected = false;
|
|
|
|
public static class MainActivityDelegate extends ReactActivityDelegate {
|
|
public MainActivityDelegate(NavigationActivity activity, String mainComponentName) {
|
|
super(activity, mainComponentName);
|
|
}
|
|
|
|
@Override
|
|
protected ReactRootView createRootView() {
|
|
ReactRootView reactRootView = new ReactRootView(getContext());
|
|
// If you opted-in for the New Architecture, we enable the Fabric Renderer.
|
|
reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED);
|
|
return reactRootView;
|
|
}
|
|
|
|
@Override
|
|
protected boolean isConcurrentRootEnabled() {
|
|
// If you opted-in for the New Architecture, we enable Concurrent Root (i.e. React 18).
|
|
// More on this on https://reactjs.org/blog/2022/03/29/react-v18.html
|
|
return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
setContentView(R.layout.launch_screen);
|
|
setHWKeyboardConnected();
|
|
}
|
|
|
|
@Override
|
|
public void onConfigurationChanged(Configuration newConfig) {
|
|
super.onConfigurationChanged(newConfig);
|
|
|
|
if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
|
|
HWKeyboardConnected = true;
|
|
} else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
|
|
HWKeyboardConnected = false;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onWindowFocusChanged(boolean hasFocus) {
|
|
super.onWindowFocusChanged(hasFocus);
|
|
getReactGateway().onWindowFocusChanged(hasFocus);
|
|
}
|
|
|
|
/*
|
|
https://mattermost.atlassian.net/browse/MM-10601
|
|
Required by react-native-hw-keyboard-event
|
|
(https://github.com/emilioicai/react-native-hw-keyboard-event)
|
|
*/
|
|
@Override
|
|
public boolean dispatchKeyEvent(KeyEvent event) {
|
|
if (HWKeyboardConnected) {
|
|
int keyCode = event.getKeyCode();
|
|
int keyAction = event.getAction();
|
|
if (keyAction == KeyEvent.ACTION_UP) {
|
|
if (keyCode == KeyEvent.KEYCODE_ENTER) {
|
|
String keyPressed = event.isShiftPressed() ? "shift-enter" : "enter";
|
|
HWKeyboardEventModule.getInstance().keyPressed(keyPressed);
|
|
return true;
|
|
} else if (keyCode == KeyEvent.KEYCODE_K && event.isCtrlPressed()) {
|
|
HWKeyboardEventModule.getInstance().keyPressed("find-channels");
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return super.dispatchKeyEvent(event);
|
|
};
|
|
|
|
private void setHWKeyboardConnected() {
|
|
HWKeyboardConnected = getResources().getConfiguration().keyboard == Configuration.KEYBOARD_QWERTY;
|
|
}
|
|
}
|