scan qrcode to connect dev kit & change dev panel ui

This commit is contained in:
王劲鹏 2019-11-11 18:51:45 +08:00
parent 8d0d78a12f
commit 9c9fcf4087
13 changed files with 96 additions and 26 deletions

View File

@ -43,7 +43,7 @@ public class MainActivity extends AppCompatActivity {
doricContext.init(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); doricContext.init(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
// doricContext.callEntity("log"); // doricContext.callEntity("log");
doricContext.getRootNode().setRootView((FrameLayout) findViewById(R.id.root)); doricContext.getRootNode().setRootView((FrameLayout) findViewById(R.id.root));
Doric.connectDevKit("ws://192.168.11.38:7777");
LocalServer localServer = new LocalServer(getApplicationContext(), 8910); LocalServer localServer = new LocalServer(getApplicationContext(), 8910);
try { try {
localServer.start(); localServer.start();

View File

@ -57,6 +57,7 @@ dependencies {
implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.7' implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.7'
implementation 'com.github.tbruyelle:rxpermissions:0.10.2' implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
implementation "io.reactivex.rxjava2:rxjava:2.2.14" implementation "io.reactivex.rxjava2:rxjava:2.2.14"
implementation 'org.greenrobot:eventbus:3.1.1'
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.ext:junit:1.1.1'

View File

@ -17,6 +17,8 @@ package pub.doric;
import android.app.Application; import android.app.Application;
import pub.doric.dev.ConnectCallback;
/** /**
* @Description: Doric * @Description: Doric
* @Author: pengfei.zhou * @Author: pengfei.zhou
@ -33,8 +35,8 @@ public class Doric {
return sApplication; return sApplication;
} }
public static void connectDevKit(String url) { public static void connectDevKit(String url, ConnectCallback connectCallback) {
DoricDriver.getInstance().connectDevKit(url); DoricDriver.getInstance().connectDevKit(url, connectCallback);
} }
public static void disconnectDevKit() { public static void disconnectDevKit() {

View File

@ -20,6 +20,7 @@ import android.os.Looper;
import pub.doric.async.AsyncCall; import pub.doric.async.AsyncCall;
import pub.doric.async.AsyncResult; import pub.doric.async.AsyncResult;
import pub.doric.dev.ConnectCallback;
import pub.doric.dev.WSClient; import pub.doric.dev.WSClient;
import pub.doric.engine.DoricJSEngine; import pub.doric.engine.DoricJSEngine;
import pub.doric.utils.DoricConstant; import pub.doric.utils.DoricConstant;
@ -138,8 +139,8 @@ public class DoricDriver implements IDoricDriver {
} }
@Override @Override
public void connectDevKit(String url) { public void connectDevKit(String url, ConnectCallback connectCallback) {
wsClient = new WSClient(url); wsClient = new WSClient(url, connectCallback);
} }
@Override @Override

View File

@ -17,6 +17,7 @@ package pub.doric;
import pub.doric.async.AsyncResult; import pub.doric.async.AsyncResult;
import pub.doric.dev.ConnectCallback;
import pub.doric.utils.ThreadMode; import pub.doric.utils.ThreadMode;
import com.github.pengfeizhou.jscore.JSDecoder; import com.github.pengfeizhou.jscore.JSDecoder;
@ -41,7 +42,7 @@ public interface IDoricDriver {
DoricRegistry getRegistry(); DoricRegistry getRegistry();
void connectDevKit(String url); void connectDevKit(String url, ConnectCallback connectCallback);
void disconnectDevKit(); void disconnectDevKit();
} }

View File

@ -0,0 +1,7 @@
package pub.doric.dev;
public interface ConnectCallback {
void connected();
void exception(Exception exception);
}

View File

@ -0,0 +1,4 @@
package pub.doric.dev;
public class ConnectEvent {
}

View File

@ -1,6 +1,7 @@
package pub.doric.dev; package pub.doric.dev;
import android.Manifest; import android.Manifest;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -13,12 +14,18 @@ import androidx.annotation.Nullable;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import com.tbruyelle.rxpermissions2.RxPermissions; import com.tbruyelle.rxpermissions2.RxPermissions;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer; import io.reactivex.functions.Consumer;
import pub.doric.R; import pub.doric.R;
public class DevPanel extends BottomSheetDialogFragment { public class DevPanel extends BottomSheetDialogFragment {
private boolean isDevConnected = false;
public DevPanel() { public DevPanel() {
} }
@ -37,7 +44,7 @@ public class DevPanel extends BottomSheetDialogFragment {
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
getView().findViewById(R.id.menu1_text_view).setOnClickListener(new View.OnClickListener() { getView().findViewById(R.id.connect_dev_kit_text_view).setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
final RxPermissions rxPermissions = new RxPermissions(DevPanel.this); final RxPermissions rxPermissions = new RxPermissions(DevPanel.this);
@ -46,7 +53,7 @@ public class DevPanel extends BottomSheetDialogFragment {
.subscribe(new Consumer<Boolean>() { .subscribe(new Consumer<Boolean>() {
@Override @Override
public void accept(Boolean grant) throws Exception { public void accept(Boolean grant) throws Exception {
if (grant){ if (grant) {
Intent intent = new Intent(getContext(), ScanQRCodeActivity.class); Intent intent = new Intent(getContext(), ScanQRCodeActivity.class);
getContext().startActivity(intent); getContext().startActivity(intent);
} }
@ -55,5 +62,32 @@ public class DevPanel extends BottomSheetDialogFragment {
} }
}); });
if (isDevConnected) {
getView().findViewById(R.id.connect_dev_kit_text_view).setVisibility(View.GONE);
getView().findViewById(R.id.debug_text_view).setVisibility(View.VISIBLE);
getView().findViewById(R.id.hot_reload_text_view).setVisibility(View.VISIBLE);
} else {
getView().findViewById(R.id.connect_dev_kit_text_view).setVisibility(View.VISIBLE);
getView().findViewById(R.id.debug_text_view).setVisibility(View.GONE);
getView().findViewById(R.id.hot_reload_text_view).setVisibility(View.GONE);
}
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
EventBus.getDefault().register(this);
}
@Override
public void onDetach() {
super.onDetach();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(ConnectEvent connectEvent) {
isDevConnected = true;
} }
} }

View File

@ -1,12 +1,16 @@
package pub.doric.dev; package pub.doric.dev;
import android.os.Bundle; import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import org.greenrobot.eventbus.EventBus;
import cn.bingoogolapple.qrcode.core.QRCodeView; import cn.bingoogolapple.qrcode.core.QRCodeView;
import cn.bingoogolapple.qrcode.zxing.ZXingView; import cn.bingoogolapple.qrcode.zxing.ZXingView;
import pub.doric.Doric;
import pub.doric.R; import pub.doric.R;
public class ScanQRCodeActivity extends AppCompatActivity implements QRCodeView.Delegate { public class ScanQRCodeActivity extends AppCompatActivity implements QRCodeView.Delegate {
@ -47,6 +51,19 @@ public class ScanQRCodeActivity extends AppCompatActivity implements QRCodeView.
@Override @Override
public void onScanQRCodeSuccess(String result) { public void onScanQRCodeSuccess(String result) {
setTitle("扫描结果为:" + result); setTitle("扫描结果为:" + result);
Toast.makeText(this, "dev kit connecting to " + result, Toast.LENGTH_LONG).show();
Doric.connectDevKit("ws://" + result + ":7777", new ConnectCallback() {
@Override
public void connected() {
EventBus.getDefault().post(new ConnectEvent());
finish();
}
@Override
public void exception(Exception exception) {
}
});
} }
@Override @Override

View File

@ -37,7 +37,10 @@ import okhttp3.WebSocketListener;
public class WSClient extends WebSocketListener { public class WSClient extends WebSocketListener {
private final WebSocket webSocket; private final WebSocket webSocket;
public WSClient(String url) { private ConnectCallback connectCallback;
public WSClient(String url, ConnectCallback connectCallback) {
this.connectCallback = connectCallback;
OkHttpClient okHttpClient = new OkHttpClient OkHttpClient okHttpClient = new OkHttpClient
.Builder() .Builder()
.readTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS)
@ -54,6 +57,7 @@ public class WSClient extends WebSocketListener {
@Override @Override
public void onOpen(WebSocket webSocket, Response response) { public void onOpen(WebSocket webSocket, Response response) {
super.onOpen(webSocket, response); super.onOpen(webSocket, response);
connectCallback.connected();
} }
@Override @Override

View File

@ -40,7 +40,7 @@ public class RemoteJSExecutor {
.readTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS)
.build(); .build();
final Request request = new Request.Builder().url("ws://192.168.24.221:2080").build(); final Request request = new Request.Builder().url("ws://192.168.25.175:2080").build();
final Thread current = Thread.currentThread(); final Thread current = Thread.currentThread();
webSocket = okHttpClient.newWebSocket(request, new WebSocketListener() { webSocket = okHttpClient.newWebSocket(request, new WebSocketListener() {

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#cccccc" />
<size android:height="1dp" />
</shape>

View File

@ -2,39 +2,33 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:divider="@drawable/divider"
android:orientation="vertical"
android:showDividers="middle">
<TextView <TextView
android:id="@+id/menu1_text_view" android:id="@+id/connect_dev_kit_text_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="60dp" android:layout_height="60dp"
android:gravity="center" android:gravity="center"
android:text="Dev Kit" android:text="Dev Kit"
android:textSize="20sp" /> android:textSize="20sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#cccccc" />
<TextView <TextView
android:id="@+id/menu2_text_view" android:id="@+id/debug_text_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="60dp" android:layout_height="60dp"
android:gravity="center" android:gravity="center"
android:text="Debug via Visual Studio Code" android:text="Debug via Visual Studio Code"
android:textSize="20sp" /> android:textSize="20sp"
android:visibility="gone" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#cccccc" />
<TextView <TextView
android:id="@+id/menu3_text_view" android:id="@+id/hot_reload_text_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="60dp" android:layout_height="60dp"
android:gravity="center" android:gravity="center"
android:text="Enable Hot Reload" android:text="Enable Hot Reload"
android:textSize="20sp" /> android:textSize="20sp"
android:visibility="gone" />
</LinearLayout> </LinearLayout>