// Copyright 2004-present Facebook. All Rights Reserved.
package com.facebook.react.bridge;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import com.facebook.common.logging.FLog;
import com.facebook.jni.HybridData;
import com.facebook.proguard.annotations.DoNotStrip;
import com.facebook.react.common.ReactConstants;
@DoNotStrip
public class Inspector {
static {
ReactBridge.staticInit();
}
private final HybridData mHybridData;
public static boolean isSupported() {
try {
// This isn't a very nice way to do this but it works :|
instance().getPagesNative();
return true;
} catch (UnsatisfiedLinkError e) {
return false;
}
}
public static List<Page> getPages() {
try {
return Arrays.asList(instance().getPagesNative());
} catch (UnsatisfiedLinkError e) {
FLog.e(ReactConstants.TAG, "Inspector doesn't work in open source yet", e);
return Collections.emptyList();
}
}
public static LocalConnection connect(int pageId, RemoteConnection remote) {
try {
return instance().connectNative(pageId, remote);
} catch (UnsatisfiedLinkError e) {
FLog.e(ReactConstants.TAG, "Inspector doesn't work in open source yet", e);
throw new RuntimeException(e);
}
}
private static native Inspector instance();
private native Page[] getPagesNative();
private native LocalConnection connectNative(int pageId, RemoteConnection remote);
private Inspector(HybridData hybridData) {
mHybridData = hybridData;
}
@DoNotStrip
public static class Page {
private final int mId;
private final String mTitle;
public int getId() {
return mId;
}
public String getTitle() {
return mTitle;
}
@Override
public String toString() {
return "Page{" +
"mId=" + mId +
", mTitle='" + mTitle + '\'' +
'}';
}
private Page(int id, String title) {
mId = id;
mTitle = title;
}
}
@DoNotStrip
public interface RemoteConnection {
void onMessage(String message);
void onDisconnect();
}
@DoNotStrip
public static class LocalConnection {
private final HybridData mHybridData;
public native void sendMessage(String message);
public native void disconnect();
private LocalConnection(HybridData hybridData) {
mHybridData = hybridData;
}
}
}