王冲冲 6 years ago
parent
commit
ad97d0774c
39 changed files with 1739 additions and 163 deletions
  1. 74 75
      app/app.iml
  2. 1 17
      app/build.gradle
  3. BIN
      app/libs/armeabi/libavutil-54.so
  4. BIN
      app/libs/armeabi/libjcore127.so
  5. BIN
      app/libs/armeabi/libswresample-3.so
  6. 11 3
      app/src/main/AndroidManifest.xml
  7. 1 2
      app/src/main/java/com/silence/commonframe/ApiService.java
  8. 38 0
      app/src/main/java/com/silence/commonframe/Dialog/BaseDialog.java
  9. 3 3
      app/src/main/java/com/silence/commonframe/App.java
  10. 451 0
      app/src/main/java/com/silence/commonframe/activity/EsptouchDemoActivity.java
  11. 7 1
      app/src/main/java/com/silence/commonframe/activity/MainActivity.java
  12. 2 0
      app/src/main/java/com/silence/commonframe/activity/device/activity/NewDeviceFragment.java
  13. 58 0
      app/src/main/java/com/silence/commonframe/activity/device/activity/camera/FullPlayVideoActivity.java
  14. 17 0
      app/src/main/java/com/silence/commonframe/activity/device/activity/camera/Interface/NewCameraPlayListener.java
  15. 496 0
      app/src/main/java/com/silence/commonframe/activity/device/activity/camera/NewCameraPlayActivity.java
  16. 58 0
      app/src/main/java/com/silence/commonframe/activity/device/activity/camera/presenter/NewCameraPlayPresenter.java
  17. 1 1
      app/src/main/java/com/silence/commonframe/activity/device/presenter/NewDevicePresenter.java
  18. 9 0
      app/src/main/java/com/silence/commonframe/activity/home/activity/AdddeviceActivity.java
  19. 3 3
      app/src/main/java/com/silence/commonframe/activity/login/LoginActivity.java
  20. 3 3
      app/src/main/java/com/silence/commonframe/activity/mine/activity/setup/SetupActivity.java
  21. 1 1
      app/src/main/java/com/silence/commonframe/adapter/home/AddDeviceAdapter.java
  22. 6 6
      app/src/main/java/com/silence/commonframe/base/utils/TDevice.java
  23. 1 0
      app/src/main/java/com/silence/commonframe/common/UIFactory.java
  24. 4 4
      app/src/main/java/com/silence/commonframe/lib/funsdk/support/FunSupport.java
  25. 14 14
      app/src/main/java/com/silence/commonframe/utils/TimeButton.java
  26. 2 2
      app/src/main/java/com/silence/commonframe/utils/WetChatService.java
  27. 2 2
      app/src/main/java/com/silence/commonframe/wxapi/WXEntryActivity.java
  28. 1 0
      app/src/main/java/com/silence/commonframe/zxing/zxing/ScanListener.java
  29. 0 21
      app/src/main/java/com/silence/commonframe/zxing/zxing/ScanManager.java
  30. 1 0
      app/src/main/java/com/silence/commonframe/zxing/zxing/decode/DecodeFormatManager.java
  31. 1 0
      app/src/main/java/com/silence/commonframe/zxing/zxing/encode/EncodingHandler.java
  32. BIN
      app/src/main/res/drawable-mdpi/ic_info_outline_black_24dp.png
  33. BIN
      app/src/main/res/drawable-mdpi/ic_info_outline_white_24dp.png
  34. 1 2
      app/src/main/res/layout/activity_camera_detail.xml
  35. 299 0
      app/src/main/res/layout/activity_camera_detail_new.xml
  36. 15 0
      app/src/main/res/layout/activity_full_paly.xml
  37. 0 3
      app/src/main/res/layout/bottom_line.xml
  38. 136 0
      app/src/main/res/layout/esptouch_demo_activity.xml
  39. 22 0
      app/src/main/res/values/strings.xml

+ 74 - 75
app/app.iml

@@ -17,8 +17,7 @@
         <option name="ALLOW_USER_CONFIGURATION" value="false" />
         <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
         <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
-        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/build/generated/res/rs/debug;file://$MODULE_DIR$/build/generated/res/resValues/debug" />
-        <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" />
+        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
         <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
       </configuration>
     </facet>
@@ -29,12 +28,14 @@
     <exclude-output />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources/debug/processDebugResources/r" isTestSource="false" generated="true" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources/debugAndroidTest/processDebugAndroidTestResources/r" isTestSource="true" generated="true" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
@@ -83,8 +84,6 @@
       <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources" />
-      <excludeFolder url="file://$MODULE_DIR$/build/generated/source/r" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotation_processor_list" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/apk_list" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
@@ -97,7 +96,6 @@
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/legacy_multidex_aapt_derived_proguard_rules" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/legacy_multidex_main_dex_list" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_assets" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
@@ -114,103 +112,104 @@
     </content>
     <orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Gradle: com.android.support:design:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: __local_aars__:D.\Android\Project\Android-zxyun0511\Android-zxyun\app\libs\stickygridheaders.jar:unspecified@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.amap.api:search:6.9.0@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.facebook.fresco:fresco:1.3.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:support-fragment:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:localbroadcastmanager:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.facebook.fresco:animated-base:1.3.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: android.arch.lifecycle:viewmodel:1.1.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.airbnb.android:lottie:2.6.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:loader:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: cn.jiguang.sdk:jcore:1.2.6@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:localbroadcastmanager-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.facebook.fresco:drawee-1.3.0" level="project" />
+    <orderEntry type="library" name="Gradle: __local_aars__:E.\MyProject\Android_zxyun\app\libs\dewarp.jar:unspecified@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:interpolator-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:support-core-utils-28.0.0" level="project" />
     <orderEntry type="library" name="Gradle: com.amap.api:location:4.6.0@jar" level="project" />
-    <orderEntry type="library" name="Gradle: android.arch.core:runtime:1.1.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.facebook.fresco:imagepipeline-base:1.3.0@aar" level="project" />
     <orderEntry type="library" name="Gradle: com.squareup.retrofit2:retrofit:2.4.0@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.amap.api:3dmap:6.9.0@jar" level="project" />
-    <orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata-core:1.1.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:cursoradapter:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.lzy.net:okgo:2.1.4@aar" level="project" />
-    <orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime:1.1.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:support-compat:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:cardview-v7:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: __local_aars__:D.\Android\Project\Android-zxyun0511\Android-zxyun\app\libs\Core.jar:unspecified@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:drawerlayout-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:coordinatorlayout-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:cardview-v7-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.airbnb.android:lottie-2.6.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.wx.wheelview:wheelview-1.3.3" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:multidex-1.0.3" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-1.1.3" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:swiperefreshlayout-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.SheHuan:NiceImageView-1.0.3" level="project" />
     <orderEntry type="library" name="Gradle: com.github.bumptech.glide:annotations:4.8.0@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.facebook.fresco:drawee:1.3.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata-1.1.1" level="project" />
     <orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.14.0@jar" level="project" />
-    <orderEntry type="library" name="Gradle: __local_aars__:D.\Android\Project\Android-zxyun0511\Android-zxyun\app\libs\LibFunSDK.jar:unspecified@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:exifinterface-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:versionedparcelable-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.flyco.dialog:FlycoDialog_Lib-1.3.2" level="project" />
+    <orderEntry type="library" name="Gradle: android.arch.core:runtime-1.1.1" level="project" />
+    <orderEntry type="library" name="Gradle: com.contrarywind:Android-PickerView-4.1.6" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: com.android.support:multidex-instrumentation-1.0.2" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:loader-28.0.0" level="project" />
     <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxjava:2.1.0@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:support-core-utils:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:recyclerview-v7:28.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:support-v4-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.CymChad:BaseRecyclerViewAdapterHelper-2.9.46" level="project" />
     <orderEntry type="library" name="Gradle: com.squareup.retrofit2:converter-gson:2.4.0@jar" level="project" />
-    <orderEntry type="library" name="Gradle: __local_aars__:D.\Android\Project\Android-zxyun0511\Android-zxyun\app\libs\commons-lang3-3.1.jar:unspecified@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:gifdecoder-4.8.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:viewpager-28.0.0" level="project" />
     <orderEntry type="library" name="Gradle: com.tencent.mm.opensdk:wechat-sdk-android-with-mta:5.4.0@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:support-annotations:28.0.0@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.jakewharton:butterknife:8.8.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:interpolator:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.wx.wheelview:wheelview:1.3.3@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:transition:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata:1.1.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:drawerlayout:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:support-v4:28.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: __local_aars__:E.\MyProject\Android_zxyun\app\libs\commons-lang3-3.1.jar:unspecified@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.lzy.net:okgo-2.1.4" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-solver:1.1.3@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:gifdecoder:4.8.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.mylhyl:acp:1.2.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:glide:4.8.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:documentfile:28.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.facebook.fresco:animated-base-1.3.0" level="project" />
+    <orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime-1.1.1" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.PhilJay:MPAndroidChart-v3.1.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:customview-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.jakewharton:butterknife-8.8.1" level="project" />
+    <orderEntry type="library" name="Gradle: cn.jiguang.sdk:jcore-1.2.6" level="project" />
+    <orderEntry type="library" name="Gradle: com.facebook.fresco:fbcore-1.3.0" level="project" />
     <orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.5@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:slidingpanelayout:28.0.0@aar" level="project" />
     <orderEntry type="library" name="Gradle: com.parse.bolts:bolts-tasks:1.4.0@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:appcompat-v7:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:exifinterface:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.facebook.fresco:fbcore:1.3.0@aar" level="project" />
-    <orderEntry type="library" scope="TEST" name="Gradle: com.android.support:multidex-instrumentation:1.0.2@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.scwang.smartrefresh:SmartRefreshLayout-1.1.0-alpha-14" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:support-core-ui-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:slidingpanelayout-28.0.0" level="project" />
     <orderEntry type="library" name="Gradle: org.reactivestreams:reactive-streams:1.0.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: android.arch.lifecycle:viewmodel-1.1.1" level="project" />
     <orderEntry type="library" name="Gradle: com.jakewharton:butterknife-annotations:8.8.1@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:glide-4.8.0" level="project" />
+    <orderEntry type="library" name="Gradle: __local_aars__:E.\MyProject\Android_zxyun\app\libs\Core.jar:unspecified@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.facebook.fresco:fresco-1.3.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.contrarywind:wheelview-4.0.8" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:collections:28.0.0@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.github.SheHuan:NiceImageView:1.0.3@aar" level="project" />
-    <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxandroid:2.0.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:support-core-ui:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:asynclayoutinflater:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.github.orhanobut:hawk:1.21@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout:1.1.3@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:print:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: top.zibin:Luban:1.1.8@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.yalantis:ucrop-2.2.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.orhanobut:hawk-1.21" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:documentfile-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.mylhyl:acp-1.2.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:design-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:recyclerview-v7-28.0.0" level="project" />
     <orderEntry type="library" name="Gradle: com.nostra13.universalimageloader:universal-image-loader:1.9.5@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.contrarywind:wheelview:4.0.8@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:cursoradapter-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:asynclayoutinflater-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.facebook.fresco:animated-gif-1.3.0" level="project" />
+    <orderEntry type="library" name="Gradle: __local_aars__:E.\MyProject\Android_zxyun\app\libs\LibFunSDK.jar:unspecified@jar" level="project" />
+    <orderEntry type="library" name="Gradle: __local_aars__:E.\MyProject\Android_zxyun\app\libs\stickygridheaders.jar:unspecified@jar" level="project" />
+    <orderEntry type="library" name="Gradle: top.zibin:Luban-1.1.8" level="project" />
     <orderEntry type="library" name="Gradle: android.arch.core:common:1.1.1@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:versionedparcelable:28.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxandroid-2.0.1" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:support-media-compat-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.facebook.fresco:imagepipeline-base-1.3.0" level="project" />
     <orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />
     <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
     <orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.0.0@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.contrarywind:Android-PickerView:4.1.6@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:viewpager:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.facebook.fresco:imagepipeline:1.3.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:print-28.0.0" level="project" />
     <orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.10.0@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.squareup.picasso:picasso:2.5.2@jar" level="project" />
+    <orderEntry type="library" name="Gradle: __local_aars__:E.\MyProject\Android_zxyun\app\libs\fastjson-1.2.8.jar:unspecified@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:transition-28.0.0" level="project" />
     <orderEntry type="library" name="Gradle: org.greenrobot:eventbus:3.1.1@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:support-fragment-28.0.0" level="project" />
     <orderEntry type="library" name="Gradle: com.github.bumptech.glide:disklrucache:4.8.0@jar" level="project" />
     <orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.1.1@jar" level="project" />
-    <orderEntry type="library" name="Gradle: cn.jiguang.sdk:jpush:3.1.7@aar" level="project" />
-    <orderEntry type="library" name="Gradle: __local_aars__:D.\Android\Project\Android-zxyun0511\Android-zxyun\app\libs\fastjson-1.2.8.jar:unspecified@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:coordinatorlayout:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:customview:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.flyco.dialog:FlycoDialog_Lib:1.3.2@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:swiperefreshlayout:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:multidex:1.0.3@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.github.PhilJay:MPAndroidChart:v3.1.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.facebook.fresco:animated-gif:1.3.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.yalantis:ucrop:2.2.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: __local_aars__:D.\Android\Project\Android-zxyun0511\Android-zxyun\app\libs\dewarp.jar:unspecified@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:support-media-compat:28.0.0@aar" level="project" />
-    <orderEntry type="module" module-name="photolibrary" />
+    <orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata-core-1.1.1" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:support-compat-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: cn.jiguang.sdk:jpush-3.1.7" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.android.support:appcompat-v7-28.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.facebook.fresco:imagepipeline-1.3.0" level="project" />
+    <orderEntry type="module" module-name="esptouch" />
     <orderEntry type="module" module-name="nicevideoplayer" />
+    <orderEntry type="module" module-name="photolibrary" />
     <orderEntry type="library" name="Gradle: org.apache.http.legacy-android-28" level="project" />
   </component>
 </module>

+ 1 - 17
app/build.gradle

@@ -90,64 +90,48 @@ dependencies {
     implementation 'com.squareup.retrofit2:retrofit:2.4.0'
     implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
     implementation 'com.lzy.net:okgo:2.1.4'
-
     //注解框架
     implementation 'com.jakewharton:butterknife:8.8.1'
     annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
     implementation 'com.android.support.constraint:constraint-layout:1.1.3'
-
     //高德地图
     implementation 'com.amap.api:3dmap:latest.integration'
     //高德定位
     implementation 'com.amap.api:location:latest.integration'
     //高德搜索
     implementation 'com.amap.api:search:latest.integration'
-
     //微信SDK
     implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
-
     //图片加载
     implementation 'com.github.bumptech.glide:glide:4.8.0'
-
     //极光推送
     implementation 'cn.jiguang.sdk:jpush:3.1.7'
     implementation 'cn.jiguang.sdk:jcore:1.2.6'
-
     //hawk
     implementation 'com.github.orhanobut:hawk:1.21'
-
     //下拉刷新库
     implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'
-
     //权限申请
     implementation 'com.mylhyl:acp:1.2.0'
-
     //adapter
     implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46'
-
     //圆角图片
     implementation 'com.github.SheHuan:NiceImageView:1.0.3'
-
     implementation project(path: ':photolibrary')
     //鲁班压缩
     implementation 'top.zibin:Luban:1.1.8'
-
     //滚轮选择器
     implementation 'com.wx.wheelview:wheelview:1.3.3'
-
     //曲线图
     implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
-
     //eventbus
     implementation 'org.greenrobot:eventbus:3.1.1'
-
     //时间选择器
     implementation 'com.contrarywind:Android-PickerView:4.1.6'
-
     //loading
     implementation 'com.flyco.dialog:FlycoDialog_Lib:1.3.2@aar'
     implementation 'com.airbnb.android:lottie:2.6.0'
-
     implementation project(':nicevideoplayer')
     implementation files('libs/commons-lang3-3.1.jar')
+    implementation project(':esptouch')
 }

BIN
app/libs/armeabi/libavutil-54.so


BIN
app/libs/armeabi/libjcore127.so


BIN
app/libs/armeabi/libswresample-3.so


+ 11 - 3
app/src/main/AndroidManifest.xml

@@ -53,7 +53,7 @@
     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
 
     <application
-        android:name=".App"
+        android:name=".MyApplication"
         android:icon="@mipmap/logo1"
         android:label="@string/app_name"
         android:supportsRtl="true"
@@ -83,7 +83,14 @@
         <activity android:name=".activity.device.activity.camera.ActivityGuideDeviceListLan" />
         <!-- com.silence.hshzl.example.ActivityGuideDeviceList -->
 
+        <!--摄像头播放视频界面 -->
         <activity android:name=".activity.device.activity.camera.ActivityGuideDeviceCamera" />
+        <!--新摄像头播放视频界面 -->
+        <activity android:name=".activity.device.activity.camera.NewCameraPlayActivity"/>
+        <!--播视频 -->
+        <activity android:name=".activity.device.activity.camera.FullPlayVideoActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden" />
+
         <activity android:name=".activity.device.activity.camera.ActivityGuideDeviceWifiConfig" />
         <!-- <activity android:name="com.silence.hshzl.example.ActivityGuideDeviceList"></activity> -->
 
@@ -332,8 +339,9 @@
             android:screenOrientation="portrait" />
         <!-- 企业版监控异常界面 -->
         <activity android:name="com.silence.tech.ui.moni.activity.MoniTroubleActivity"
-            android:screenOrientation="portrait"
-            ></activity>
+            android:screenOrientation="portrait" />
+
+        <activity android:name="com.silence.commonframe.activity.EsptouchDemoActivity"/>
     </application>
 
 </manifest>

+ 1 - 2
app/src/main/java/com/silence/commonframe/ApiService.java

@@ -3,9 +3,8 @@ package com.silence.commonframe;
 public interface ApiService {
     String httpUrl   = "https://www.hsh-iot.com/YunGanKeJi/";
 
-//   String httpUrl1   = "https://www.hsh-iot.com/test/hsh_app";
-
     String httpUrl1   =   "https://www.hsh-iot.com/test/hsh_app";
+ //  String httpUrl1   =   "https://www.hsh-iot.com/hsh_app";
   //    String httpUrl1   =   " http://192.168.1.112:8080/";
     /**视频http地址*/
     //String httpVideoUrl="http://47.100.29.244:8082/";

+ 38 - 0
app/src/main/java/com/silence/commonframe/Dialog/BaseDialog.java

@@ -9,6 +9,7 @@ import com.silence.commonframe.R;
 
 public class BaseDialog {
     DialogCallBack dialogCallBack;
+    DialogVideoCallBack dialogVideoCallBack;
     //通用base dialog
     public void BaseDialog(Context mContext,String title,String message,String LeftBtn,String RightBtn,DialogCallBack dialogCallBack){
         this.dialogCallBack=dialogCallBack;
@@ -43,8 +44,45 @@ public class BaseDialog {
                 })
                 .show();
     }
+    public void BaseDialog(Context mContext,String title,String message,String LeftBtn,String RightBtn,DialogVideoCallBack dialogCallBack,String path){
+        this.dialogVideoCallBack=dialogCallBack;
+        final FWorkDialogBuilder dialogBuilder = FWorkDialogBuilder.getInstance(mContext);
+        dialogBuilder
+                .withTitle(title)                                  //.withTitle(null)  no title
+                .withTitleColor("#000000")
+                .withDividerColor("#cccccc")                              //def
+                .withMessage(message)            //.withMessage(null)  no Msg
+                .withMessageColor("#444444")                              //def  | withMessageColor(int resid)
+                .withDialogColor("#FFFFFFFF")                               //def  | withDialogColor(int resid)                               //def
+                .isCancelableOnTouchOutside(false)                           //def    | isCancelable(true)
+                .withDuration(500)                                          //def
+                .withEffect(Effectstype.SlideBottom)                                         //def Effectstype.Slidetop
+                .withButtonDrawableBtn1(R.drawable.bg_corner_blue)
+                .withButtonDrawableBtn2(R.drawable.bg_corner_blue)
+                .withButton1Text(LeftBtn)//def gone
+                .withButton2Text(RightBtn)
+                .setButton1Click(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        dialogVideoCallBack.leftBtn();
+                        dialogBuilder.dismiss();
+                    }
+                })
+                .setButton2Click(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        dialogVideoCallBack.rightBtn(path);
+                        dialogBuilder.dismiss();
+                    }
+                })
+                .show();
+    }
    public interface DialogCallBack{
         void leftBtn();
         void rightBtn();
    }
+    public interface DialogVideoCallBack{
+        void leftBtn();
+        void rightBtn(String path);
+    }
 }

+ 3 - 3
app/src/main/java/com/silence/commonframe/App.java

@@ -28,10 +28,10 @@ import cn.jpush.android.api.JPushInterface;
 
 //import download.XDownloadFileManager;
 
-public class App extends MultiDexApplication {
+public class MyApplication extends MultiDexApplication {
    public static Map<String, Object> map;
 
-    private static App sInstance;
+    private static MyApplication sInstance;
 
 
     //AppID
@@ -153,7 +153,7 @@ public class App extends MultiDexApplication {
         FunSupport.getInstance().term();
     }
 
-    public static App getInstance() {
+    public static MyApplication getInstance() {
         return sInstance;
     }
 }

+ 451 - 0
app/src/main/java/com/silence/commonframe/activity/EsptouchDemoActivity.java

@@ -0,0 +1,451 @@
+package com.silence.commonframe.activity;
+
+import android.Manifest;
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnCancelListener;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.location.LocationManager;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.os.AsyncTask;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.RadioGroup;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.espressif.iot.esptouch.EsptouchTask;
+import com.espressif.iot.esptouch.IEsptouchListener;
+import com.espressif.iot.esptouch.IEsptouchResult;
+import com.espressif.iot.esptouch.IEsptouchTask;
+import com.espressif.iot.esptouch.task.__IEsptouchTask;
+import com.espressif.iot.esptouch.util.ByteUtil;
+import com.espressif.iot.esptouch.util.TouchNetUtil;
+import com.silence.commonframe.R;
+import com.silence.commonframe.base.basemvp.BaseActivity;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.List;
+
+public class EsptouchDemoActivity extends BaseActivity implements OnClickListener {
+    private static final String TAG = "EsptouchDemoActivity";
+
+    private static final int REQUEST_PERMISSION = 0x01;
+
+    private static final int MENU_ITEM_ABOUT = 0;
+
+    private TextView mApSsidTV;
+    private TextView mApBssidTV;
+    private EditText mApPasswordET;
+    private EditText mDeviceCountET;
+    private RadioGroup mPackageModeGroup;
+    private TextView mMessageTV;
+    private Button mConfirmBtn;
+
+    private IEsptouchListener myListener = new IEsptouchListener() {
+
+        @Override
+        public void onEsptouchResultAdded(final IEsptouchResult result) {
+            onEsptoucResultAddedPerform(result);
+        }
+    };
+
+    private EsptouchAsyncTask4 mTask;
+
+    private boolean mReceiverRegistered = false;
+    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (action == null) {
+                return;
+            }
+
+            WifiManager wifiManager = (WifiManager) context.getApplicationContext()
+                    .getSystemService(WIFI_SERVICE);
+            assert wifiManager != null;
+
+            switch (action) {
+                case WifiManager.NETWORK_STATE_CHANGED_ACTION:
+                    WifiInfo wifiInfo;
+                    if (intent.hasExtra(WifiManager.EXTRA_WIFI_INFO)) {
+                        wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
+                    } else {
+                        wifiInfo = wifiManager.getConnectionInfo(); //已连接wifi信息
+                    }
+                    onWifiChanged(wifiInfo);
+                    break;
+                case LocationManager.PROVIDERS_CHANGED_ACTION:
+                    onWifiChanged(wifiManager.getConnectionInfo());
+                    break;
+            }
+        }
+    };
+
+    private boolean mDestroyed = false;
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.esptouch_demo_activity;
+    }
+
+    @Override
+    public void initPresenter() {
+        setTitle(this,"Wifi配网","",true);
+    }
+
+    @Override
+    public void initView() {
+        mApSsidTV = findViewById(R.id.ap_ssid_text);
+        mApBssidTV = findViewById(R.id.ap_bssid_text);
+        mApPasswordET = findViewById(R.id.ap_password_edit);
+        mDeviceCountET = findViewById(R.id.device_count_edit);
+        mDeviceCountET.setText("1");
+        mPackageModeGroup = findViewById(R.id.package_mode_group);
+        mMessageTV = findViewById(R.id.message);
+        mConfirmBtn = findViewById(R.id.confirm_btn);
+        mConfirmBtn.setEnabled(false);
+        mConfirmBtn.setOnClickListener(this);
+
+        if (isSDKAtLeastP()) {
+            if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION)
+                    != PackageManager.PERMISSION_GRANTED) {
+                String[] permissions = {
+                        Manifest.permission.ACCESS_COARSE_LOCATION
+                };
+
+                requestPermissions(permissions, REQUEST_PERMISSION);
+            } else {
+                registerBroadcastReceiver();
+            }
+
+        } else {
+            registerBroadcastReceiver();
+        }
+    }
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+
+        switch (requestCode) {
+            case REQUEST_PERMISSION:
+                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    if (!mDestroyed) {
+                        registerBroadcastReceiver();
+                    }
+                }
+                break;
+        }
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+
+        mDestroyed = true;
+        if (mReceiverRegistered) {
+            unregisterReceiver(mReceiver);
+        }
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+       menu.add(Menu.NONE, MENU_ITEM_ABOUT, 0, R.string.menu_item_about)
+                .setIcon(R.drawable.ic_info_outline_white_24dp)
+                .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+        return super.onCreateOptionsMenu(menu);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case MENU_ITEM_ABOUT:
+                showAboutDialog();
+                return true;
+        }
+
+        return super.onOptionsItemSelected(item);
+    }
+
+    private void showAboutDialog() {
+        String esptouchVer = IEsptouchTask.ESPTOUCH_VERSION;
+        String appVer = "";
+        PackageManager packageManager = getPackageManager();
+        try {
+            PackageInfo info = packageManager.getPackageInfo(getPackageName(), 0);
+            appVer = info.versionName;
+        } catch (PackageManager.NameNotFoundException e) {
+            e.printStackTrace();
+        }
+
+        CharSequence[] items = new CharSequence[] {
+                getString(R.string.about_app_version, appVer),
+                getString(R.string.about_esptouch_version, esptouchVer),
+        };
+        new AlertDialog.Builder(this)
+                .setTitle(R.string.menu_item_about)
+                .setIcon(R.drawable.ic_info_outline_black_24dp)
+                .setItems(items, null)
+                .show();
+    }
+
+    private boolean isSDKAtLeastP() {
+        return Build.VERSION.SDK_INT >= 28;
+    }
+
+    private void registerBroadcastReceiver() {
+        IntentFilter filter = new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+        if (isSDKAtLeastP()) {
+            filter.addAction(LocationManager.PROVIDERS_CHANGED_ACTION);
+        }
+        registerReceiver(mReceiver, filter);
+        mReceiverRegistered = true;
+    }
+
+    private void onWifiChanged(WifiInfo info) {
+        boolean disconnected = info == null
+                || info.getNetworkId() == -1
+                || "<unknown ssid>".equals(info.getSSID());
+        if (disconnected) {
+            mApSsidTV.setText("");
+            mApSsidTV.setTag(null);
+            mApBssidTV.setText("");
+            mMessageTV.setText(R.string.no_wifi_connection);
+            mConfirmBtn.setEnabled(false);
+
+            if (isSDKAtLeastP()) {
+                checkLocation();
+            }
+
+            if (mTask != null) {
+                mTask.cancelEsptouch();
+                mTask = null;
+                new AlertDialog.Builder(EsptouchDemoActivity.this)
+                        .setMessage(R.string.configure_wifi_change_message)
+                        .setNegativeButton(android.R.string.cancel, null)
+                        .show();
+            }
+        } else {
+            String ssid = info.getSSID();
+            if (ssid.startsWith("\"") && ssid.endsWith("\"")) {
+                ssid = ssid.substring(1, ssid.length() - 1);
+            }
+            mApSsidTV.setText(ssid);
+            mApSsidTV.setTag(ByteUtil.getBytesByString(ssid));
+            byte[] ssidOriginalData = TouchNetUtil.getOriginalSsidBytes(info);
+            mApSsidTV.setTag(ssidOriginalData);
+
+            String bssid = info.getBSSID();
+            mApBssidTV.setText(bssid);
+
+            mConfirmBtn.setEnabled(true);
+            mMessageTV.setText("");
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                int frequency = info.getFrequency();
+                if (frequency > 4900 && frequency < 5900) {
+                    // Connected 5G wifi. Device does not support 5G
+                    mMessageTV.setText(R.string.wifi_5g_message);
+                }
+            }
+        }
+    }
+
+    private void checkLocation() {
+        boolean enable;
+        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
+        if (locationManager == null) {
+            enable = false;
+        } else {
+            boolean locationGPS = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
+            boolean locationNetwork = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
+            enable = locationGPS || locationNetwork;
+        }
+
+        if (!enable) {
+            mMessageTV.setText(R.string.location_disable_message);
+        }
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v == mConfirmBtn) {
+            byte[] ssid = mApSsidTV.getTag() == null ? ByteUtil.getBytesByString(mApSsidTV.getText().toString())
+                    : (byte[]) mApSsidTV.getTag();
+            byte[] password = ByteUtil.getBytesByString(mApPasswordET.getText().toString());
+            byte [] bssid = TouchNetUtil.parseBssid2bytes(mApBssidTV.getText().toString());
+            byte[] deviceCount = mDeviceCountET.getText().toString().getBytes();
+            byte[] broadcast = {(byte) (mPackageModeGroup.getCheckedRadioButtonId() == R.id.package_broadcast
+                    ? 1 : 0)};
+
+            if(mTask != null) {
+                mTask.cancelEsptouch();
+            }
+            mTask = new EsptouchAsyncTask4(this);
+            mTask.execute(ssid, bssid, password, deviceCount, broadcast);
+        }
+    }
+
+    private void onEsptoucResultAddedPerform(final IEsptouchResult result) {
+        runOnUiThread(new Runnable() {
+
+            @Override
+            public void run() {
+                String text = result.getBssid() + " is connected to the wifi";
+                Toast.makeText(EsptouchDemoActivity.this, text,
+                        Toast.LENGTH_SHORT).show();
+            }
+
+        });
+    }
+
+    private static class EsptouchAsyncTask4 extends AsyncTask<byte[], Void, List<IEsptouchResult>> {
+        private WeakReference<EsptouchDemoActivity> mActivity;
+
+        // without the lock, if the user tap confirm and cancel quickly enough,
+        // the bug will arise. the reason is follows:
+        // 0. task is starting created, but not finished
+        // 1. the task is cancel for the task hasn't been created, it do nothing
+        // 2. task is created
+        // 3. Oops, the task should be cancelled, but it is running
+        private final Object mLock = new Object();
+        private ProgressDialog mProgressDialog;
+        private AlertDialog mResultDialog;
+        private IEsptouchTask mEsptouchTask;
+
+        EsptouchAsyncTask4(EsptouchDemoActivity activity) {
+            mActivity = new WeakReference<>(activity);
+        }
+
+        void cancelEsptouch() {
+            cancel(true);
+            if (mProgressDialog != null) {
+                mProgressDialog.dismiss();
+            }
+            if (mResultDialog != null) {
+                mResultDialog.dismiss();
+            }
+            if (mEsptouchTask != null) {
+                mEsptouchTask.interrupt();
+            }
+        }
+
+        @Override
+        protected void onPreExecute() {
+            Activity activity = mActivity.get();
+            mProgressDialog = new ProgressDialog(activity);
+            mProgressDialog.setMessage(activity.getString(R.string.configuring_message));
+            mProgressDialog.setCanceledOnTouchOutside(false);
+            mProgressDialog.setOnCancelListener(new OnCancelListener() {
+                @Override
+                public void onCancel(DialogInterface dialog) {
+                    synchronized (mLock) {
+                        if (__IEsptouchTask.DEBUG) {
+                            Log.i(TAG, "progress dialog back pressed canceled");
+                        }
+                        if (mEsptouchTask != null) {
+                            mEsptouchTask.interrupt();
+                        }
+                    }
+                }
+            });
+            mProgressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, activity.getText(android.R.string.cancel),
+                    new DialogInterface.OnClickListener() {
+                        @Override
+                        public void onClick(DialogInterface dialog, int which) {
+                            synchronized (mLock) {
+                                if (__IEsptouchTask.DEBUG) {
+                                    Log.i(TAG, "progress dialog cancel button canceled");
+                                }
+                                if (mEsptouchTask != null) {
+                                    mEsptouchTask.interrupt();
+                                }
+                            }
+                        }
+                    });
+            mProgressDialog.show();
+        }
+
+        @Override
+        protected List<IEsptouchResult> doInBackground(byte[]... params) {
+            EsptouchDemoActivity activity = mActivity.get();
+            int taskResultCount;
+            synchronized (mLock) {
+                byte[] apSsid = params[0];
+                byte[] apBssid = params[1];
+                byte[] apPassword = params[2];
+                byte[] deviceCountData = params[3];
+                byte[] broadcastData = params[4];
+                taskResultCount = deviceCountData.length == 0 ? -1 : Integer.parseInt(new String(deviceCountData));
+                Context context = activity.getApplicationContext();
+                mEsptouchTask = new EsptouchTask(apSsid, apBssid, apPassword, context);
+                mEsptouchTask.setPackageBroadcast(broadcastData[0] == 1);
+                mEsptouchTask.setEsptouchListener(activity.myListener);
+            }
+            return mEsptouchTask.executeForResults(taskResultCount);
+        }
+
+        @Override
+        protected void onPostExecute(List<IEsptouchResult> result) {
+            EsptouchDemoActivity activity = mActivity.get();
+            mProgressDialog.dismiss();
+            if (result == null) {
+                mResultDialog = new AlertDialog.Builder(activity)
+                        .setMessage(R.string.configure_result_failed_port)
+                        .setPositiveButton(android.R.string.ok, null)
+                        .show();
+                mResultDialog.setCanceledOnTouchOutside(false);
+                return;
+            }
+
+            IEsptouchResult firstResult = result.get(0);
+            // check whether the task is cancelled and no results received
+            if (!firstResult.isCancelled()) {
+                // the task received some results including cancelled while
+                // executing before receiving enough results
+                if (firstResult.isSuc()) {
+                    ArrayList<CharSequence> resultMsgList = new ArrayList<>(result.size());
+                    for (IEsptouchResult touchResult : result) {
+                        String message = activity.getString(R.string.configure_result_success_item,
+                                touchResult.getBssid(), touchResult.getInetAddress().getHostAddress());
+                        resultMsgList.add(message);
+                    }
+
+                    CharSequence[] items = new CharSequence[resultMsgList.size()];
+                    mResultDialog = new AlertDialog.Builder(activity)
+                            .setTitle(R.string.configure_result_success)
+                            .setItems(resultMsgList.toArray(items), null)
+                            .setPositiveButton(android.R.string.ok, null)
+                            .show();
+                    mResultDialog.setCanceledOnTouchOutside(false);
+                } else {
+                    mResultDialog = new AlertDialog.Builder(activity)
+                            .setMessage(R.string.configure_result_failed)
+                            .setPositiveButton(android.R.string.ok, null)
+                            .show();
+                    mResultDialog.setCanceledOnTouchOutside(false);
+                }
+            }
+
+            activity.mTask = null;
+        }
+    }
+}

+ 7 - 1
app/src/main/java/com/silence/commonframe/activity/MainActivity.java

@@ -14,6 +14,7 @@ import android.view.View;
 import android.widget.Button;
 
 import com.orhanobut.hawk.Hawk;
+import com.silence.commonframe.MyApplication;
 import com.silence.commonframe.Dialog.BaseDialog;
 import com.silence.commonframe.Dialog.CDialog;
 import com.silence.commonframe.R;
@@ -313,5 +314,10 @@ public class MainActivity extends BaseActivity implements OnFunLoginListener {
     public void onLogout() {
 
     }
-
+    @Override
+    protected void onDestroy() {
+        FunSupport.getInstance().removeOnFunLoginListener(this);
+        ((MyApplication)getApplication()).exit();
+        super.onDestroy();
+    }
 }

+ 2 - 0
app/src/main/java/com/silence/commonframe/activity/device/activity/NewDeviceFragment.java

@@ -19,6 +19,7 @@ import com.silence.commonframe.Dialog.BaseDialog;
 import com.silence.commonframe.R;
 import com.silence.commonframe.activity.MainActivity;
 import com.silence.commonframe.activity.device.activity.airguard.AirGuardActivity;
+import com.silence.commonframe.activity.device.activity.camera.NewCameraPlayActivity;
 import com.silence.commonframe.activity.home.activity.CommonScanActivity;
 import com.silence.commonframe.adapter.device.DeviceListAdapter;
 import com.silence.commonframe.adapter.device.DeviceTitleAdapter;
@@ -403,6 +404,7 @@ public class NewDeviceFragment extends BaseFragment implements NewDeviceListener
             startActivity(intent);
         }else if (listDeviceTypeTitle.get(1).getIsClick()){ //设备标题为摄像头
             presenter.getCameraId(deviceListData.get(position).getDeviceId());
+        //    startActivity(new Intent().putExtra("deviceId",deviceListData.get(position).getDeviceId()).setClass(getActivity(),NewCameraPlayActivity.class));
         }else if (listDeviceTypeTitle.get(2).getIsClick()){ //设备标题为空气卫士
             startActivity(new Intent().putExtra("airDevId",deviceListData.get(position).getDeviceId()).setClass(getActivity(),AirGuardActivity.class));
         }

+ 58 - 0
app/src/main/java/com/silence/commonframe/activity/device/activity/camera/FullPlayVideoActivity.java

@@ -0,0 +1,58 @@
+package com.silence.commonframe.activity.device.activity.camera;
+
+import android.os.Bundle;
+
+import com.bumptech.glide.Glide;
+import com.silence.commonframe.R;
+import com.silence.commonframe.activity.message.activity.NewsdetailActivityShow;
+import com.silence.commonframe.base.basemvp.BaseActivity;
+import com.xiao.nicevideoplayer.NiceVideoPlayer;
+import com.xiao.nicevideoplayer.NiceVideoPlayerController;
+import com.xiao.nicevideoplayer.NiceVideoPlayerManager;
+import com.xiao.nicevideoplayer.TxVideoPlayerController;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+public class FullPlayVideoActivity extends BaseActivity {
+    @BindView(R.id.nvp_video)
+    NiceVideoPlayer nvpVideo;
+    String videoPath="";
+    NiceVideoPlayerController controller;
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.activity_full_paly;
+    }
+
+    @Override
+    public void initPresenter() {
+
+    }
+
+    @Override
+    public void initView() {
+        setTitle(this,"播放视频","",true);
+        videoPath=getIntent().getStringExtra("videoPath");
+        controller = new TxVideoPlayerController(this);
+        nvpVideo.setPlayerType(NiceVideoPlayer.TYPE_IJK);
+        nvpVideo.setUp(videoPath, null);
+        controller.setTitle("视频播放");
+        nvpVideo.setController(controller);
+    }
+    @Override
+    protected void onStop() {
+        super.onStop();
+        NiceVideoPlayerManager.instance().releaseNiceVideoPlayer();
+    }
+    @Override
+    public void onBackPressed() {
+        if (NiceVideoPlayerManager.instance().onBackPressd()) return;
+        super.onBackPressed();
+    }
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+    }
+
+}

+ 17 - 0
app/src/main/java/com/silence/commonframe/activity/device/activity/camera/Interface/NewCameraPlayListener.java

@@ -0,0 +1,17 @@
+package com.silence.commonframe.activity.device.activity.camera.Interface;
+
+import com.silence.commonframe.base.basemvp.BaseModel;
+import com.silence.commonframe.base.basemvp.BasePresenter;
+import com.silence.commonframe.bean.CameraDetailBean;
+
+public interface NewCameraPlayListener {
+    interface View{
+        String getDeviceId();
+
+        void onCameraSuccess(CameraDetailBean bean);
+        void onFile(String msg);
+    }
+    abstract class Presenter extends BasePresenter<View, BaseModel>{
+        public abstract void getCameraDetail();
+    }
+}

+ 496 - 0
app/src/main/java/com/silence/commonframe/activity/device/activity/camera/NewCameraPlayActivity.java

@@ -0,0 +1,496 @@
+package com.silence.commonframe.activity.device.activity.camera;
+
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.media.MediaPlayer;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.provider.ContactsContract;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.lib.EPTZCMD;
+import com.lib.FunSDK;
+import com.silence.commonframe.Dialog.BaseDialog;
+import com.silence.commonframe.Dialog.CDialog;
+import com.silence.commonframe.R;
+import com.silence.commonframe.activity.MainActivity;
+import com.silence.commonframe.activity.device.activity.camera.Interface.NewCameraPlayListener;
+import com.silence.commonframe.activity.device.activity.camera.presenter.NewCameraPlayPresenter;
+import com.silence.commonframe.activity.mine.activity.CoustomerActivity;
+import com.silence.commonframe.activity.mine.activity.HistoryActivity;
+import com.silence.commonframe.activity.mine.activity.NewSiteDetailActivity;
+import com.silence.commonframe.activity.mine.activity.QuesstionActivity;
+import com.silence.commonframe.base.basemvp.BaseActivity;
+import com.silence.commonframe.base.basemvp.TitleBar;
+import com.silence.commonframe.bean.CameraDetailBean;
+import com.silence.commonframe.lib.funsdk.support.FunDevicePassword;
+import com.silence.commonframe.lib.funsdk.support.FunLog;
+import com.silence.commonframe.lib.funsdk.support.FunPath;
+import com.silence.commonframe.lib.funsdk.support.FunSupport;
+import com.silence.commonframe.lib.funsdk.support.OnFunDeviceListener;
+import com.silence.commonframe.lib.funsdk.support.models.FunDevStatus;
+import com.silence.commonframe.lib.funsdk.support.models.FunDevType;
+import com.silence.commonframe.lib.funsdk.support.models.FunDevice;
+import com.silence.commonframe.lib.funsdk.support.models.FunLoginType;
+import com.silence.commonframe.lib.funsdk.support.models.FunStreamType;
+import com.silence.commonframe.lib.funsdk.support.utils.FileUtils;
+import com.silence.commonframe.lib.funsdk.support.widget.FunVideoView;
+import com.silence.commonframe.utils1.DeviceActivitys;
+import com.silence.commonframe.utils1.GoSystemSetting;
+
+import java.io.File;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+import butterknife.OnTouch;
+
+public class NewCameraPlayActivity extends BaseActivity implements NewCameraPlayListener.View,
+        OnFunDeviceListener,MediaPlayer.OnInfoListener {
+    @BindView(R.id.base_title_bar)
+    TitleBar baseTitleBar;
+    @BindView(R.id.img_btn_right)
+    ImageButton imgBtnRight;
+    @BindView(R.id.img_btn_left)
+    ImageButton imgBtnLeft;
+    @BindView(R.id.img_btn_down)
+    ImageButton imgBtnDown;
+    @BindView(R.id.img_btn_top)
+    ImageButton imgBtnTop;
+    @BindView(R.id.rl_keyboard)
+    RelativeLayout rlKeyboard;
+    @BindView(R.id.funVideoView)
+    FunVideoView funVideoView;
+    @BindView(R.id.tv_start_video)
+    TextView tvStartVideo;
+    @BindView(R.id.ll_recording)
+    LinearLayout llRecording;
+    @BindView(R.id.btn_camera)
+    ImageButton btnCamera;
+    @BindView(R.id.textStreamStat)
+    TextView textStreamStat;
+    @BindView(R.id.iv_sound)
+    ImageView ivSound;
+    @BindView(R.id.iv_definition)
+    ImageView ivDefinition;
+    @BindView(R.id.iv_video)
+    ImageView ivVideo;
+    @BindView(R.id.iv_cut)
+    ImageView ivCut;
+    @BindView(R.id.iv_full_screen)
+    ImageView ivFullScreen;
+    @BindView(R.id.btnFishEyeInfo)
+    ImageView btnFishEyeInfo;
+    @BindView(R.id.layoutChannelBtn)
+    LinearLayout layoutChannelBtn;
+    @BindView(R.id.btn_quit_voice)
+    ImageButton btnQuitVoice;
+    @BindView(R.id.ll_talk)
+    RelativeLayout llTalk;
+    @BindView(R.id.ll_take_photo)
+    LinearLayout llTakePhoto;
+    @BindView(R.id.ll_foot)
+    LinearLayout llFoot;
+
+    BaseDialog baseDialog;
+    String deviceId="";
+    NewCameraPlayPresenter presenter;
+    FunDevice  mFunDevice = null;
+    String mCurrDevSn="";//序列号  uuid
+    private Boolean isSoundPlay = false;
+
+    private final int MESSAGE_PLAY_MEDIA = 0x100;
+    private final int MESSAGE_AUTO_HIDE_CONTROL_BAR = 0x102;
+    private final int MESSAGE_TOAST_SCREENSHOT_PREVIEW = 0x103;
+    private final int MESSAGE_OPEN_VOICE = 0x104;
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.activity_camera_detail_new;
+    }
+
+    @Override
+    public void initPresenter() {
+        presenter=new NewCameraPlayPresenter(this,this);
+    }
+
+    @Override
+    public void initView() {
+        clickTitle(this,"设备详情",R.drawable.setup,true).setRightClickListener(view -> {
+            Intent intent = new Intent(NewCameraPlayActivity.this, CameraSetupActivity.class);
+            intent.putExtra("deviceId", deviceId);
+            intent.putExtra("FUN_DEVICE_ID",mCurrDevSn);
+            startActivity(intent);
+        });
+        deviceId=getIntent().getStringExtra("deviceId");
+        presenter.getCameraDetail();
+
+        baseDialog=new BaseDialog();
+        // 设置登录方式为网络
+        FunSupport.getInstance().setLoginType(FunLoginType.LOGIN_BY_INTENTT);
+        // 监听设备类事件
+        FunSupport.getInstance().registerOnFunDeviceListener(this);
+
+        funVideoView.setOnInfoListener(this);
+    }
+    @OnClick({R.id.iv_sound,R.id.iv_definition,R.id.iv_video,R.id.iv_cut,R.id.iv_full_screen,R.id.ll_take_photo})
+    public void onClick(final View view) {
+        switch (view.getId()) {
+            case R.id.iv_sound:
+                //播放停止声音
+                if (isSoundPlay) {
+                    funVideoView.setMediaSound(false);            //关闭本地音频
+                    isSoundPlay = false;
+                    ivSound.setImageResource(R.mipmap.sound_close);
+                } else {
+                    funVideoView.setMediaSound(true);            //打开本地音频
+                    isSoundPlay = true;
+                    ivSound.setImageResource(R.mipmap.sound);
+                }
+                break;
+            case R.id.iv_definition:
+                //清晰度
+                switchMediaStream();
+                break;
+            case R.id.iv_video:
+
+                break;
+            case R.id.iv_cut:
+                tryToRecord();
+                break;
+            case R.id.iv_full_screen:
+
+                break;
+            case R.id.ll_take_photo:
+                tryToCapture();
+                break;
+        }
+    }
+    @OnTouch({R.id.img_btn_left,R.id.img_btn_right,R.id.img_btn_down,R.id.img_btn_top})
+    public boolean onTouch(View v, MotionEvent event) {
+        boolean bstop = true;
+        int nPTZCommand = -1;
+        switch (event.getAction()) {
+            case MotionEvent.ACTION_DOWN: //手指按下
+                bstop = false;
+                nPTZCommand=clickWhichKeyboard(nPTZCommand,v);
+                break;
+            case MotionEvent.ACTION_MOVE: //手指移动(从手指按下到抬起 move多次执行)
+                nPTZCommand=clickWhichKeyboard(nPTZCommand,v);
+                bstop = Math.abs(event.getX()) > v.getWidth()
+                        || Math.abs(event.getY()) > v.getHeight();
+                break;
+            case MotionEvent.ACTION_UP: //手指抬起
+                bstop = true;
+                nPTZCommand=clickWhichKeyboard(nPTZCommand,v);
+                break;
+        }
+        onContrlPTZ1(nPTZCommand, bstop);
+        return false;
+    }
+    private int clickWhichKeyboard(int nPTZCommand,View v){
+        if (v.getId()==R.id.img_btn_right){
+            nPTZCommand = EPTZCMD.PAN_LEFT;
+        }else if (v.getId()==R.id.img_btn_left){
+            nPTZCommand = EPTZCMD.PAN_RIGHT;
+        }else if (v.getId()==R.id.img_btn_down){
+            nPTZCommand = EPTZCMD.TILT_DOWN;
+        }else if (v.getId()==R.id.img_btn_top){
+            nPTZCommand = EPTZCMD.TILT_UP;
+        }
+        return nPTZCommand;
+    }
+    private void onContrlPTZ1(int nPTZCommand, boolean bStop) {
+        FunSupport.getInstance().requestDevicePTZControl(mFunDevice,
+                nPTZCommand, bStop, mFunDevice.CurrChannel);
+    }
+
+    @Override
+    public String getDeviceId() {
+        return deviceId;
+    }
+
+    @Override
+    public void onCameraSuccess(CameraDetailBean bean) {
+        if (bean.getId().length() == 0) {
+            baseDialog.BaseDialog(this, "温馨提示:", "摄像头信息获取失败", "取消", "确定", dialogCallBack);
+            return;
+        }
+        mFunDevice = null;
+        mCurrDevSn =  bean.getUuid();
+        FunSupport.getInstance().requestDeviceStatus(FunDevType.EE_DEV_NORMAL_MONITOR, mCurrDevSn);
+    }
+
+    @Override
+    public void onFile(String msg) {
+
+    }
+
+    @Override
+    public void onDeviceListChanged() {
+
+    }
+
+    private void switchMediaStream() {
+        if (null != funVideoView) {
+            if (FunStreamType.STREAM_MAIN == funVideoView.getStreamType()) {
+                funVideoView.setStreamType(FunStreamType.STREAM_SECONDARY);
+                ivDefinition.setImageResource(R.mipmap.lowview);
+            } else {
+                funVideoView.setStreamType(FunStreamType.STREAM_MAIN);
+                ivDefinition.setImageResource(R.mipmap.highview);
+            }
+            // 重新播放
+            funVideoView.stopPlayback();
+            playRealMedia();
+        }
+    }
+
+    /**
+     * 视频截图,并延时一会提示截图对话框
+     */
+    private void tryToCapture() {
+        if (!funVideoView.isPlaying()) {
+            Toast.makeText(NewCameraPlayActivity.this,R.string.media_capture_failure_need_playing,Toast.LENGTH_SHORT).show();
+            return;
+        }
+        final String path = funVideoView.captureImage(null);    //图片异步保存
+        if (!TextUtils.isEmpty(path)) {
+            Message message = new Message();
+            message.what = MESSAGE_TOAST_SCREENSHOT_PREVIEW;
+            message.obj = path;
+            mHandler.sendMessageDelayed(message, 200);            //此处延时一定时间等待图片保存完成后显示,也可以在回调成功后显示
+        }
+    }
+
+    private void tryToRecord() {
+        if (!funVideoView.isPlaying() || funVideoView.isPaused()) {
+            Toast.makeText(NewCameraPlayActivity.this,R.string.media_record_failure_need_playing,Toast.LENGTH_SHORT).show();
+            return;
+        }
+        if (funVideoView.bRecord) {
+            funVideoView.stopRecordVideo();
+            llRecording.setVisibility(View.GONE);
+            ivCut.setImageResource(R.mipmap.cut);
+            String cutVideoFilePath=funVideoView.getFilePath();
+            baseDialog.BaseDialog(this, getResources().getString(R.string.device_sport_camera_record_success),
+                    getString(R.string.media_record_stop)+cutVideoFilePath, "取消", "打开", dialogFileCallBack,cutVideoFilePath);
+        } else {
+            funVideoView.startRecordVideo(null);
+            llRecording.setVisibility(View.VISIBLE);
+            ivCut.setImageResource(R.mipmap.recording_blue);
+            Toast.makeText(NewCameraPlayActivity.this,R.string.media_record_start,Toast.LENGTH_SHORT).show();
+        }
+    }
+    @Override
+    public void onDeviceStatusChanged(FunDevice funDevice) {
+        // 设备状态变化,如果是当前登录的设备查询之后是在线的,打开设备操作界面
+        if (null != mCurrDevSn && mCurrDevSn.equals(funDevice.getDevSn())) {
+            mFunDevice = funDevice;
+            stopLoading();
+            if (funDevice.devStatus == FunDevStatus.STATUS_ONLINE) {
+                // 如果设备在线,获取设备信息
+                if ((funDevice.devType == null || funDevice.devType == FunDevType.EE_DEV_UNKNOWN)) {
+                    funDevice.devType = FunDevType.EE_DEV_NORMAL_MONITOR;
+                }
+                //播放视频
+                playRealMedia();
+            } else {
+                // 设备不在线
+                baseDialog.BaseDialog(this, "温馨提示:", "摄像头设备不在线", "取消", "确定", dialogCallBack);
+            }
+        }
+    }
+
+    //播放视频
+    private void playRealMedia() {
+        // 显示状态: 正在打开视频...
+        tvStartVideo.setText("正在打开视频...");
+        tvStartVideo.setVisibility(View.VISIBLE);
+
+        if (mFunDevice.isRemote) {
+            funVideoView.setRealDevice(mFunDevice.getDevSn(), mFunDevice.CurrChannel);
+        } else {
+            String deviceIp = FunSupport.getInstance().getDeviceWifiManager().getGatewayIp();
+            funVideoView.setRealDevice(deviceIp, mFunDevice.CurrChannel);
+        }
+        // 默认关闭声音
+        funVideoView.setMediaSound(false);
+    }
+
+    @Override
+    public boolean onInfo(MediaPlayer arg0, int what, int extra) {
+        if (what == MediaPlayer.MEDIA_INFO_BUFFERING_START) {
+            tvStartVideo.setText("正在缓冲...");
+            tvStartVideo.setVisibility(View.VISIBLE);
+        } else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) {
+            tvStartVideo.setVisibility(View.GONE);
+        }
+        return true;
+    }
+
+    private void stopMedia() {
+        if (null != funVideoView) {
+            funVideoView.stopPlayback();
+            funVideoView.stopRecordVideo();
+        }
+    }
+    BaseDialog.DialogCallBack dialogCallBack = new BaseDialog.DialogCallBack() {
+        @Override
+        public void leftBtn() {
+            finish();
+        }
+
+        @Override
+        public void rightBtn() {
+            finish();
+        }
+    };
+    BaseDialog.DialogVideoCallBack dialogFileCallBack = new BaseDialog.DialogVideoCallBack() {
+        @Override
+        public void leftBtn() {
+
+        }
+
+        @Override
+        public void rightBtn(String path) {
+            startActivity(new Intent().putExtra("videoPath",path).setClass(NewCameraPlayActivity.this,FullPlayVideoActivity.class));
+        }
+    };
+
+    private Handler mHandler = new Handler() {
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MESSAGE_PLAY_MEDIA: {
+                    playRealMedia();
+                }
+                break;
+                case MESSAGE_AUTO_HIDE_CONTROL_BAR: {
+
+                }
+                break;
+                case MESSAGE_TOAST_SCREENSHOT_PREVIEW: {
+                    String path = (String) msg.obj;
+                    toastScreenShotPreview(path);
+                }
+                break;
+                case MESSAGE_OPEN_VOICE: {
+                    funVideoView.setMediaSound(true);
+                    isSoundPlay = true;
+                }
+                default:
+                    break;
+            }
+        }
+    };
+
+    /**
+     * 显示截图成功对话框
+     *
+     * @param path
+     */
+    private void toastScreenShotPreview(final String path) {
+        BitmapFactory.Options options = new BitmapFactory.Options();
+        options.inJustDecodeBounds = false;
+        options.inPreferredConfig = Bitmap.Config.RGB_565;
+        options.inDither = true;
+        Bitmap bitmap = BitmapFactory.decodeFile(path);
+
+        CDialog.Builder builder = new CDialog.Builder(this);
+        View view_picture = LayoutInflater.from(NewCameraPlayActivity.this).inflate(R.layout.dialog_camera_cutpicture, null);
+        ImageView cutPicture = (ImageView) view_picture.findViewById(R.id.camera_cutpicture);
+        TextView cutPicture_text = (TextView) view_picture.findViewById(R.id.camera_cutpicture_text);
+        cutPicture_text.setText("预览");        //设置标题
+        cutPicture.setImageBitmap(bitmap);    //设置图片
+        builder.setView(view_picture);
+        builder.setCancelable(false);
+        builder.setPositiveButton(getResources().getString(R.string.device_socket_capture_save), new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                File file = new File(path);
+                File imgPath = new File(FunPath.PATH_PHOTO + File.separator
+                        + file.getName());
+                if (imgPath.exists()) {
+                    Toast.makeText(NewCameraPlayActivity.this,R.string.device_socket_capture_exist,Toast.LENGTH_SHORT).show();
+                } else {
+                    FileUtils.copyFile(path, FunPath.PATH_PHOTO + File.separator
+                            + file.getName());
+                    Toast.makeText(NewCameraPlayActivity.this,R.string.device_socket_capture_save_success,Toast.LENGTH_SHORT).show();
+                }
+            }
+        });
+        builder.setNegativeButton(getResources().getString(R.string.device_socket_capture_delete), new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                FunPath.deleteFile(path);
+                Toast.makeText(NewCameraPlayActivity.this,R.string.device_socket_capture_delete_success,Toast.LENGTH_SHORT).show();
+                dialog.dismiss();
+            }
+        });
+        builder.show();
+    }
+
+    @Override
+    public void onDeviceAddedSuccess() {
+
+    }
+
+    @Override
+    public void onDeviceAddedFailed(Integer errCode) {
+
+    }
+
+    @Override
+    public void onDeviceRemovedSuccess() {
+
+    }
+
+    @Override
+    public void onDeviceRemovedFailed(Integer errCode) {
+
+    }
+
+    @Override
+    public void onAPDeviceListChanged() {
+
+    }
+
+    @Override
+    public void onLanDeviceListChanged() {
+
+    }
+    @Override
+    protected void onDestroy() {
+
+        stopMedia();
+
+      //  FunSupport.getInstance().removeOnFunDeviceOptListener(this);
+
+//		 if ( null != mFunDevice ) {
+//		 FunSupport.getInstance().requestDeviceLogout(mFunDevice);
+//		 }
+
+     /*   if (null != mHandler) {
+            mHandler.removeCallbacksAndMessages(null);
+            mHandler = null;
+        }*/
+
+        super.onDestroy();
+    }
+
+}

+ 58 - 0
app/src/main/java/com/silence/commonframe/activity/device/activity/camera/presenter/NewCameraPlayPresenter.java

@@ -0,0 +1,58 @@
+package com.silence.commonframe.activity.device.activity.camera.presenter;
+
+import android.app.Activity;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.lzy.okgo.OkGo;
+import com.lzy.okgo.cache.CacheMode;
+import com.lzy.okgo.callback.StringCallback;
+import com.silence.commonframe.ApiService;
+import com.silence.commonframe.activity.device.activity.camera.Interface.CameraBasicSettingListener;
+import com.silence.commonframe.activity.device.activity.camera.Interface.NewCameraPlayListener;
+import com.silence.commonframe.bean.BaseBean;
+import com.silence.commonframe.bean.CameraDetailBean;
+import com.silence.commonframe.common.constant.UrlConstants;
+import com.silence.commonframe.utils.Data;
+import com.silence.commonframe.utils.LoginIn;
+
+import org.json.JSONObject;
+
+import java.util.HashMap;
+
+import okhttp3.Call;
+import okhttp3.Response;
+
+public class NewCameraPlayPresenter extends NewCameraPlayListener.Presenter {
+
+    public NewCameraPlayPresenter(Activity mContext, NewCameraPlayListener.View mView){
+        this.mContext = mContext;
+        this.mView = mView;
+    }
+    @Override
+    public void getCameraDetail() {
+        OkGo.get(ApiService.httpUrl1+Data.getConfigUrl()+UrlConstants.GET_UUID_CAMERA)
+                .tag(this)
+                .params("deviceId",mView.getDeviceId())
+                .cacheKey("cacheGetKey")
+                .cacheMode(CacheMode.DEFAULT)
+                .headers("token", Data.getToken())
+                .execute(new StringCallback() {
+                    @Override
+                    public void onSuccess(String s, Call call, Response response) {
+                        BaseBean<CameraDetailBean> data=new Gson().fromJson(s,new TypeToken<BaseBean<CameraDetailBean>>(){}.getType());
+                        if (data.code==0&&data.data!=null){
+                            mView.onCameraSuccess(data.data);
+                        }else {
+                            LoginIn.tokenOut(data.code,data.msg,mContext);
+                            mView.onFile(data.msg);
+                        }
+                    }
+                    @Override
+                    public void onError(Call call, Response response, Exception e) {
+                        super.onError(call, response, e);
+                        mView.onFile("信息获取失败");
+                    }
+                });
+    }
+}

+ 1 - 1
app/src/main/java/com/silence/commonframe/activity/device/presenter/NewDevicePresenter.java

@@ -200,7 +200,7 @@ public class NewDevicePresenter extends NewDeviceListener.Presenter {
     }
 
     /**
-     * 获取摄像头UUID
+     * 获取摄像头详情
      */
     @Override
     public void getCameraId(String deviceId) {

+ 9 - 0
app/src/main/java/com/silence/commonframe/activity/home/activity/AdddeviceActivity.java

@@ -12,6 +12,7 @@ import com.mylhyl.acp.Acp;
 import com.mylhyl.acp.AcpListener;
 import com.mylhyl.acp.AcpOptions;
 import com.silence.commonframe.R;
+import com.silence.commonframe.activity.EsptouchDemoActivity;
 import com.silence.commonframe.activity.home.Interface.AddDeviceListener;
 import com.silence.commonframe.activity.home.presenter.AddDevicePresenter;
 import com.silence.commonframe.adapter.home.AddDeviceAdapter;
@@ -89,6 +90,9 @@ public class AdddeviceActivity extends BaseActivity implements AddDeviceListener
                             Intent intent2 = new Intent(AdddeviceActivity.this, CommonScanActivity.class);
                             intent2.putExtra(Constant.REQUEST_SCAN_MODE, Constant.REQUEST_SCAN_MODE_QRCODE_MODE);
                             startActivity(intent2);
+                        } else if (position == 3) {
+                            //空气卫士
+                            startActivity(new Intent().setClass(AdddeviceActivity.this,EsptouchDemoActivity.class));
                         }
                     }
                     @Override
@@ -102,10 +106,15 @@ public class AdddeviceActivity extends BaseActivity implements AddDeviceListener
     public void onSuccess(List<DeviceTypeModel.ObjectBean> data) {
         DeviceTypeModel.ObjectBean dataQt = new DeviceTypeModel.ObjectBean();
         dataQt.setGroupname("其他");
+
+        DeviceTypeModel.ObjectBean dataQt1 = new DeviceTypeModel.ObjectBean();
+        dataQt1.setGroupname("空气卫士");
+
         listData.addAll(data);
 
         if (listData.size() != 0){
             listData.add(data.size(),dataQt);
+            listData.add(data.size()+1,dataQt1);
         }
 
         addDeviceAdapter.notifyDataSetChanged();

+ 3 - 3
app/src/main/java/com/silence/commonframe/activity/login/LoginActivity.java

@@ -15,7 +15,7 @@ import android.widget.Toast;
 
 import com.orhanobut.hawk.Hawk;
 import com.silence.commonframe.ApiService;
-import com.silence.commonframe.App;
+import com.silence.commonframe.MyApplication;
 import com.silence.commonframe.R;
 import com.silence.commonframe.activity.MainActivity;
 import com.silence.commonframe.activity.login.Interface.LoginListener;
@@ -74,7 +74,7 @@ public class LoginActivity extends BaseActivity implements LoginListener.View {
         Data.setConfigUrl(ApiService.httpContect);
 
         //创建WXAPI
-        iwxapi = WXAPIFactory.createWXAPI(this, App.APP_ID, false);
+        iwxapi = WXAPIFactory.createWXAPI(this, MyApplication.APP_ID, false);
         mac = new GetMacUtils().getNewMac();
         sp = this.getSharedPreferences("userinfo", Context.MODE_PRIVATE);
 
@@ -102,7 +102,7 @@ public class LoginActivity extends BaseActivity implements LoginListener.View {
                 break;
             case R.id.iv_weChar:
                 //微信注册一下
-                iwxapi.registerApp(App.APP_ID);
+                iwxapi.registerApp(MyApplication.APP_ID);
                 //请求微信授权登录获取信息
                 final SendAuth.Req req = new SendAuth.Req();
                 req.scope = "snsapi_userinfo";

+ 3 - 3
app/src/main/java/com/silence/commonframe/activity/mine/activity/setup/SetupActivity.java

@@ -8,7 +8,7 @@ import android.widget.Switch;
 import android.widget.Toast;
 
 import com.orhanobut.hawk.Hawk;
-import com.silence.commonframe.App;
+import com.silence.commonframe.MyApplication;
 import com.silence.commonframe.Dialog.BaseDialog;
 import com.silence.commonframe.R;
 import com.silence.commonframe.activity.login.LoginActivity;
@@ -63,7 +63,7 @@ public class SetupActivity extends BaseActivity implements SetupListener.View {
     public void initView() {
         setTitle(this,getResources().getString(R.string.setup),"",true);
         //创建WXAPI
-        iwxapi = WXAPIFactory.createWXAPI(this, App.APP_ID,false);
+        iwxapi = WXAPIFactory.createWXAPI(this, MyApplication.APP_ID,false);
 
         startLoading();
 
@@ -161,7 +161,7 @@ public class SetupActivity extends BaseActivity implements SetupListener.View {
                 if(isBind != null){
                     if (isChecked && !isBind){
                         //微信注册一下
-                        iwxapi.registerApp(App.APP_ID);
+                        iwxapi.registerApp(MyApplication.APP_ID);
                         //请求微信授权登录获取信息
                         final SendAuth.Req req = new SendAuth.Req();
                         req.scope = "snsapi_userinfo";

+ 1 - 1
app/src/main/java/com/silence/commonframe/adapter/home/AddDeviceAdapter.java

@@ -28,7 +28,7 @@ public class AddDeviceAdapter extends BaseQuickAdapter<DeviceTypeModel.ObjectBea
         ImageView ivPicture = helper.getView(R.id.adddevice_picture);
         TextView tvName = helper.getView(R.id.adddevice_name);
         tvName.setText(dataBean.getGroupname());
-        if ("其他".equals(dataBean.getGroupname())){
+        if ("其他".equals(dataBean.getGroupname())||"空气卫士".equals(dataBean.getGroupname())){
             ivPicture.setImageResource(R.mipmap.qt2);
         }else {
             String url = ApiService.httpUrlpic + dataBean.getFilepath();

+ 6 - 6
app/src/main/java/com/silence/commonframe/base/utils/TDevice.java

@@ -18,7 +18,7 @@ import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.EditText;
 
-import com.silence.commonframe.App;
+import com.silence.commonframe.MyApplication;
 
 import java.io.File;
 import java.util.List;
@@ -53,7 +53,7 @@ public class TDevice {
     }
 
     public static boolean hasInternet() {
-        ConnectivityManager cm = (ConnectivityManager) App.getInstance()
+        ConnectivityManager cm = (ConnectivityManager) MyApplication.getInstance()
                 .getSystemService(Context.CONNECTIVITY_SERVICE);
         NetworkInfo info = cm.getActiveNetworkInfo();
         return info != null && info.isAvailable() && info.isConnected();
@@ -123,7 +123,7 @@ public class TDevice {
 
     public static int getVersionCode(String packageName) {
         try {
-            return App.getInstance()
+            return MyApplication.getInstance()
                     .getPackageManager()
                     .getPackageInfo(packageName, 0)
                     .versionCode;
@@ -134,9 +134,9 @@ public class TDevice {
 
     public static String getVersionName() {
         try {
-            return App.getInstance()
+            return MyApplication.getInstance()
                     .getPackageManager()
-                    .getPackageInfo(App.getInstance().getPackageName(), 0)
+                    .getPackageInfo(MyApplication.getInstance().getPackageName(), 0)
                     .versionName;
         } catch (PackageManager.NameNotFoundException ex) {
             return "undefined version name";
@@ -170,7 +170,7 @@ public class TDevice {
     }
 
     public static boolean isWifiOpen() {
-        ConnectivityManager cm = (ConnectivityManager)App.getInstance()
+        ConnectivityManager cm = (ConnectivityManager)MyApplication.getInstance()
                 .getSystemService(Context.CONNECTIVITY_SERVICE);
         NetworkInfo info = cm.getActiveNetworkInfo();
         if (info == null) return false;

+ 1 - 0
app/src/main/java/com/silence/commonframe/common/UIFactory.java

@@ -9,6 +9,7 @@ import android.graphics.drawable.Drawable;
 import android.text.TextUtils;
 import android.widget.TextView;
 
+
 import com.google.zxing.BarcodeFormat;
 import com.google.zxing.MultiFormatWriter;
 import com.google.zxing.common.BitMatrix;

+ 4 - 4
app/src/main/java/com/silence/commonframe/lib/funsdk/support/FunSupport.java

@@ -23,7 +23,7 @@ import com.lib.Mps.XPMS_SEARCH_ALARMINFO_REQ;
 import com.lib.MsgContent;
 import com.lib.SDKCONST;
 import com.lib.SDKCONST.SDK_CommTypes;
-import com.silence.commonframe.App;
+import com.silence.commonframe.MyApplication;
 import com.silence.commonframe.lib.funsdk.support.config.AlarmInfo;
 import com.silence.commonframe.lib.funsdk.support.config.BaseConfig;
 import com.silence.commonframe.lib.funsdk.support.config.DevCmdGeneral;
@@ -194,7 +194,7 @@ public class FunSupport implements IFunSDKResult {
 
         // 降低隐藏到后台时cpu使用及耗电
     //    FunSDK.SetApplication((MyApplication)mContext.getApplicationContext());
-        FunSDK.SetApplication((App)mContext.getApplicationContext());
+        FunSDK.SetApplication((MyApplication)mContext.getApplicationContext());
         // 库初始化2
         FunSDK.MyInitNetSDK();
 
@@ -211,8 +211,8 @@ public class FunSupport implements IFunSDKResult {
         // 初始化APP证书(APP启动后调用一次即可)
         FunSDK.XMCloundPlatformInit(
                 APP_UUID,        // uuid
-                APP_KEY, // App Key
-                APP_SECRET, // App Secret
+                APP_KEY, // MyApplication Key
+                APP_SECRET, // MyApplication Secret
                 APP_MOVECARD); // moveCard
 
         // 创建/注册库接口操作句柄

+ 14 - 14
app/src/main/java/com/silence/commonframe/utils/TimeButton.java

@@ -10,7 +10,7 @@ import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 
-import com.silence.commonframe.App;
+import com.silence.commonframe.MyApplication;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -103,11 +103,11 @@ public class TimeButton extends Button implements OnClickListener {
 	 * ??activity??onDestroy()???????
 	 */
 	public void onDestroy() {
-		if (App.map == null)
-			App.map = new HashMap<String, Object>();
+		if (MyApplication.map == null)
+			MyApplication.map = new HashMap<String, Object>();
 
-		App.map.put(TIME, time);
-		App.map.put(CTIME, System.currentTimeMillis());
+		MyApplication.map.put(TIME, time);
+		MyApplication.map.put(CTIME, System.currentTimeMillis());
 		clearTimer();
 		Log.e("yung", "onDestroy");
 	}
@@ -116,16 +116,16 @@ public class TimeButton extends Button implements OnClickListener {
 	 * ??activity??onCreate()???????
 	 */
 	public void onCreate(Bundle bundle) {
-		Log.e("yung", App.map + "");
-		if (App.map != null) {
-			if (App.map.size() <= 0)// ????????????��??????
+		Log.e("yung", MyApplication.map + "");
+		if (MyApplication.map != null) {
+			if (MyApplication.map.size() <= 0)// ????????????��??????
 				return;
-//			long mCTime = App.map.containsKey(CTIME) ? App.map.get(CTIME) : 0 ;
-//			long mTime = App.map.get(TIME) == null ? 0 : App.map.get(TIME);
+//			long mCTime = MyApplication.map.containsKey(CTIME) ? MyApplication.map.get(CTIME) : 0 ;
+//			long mTime = MyApplication.map.get(TIME) == null ? 0 : MyApplication.map.get(TIME);
 			long mCTime = getLong(CTIME);
 			long mTime = getLong(TIME);
 			long time = System.currentTimeMillis() - mCTime - mTime;
-			App.map.clear();
+			MyApplication.map.clear();
 			if (time > 0)
 				return;
 			else {
@@ -141,9 +141,9 @@ public class TimeButton extends Button implements OnClickListener {
 	}
 
 	public Long getLong(String key) {
-		if (App.map.get(key) != null){
-			if (App.map.get(key) instanceof Long){
-				return (Long) App.map.get(key);
+		if (MyApplication.map.get(key) != null){
+			if (MyApplication.map.get(key) instanceof Long){
+				return (Long) MyApplication.map.get(key);
 			}else {
 				return (long)0;
 			}

+ 2 - 2
app/src/main/java/com/silence/commonframe/utils/WetChatService.java

@@ -4,7 +4,7 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 
-import com.silence.commonframe.App;
+import com.silence.commonframe.MyApplication;
 import com.tencent.mm.opensdk.openapi.IWXAPI;
 
 /**
@@ -17,7 +17,7 @@ public class WetChatService extends BroadcastReceiver {
 
     @Override
     public void onReceive(Context context, Intent intent) {
-        api.registerApp(App.APP_ID);
+        api.registerApp(MyApplication.APP_ID);
     }
 
 

+ 2 - 2
app/src/main/java/com/silence/commonframe/wxapi/WXEntryActivity.java

@@ -12,7 +12,7 @@ import com.lzy.okgo.OkGo;
 import com.lzy.okgo.cache.CacheMode;
 import com.lzy.okgo.callback.StringCallback;
 import com.silence.commonframe.ApiService;
-import com.silence.commonframe.App;
+import com.silence.commonframe.MyApplication;
 import com.silence.commonframe.R;
 import com.silence.commonframe.activity.login.LoginActivity;
 import com.silence.commonframe.activity.mine.activity.setup.SetupActivity;
@@ -120,7 +120,7 @@ public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        api = WXAPIFactory.createWXAPI(this, App.APP_ID, false);
+        api = WXAPIFactory.createWXAPI(this, MyApplication.APP_ID, false);
 
         handler = new MyHandler(this);
 

+ 1 - 0
app/src/main/java/com/silence/commonframe/zxing/zxing/ScanListener.java

@@ -4,6 +4,7 @@ import android.os.Bundle;
 
 import com.google.zxing.Result;
 
+
 /**
  * 二维码结果监听返回
  * @author 刘红亮  2015年4月29日  下午8:08:13

+ 0 - 21
app/src/main/java/com/silence/commonframe/zxing/zxing/ScanManager.java

@@ -34,27 +34,6 @@ import com.silence.commonframe.zxing.zxing.utils.InactivityTimer;
 import java.io.IOException;
 import java.lang.reflect.Field;
 import java.util.Map;
-
-//import com.example.aaf.myzxing.R;
-//import com.example.aaf.myzxing.zxing.camera.CameraManager;
-//import com.example.aaf.myzxing.zxing.decode.DecodeThread;
-//import com.example.aaf.myzxing.zxing.decode.PhotoScanHandler;
-//import com.example.aaf.myzxing.zxing.decode.RGBLuminanceSource;
-//import com.example.aaf.myzxing.zxing.utils.BeepManager;
-//import com.example.aaf.myzxing.zxing.utils.BitmapUtil;
-//import com.example.aaf.myzxing.zxing.utils.CaptureActivityHandler;
-//import com.example.aaf.myzxing.zxing.utils.InactivityTimer;
-
-//import com.liang.scancode.R;
-//import com.liang.scancode.zxing.camera.CameraManager;
-//import com.liang.scancode.zxing.decode.DecodeThread;
-//import com.liang.scancode.zxing.decode.PhotoScanHandler;
-//import com.liang.scancode.zxing.decode.RGBLuminanceSource;
-//import com.liang.scancode.zxing.utils.BeepManager;
-//import com.liang.scancode.zxing.utils.BitmapUtil;
-//import com.liang.scancode.zxing.utils.CaptureActivityHandler;
-//import com.liang.scancode.zxing.utils.InactivityTimer;
-
 public class ScanManager implements SurfaceHolder.Callback{
 	boolean isHasSurface = false;
 	CameraManager cameraManager;

+ 1 - 0
app/src/main/java/com/silence/commonframe/zxing/zxing/decode/DecodeFormatManager.java

@@ -16,6 +16,7 @@
 
 package com.silence.commonframe.zxing.zxing.decode;
 
+
 import com.google.zxing.BarcodeFormat;
 
 import java.util.Collection;

+ 1 - 0
app/src/main/java/com/silence/commonframe/zxing/zxing/encode/EncodingHandler.java

@@ -3,6 +3,7 @@ package com.silence.commonframe.zxing.zxing.encode;
 import android.graphics.Bitmap;
 import android.util.Log;
 
+
 import com.google.zxing.BarcodeFormat;
 import com.google.zxing.EncodeHintType;
 import com.google.zxing.MultiFormatWriter;

BIN
app/src/main/res/drawable-mdpi/ic_info_outline_black_24dp.png


BIN
app/src/main/res/drawable-mdpi/ic_info_outline_white_24dp.png


+ 1 - 2
app/src/main/res/layout/activity_camera_detail.xml

@@ -4,8 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical"
-    tools:context="com.silence.commonframe.activity.CameraDetailActivity">
+    android:orientation="vertical">
 
         <include
             layout="@layout/navi_head"/>

+ 299 - 0
app/src/main/res/layout/activity_camera_detail_new.xml

@@ -0,0 +1,299 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+    <com.silence.commonframe.base.basemvp.TitleBar
+        android:id="@+id/base_title_bar"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"/>
+
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="270dp"
+            android:background="#ff000000">
+
+            <RelativeLayout
+                android:id="@+id/rl_keyboard"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:elevation="4dp">
+
+                <ImageButton
+                    android:id="@+id/img_btn_left"
+                    android:layout_width="35dp"
+                    android:layout_height="35dp"
+                    android:layout_alignParentLeft="true"
+                    android:layout_centerVertical="true"
+                    android:background="@drawable/ptzleft_selector" />
+
+                <ImageButton
+                    android:id="@+id/img_btn_right"
+                    android:layout_width="35dp"
+                    android:layout_height="35dp"
+                    android:layout_alignParentRight="true"
+                    android:layout_centerVertical="true"
+                    android:background="@drawable/ptzright_selector" />
+
+                <ImageButton
+                    android:id="@+id/img_btn_down"
+                    android:layout_width="35dp"
+                    android:layout_height="35dp"
+                    android:layout_alignParentBottom="true"
+                    android:layout_centerHorizontal="true"
+                    android:background="@drawable/ptzdown_selector" />
+
+                <ImageButton
+                    android:id="@+id/img_btn_top"
+                    android:layout_width="35dp"
+                    android:layout_height="35dp"
+                    android:layout_alignParentTop="true"
+                    android:layout_centerHorizontal="true"
+                    android:background="@drawable/ptzup_selector" />
+            </RelativeLayout>
+
+            <com.silence.commonframe.lib.funsdk.support.widget.FunVideoView
+                android:id="@+id/funVideoView"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                />
+
+            <TextView
+                android:id="@+id/tv_start_video"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_centerInParent="true"
+                android:background="#40000000"
+                android:textColor="#ffffffff"
+                android:textSize="14dp" />
+
+            <LinearLayout
+                android:id="@+id/ll_recording"
+                android:orientation="vertical"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentTop="true"
+                android:layout_alignParentRight="true"
+                android:layout_marginTop="28dp"
+                android:layout_marginRight="15dp"
+                android:visibility="gone"
+               >
+
+                <ImageView
+                    android:layout_width="20dp"
+                    android:layout_height="20dp"
+                    android:layout_gravity="center"
+                    android:src="@drawable/recording" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_centerHorizontal="true"
+                    android:layout_marginTop="5dp"
+                    android:text="录制中" />
+            </LinearLayout>
+
+                <ImageButton
+                    android:id="@+id/btn_camera"
+                    android:layout_width="30dp"
+                    android:layout_height="30dp"
+                    android:layout_alignParentTop="true"
+                    android:layout_alignParentRight="true"
+                    android:layout_marginTop="68dp"
+                    android:layout_marginRight="15dp"
+                    android:src="@drawable/icon_catch_picture"
+                    android:background="@color/transparent"
+                    android:visibility="gone"
+                    />
+
+        <!-- 主/辅码流类型显示 -->
+            <TextView
+                android:id="@+id/textStreamStat"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:background="#444"
+                android:padding="5dp"
+                android:textColor="#ffffffff"
+                android:textSize="10dp"
+                android:visibility="gone" />
+        </RelativeLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@color/thinwhite"
+            android:gravity="center_vertical"
+            android:orientation="horizontal" >
+
+                <ImageView
+                    android:id="@+id/iv_sound"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_weight="1"
+                    android:scaleType="centerInside"
+                    android:src="@mipmap/sound_close"/>
+
+            <View
+                android:layout_width="0.5dp"
+                android:layout_height="40dp"
+                android:background="@color/mygray"/>
+
+                <ImageView
+                    android:id="@+id/iv_definition"
+                    android:layout_width="match_parent"
+                    android:layout_weight="1"
+                    android:layout_height="match_parent"
+                    android:scaleType="centerInside"
+                    android:src="@mipmap/lowview"/>
+
+
+            <View
+                android:layout_width="0.5dp"
+                android:layout_height="40dp"
+                android:background="@color/mygray"/>
+
+                <ImageView
+                    android:layout_width="match_parent"
+                    android:layout_weight="1"
+                    android:layout_height="match_parent"
+                    android:scaleType="center"
+                    android:id="@+id/iv_video"
+                    android:src="@mipmap/oldvideo"/>
+
+
+            <View
+                android:layout_width="0.5dp"
+                android:layout_height="40dp"
+                android:background="@color/mygray"/>
+
+                <ImageView
+                    android:id="@+id/iv_cut"
+                    android:layout_width="match_parent"
+                    android:layout_weight="1"
+                    android:layout_height="match_parent"
+                    android:scaleType="center"
+                    android:src="@mipmap/cut"/>
+
+
+            <View
+                android:layout_width="0.5dp"
+                android:layout_height="40dp"
+                android:background="@color/mygray"/>
+                <ImageView
+                    android:id="@+id/iv_full_screen"
+                    android:layout_width="match_parent"
+                    android:layout_weight="1"
+                    android:layout_height="match_parent"
+                    android:scaleType="center"
+                    android:src="@mipmap/tofullscreen" />
+
+            <!--截图-->
+            <ImageView
+                android:layout_width="18dp"
+                android:layout_height="18dp"
+                android:visibility="gone"/>
+
+            <!--信息-->
+            <ImageView
+                android:id="@+id/btnFishEyeInfo"
+                android:layout_width="18dp"
+                android:layout_height="18dp"
+                android:visibility="gone"/>
+
+        </LinearLayout>
+
+        <include layout="@layout/bottom_line" />
+
+        <LinearLayout
+            android:id="@+id/ll_foot"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_below="@+id/layoutPlayWnd"
+            android:orientation="vertical" >
+
+            <HorizontalScrollView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" >
+
+                <LinearLayout
+                    android:id="@+id/layoutChannelBtn"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal" >
+
+                </LinearLayout>
+            </HorizontalScrollView>
+
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <LinearLayout
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical"
+                    android:gravity="center"
+                    android:layout_marginLeft="50dp"
+                    android:layout_marginTop="30dp"
+                    android:layout_alignParentLeft="true">
+
+                    <RelativeLayout
+                        android:id="@+id/ll_talk"
+                        android:layout_width="80dp"
+                        android:layout_height="80dp"
+                        android:background="@drawable/icon_voice_talk"
+                        android:scaleType="fitCenter">
+
+                        <ImageButton
+                            android:id="@+id/btn_quit_voice"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:src="@drawable/icon_close"
+                            android:background="@color/transparent"
+                            android:layout_alignParentRight="true"
+                            android:layout_alignParentTop="true"
+                            android:visibility="gone"
+                            />
+
+                    </RelativeLayout>
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="5dp"
+                        android:text="长按语音对话"
+                        android:textColor="@color/myblack"
+                        android:textSize="13sp"/>
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/ll_take_photo"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical"
+                    android:gravity="center"
+                    android:layout_alignParentRight="true"
+                    android:layout_marginRight="50dp"
+                    android:layout_marginTop="30dp">
+
+                    <ImageView
+                        android:layout_width="80dp"
+                        android:layout_height="80dp"
+                        android:background="@drawable/icon_catch_picture"/>
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="5dp"
+                        android:text="抓拍"
+                        android:textColor="@color/myblack"
+                        android:textSize="13sp"/>
+                </LinearLayout>
+
+            </RelativeLayout>
+        </LinearLayout>
+
+    </LinearLayout>

+ 15 - 0
app/src/main/res/layout/activity_full_paly.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    android:orientation="vertical"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <com.silence.commonframe.base.basemvp.TitleBar
+        android:id="@+id/base_title_bar"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"/>
+    <com.xiao.nicevideoplayer.NiceVideoPlayer
+        android:id="@+id/nvp_video"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+</LinearLayout>

+ 0 - 3
app/src/main/res/layout/bottom_line.xml

@@ -3,7 +3,4 @@
     android:layout_width="match_parent"
     android:layout_height="@dimen/bottom_Line"
     android:background="@color/mygray">
-
-
-
 </View>

+ 136 - 0
app/src/main/res/layout/esptouch_demo_activity.xml

@@ -0,0 +1,136 @@
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+<com.silence.commonframe.base.basemvp.TitleBar
+    android:id="@+id/base_title_bar"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"/>
+    <LinearLayout
+        android:padding="16dp"
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center_vertical"
+        android:orientation="horizontal">
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:text="SSID"/>
+        <TextView
+            android:id="@+id/ap_ssid_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="5dp"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:gravity="center_vertical"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:singleLine="true"
+            android:text="BSSID"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+
+        <TextView
+            android:id="@+id/ap_bssid_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="5dp"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:gravity="center_vertical"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="密码"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+
+        <EditText
+            android:id="@+id/ap_password_edit"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="5dp"
+            android:singleLine="true" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center_vertical"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="设备数量:"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+
+        <EditText
+            android:id="@+id/device_count_edit"
+            android:layout_width="80dp"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="5dp"
+            android:inputType="number" />
+    </LinearLayout>
+
+    <RadioGroup
+        android:id="@+id/package_mode_group"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+
+        <RadioButton
+            android:id="@+id/package_broadcast"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:checked="true"
+            android:text="广播" />
+
+        <RadioButton
+            android:id="@+id/package_multicast"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:text="组播" />
+    </RadioGroup>
+
+    <TextView
+        android:id="@+id/message"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="5dp"
+        android:textColor="@android:color/holo_red_dark" />
+
+    <Space
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1" />
+
+    <Button
+        android:id="@+id/confirm_btn"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="确认" />
+</LinearLayout>
+</LinearLayout>

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

@@ -659,4 +659,26 @@
     <!-- 弹窗 -->
     <string name="dialog_update_name">确定修改名称么?</string>
     <string name="device_airguard">空气卫士</string>
+
+
+    <!-- demo -->
+    <string name="menu_item_about">About App</string>
+    <string name="about_app_version">App Version: %s</string>
+    <string name="about_esptouch_version">EspTouch Version: %s</string>
+    <string name="ssid_title">SSID: </string>
+    <string name="bssid_title">BSSID: </string>
+    <string name="password_title">Password: </string>
+    <string name="device_count_title">Device count: </string>
+    <string name="package_broadcast">Broadcast</string>
+    <string name="package_multicast">Multicast</string>
+    <string name="confirm">Confirm</string>
+    <string name="wifi_5g_message">Device don\'t support 5G Wifi, please make sure the currently connected Wifi is 2.4G</string>
+    <string name="location_disable_message">Location(GPS) is disable</string>
+    <string name="no_wifi_connection">No Wifi connection</string>
+    <string name="configuring_message">Esptouch is configuring, please wait for a moment…</string>
+    <string name="configure_wifi_change_message">Wifi disconnected or changed</string>
+    <string name="configure_result_failed">EspTouch failed</string>
+    <string name="configure_result_failed_port">Create Esptouch task failed, the EspTouch port could be used by other thread</string>
+    <string name="configure_result_success">EspTouch 完成</string>
+    <string name="configure_result_success_item">BSSID = %1$s, InetAddress = %2$s</string>
 </resources>