Эх сурвалжийг харах

公司远端设备日志拉取界面

cs 10 сар өмнө
parent
commit
6d3463f4cc

BIN
app/src/main/assets/scrcpy-server.jar


+ 11 - 2
app/src/main/java/org/las2mile/okio/OkIoClient.java

@@ -17,6 +17,7 @@ import okio.Buffer;
 import okio.BufferedSink;
 import okio.BufferedSource;
 import okio.Okio;
+import java.util.Set;
 
 public class OkIoClient extends Thread{
     private String serverIP;
@@ -62,13 +63,22 @@ public class OkIoClient extends Thread{
                             LogFileMsgResp logFileMsgResp = new LogFileMsgResp();
                             logFileMsgResp.decodeData(packet.mBaseMsgBuffer, (short) packet.mBaseMsgBuffer.size());
                             Ln.e(logFileMsgResp.pktNo+"/"+logFileMsgResp.pktNums);//+"   "+ " client zipfile "+logFileMsgResp.toString());
+                            if(mOnOkIoMsgListener != null){
+                                mOnOkIoMsgListener.onOkIoMsg(logFileMsgResp);
+                            }
                             logZipFileHandler.write(logFileMsgResp.offset,logFileMsgResp.samples,logFileMsgResp.pktNums,logFileMsgResp.pktNo);
 //                            process(logFileMsgResp);
                         } else if(packet.cmd == BaseMsg.RESP_LOGZIP_END){
                             LogFileEndMsgResp logFileEndMsgResp = new LogFileEndMsgResp();
                             logFileEndMsgResp.decodeData(packet.mBaseMsgBuffer, (short) packet.mBaseMsgBuffer.size());
                             Ln.e("client zipfile end----------------------------------"+logFileEndMsgResp.toString());
-                            logZipFileHandler.close();
+                            Set<String> lostNums = logZipFileHandler.close();
+                            if(mOnOkIoMsgListener != null){
+                                if(lostNums != null){
+                                    logFileEndMsgResp.allDownloaded = lostNums.size() > 0 ? false : true;
+                                }
+                                mOnOkIoMsgListener.onOkIoMsg(logFileEndMsgResp);
+                            }
                         } else if(packet.cmd == BaseMsg.REQ_HARTBEAT){
                             HartBeatMsgResp msgResp = new HartBeatMsgResp();
                             msgResp.decodeData(packet.mBaseMsgBuffer, (short) packet.mBaseMsgBuffer.size());
@@ -76,7 +86,6 @@ public class OkIoClient extends Thread{
                             if(mOnOkIoMsgListener != null){
                                 mOnOkIoMsgListener.onOkIoMsg(msgResp);
                             }
-                            requestLogFile();
                         }
                     }
                 }

+ 2 - 1
app/src/main/java/org/las2mile/okio/client/LogZipFileHandler.java

@@ -41,7 +41,7 @@ public class LogZipFileHandler {
         }*/
     }
 
-    public void close() throws IOException {
+    public Set<String> close() throws IOException {
 //        Iterator iterator= receiveNos.iterator();
 //        while (iterator.hasNext()){
 //            Integer no = (Integer) iterator.next();
@@ -59,6 +59,7 @@ public class LogZipFileHandler {
         }
         Ln.i("client zipfile lost "+numLostSet);
         /*zipOutPut.close();*/
+        return numLostSet;
     }
 
     public void open() {

+ 1 - 0
app/src/main/java/org/las2mile/okio/message/resp/LogFileEndMsgResp.java

@@ -6,6 +6,7 @@ import okio.Buffer;
 
 public class LogFileEndMsgResp extends BaseMsg {
     short status=1;
+    public boolean allDownloaded = false;
 
     public LogFileEndMsgResp(){
         mCmd = RESP_LOGZIP_END;

+ 53 - 5
app/src/main/java/org/las2mile/scrcpy/MainActivity.java

@@ -45,6 +45,10 @@ import android.os.Handler;
 import android.os.Message;
 import org.las2mile.okio.message.BaseMsg;
 import org.las2mile.okio.message.resp.HartBeatMsgResp;
+import org.las2mile.okio.message.resp.LogFileEndMsgResp;
+import org.las2mile.okio.message.resp.LogFileMsgResp;
+import android.widget.TextView;
+import java.util.Set;
 
 
 public class MainActivity extends Activity implements Scrcpy.ServiceCallbacks, SensorEventListener {
@@ -83,6 +87,9 @@ public class MainActivity extends Activity implements Scrcpy.ServiceCallbacks, S
     static final int ADB_CONNECT_FAIL_HIDE = 5;
     static final int SERVER_ENV_PREPARED = 6;
     static final int GOT_REMOTE_VERSION = 7;
+    static final int GOT_REMOTE_LOG_PROCEDURE = 8;
+    static final int GOT_REMOTE_LOG_PROCEDURE_END = 9;
+
     Handler mainHandler = new Handler(new Handler.Callback() {
         @Override
         public boolean handleMessage(Message message) {
@@ -108,11 +115,31 @@ public class MainActivity extends Activity implements Scrcpy.ServiceCallbacks, S
                 hideProgress();
                 HartBeatMsgResp hartBeatMsgResp = (HartBeatMsgResp)message.obj;
                 Toast.makeText(context, hartBeatMsgResp.remoteInfo, Toast.LENGTH_SHORT).show();
+                TextView tv_remote_device_info = findViewById(R.id.tv_remote_device_info);
+                String remoteVer = String.format(getResources().getString(R.string.str_remote_dev_info),hartBeatMsgResp.remoteInfo);
+                tv_remote_device_info.setText(remoteVer);
+            } else if(what == GOT_REMOTE_LOG_PROCEDURE){
+                String str_save_log_to_local  = (String)message.obj;
+                TextView tv_save_log_to_local = findViewById(R.id.tv_save_log_to_local);
+                tv_save_log_to_local.setText(str_save_log_to_local);
+            } else if (what == GOT_REMOTE_LOG_PROCEDURE_END){
+                Boolean ok = (Boolean)message.obj;
+                String str_remote_log_dlst = String.format(getResources().getString(R.string.str_remote_log_dlst),ok ? "成功":"失败");
+                TextView tv_remote_log_dlst = findViewById(R.id.tv_remote_log_dlst);
+                tv_remote_log_dlst.setText(str_remote_log_dlst);
             }
             return false;
         }
     });
 
+    private void initDownloadBtn(){
+        final Button btn_dl_status = findViewById(R.id.btn_dl_status);
+        btn_dl_status.setOnClickListener(v -> {
+            Log.e("scrcpy","Asset initDownloadBtn");
+            scrcpy.downloadLog();
+        });
+    }
+
     private final ServiceConnection serviceConnection = new ServiceConnection() {
         @Override
         public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
@@ -177,10 +204,27 @@ public class MainActivity extends Activity implements Scrcpy.ServiceCallbacks, S
 
     @Override
     public void onOkIoMsg(BaseMsg baseMsg){
-        Message msg = new Message();
-        msg.what = GOT_REMOTE_VERSION;
-        msg.obj = baseMsg;
-        mainHandler.sendMessage(msg);
+        if(baseMsg instanceof LogFileMsgResp){
+            LogFileMsgResp logFileMsgResp = (LogFileMsgResp)baseMsg;
+            String percentStr = Math.round((logFileMsgResp.pktNo+1)*1.0f/logFileMsgResp.pktNums * 100)+"%";
+            String str_save_log_to_local = String.format(getResources().getString(R.string.str_save_log_to_local),"sdcd/df",percentStr);
+            Message msg = new Message();
+            msg.what = GOT_REMOTE_LOG_PROCEDURE;
+            msg.obj = str_save_log_to_local;
+            mainHandler.sendMessage(msg);
+        } else if(baseMsg instanceof HartBeatMsgResp){
+            Message msg = new Message();
+            msg.what = GOT_REMOTE_VERSION;
+            msg.obj = baseMsg;
+            mainHandler.sendMessage(msg);
+        } else if(baseMsg instanceof LogFileEndMsgResp){
+            LogFileEndMsgResp logFileEndMsgResp = (LogFileEndMsgResp)baseMsg;
+            Message msg = new Message();
+            msg.what = GOT_REMOTE_LOG_PROCEDURE_END;
+            msg.obj = logFileEndMsgResp.allDownloaded;
+            mainHandler.sendMessage(msg);
+        }
+        
     }
 
     private void showProgress(){
@@ -200,7 +244,9 @@ public class MainActivity extends Activity implements Scrcpy.ServiceCallbacks, S
     }
 
     private void hideProgress(){
-        mainProgressDialog.dismiss();
+        if(mainProgressDialog.isShowing()){
+            mainProgressDialog.dismiss();
+        }
     }
 
     @SuppressLint("SourceLockedOrientationActivity")
@@ -394,6 +440,7 @@ public class MainActivity extends Activity implements Scrcpy.ServiceCallbacks, S
         }
             linearLayout = findViewById(R.id.container1);
             start_Scrcpy_service();
+            initDownloadBtn();//loadNewRotation  屏幕旋转需要重新初始化
     }
 
 
@@ -442,6 +489,7 @@ public class MainActivity extends Activity implements Scrcpy.ServiceCallbacks, S
     @SuppressLint("SourceLockedOrientationActivity")
     @Override
     public void loadNewRotation() {
+        Log.e("Scrcpy: ","loadNewRotation "+first_time);
         if (first_time){
             int[] rem_res = scrcpy.get_remote_device_resolution();
             remote_device_height = rem_res[1];

+ 11 - 3
app/src/main/java/org/las2mile/scrcpy/Scrcpy.java

@@ -45,6 +45,8 @@ public class Scrcpy extends Service {
     private int[] remote_dev_resolution = new int[2];
     private boolean socket_status = false;
 
+    OkIoClient mOkIoClient;
+
     @Override
     public IBinder onBind(Intent intent) {
         return mBinder;
@@ -78,8 +80,8 @@ public class Scrcpy extends Service {
         });
         thread.start();
         //手机-设备交互客户端
-        OkIoClient okIoClient = new OkIoClient(serverAdr);
-        okIoClient.setOnOkIoMsgListener(new OnOkIoMsgListener() {
+        mOkIoClient = new OkIoClient(serverAdr);
+        mOkIoClient.setOnOkIoMsgListener(new OnOkIoMsgListener() {
             @Override
             public void onOkIoMsg(BaseMsg msg) {
                 if (serviceCallbacks != null) {
@@ -87,7 +89,13 @@ public class Scrcpy extends Service {
                 }
             }
         });
-        okIoClient.start();
+        mOkIoClient.start();
+    }
+
+    public void downloadLog(){
+        if(mOkIoClient != null){
+            mOkIoClient.requestLogFile();
+        }
     }
 
     public void pause() {

+ 40 - 0
app/src/main/res/layout-land/surface.xml

@@ -8,6 +8,46 @@
     android:orientation="horizontal"
     android:weightSum="2">
 
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:background="#ffffff"
+        android:layout_marginBottom="2dp"
+        android:orientation="vertical">
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="公司远程设备软件发行时间:"
+            android:id="@+id/tv_remote_device_info"/>
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+            <LinearLayout
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:orientation="vertical">
+                <TextView
+                    android:id="@+id/tv_save_log_to_local"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:text="日志保存路径"/>
+                <TextView
+                    android:id="@+id/tv_remote_log_dlst"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="状态:未知"/>
+            </LinearLayout>
+            <Button
+                android:id="@+id/btn_dl_status"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="下载"/>
+        </LinearLayout>
+    </LinearLayout>
+
     <SurfaceView
         android:id="@+id/decoder_surface"
         android:layout_width="match_parent"

+ 40 - 0
app/src/main/res/layout/surface.xml

@@ -10,6 +10,46 @@
     android:background="@android:color/background_dark"
     android:weightSum="2"
     android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="#ffffff"
+        android:layout_marginBottom="2dp"
+        android:orientation="vertical">
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="公司远程设备软件发行时间:"
+            android:id="@+id/tv_remote_device_info"/>
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+            <LinearLayout
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:orientation="vertical">
+                <TextView
+                    android:id="@+id/tv_save_log_to_local"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:text="日志保存路径"/>
+                <TextView
+                    android:id="@+id/tv_remote_log_dlst"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="状态:未知"/>
+            </LinearLayout>
+            <Button
+                android:id="@+id/btn_dl_status"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="下载"/>
+        </LinearLayout>
+    </LinearLayout>
+
     <SurfaceView
         android:id="@+id/decoder_surface"
         android:layout_width="match_parent"

+ 3 - 0
app/src/main/res/values/strings.xml

@@ -11,6 +11,9 @@
     <string name="back_button">v</string>
     <string name="switch0">No Control  (check this if remote device control is not required)</string>
     <string name="switch1">Nav Bar  (check this if remote device does not have on-screen nav bar)</string>
+    <string name="str_remote_dev_info">公司远程设备软件发行时间:%1$s</string>
+    <string name="str_remote_log_dlst">状态:%1$s</string>
+    <string name="str_save_log_to_local">日志保存路径:%1$s,下载进度%2$s,</string>
 
 
     <string-array name="options_resolution_keys">