[Android] Reduce boilerplate/duplication

This commit is contained in:
Lyubo Marinov 2017-08-21 13:45:20 -05:00
parent c42f1704ff
commit 2356238887
8 changed files with 31 additions and 153 deletions

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jitsi.meet.sdk.audiomode; package org.jitsi.meet.sdk;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
@ -51,7 +51,7 @@ import java.util.Map;
* Before a call has started and after it has ended the * Before a call has started and after it has ended the
* <tt>AudioModeModule.DEFAULT</tt> mode should be used. * <tt>AudioModeModule.DEFAULT</tt> mode should be used.
*/ */
public class AudioModeModule extends ReactContextBaseJavaModule { class AudioModeModule extends ReactContextBaseJavaModule {
/** /**
* Constants representing the audio mode. * Constants representing the audio mode.
* - DEFAULT: Used before and after every call. It represents the default * - DEFAULT: Used before and after every call. It represents the default

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jitsi.meet.sdk.audiomode; package org.jitsi.meet.sdk;
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothHeadset;
@ -33,7 +33,7 @@ import android.util.Log;
* Bluetooth headsets being connected / disconnected and notifies the module * Bluetooth headsets being connected / disconnected and notifies the module
* about device changes when this occurs. * about device changes when this occurs.
*/ */
public class BluetoothHeadsetMonitor { class BluetoothHeadsetMonitor {
/** /**
* {@link AudioModeModule} where this monitor reports. * {@link AudioModeModule} where this monitor reports.
*/ */

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jitsi.meet.sdk.externalapi; package org.jitsi.meet.sdk;
import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactContextBaseJavaModule;
@ -32,7 +32,7 @@ import java.util.HashMap;
* object it will dim the screen and disable touch controls. The functionality * object it will dim the screen and disable touch controls. The functionality
* is used with the conference audio-only mode. * is used with the conference audio-only mode.
*/ */
public class ExternalAPIModule extends ReactContextBaseJavaModule { class ExternalAPIModule extends ReactContextBaseJavaModule {
/** /**
* React Native module name. * React Native module name.
*/ */

View File

@ -28,10 +28,14 @@ import android.widget.FrameLayout;
import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactRootView; import com.facebook.react.ReactRootView;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.common.LifecycleState; import com.facebook.react.common.LifecycleState;
import java.net.URL; import java.net.URL;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.WeakHashMap; import java.util.WeakHashMap;
@ -52,6 +56,15 @@ public class JitsiMeetView extends FrameLayout {
private static final Set<JitsiMeetView> views private static final Set<JitsiMeetView> views
= Collections.newSetFromMap(new WeakHashMap<JitsiMeetView, Boolean>()); = Collections.newSetFromMap(new WeakHashMap<JitsiMeetView, Boolean>());
private static List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
return Arrays.<NativeModule>asList(
new AudioModeModule(reactContext),
new ExternalAPIModule(reactContext),
new ProximityModule(reactContext)
);
}
public static JitsiMeetView findViewByExternalAPIScope( public static JitsiMeetView findViewByExternalAPIScope(
String externalAPIScope) { String externalAPIScope) {
synchronized (views) { synchronized (views) {
@ -86,10 +99,13 @@ public class JitsiMeetView extends FrameLayout {
.addPackage(new com.oney.WebRTCModule.WebRTCModulePackage()) .addPackage(new com.oney.WebRTCModule.WebRTCModulePackage())
.addPackage(new com.RNFetchBlob.RNFetchBlobPackage()) .addPackage(new com.RNFetchBlob.RNFetchBlobPackage())
.addPackage(new com.rnimmersive.RNImmersivePackage()) .addPackage(new com.rnimmersive.RNImmersivePackage())
.addPackage(new org.jitsi.meet.sdk.audiomode.AudioModePackage()) .addPackage(new ReactPackageAdapter() {
.addPackage( @Override
new org.jitsi.meet.sdk.externalapi.ExternalAPIPackage()) public List<NativeModule> createNativeModules(
.addPackage(new org.jitsi.meet.sdk.proximity.ProximityPackage()) ReactApplicationContext reactContext) {
return JitsiMeetView.createNativeModules(reactContext);
}
})
.setUseDeveloperSupport(BuildConfig.DEBUG) .setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED) .setInitialLifecycleState(LifecycleState.RESUMED)
.build(); .build();

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jitsi.meet.sdk.proximity; package org.jitsi.meet.sdk;
import android.content.Context; import android.content.Context;
import android.os.PowerManager; import android.os.PowerManager;
@ -31,7 +31,7 @@ import com.facebook.react.bridge.UiThreadUtil;
* object it will dim the screen and disable touch controls. The functionality * object it will dim the screen and disable touch controls. The functionality
* is used with the conference audio-only mode. * is used with the conference audio-only mode.
*/ */
public class ProximityModule extends ReactContextBaseJavaModule { class ProximityModule extends ReactContextBaseJavaModule {
/** /**
* React Native module name. * React Native module name.
*/ */

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jitsi.meet.sdk.audiomode; package org.jitsi.meet.sdk;
import com.facebook.react.ReactPackage; import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule; import com.facebook.react.bridge.JavaScriptModule;
@ -22,14 +22,10 @@ import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager; import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
/** public class ReactPackageAdapter implements ReactPackage {
* Implements {@link ReactPackage} for {@link AudioModeModule}.
*/
public class AudioModePackage implements ReactPackage {
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@ -40,17 +36,11 @@ public class AudioModePackage implements ReactPackage {
/** /**
* {@inheritDoc} * {@inheritDoc}
*
* @return List of native modules to be exposed by React Native.
*/ */
@Override @Override
public List<NativeModule> createNativeModules( public List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) { ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>(); return Collections.emptyList();
modules.add(new AudioModeModule(reactContext));
return modules;
} }
/** /**

View File

@ -1,64 +0,0 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.externalapi;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Implements {@link ReactPackage} for {@link ExternalAPIModule}.
*/
public class ExternalAPIPackage implements ReactPackage {
/**
* {@inheritDoc}
*/
@Override
public List<Class<? extends JavaScriptModule>> createJSModules() {
return Collections.emptyList();
}
/**
* {@inheritDoc}
*
* @return List of native modules to be exposed by React Native.
*/
@Override
public List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new ExternalAPIModule(reactContext));
return modules;
}
/**
* {@inheritDoc}
*/
@Override
public List<ViewManager> createViewManagers(
ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}

View File

@ -1,64 +0,0 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.proximity;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Implements {@link ReactPackage} for {@link ProximityModule}.
*/
public class ProximityPackage implements ReactPackage {
/**
* {@inheritDoc}
*/
@Override
public List<Class<? extends JavaScriptModule>> createJSModules() {
return Collections.emptyList();
}
/**
* {@inheritDoc}
*
* @return List of native modules to be exposed by React Native.
*/
@Override
public List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new ProximityModule(reactContext));
return modules;
}
/**
* {@inheritDoc}
*/
@Override
public List<ViewManager> createViewManagers(
ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}