diff --git a/app-compose/build.gradle b/app-compose/build.gradle index 0033ebf..ac7b64f 100644 --- a/app-compose/build.gradle +++ b/app-compose/build.gradle @@ -26,8 +26,11 @@ android { dependencies { implementation 'androidx.core:core-ktx:1.8.0' - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' - implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1' + + var lifeCycle_version = '2.5.1' + implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifeCycle_version" + implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifeCycle_version" + implementation platform('androidx.compose:compose-bom:2022.10.00') implementation 'androidx.activity:activity-compose:1.5.1' implementation 'androidx.compose.ui:ui' @@ -36,4 +39,15 @@ dependencies { implementation 'androidx.compose.material3:material3' implementation 'androidx.navigation:navigation-runtime-ktx:2.5.2' implementation "androidx.navigation:navigation-compose:2.4.0-rc01" + implementation 'io.reactivex.rxjava2:rxjava:2.1.6' + implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' + + var accompanist_version = '0.30.1' + implementation "com.google.accompanist:accompanist-permissions:$accompanist_version" + implementation project(path: ':library-push') + + implementation(name: 'libuvccamera-release', ext: 'aar') { + exclude module: 'support-v4' + exclude module: 'appcompat-v7' + } } \ No newline at end of file diff --git a/app-compose/libs/libuvccamera-release.aar b/app-compose/libs/libuvccamera-release.aar new file mode 100644 index 0000000..72faa87 Binary files /dev/null and b/app-compose/libs/libuvccamera-release.aar differ diff --git a/app-compose/src/main/AndroidManifest.xml b/app-compose/src/main/AndroidManifest.xml index 9d5de03..0aae489 100644 --- a/app-compose/src/main/AndroidManifest.xml +++ b/app-compose/src/main/AndroidManifest.xml @@ -1,6 +1,20 @@ + + + + + + + + + + ? { + val single: Single = + RxHelper.single(MediaStream.getBindedMediaStream(context, owner), mediaStream) + return if (mediaStream == null) { + single.doOnSuccess { ms -> mediaStream = ms } + } else { + single + } + } + + @SuppressLint("CheckResult") + fun setTextureView(it: TextureView, context: Context) { + if (context is ComponentActivity) { + val activity: ComponentActivity = context + getMediaStream(context, activity)?.subscribe( + { ms -> + if (it.isAvailable) { + ms?.setSurfaceTexture(it.surfaceTexture) + } else { + it.surfaceTextureListener = object : SurfaceTextureListenerWrapper() { + override fun onSurfaceTextureAvailable( + surfaceTexture: SurfaceTexture, + i: Int, + i1: Int + ) { + ms?.setSurfaceTexture(surfaceTexture) + } + + override fun onSurfaceTextureDestroyed(surfaceTexture: SurfaceTexture): Boolean { + ms?.setSurfaceTexture(null) + return true + } + } + } + }, + { + Log.w("HomeViewModel", "创建服务出错!" + it.message) + }) + } + + } +} \ No newline at end of file diff --git a/app-compose/src/main/java/com/yinuo/safetywatcher/utils/RxHelper.java b/app-compose/src/main/java/com/yinuo/safetywatcher/utils/RxHelper.java new file mode 100644 index 0000000..be7b0f0 --- /dev/null +++ b/app-compose/src/main/java/com/yinuo/safetywatcher/utils/RxHelper.java @@ -0,0 +1,47 @@ +package com.yinuo.safetywatcher.utils; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import org.easydarwin.util.AbstractSubscriber; +import org.reactivestreams.Publisher; + +import io.reactivex.Single; +import io.reactivex.subjects.PublishSubject; + +/** + * Created by apple on 2017/12/22. + */ + +public class RxHelper { + static boolean IGNORE_ERROR = false; + + public static Single single(@NonNull Publisher t, @Nullable T defaultValueIfNotNull){ + if (defaultValueIfNotNull != null) return Single.just(defaultValueIfNotNull); + final PublishSubject sub = PublishSubject.create(); + t.subscribe(new AbstractSubscriber() { + @Override + public void onNext(T t) { + super.onNext(t); + sub.onNext(t); + } + + @Override + public void onError(Throwable t) { + if (IGNORE_ERROR) { + super.onError(t); + sub.onComplete(); + }else { + sub.onError(t); + } + } + + @Override + public void onComplete() { + super.onComplete(); + sub.onComplete(); + } + }); + return sub.firstOrError(); + } +} diff --git a/app-compose/src/main/java/com/yinuo/safetywatcher/utils/SurfaceTextureListenerWrapper.java b/app-compose/src/main/java/com/yinuo/safetywatcher/utils/SurfaceTextureListenerWrapper.java new file mode 100644 index 0000000..d3d369b --- /dev/null +++ b/app-compose/src/main/java/com/yinuo/safetywatcher/utils/SurfaceTextureListenerWrapper.java @@ -0,0 +1,27 @@ +package com.yinuo.safetywatcher.utils; + +import android.graphics.SurfaceTexture; +import android.view.TextureView; + +/** + * Created by apple on 2017/9/11. + */ + +public abstract class SurfaceTextureListenerWrapper implements TextureView.SurfaceTextureListener{ + + @Override + public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i1) { + + } + + @Override + public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) { + + return true; + } + + @Override + public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) { + + } +} diff --git a/build.gradle b/build.gradle index 95c8de2..7994902 100644 --- a/build.gradle +++ b/build.gradle @@ -18,6 +18,9 @@ allprojects { jcenter() maven { url "https://jitpack.io" } + flatDir { + dirs 'libs' + } } } diff --git a/library-push/src/main/java/org/easydarwin/push/MediaStream.java b/library-push/src/main/java/org/easydarwin/push/MediaStream.java index f27c44d..f93272d 100644 --- a/library-push/src/main/java/org/easydarwin/push/MediaStream.java +++ b/library-push/src/main/java/org/easydarwin/push/MediaStream.java @@ -175,7 +175,7 @@ public class MediaStream extends Service implements LifecycleObserver { private EasyMuxer mMuxer; private HandlerThread mCameraThread; private Handler mCameraHandler; - private boolean cameraOpened; + private boolean cameraOpened = true; static ServiceConnection conn; static PushScreenService pushScreenService; private UVCCamera uvcCamera;