diff --git a/README-ZH.md b/README-ZH.md index 24381cee5..5c3a25f20 100644 --- a/README-ZH.md +++ b/README-ZH.md @@ -2,7 +2,7 @@ --

- +

@@ -32,7 +32,7 @@ Q群: 490442439 2群: 761899104 验证信息:jzvd ## 使用步骤 1. 通读ReadMe -2. 下载安装demo apk [jiaozivideoplayer-7.0.2.apk](https://github.com/lipangit/JiaoZiVideoPlayer/releases/download/v7.0.2/jiaozivideoplayer-7.0.2.apk),各个页面都进入一次,各个按钮点一次 +2. 下载安装demo apk [jiaozivideoplayer-7.0.3.apk](https://github.com/lipangit/JiaoZiVideoPlayer/releases/download/v7.0.3/jiaozivideoplayer-7.0.3.apk),各个页面都进入一次,各个按钮点一次 3. 下载调试develop分支,有针对性的通过效果找到实现的源码 4. 看[自定义相关的WIKI](https://github.com/lipangit/JiaoZiVideoPlayer/wiki),实现自己的需求 @@ -49,11 +49,11 @@ Q群: 490442439 2群: 761899104 验证信息:jzvd 即便是自定义UI,或者对Library有过修改,也是这五步骤来使用播放器。 -7.0.2不是非常稳定,感兴趣的可以尝试 +7.0.3不是非常稳定,感兴趣的可以尝试 1.添加类库 ```gradle -compile 'cn.jzvd:jiaozivideoplayer:7.0.2' +compile 'cn.jzvd:jiaozivideoplayer:7.0.3' ``` 或直接下载 [aar](https://github.com/lipangit/JiaoZiVideoPlayer/releases/tag/v6.4.2) (不建议) diff --git a/README.md b/README.md index dd32b75bc..7ee52149d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ --

- +

@@ -38,7 +38,7 @@ Q群: 490442439 2群: 761899104 验证信息:jzvd ## Steps for usage 1. Read through ReadMe -2. Download and install the demo apk[jiaozivideoplayer-7.0.2.apk](https://github.com/lipangit/JiaoZiVideoPlayer/releases/download/v7.0.2/jiaozivideoplayer-7.0.2.apk), each page enters once, each button clicks once +2. Download and install the demo apk[jiaozivideoplayer-7.0.3.apk](https://github.com/lipangit/JiaoZiVideoPlayer/releases/download/v7.0.3/jiaozivideoplayer-7.0.3.apk), each page enters once, each button clicks once 3. Download and debug the develop branch, and find the source code through the effect 4. See [custom-related WIKI](https://github.com/lipangit/JiaoZiVideoPlayer/wiki),Realize your own needs @@ -55,11 +55,11 @@ Q群: 490442439 2群: 761899104 验证信息:jzvd Only five steps to use the player: -The 7.0.2 version is not very stable. +The 7.0.3 version is not very stable. 1.Import library: ```gradle -implementation 'cn.jzvd:jiaozivideoplayer:7.0.2' +implementation 'cn.jzvd:jiaozivideoplayer:7.0.3' ``` Or download [aar](https://github.com/lipangit/JiaoZiVideoPlayer/releases/tag/v6.4.2) (not recommended). diff --git a/app/build.gradle b/app/build.gradle index 6b0be97df..39266e47f 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "cn.jzvd.demo" minSdkVersion 16 targetSdkVersion 28 - versionCode 90 - versionName "7.0.2" + versionCode 91 + versionName "7.0.3" } signingConfigs { releaseConfig { @@ -19,11 +19,11 @@ android { } } buildTypes { - debug {//测试时会用到 - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - signingConfig signingConfigs.releaseConfig - } +// debug {//测试时会用到 +// minifyEnabled true +// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' +// signingConfig signingConfigs.releaseConfig +// } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' diff --git a/app/src/androidTest/java/cn/jzvd/demo/ApplicationTest.java b/app/src/androidTest/java/cn/jzvd/demo/ApplicationTest.java deleted file mode 100644 index 85aa28c6d..000000000 --- a/app/src/androidTest/java/cn/jzvd/demo/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package cn.jzvd.demo; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} diff --git a/app/src/main/assets/jzvd.html b/app/src/main/assets/jzvd.html index e19e9a7bf..257eca997 100644 --- a/app/src/main/assets/jzvd.html +++ b/app/src/main/assets/jzvd.html @@ -17,7 +17,6 @@

This is webview

var cont1=document.getElementById("cont1"); jzvd.adViewJiaoZiVideoPlayer(210,120,cont1.offsetTop,cont1.offsetLeft,1) - \ No newline at end of file diff --git a/app/src/main/java/cn/jzvd/demo/ActivityApi.java b/app/src/main/java/cn/jzvd/demo/ActivityApi.java index 7d8803406..177fd27ba 100644 --- a/app/src/main/java/cn/jzvd/demo/ActivityApi.java +++ b/app/src/main/java/cn/jzvd/demo/ActivityApi.java @@ -1,11 +1,13 @@ package cn.jzvd.demo; import android.content.Intent; +import android.content.pm.PackageManager; import android.hardware.Sensor; import android.hardware.SensorManager; import android.os.Bundle; import android.os.Environment; import android.support.annotation.Nullable; +import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; import android.view.View; @@ -20,7 +22,6 @@ import java.util.LinkedHashMap; import cn.jzvd.JZDataSource; -import cn.jzvd.JZUtils; import cn.jzvd.Jzvd; import cn.jzvd.JzvdStd; @@ -103,7 +104,7 @@ public boolean onOptionsItemSelected(MenuItem item) { } public void cpAssertVideoToLocalPath() { - JZUtils.verifyStoragePermissions(this); + verifyStoragePermissions(); try { InputStream myInput; OutputStream myOutput = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/local_video.mp4"); @@ -123,6 +124,21 @@ public void cpAssertVideoToLocalPath() { } } + + public void verifyStoragePermissions() { + try { + int permission = ActivityCompat.checkSelfPermission(this, + "android.permission.WRITE_EXTERNAL_STORAGE"); + if (permission != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{ + "android.permission.READ_EXTERNAL_STORAGE", + "android.permission.WRITE_EXTERNAL_STORAGE"}, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + public void clickSmallChange(View view) { startActivity(new Intent(ActivityApi.this, ActivityApiUISmallChange.class)); } diff --git a/app/src/main/java/cn/jzvd/demo/ActivityListViewMultiHolder.java b/app/src/main/java/cn/jzvd/demo/ActivityListViewMultiHolder.java index 700759102..f4fe2d174 100644 --- a/app/src/main/java/cn/jzvd/demo/ActivityListViewMultiHolder.java +++ b/app/src/main/java/cn/jzvd/demo/ActivityListViewMultiHolder.java @@ -55,7 +55,7 @@ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCoun // currentPlayPosition + " " + firstVisibleItem + " " + currentPlayPosition + " " + lastVisibleItem); if (currentPlayPosition >= 0) { if ((currentPlayPosition < firstVisibleItem || currentPlayPosition > (lastVisibleItem - 1))) { - if (Jzvd.CURRENT_JZVD.currentScreen != Jzvd.SCREEN_WINDOW_FULLSCREEN) { + if (Jzvd.CURRENT_JZVD.screen != Jzvd.SCREEN_FULLSCREEN) { Jzvd.resetAllVideos();//为什么最后一个视频横屏会调用这个,其他地方不会 } } diff --git a/app/src/main/java/cn/jzvd/demo/ActivityListViewNormal.java b/app/src/main/java/cn/jzvd/demo/ActivityListViewNormal.java index ecbaf60b7..1ff0e563c 100644 --- a/app/src/main/java/cn/jzvd/demo/ActivityListViewNormal.java +++ b/app/src/main/java/cn/jzvd/demo/ActivityListViewNormal.java @@ -51,7 +51,7 @@ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCoun // currentPlayPosition + " " + firstVisibleItem + " " + currentPlayPosition + " " + lastVisibleItem); if (currentPlayPosition >= 0) { if ((currentPlayPosition < firstVisibleItem || currentPlayPosition > (lastVisibleItem - 1))) { - if (Jzvd.CURRENT_JZVD.currentScreen != Jzvd.SCREEN_WINDOW_FULLSCREEN) { + if (Jzvd.CURRENT_JZVD.screen != Jzvd.SCREEN_FULLSCREEN) { Jzvd.resetAllVideos();//为什么最后一个视频横屏会调用这个,其他地方不会 } } diff --git a/app/src/main/java/cn/jzvd/demo/ActivityListViewRecyclerView.java b/app/src/main/java/cn/jzvd/demo/ActivityListViewRecyclerView.java index 9d1abd0da..77d1d42c0 100644 --- a/app/src/main/java/cn/jzvd/demo/ActivityListViewRecyclerView.java +++ b/app/src/main/java/cn/jzvd/demo/ActivityListViewRecyclerView.java @@ -43,7 +43,7 @@ public void onChildViewDetachedFromWindow(View view) { Jzvd jzvd = view.findViewById(R.id.videoplayer); if (jzvd != null && Jzvd.CURRENT_JZVD != null && jzvd.jzDataSource.containsTheUrl(Jzvd.CURRENT_JZVD.jzDataSource.getCurrentUrl())) { - if (Jzvd.CURRENT_JZVD != null && Jzvd.CURRENT_JZVD.currentScreen != Jzvd.SCREEN_WINDOW_FULLSCREEN) { + if (Jzvd.CURRENT_JZVD != null && Jzvd.CURRENT_JZVD.screen != Jzvd.SCREEN_FULLSCREEN) { Jzvd.resetAllVideos(); } } diff --git a/app/src/main/java/cn/jzvd/demo/ActivityMain.java b/app/src/main/java/cn/jzvd/demo/ActivityMain.java index 3a903eed2..d4759c8c0 100644 --- a/app/src/main/java/cn/jzvd/demo/ActivityMain.java +++ b/app/src/main/java/cn/jzvd/demo/ActivityMain.java @@ -9,7 +9,6 @@ import com.bumptech.glide.Glide; import cn.jzvd.Jzvd; -import cn.jzvd.JzvdStd; import cn.jzvd.demo.CustomJzvd.MyJzvdStd; /** @@ -26,7 +25,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { myJzvdStd = findViewById(R.id.jz_video); myJzvdStd.setUp("http://jzvd.nathen.cn/342a5f7ef6124a4a8faf00e738b8bee4/cf6d9db0bd4d41f59d09ea0a81e918fd-5287d2089db37e62345123a1be272f8b.mp4" - , "饺子快长大", JzvdStd.SCREEN_NORMAL); + , "饺子快长大"); Glide.with(this).load("http://jzvd-pic.nathen.cn/jzvd-pic/1bb2ebbe-140d-4e2e-abd2-9e7e564f71ac.png").into(myJzvdStd.thumbImageView); } diff --git a/app/src/main/java/cn/jzvd/demo/ActivityTinyWindow.java b/app/src/main/java/cn/jzvd/demo/ActivityTinyWindow.java index 0e18f7a60..cd7f869f1 100644 --- a/app/src/main/java/cn/jzvd/demo/ActivityTinyWindow.java +++ b/app/src/main/java/cn/jzvd/demo/ActivityTinyWindow.java @@ -1,6 +1,5 @@ package cn.jzvd.demo; -import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; diff --git a/app/src/main/java/cn/jzvd/demo/ActivityTinyWindowRecycleView.java b/app/src/main/java/cn/jzvd/demo/ActivityTinyWindowRecycleView.java index 09a4f52a9..aa4e4442d 100644 --- a/app/src/main/java/cn/jzvd/demo/ActivityTinyWindowRecycleView.java +++ b/app/src/main/java/cn/jzvd/demo/ActivityTinyWindowRecycleView.java @@ -44,7 +44,7 @@ public void onChildViewAttachedToWindow(View view) {//这个的本质是gotoThis JzvdStdTinyWindow currentJzvd = (JzvdStdTinyWindow) Jzvd.CURRENT_JZVD; if (jzvd != null && currentJzvd != null && jzvd.jzDataSource.containsTheUrl(Jzvd.CURRENT_JZVD.jzDataSource.getCurrentUrl()) - && Jzvd.CURRENT_JZVD.currentState == Jzvd.CURRENT_STATE_PLAYING) { + && Jzvd.CURRENT_JZVD.state == Jzvd.STATE_PLAYING) { ViewGroup vp = (ViewGroup) jzvd.getParent(); vp.removeAllViews(); ((ViewGroup) currentJzvd.getParent()).removeView(currentJzvd); @@ -60,8 +60,8 @@ public void onChildViewDetachedFromWindow(View view) { JzvdStdTinyWindow jzvd = view.findViewById(R.id.videoplayer); if (jzvd != null && Jzvd.CURRENT_JZVD != null && jzvd.jzDataSource.containsTheUrl(Jzvd.CURRENT_JZVD.jzDataSource.getCurrentUrl()) - && Jzvd.CURRENT_JZVD.currentScreen != Jzvd.SCREEN_WINDOW_TINY) { - if (Jzvd.CURRENT_JZVD.currentState == Jzvd.CURRENT_STATE_PAUSE) { + && Jzvd.CURRENT_JZVD.screen != Jzvd.SCREEN_TINY) { + if (Jzvd.CURRENT_JZVD.state == Jzvd.STATE_PAUSE) { Jzvd.resetAllVideos(); } else { ((JzvdStdTinyWindow) Jzvd.CURRENT_JZVD).gotoScreenTiny(); diff --git a/app/src/main/java/cn/jzvd/demo/ActivityTinyWindowRecycleViewMultiHolder.java b/app/src/main/java/cn/jzvd/demo/ActivityTinyWindowRecycleViewMultiHolder.java index 54e7d573f..411eb6d9f 100644 --- a/app/src/main/java/cn/jzvd/demo/ActivityTinyWindowRecycleViewMultiHolder.java +++ b/app/src/main/java/cn/jzvd/demo/ActivityTinyWindowRecycleViewMultiHolder.java @@ -49,7 +49,7 @@ public void onChildViewAttachedToWindow(View view) { JzvdStdTinyWindow currentJzvd = (JzvdStdTinyWindow) Jzvd.CURRENT_JZVD; if (jzvd != null && currentJzvd != null && jzvd.jzDataSource.containsTheUrl(Jzvd.CURRENT_JZVD.jzDataSource.getCurrentUrl()) - && Jzvd.CURRENT_JZVD.currentState == Jzvd.CURRENT_STATE_PLAYING) { + && Jzvd.CURRENT_JZVD.state == Jzvd.STATE_PLAYING) { ViewGroup vp = (ViewGroup) jzvd.getParent(); vp.removeAllViews(); ((ViewGroup) currentJzvd.getParent()).removeView(currentJzvd); @@ -65,8 +65,8 @@ public void onChildViewDetachedFromWindow(View view) { JzvdStdTinyWindow jzvd = view.findViewById(R.id.videoplayer); if (jzvd != null && Jzvd.CURRENT_JZVD != null && jzvd.jzDataSource.containsTheUrl(Jzvd.CURRENT_JZVD.jzDataSource.getCurrentUrl()) - && Jzvd.CURRENT_JZVD.currentScreen != Jzvd.SCREEN_WINDOW_TINY) { - if (Jzvd.CURRENT_JZVD.currentState == Jzvd.CURRENT_STATE_PAUSE) { + && Jzvd.CURRENT_JZVD.screen != Jzvd.SCREEN_TINY) { + if (Jzvd.CURRENT_JZVD.state == Jzvd.STATE_PAUSE) { Jzvd.resetAllVideos(); } else { ((JzvdStdTinyWindow) Jzvd.CURRENT_JZVD).gotoScreenTiny(); diff --git a/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdAutoCompleteAfterFullscreen.java b/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdAutoCompleteAfterFullscreen.java index b259e2000..2999c0d5b 100644 --- a/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdAutoCompleteAfterFullscreen.java +++ b/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdAutoCompleteAfterFullscreen.java @@ -25,7 +25,7 @@ public JzvdStdAutoCompleteAfterFullscreen(Context context, AttributeSet attrs) { @Override public void startVideo() { - if (currentScreen == SCREEN_WINDOW_FULLSCREEN) { + if (screen == SCREEN_FULLSCREEN) { Log.d(TAG, "startVideo [" + this.hashCode() + "] "); JZMediaInterface.SAVED_SURFACE = null; addTextureView(); @@ -41,7 +41,7 @@ public void startVideo() { @Override public void onAutoCompletion() { - if (currentScreen == SCREEN_WINDOW_FULLSCREEN) { + if (screen == SCREEN_FULLSCREEN) { onStateAutoComplete(); } else { super.onAutoCompletion(); diff --git a/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdList.java b/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdList.java index d5b0bd756..61c577c65 100644 --- a/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdList.java +++ b/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdList.java @@ -4,7 +4,6 @@ import android.util.AttributeSet; import cn.jzvd.JZDataSource; -import cn.jzvd.JZMediaInterface; import cn.jzvd.JZUtils; import cn.jzvd.Jzvd; import cn.jzvd.JzvdStd; diff --git a/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdMp3.java b/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdMp3.java index a785a81d1..cee656313 100644 --- a/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdMp3.java +++ b/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdMp3.java @@ -28,8 +28,8 @@ public int getLayoutId() { @Override public void onClick(View v) { if (v.getId() == cn.jzvd.R.id.thumb && - (currentState == CURRENT_STATE_PLAYING || - currentState == CURRENT_STATE_PAUSE)) { + (state == STATE_PLAYING || + state == STATE_PAUSE)) { onClickUiToggle(); } else if (v.getId() == R.id.fullscreen) { diff --git a/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdShowTitleAfterFullscreen.java b/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdShowTitleAfterFullscreen.java index ca3738d4d..070f0a1ce 100755 --- a/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdShowTitleAfterFullscreen.java +++ b/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdShowTitleAfterFullscreen.java @@ -23,7 +23,7 @@ public JzvdStdShowTitleAfterFullscreen(Context context, AttributeSet attrs) { @Override public void setUp(JZDataSource jzDataSource, int screen) { super.setUp(jzDataSource, screen); - if (currentScreen == SCREEN_WINDOW_FULLSCREEN) { + if (this.screen == SCREEN_FULLSCREEN) { titleTextView.setVisibility(View.VISIBLE); } else { titleTextView.setVisibility(View.INVISIBLE); diff --git a/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdTinyWindow.java b/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdTinyWindow.java index 6bfa05641..5b8d72282 100644 --- a/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdTinyWindow.java +++ b/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdTinyWindow.java @@ -9,7 +9,6 @@ import cn.jzvd.JZDataSource; import cn.jzvd.JZUtils; -import cn.jzvd.Jzvd; import cn.jzvd.JzvdStd; /** @@ -31,7 +30,7 @@ public void setUp(JZDataSource jzDataSource, int screen, Class mediaInterface) { public void gotoScreenTiny() { Log.i(TAG, "startWindowTiny " + " [" + this.hashCode() + "] "); - if (currentState == CURRENT_STATE_NORMAL || currentState == CURRENT_STATE_ERROR || currentState == CURRENT_STATE_AUTO_COMPLETE) + if (state == STATE_NORMAL || state == STATE_ERROR || state == STATE_AUTO_COMPLETE) return; ViewGroup vg = (ViewGroup) getParent(); vg.removeView(this); diff --git a/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdVolumeAfterFullscreen.java b/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdVolumeAfterFullscreen.java index 580878042..82de59af2 100644 --- a/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdVolumeAfterFullscreen.java +++ b/app/src/main/java/cn/jzvd/demo/CustomJzvd/JzvdStdVolumeAfterFullscreen.java @@ -21,7 +21,7 @@ public JzvdStdVolumeAfterFullscreen(Context context, AttributeSet attrs) { @Override public void onPrepared() { super.onPrepared(); - if (currentScreen == SCREEN_WINDOW_FULLSCREEN) { + if (screen == SCREEN_FULLSCREEN) { mediaInterface.setVolume(1f, 1f); } else { mediaInterface.setVolume(0f, 0f); @@ -39,12 +39,14 @@ public void gotoScreenFullscreen() { @Override public void setScreenFullscreen() { super.setScreenFullscreen(); - mediaInterface.setVolume(1f, 1f); + if (mediaInterface != null) + mediaInterface.setVolume(1f, 1f); } @Override public void setScreenNormal() { super.setScreenNormal(); - mediaInterface.setVolume(0f, 0f); + if (mediaInterface != null) + mediaInterface.setVolume(0f, 0f); } } diff --git a/app/src/main/java/cn/jzvd/demo/CustomMedia/JZMediaExo.java b/app/src/main/java/cn/jzvd/demo/CustomMedia/JZMediaExo.java index dfe1d3602..555819a3e 100755 --- a/app/src/main/java/cn/jzvd/demo/CustomMedia/JZMediaExo.java +++ b/app/src/main/java/cn/jzvd/demo/CustomMedia/JZMediaExo.java @@ -2,7 +2,6 @@ import android.content.Context; import android.graphics.SurfaceTexture; -import android.media.MediaPlayer; import android.net.Uri; import android.os.Handler; import android.os.HandlerThread; diff --git a/app/src/main/java/cn/jzvd/demo/CustomMedia/JZMediaSystemAssertFolder.java b/app/src/main/java/cn/jzvd/demo/CustomMedia/JZMediaSystemAssertFolder.java index 79ecf69c4..0d1152507 100644 --- a/app/src/main/java/cn/jzvd/demo/CustomMedia/JZMediaSystemAssertFolder.java +++ b/app/src/main/java/cn/jzvd/demo/CustomMedia/JZMediaSystemAssertFolder.java @@ -168,8 +168,8 @@ public boolean onError(MediaPlayer mediaPlayer, final int what, final int extra) public boolean onInfo(MediaPlayer mediaPlayer, final int what, final int extra) { handler.post(() -> { if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) { - if (jzvd.currentState == Jzvd.CURRENT_STATE_PREPARING - || jzvd.currentState == Jzvd.CURRENT_STATE_PREPARING_CHANGING_URL) { + if (jzvd.state == Jzvd.STATE_PREPARING + || jzvd.state == Jzvd.STATE_PREPARING_CHANGING_URL) { jzvd.onPrepared(); } } else { diff --git a/app/src/main/java/cn/jzvd/demo/FragmentDemo.java b/app/src/main/java/cn/jzvd/demo/FragmentDemo.java index 90c73745a..4caaa0a0b 100644 --- a/app/src/main/java/cn/jzvd/demo/FragmentDemo.java +++ b/app/src/main/java/cn/jzvd/demo/FragmentDemo.java @@ -54,7 +54,7 @@ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCoun // currentPlayPosition + " " + firstVisibleItem + " " + currentPlayPosition + " " + lastVisibleItem); if (currentPlayPosition >= 0) { if ((currentPlayPosition < firstVisibleItem || currentPlayPosition > (lastVisibleItem - 1))) { - if (Jzvd.CURRENT_JZVD.currentScreen != Jzvd.SCREEN_WINDOW_FULLSCREEN) { + if (Jzvd.CURRENT_JZVD.screen != Jzvd.SCREEN_FULLSCREEN) { Jzvd.resetAllVideos();//为什么最后一个视频横屏会调用这个,其他地方不会 } } diff --git a/app/src/main/res/layout/layout_std_with_share_button.xml b/app/src/main/res/layout/layout_std_with_share_button.xml index 06ece2685..6880672f1 100755 --- a/app/src/main/res/layout/layout_std_with_share_button.xml +++ b/app/src/main/res/layout/layout_std_with_share_button.xml @@ -107,22 +107,24 @@ + android:paddingStart="10dp" + android:paddingLeft="10dp" + android:visibility="gone"> @@ -131,8 +133,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" - android:layout_marginStart="12dp" - android:layout_marginLeft="12dp" android:layout_marginEnd="12dp" android:layout_marginRight="12dp" android:layout_toLeftOf="@+id/battery_time_layout" @@ -164,7 +164,8 @@ android:layout_marginEnd="14dp" android:layout_marginRight="14dp" android:gravity="center_vertical" - android:orientation="vertical"> + android:orientation="vertical" + android:visibility="invisible"> signing.signPom(deployment) } - repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") { - authentication(userName: getProperty('ossrhUsername'), - password: getProperty('ossrhPassword')) - } +// repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") { +// authentication(userName: getProperty('ossrhUsername'), +// password: getProperty('ossrhPassword')) +// } pom.project { name 'jiaozivideoplayer' @@ -58,7 +44,7 @@ uploadArchives { developer { id 'Nathen' name 'Nathen' - email '821537155@qq.com' + email '1066666651@qq.com' } } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2b4308c22..7a33c7e96 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/jiaozivideoplayer/build.gradle b/jiaozivideoplayer/build.gradle index d0bcb9df2..71d1678c9 100644 --- a/jiaozivideoplayer/build.gradle +++ b/jiaozivideoplayer/build.gradle @@ -6,8 +6,8 @@ android { defaultConfig { minSdkVersion 16 targetSdkVersion 28 - versionCode 90 - versionName "7.0.2" + versionCode 91 + versionName "7.0.3" } compileOptions { diff --git a/jiaozivideoplayer/src/androidTest/java/cn/jzvd/ApplicationTest.java b/jiaozivideoplayer/src/androidTest/java/cn/jzvd/ApplicationTest.java deleted file mode 100644 index 53fa5660f..000000000 --- a/jiaozivideoplayer/src/androidTest/java/cn/jzvd/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package cn.jzvd; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} diff --git a/jiaozivideoplayer/src/main/java/cn/jzvd/JZDataSource.java b/jiaozivideoplayer/src/main/java/cn/jzvd/JZDataSource.java index da2708153..9fcad1216 100644 --- a/jiaozivideoplayer/src/main/java/cn/jzvd/JZDataSource.java +++ b/jiaozivideoplayer/src/main/java/cn/jzvd/JZDataSource.java @@ -10,7 +10,7 @@ public class JZDataSource { public int currentUrlIndex; public LinkedHashMap urlsMap = new LinkedHashMap(); public String title = ""; - public HashMap headerMap = new HashMap(); + public HashMap headerMap = new HashMap<>(); public boolean looping = false; public Object[] objects; @@ -81,6 +81,8 @@ public boolean containsTheUrl(Object object) { } public JZDataSource cloneMe() { - return new JZDataSource(urlsMap, title); + LinkedHashMap map = new LinkedHashMap(); + map.putAll(urlsMap); + return new JZDataSource(map, title); } } diff --git a/jiaozivideoplayer/src/main/java/cn/jzvd/JZMediaSystem.java b/jiaozivideoplayer/src/main/java/cn/jzvd/JZMediaSystem.java index cb3bc5c12..2678015d0 100644 --- a/jiaozivideoplayer/src/main/java/cn/jzvd/JZMediaSystem.java +++ b/jiaozivideoplayer/src/main/java/cn/jzvd/JZMediaSystem.java @@ -137,7 +137,7 @@ public void onPrepared(MediaPlayer mediaPlayer) { mediaPlayer.start(); if (jzvd.jzDataSource.getCurrentUrl().toString().toLowerCase().contains("mp3") || jzvd.jzDataSource.getCurrentUrl().toString().toLowerCase().contains("wav")) { - handler.post(() -> jzvd.onPrepared()); + handler.post(() -> jzvd.onPrepared());//如果是mp3音频,走这里 } } @@ -166,9 +166,9 @@ public boolean onError(MediaPlayer mediaPlayer, final int what, final int extra) public boolean onInfo(MediaPlayer mediaPlayer, final int what, final int extra) { handler.post(() -> { if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) { - if (jzvd.currentState == Jzvd.CURRENT_STATE_PREPARING - || jzvd.currentState == Jzvd.CURRENT_STATE_PREPARING_CHANGING_URL) { - jzvd.onPrepared(); + if (jzvd.state == Jzvd.STATE_PREPARING + || jzvd.state == Jzvd.STATE_PREPARING_CHANGING_URL) { + jzvd.onPrepared();//真正的prepared } } else { jzvd.onInfo(what, extra); diff --git a/jiaozivideoplayer/src/main/java/cn/jzvd/JZUtils.java b/jiaozivideoplayer/src/main/java/cn/jzvd/JZUtils.java index 477eeadb1..5e48cb9e3 100755 --- a/jiaozivideoplayer/src/main/java/cn/jzvd/JZUtils.java +++ b/jiaozivideoplayer/src/main/java/cn/jzvd/JZUtils.java @@ -15,7 +15,6 @@ import android.view.View; import android.view.Window; import android.view.WindowManager; -import android.widget.Toast; import java.util.Formatter; import java.util.Locale; @@ -26,6 +25,7 @@ */ public class JZUtils { public static final String TAG = "JZVD"; + public static int SYSTEM_UI = 0; public static String stringForTime(long timeMs) { if (timeMs <= 0 || timeMs >= 24 * 60 * 60 * 1000) { @@ -180,25 +180,10 @@ public static void hideSystemUI(Context context) { } - public static int SYSTEM_UI = 0; - @SuppressLint("NewApi") public static void showSystemUI(Context context) { int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE; JZUtils.getWindow(context).getDecorView().setSystemUiVisibility(SYSTEM_UI); } - public static void verifyStoragePermissions(Activity activity) { - try { - int permission = ActivityCompat.checkSelfPermission(activity, - "android.permission.WRITE_EXTERNAL_STORAGE"); - if (permission != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(activity, new String[]{ - "android.permission.READ_EXTERNAL_STORAGE", - "android.permission.WRITE_EXTERNAL_STORAGE"}, 1); - } - } catch (Exception e) { - e.printStackTrace(); - } - } } diff --git a/jiaozivideoplayer/src/main/java/cn/jzvd/Jzvd.java b/jiaozivideoplayer/src/main/java/cn/jzvd/Jzvd.java index 02ebac852..fb0d53ed6 100644 --- a/jiaozivideoplayer/src/main/java/cn/jzvd/Jzvd.java +++ b/jiaozivideoplayer/src/main/java/cn/jzvd/Jzvd.java @@ -16,7 +16,6 @@ import android.view.ViewGroup; import android.view.ViewParent; import android.view.WindowManager; -import android.widget.AbsListView; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.SeekBar; @@ -35,22 +34,21 @@ public abstract class Jzvd extends FrameLayout implements View.OnClickListener, SeekBar.OnSeekBarChangeListener, View.OnTouchListener { public static final String TAG = "JZVD"; - public static final int THRESHOLD = 80; + public static Jzvd CURRENT_JZVD; + public static LinkedList CONTAINER_LIST = new LinkedList<>(); public static final int SCREEN_NORMAL = 0; - //TODO 干掉这个变量 - public static final int SCREEN_WINDOW_LIST = 1; - public static final int SCREEN_WINDOW_FULLSCREEN = 2; - public static final int SCREEN_WINDOW_TINY = 3; + public static final int SCREEN_FULLSCREEN = 1; + public static final int SCREEN_TINY = 2; public static final int STATE_IDLE = -1; - public static final int CURRENT_STATE_NORMAL = 0; - public static final int CURRENT_STATE_PREPARING = 1; - public static final int CURRENT_STATE_PREPARING_CHANGING_URL = 2; - public static final int CURRENT_STATE_PLAYING = 3; - public static final int CURRENT_STATE_PAUSE = 5; - public static final int CURRENT_STATE_AUTO_COMPLETE = 6; - public static final int CURRENT_STATE_ERROR = 7; + public static final int STATE_NORMAL = 0; + public static final int STATE_PREPARING = 1; + public static final int STATE_PREPARING_CHANGING_URL = 2; + public static final int STATE_PLAYING = 3; + public static final int STATE_PAUSE = 5; + public static final int STATE_AUTO_COMPLETE = 6; + public static final int STATE_ERROR = 7; public static final int VIDEO_IMAGE_DISPLAY_TYPE_ADAPTER = 0;//DEFAULT public static final int VIDEO_IMAGE_DISPLAY_TYPE_FILL_PARENT = 1; @@ -58,58 +56,37 @@ public abstract class Jzvd extends FrameLayout implements View.OnClickListener, public static final int VIDEO_IMAGE_DISPLAY_TYPE_ORIGINAL = 3; public static boolean TOOL_BAR_EXIST = true; public static int FULLSCREEN_ORIENTATION = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; - public static int NORMAL_ORIENTATION = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;//过一遍demo + public static int NORMAL_ORIENTATION = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; public static boolean SAVE_PROGRESS = true; public static boolean WIFI_TIP_DIALOG_SHOWED = false; public static int VIDEO_IMAGE_DISPLAY_TYPE = 0; public static long lastAutoFullscreenTime = 0; - public static Jzvd CURRENT_JZVD; - public static AudioManager.OnAudioFocusChangeListener onAudioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {//是否新建个class,代码更规矩,并且变量的位置也很尴尬 - @Override - public void onAudioFocusChange(int focusChange) { - switch (focusChange) { - case AudioManager.AUDIOFOCUS_GAIN: - break; - case AudioManager.AUDIOFOCUS_LOSS: - resetAllVideos(); - Log.d(TAG, "AUDIOFOCUS_LOSS [" + this.hashCode() + "]"); - break; - case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: -// try { -// Jzvd player = JzvdMgr.getCurrentJzvd(); -// if (player != null && player.currentState == Jzvd.CURRENT_STATE_PLAYING) { -// player.startButton.performClick(); -// } -// } catch (IllegalStateException e) { -// e.printStackTrace(); -// } - Log.d(TAG, "AUDIOFOCUS_LOSS_TRANSIENT [" + this.hashCode() + "]"); - break; - case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: - break; - } - } - }; - public static LinkedList CONTAINER_LIST = new LinkedList(); - public static int ON_PLAY_PAUSE_TMP_STATE = 0; - public int currentState = -1; - public int currentScreen = -1; + public static final int THRESHOLD = 80; + public static int ON_PLAY_PAUSE_TMP_STATE = 0;//这个考虑不放到库里,去自定义 + + public int state = -1; + public int screen = -1; + public JZDataSource jzDataSource; + public int widthRatio = 0; + public int heightRatio = 0; + public Class mediaInterfaceClass; + public JZMediaInterface mediaInterface; + public int positionInList = -1;//很想干掉它 + public int videoRotation = 0; + protected long gobakFullscreenTime = 0;//这个应该重写一下,刷新列表,新增列表的刷新,不打断播放,应该是个flag + + public int seekToManulPosition = -1; public long seekToInAdvance = 0; + public ImageView startButton; public SeekBar progressBar; public ImageView fullscreenButton; public TextView currentTimeTextView, totalTimeTextView; public ViewGroup textureViewContainer; public ViewGroup topContainer, bottomContainer; - public int widthRatio = 0; - public int heightRatio = 0; - public JZDataSource jzDataSource; - public int positionInList = -1;//很想干掉它 - public int videoRotation = 0; - public JZMediaInterface mediaInterface; - public Class mediaInterfaceClass; public JZTextureView textureView; - public int seekToManulPosition = -1; + + protected Timer UPDATE_PROGRESS_TIMER; protected int mScreenWidth; protected int mScreenHeight; @@ -125,8 +102,6 @@ public void onAudioFocusChange(int focusChange) { protected int mGestureDownVolume; protected float mGestureDownBrightness; protected long mSeekTimePosition; - //liestview中,退出全屏也会导致列表getview->setUp,这个变量要屏蔽这个过程 - protected long gobakFullscreenTime = 0; public Jzvd(Context context) { super(context); @@ -138,120 +113,6 @@ public Jzvd(Context context, AttributeSet attrs) { init(context); } - public static void resetAllVideos() { - Log.d(TAG, "resetAllVideos"); - if (CURRENT_JZVD != null) { - CURRENT_JZVD.reset(); - CURRENT_JZVD = null; - } - } - - public static void clearSavedProgress(Context context, String url) { - JZUtils.clearSavedProgress(context, url); - } - - public static void goOnPlayOnResume() { - if (CURRENT_JZVD != null) { - if (CURRENT_JZVD.currentState == Jzvd.CURRENT_STATE_PAUSE) { - if (ON_PLAY_PAUSE_TMP_STATE == CURRENT_STATE_PAUSE) { - CURRENT_JZVD.onStatePause(); - CURRENT_JZVD.mediaInterface.pause(); - } else { - CURRENT_JZVD.onStatePlaying(); - CURRENT_JZVD.mediaInterface.start(); - } - ON_PLAY_PAUSE_TMP_STATE = 0; - } - } - } - - public static void goOnPlayOnPause() { - if (CURRENT_JZVD != null) { - if (CURRENT_JZVD.currentState == Jzvd.CURRENT_STATE_AUTO_COMPLETE || - CURRENT_JZVD.currentState == Jzvd.CURRENT_STATE_NORMAL || - CURRENT_JZVD.currentState == Jzvd.CURRENT_STATE_ERROR) { - Jzvd.resetAllVideos(); - } else { - ON_PLAY_PAUSE_TMP_STATE = CURRENT_JZVD.currentState; - CURRENT_JZVD.onStatePause(); - CURRENT_JZVD.mediaInterface.pause(); - } - } - } - - public static void onChildViewAttachedToWindow(View view, int jzvdId) { - - } - - public static void onChildViewDetachedFromWindow(View view, int jzvdId) { - - } - - public static void setTextureViewRotation(int rotation) { - if (CURRENT_JZVD != null && CURRENT_JZVD.textureView != null) { - CURRENT_JZVD.textureView.setRotation(rotation); - } - } - - public static void setVideoImageDisplayType(int type) { - Jzvd.VIDEO_IMAGE_DISPLAY_TYPE = type; - if (CURRENT_JZVD != null && CURRENT_JZVD.textureView != null) { - CURRENT_JZVD.textureView.requestLayout(); - } - } - - public static void setCurrentJzvd(Jzvd jzvd) { - if (CURRENT_JZVD != null) CURRENT_JZVD.reset(); - CURRENT_JZVD = jzvd; - } - - public static boolean backPress() { - Log.i(TAG, "backPress"); -// if ((System.currentTimeMillis() - CLICK_QUIT_FULLSCREEN_TIME) < FULL_SCREEN_NORMAL_DELAY) -// return false; 这些东西遇到了再改,最后过代码的时候删除残留 - if (CONTAINER_LIST.size() != 0 && CURRENT_JZVD != null) {//判断条件,因为当前所有goBack都是回到普通窗口 - CURRENT_JZVD.gotoScreenNormal(); - return true; - } else if (CONTAINER_LIST.size() == 0 && CURRENT_JZVD != null && CURRENT_JZVD.currentScreen != SCREEN_NORMAL) {//退出直接进入的全屏 - CURRENT_JZVD.clearFloatScreen(); - return true; - } - return false; - } - - public static void startFullscreenDirectly(Context context, Class _class, String url, String title) { - startFullscreenDirectly(context, _class, new JZDataSource(url, title)); - } - - public static void startFullscreenDirectly(Context context, Class _class, JZDataSource jzDataSource) { - JZUtils.hideStatusBar(context); - JZUtils.setRequestedOrientation(context, FULLSCREEN_ORIENTATION); - JZUtils.hideSystemUI(context); - - ViewGroup vp = (ViewGroup) JZUtils.scanForActivity(context).getWindow().getDecorView(); - try { - Constructor constructor = _class.getConstructor(Context.class); - final Jzvd jzvd = constructor.newInstance(context); - FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); - vp.addView(jzvd, lp); - jzvd.setUp(jzDataSource, JzvdStd.SCREEN_WINDOW_FULLSCREEN); - jzvd.startVideo(); - } catch (InstantiationException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * @param mediaInterface - */ - public void setMediaInterface(JZMediaInterface mediaInterface) { - reset(); - this.mediaInterface = mediaInterface; - } - public abstract int getLayoutId(); public void init(Context context) { @@ -274,32 +135,40 @@ public void init(Context context) { mScreenWidth = getContext().getResources().getDisplayMetrics().widthPixels; mScreenHeight = getContext().getResources().getDisplayMetrics().heightPixels; - mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); - currentState = STATE_IDLE; + state = STATE_IDLE; } - public void setUp(String url, String title, int screen) { - setUp(new JZDataSource(url, title), screen); + public void setUp(String url, String title) { + setUp(new JZDataSource(url, title), SCREEN_NORMAL); } - public void setUp(String url, String title, int screen, Class mediaInterfaceClass) { - setUp(new JZDataSource(url, title), screen, mediaInterfaceClass); + public void setUp(String url, String title, int screen) { + setUp(new JZDataSource(url, title), screen); } public void setUp(JZDataSource jzDataSource, int screen) { setUp(jzDataSource, screen, JZMediaSystem.class); } + public void setUp(String url, String title, int screen, Class mediaInterfaceClass) { + setUp(new JZDataSource(url, title), screen, mediaInterfaceClass); + } + public void setUp(JZDataSource jzDataSource, int screen, Class mediaInterfaceClass) { if ((System.currentTimeMillis() - gobakFullscreenTime) < 200) return; this.jzDataSource = jzDataSource; - this.currentScreen = screen; + this.screen = screen; onStateNormal(); this.mediaInterfaceClass = mediaInterfaceClass; } + public void setMediaInterface(Class mediaInterfaceClass) { + reset(); + this.mediaInterfaceClass = mediaInterfaceClass; + } + @Override public void onClick(View v) { int i = v.getId(); @@ -309,7 +178,7 @@ public void onClick(View v) { Toast.makeText(getContext(), getResources().getString(R.string.no_url), Toast.LENGTH_SHORT).show(); return; } - if (currentState == CURRENT_STATE_NORMAL) { + if (state == STATE_NORMAL) { if (!jzDataSource.getCurrentUrl().toString().startsWith("file") && ! jzDataSource.getCurrentUrl().toString().startsWith("/") && !JZUtils.isWifiConnected(getContext()) && !WIFI_TIP_DIALOG_SHOWED) {//这个可以放到std中 @@ -317,20 +186,20 @@ public void onClick(View v) { return; } startVideo(); - } else if (currentState == CURRENT_STATE_PLAYING) { + } else if (state == STATE_PLAYING) { Log.d(TAG, "pauseVideo [" + this.hashCode() + "] "); mediaInterface.pause(); onStatePause(); - } else if (currentState == CURRENT_STATE_PAUSE) { + } else if (state == STATE_PAUSE) { mediaInterface.start(); onStatePlaying(); - } else if (currentState == CURRENT_STATE_AUTO_COMPLETE) { + } else if (state == STATE_AUTO_COMPLETE) { startVideo(); } } else if (i == R.id.fullscreen) { Log.i(TAG, "onClick fullscreen [" + this.hashCode() + "] "); - if (currentState == CURRENT_STATE_AUTO_COMPLETE) return; - if (currentScreen == SCREEN_WINDOW_FULLSCREEN) { + if (state == STATE_AUTO_COMPLETE) return; + if (screen == SCREEN_FULLSCREEN) { //quit fullscreen backPress(); } else { @@ -363,14 +232,14 @@ public boolean onTouch(View v, MotionEvent event) { float deltaY = y - mDownY; float absDeltaX = Math.abs(deltaX); float absDeltaY = Math.abs(deltaY); - if (currentScreen == SCREEN_WINDOW_FULLSCREEN) { + if (screen == SCREEN_FULLSCREEN) { if (!mChangePosition && !mChangeVolume && !mChangeBrightness) { if (absDeltaX > THRESHOLD || absDeltaY > THRESHOLD) { cancelProgressTimer(); if (absDeltaX >= THRESHOLD) { // 全屏模式下的CURRENT_STATE_ERROR状态下,不响应进度拖动事件. // 否则会因为mediaplayer的状态非法导致App Crash - if (currentState != CURRENT_STATE_ERROR) { + if (state != STATE_ERROR) { mChangePosition = true; mGestureDownPosition = getCurrentPositionWhenPlaying(); } @@ -458,109 +327,23 @@ public boolean onTouch(View v, MotionEvent event) { return false; } - public void startVideo() { - Log.d(TAG, "startVideo [" + this.hashCode() + "] "); - setCurrentJzvd(this); - Constructor constructor = null; - try { - constructor = mediaInterfaceClass.getConstructor(Jzvd.class); - this.mediaInterface = constructor.newInstance(this); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InstantiationException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } - addTextureView(); - AudioManager mAudioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE); - mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); - JZUtils.scanForActivity(getContext()).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - - onStatePreparing(); - } - - public void onPrepared() { - Log.i(TAG, "onPrepared " + " [" + this.hashCode() + "] "); - onStatePrepared(); - onStatePlaying(); - } - - public void setState(int state) { - setState(state, 0, 0); - } - - public void setState(int state, int urlMapIndex, int seekToInAdvance) {//后面两个参数干嘛的 - switch (state) { - case CURRENT_STATE_NORMAL: - onStateNormal(); - break; - case CURRENT_STATE_PREPARING: - onStatePreparing(); - break; - case CURRENT_STATE_PREPARING_CHANGING_URL: - changeUrl(urlMapIndex, seekToInAdvance); - break; - case CURRENT_STATE_PLAYING: - onStatePlaying(); - break; - case CURRENT_STATE_PAUSE: - onStatePause(); - break; - case CURRENT_STATE_ERROR: - onStateError(); - break; - case CURRENT_STATE_AUTO_COMPLETE: - onStateAutoComplete(); - break; - } - } - - public void setScreen(int screen) {//特殊的个别的进入全屏的按钮在这里设置 只有setup的时候能用上 - switch (screen) { - case SCREEN_NORMAL: - setScreenNormal(); - break; - case SCREEN_WINDOW_FULLSCREEN: - setScreenFullscreen(); - break; - case SCREEN_WINDOW_TINY: - setScreenTiny(); - break; - } - } - public void onStateNormal() { Log.i(TAG, "onStateNormal " + " [" + this.hashCode() + "] "); - currentState = CURRENT_STATE_NORMAL; + state = STATE_NORMAL; cancelProgressTimer(); if (mediaInterface != null) mediaInterface.release(); } public void onStatePreparing() { Log.i(TAG, "onStatePreparing " + " [" + this.hashCode() + "] "); - currentState = CURRENT_STATE_PREPARING; + state = STATE_PREPARING; resetProgressAndTime(); } - public void changeUrl(int urlMapIndex, long seekToInAdvance) { - currentState = CURRENT_STATE_PREPARING_CHANGING_URL; - this.seekToInAdvance = seekToInAdvance; - jzDataSource.currentUrlIndex = urlMapIndex; - mediaInterface.prepare(); - } - - public void changeUrl(JZDataSource jzDataSource, long seekToInAdvance) { - currentState = CURRENT_STATE_PREPARING_CHANGING_URL; - this.seekToInAdvance = seekToInAdvance; - this.jzDataSource = jzDataSource; - mediaInterface.prepare(); - } - - public void changeUrl(String url, String title, long seekToInAdvance) { - changeUrl(new JZDataSource(url, title), seekToInAdvance); + public void onPrepared() { + Log.i(TAG, "onPrepared " + " [" + this.hashCode() + "] "); + onStatePrepared(); + onStatePlaying(); } public void onStatePrepared() {//因为这个紧接着就会进入播放状态,所以不设置state @@ -577,25 +360,25 @@ public void onStatePrepared() {//因为这个紧接着就会进入播放状态 public void onStatePlaying() { Log.i(TAG, "onStatePlaying " + " [" + this.hashCode() + "] "); - currentState = CURRENT_STATE_PLAYING; + state = STATE_PLAYING; startProgressTimer(); } public void onStatePause() { Log.i(TAG, "onStatePause " + " [" + this.hashCode() + "] "); - currentState = CURRENT_STATE_PAUSE; + state = STATE_PAUSE; startProgressTimer(); } public void onStateError() { Log.i(TAG, "onStateError " + " [" + this.hashCode() + "] "); - currentState = CURRENT_STATE_ERROR; + state = STATE_ERROR; cancelProgressTimer(); } public void onStateAutoComplete() { Log.i(TAG, "onStateAutoComplete " + " [" + this.hashCode() + "] "); - currentState = CURRENT_STATE_AUTO_COMPLETE; + state = STATE_AUTO_COMPLETE; cancelProgressTimer(); progressBar.setProgress(100); currentTimeTextView.setText(totalTimeTextView.getText()); @@ -613,26 +396,6 @@ public void onError(int what, int extra) { } } - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (currentScreen == SCREEN_WINDOW_FULLSCREEN || currentScreen == SCREEN_WINDOW_TINY) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - return; - } - if (widthRatio != 0 && heightRatio != 0) { - int specWidth = MeasureSpec.getSize(widthMeasureSpec); - int specHeight = (int) ((specWidth * (float) heightRatio) / widthRatio); - setMeasuredDimension(specWidth, specHeight); - - int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(specWidth, MeasureSpec.EXACTLY); - int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(specHeight, MeasureSpec.EXACTLY); - getChildAt(0).measure(childWidthMeasureSpec, childHeightMeasureSpec); - } else { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - - } - public void onAutoCompletion() { Runtime.getRuntime().gc(); Log.i(TAG, "onAutoCompletion " + " [" + this.hashCode() + "] "); @@ -646,9 +409,12 @@ public void onAutoCompletion() { JZUtils.saveProgress(getContext(), jzDataSource.getCurrentUrl(), 0); } + /** + * 多数表现为中断当前播放 + */ public void reset() { Log.i(TAG, "reset " + " [" + this.hashCode() + "] "); - if (currentState == CURRENT_STATE_PLAYING || currentState == CURRENT_STATE_PAUSE) { + if (state == STATE_PLAYING || state == STATE_PAUSE) { long position = getCurrentPositionWhenPlaying(); JZUtils.saveProgress(getContext(), jzDataSource.getCurrentUrl(), position); } @@ -666,6 +432,114 @@ public void reset() { if (mediaInterface != null) mediaInterface.release(); } + public void setState(int state) { + setState(state, 0, 0); + } + + public void setState(int state, int urlMapIndex, int seekToInAdvance) {//后面两个参数干嘛的 + switch (state) { + case STATE_NORMAL: + onStateNormal(); + break; + case STATE_PREPARING: + onStatePreparing(); + break; + case STATE_PREPARING_CHANGING_URL: + changeUrl(urlMapIndex, seekToInAdvance); + break; + case STATE_PLAYING: + onStatePlaying(); + break; + case STATE_PAUSE: + onStatePause(); + break; + case STATE_ERROR: + onStateError(); + break; + case STATE_AUTO_COMPLETE: + onStateAutoComplete(); + break; + } + } + + public void setScreen(int screen) {//特殊的个别的进入全屏的按钮在这里设置 只有setup的时候能用上 + switch (screen) { + case SCREEN_NORMAL: + setScreenNormal(); + break; + case SCREEN_FULLSCREEN: + setScreenFullscreen(); + break; + case SCREEN_TINY: + setScreenTiny(); + break; + } + } + + public void startVideo() { + Log.d(TAG, "startVideo [" + this.hashCode() + "] "); + setCurrentJzvd(this); + Constructor constructor = null; + try { + constructor = mediaInterfaceClass.getConstructor(Jzvd.class); + this.mediaInterface = constructor.newInstance(this); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + addTextureView(); + + mAudioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE); + mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); + JZUtils.scanForActivity(getContext()).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + + onStatePreparing(); + } + + + public void changeUrl(int urlMapIndex, long seekToInAdvance) { + state = STATE_PREPARING_CHANGING_URL; + this.seekToInAdvance = seekToInAdvance; + jzDataSource.currentUrlIndex = urlMapIndex; + mediaInterface.prepare(); + } + + public void changeUrl(JZDataSource jzDataSource, long seekToInAdvance) { + state = STATE_PREPARING_CHANGING_URL; + this.seekToInAdvance = seekToInAdvance; + this.jzDataSource = jzDataSource; + mediaInterface.prepare(); + } + + public void changeUrl(String url, String title, long seekToInAdvance) { + changeUrl(new JZDataSource(url, title), seekToInAdvance); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (screen == SCREEN_FULLSCREEN || screen == SCREEN_TINY) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + return; + } + if (widthRatio != 0 && heightRatio != 0) { + int specWidth = MeasureSpec.getSize(widthMeasureSpec); + int specHeight = (int) ((specWidth * (float) heightRatio) / widthRatio); + setMeasuredDimension(specWidth, specHeight); + + int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(specWidth, MeasureSpec.EXACTLY); + int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(specHeight, MeasureSpec.EXACTLY); + getChildAt(0).measure(childWidthMeasureSpec, childHeightMeasureSpec); + } else { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + } + public void addTextureView() { Log.d(TAG, "addTextureView [" + this.hashCode() + "] "); if (textureView != null) textureViewContainer.removeView(textureView); @@ -687,8 +561,8 @@ public void clearFloatScreen() { ViewGroup vg = (ViewGroup) (JZUtils.scanForActivity(getContext())).getWindow().getDecorView(); vg.removeView(this); - CURRENT_JZVD = null; mediaInterface.release(); + CURRENT_JZVD = null; } public void onVideoSizeChanged(int width, int height) { @@ -748,9 +622,8 @@ public void resetProgressAndTime() { public long getCurrentPositionWhenPlaying() { long position = 0; - //TODO 这块的判断应该根据MediaPlayer来 - if (currentState == CURRENT_STATE_PLAYING || - currentState == CURRENT_STATE_PAUSE) { + if (state == STATE_PLAYING || + state == STATE_PAUSE) { try { position = mediaInterface.getCurrentPosition(); } catch (IllegalStateException e) { @@ -763,8 +636,6 @@ public long getCurrentPositionWhenPlaying() { public long getDuration() { long duration = 0; - //TODO MediaPlayer 判空的问题 -// if (JZMediaPlayer.instance().mediaPlayer == null) return duration; try { duration = mediaInterface.getDuration(); } catch (IllegalStateException e) { @@ -794,8 +665,8 @@ public void onStopTrackingTouch(SeekBar seekBar) { vpup.requestDisallowInterceptTouchEvent(false); vpup = vpup.getParent(); } - if (currentState != CURRENT_STATE_PLAYING && - currentState != CURRENT_STATE_PAUSE) return; + if (state != STATE_PLAYING && + state != STATE_PAUSE) return; long time = seekBar.getProgress() * getDuration() / 100; seekToManulPosition = seekBar.getProgress(); mediaInterface.seekTo(time); @@ -860,24 +731,24 @@ public void gotoScreenNormal() {//goback本质上是goto JZUtils.showSystemUI(getContext()); } - public void setScreenNormal() { - currentScreen = SCREEN_NORMAL; + public void setScreenNormal() {//TODO 这块不对呀,还需要改进,设置flag之后要设置ui,不设置ui这么写没意义呀 + screen = SCREEN_NORMAL; } public void setScreenFullscreen() { - currentScreen = SCREEN_WINDOW_FULLSCREEN; + screen = SCREEN_FULLSCREEN; } public void setScreenTiny() { - currentScreen = SCREEN_WINDOW_TINY; + screen = SCREEN_TINY; } // //重力感应的时候调用的函数,、、这里有重力感应的参数,暂时不能删除 - public void autoFullscreen(float x) { + public void autoFullscreen(float x) {//TODO写道demo中 if (CURRENT_JZVD != null - && (currentState == CURRENT_STATE_PLAYING || currentState == CURRENT_STATE_PAUSE) - && currentScreen != SCREEN_WINDOW_FULLSCREEN - && currentScreen != SCREEN_WINDOW_TINY) { + && (state == STATE_PLAYING || state == STATE_PAUSE) + && screen != SCREEN_FULLSCREEN + && screen != SCREEN_TINY) { if (x > 0) { JZUtils.setRequestedOrientation(getContext(), ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else { @@ -890,8 +761,8 @@ public void autoFullscreen(float x) { public void autoQuitFullscreen() { if ((System.currentTimeMillis() - lastAutoFullscreenTime) > 2000 // && CURRENT_JZVD != null - && currentState == CURRENT_STATE_PLAYING - && currentScreen == SCREEN_WINDOW_FULLSCREEN) { + && state == STATE_PLAYING + && screen == SCREEN_FULLSCREEN) { lastAutoFullscreenTime = System.currentTimeMillis(); backPress(); } @@ -964,7 +835,7 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) { public class ProgressTimerTask extends TimerTask { @Override public void run() { - if (currentState == CURRENT_STATE_PLAYING || currentState == CURRENT_STATE_PAUSE) { + if (state == STATE_PLAYING || state == STATE_PAUSE) { // Log.v(TAG, "onProgressUpdate " + "[" + this.hashCode() + "] "); post(() -> { long position = getCurrentPositionWhenPlaying(); @@ -975,4 +846,129 @@ public void run() { } } } + + public static AudioManager.OnAudioFocusChangeListener onAudioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {//是否新建个class,代码更规矩,并且变量的位置也很尴尬 + @Override + public void onAudioFocusChange(int focusChange) { + switch (focusChange) { + case AudioManager.AUDIOFOCUS_GAIN: + break; + case AudioManager.AUDIOFOCUS_LOSS: + resetAllVideos(); + Log.d(TAG, "AUDIOFOCUS_LOSS [" + this.hashCode() + "]"); + break; + case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: + try { + Jzvd player = CURRENT_JZVD; + if (player != null && player.state == Jzvd.STATE_PLAYING) { + player.startButton.performClick(); + } + } catch (IllegalStateException e) { + e.printStackTrace(); + } + Log.d(TAG, "AUDIOFOCUS_LOSS_TRANSIENT [" + this.hashCode() + "]"); + break; + case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: + break; + } + } + }; + + public static void goOnPlayOnResume() { + if (CURRENT_JZVD != null) { + if (CURRENT_JZVD.state == Jzvd.STATE_PAUSE) { + if (ON_PLAY_PAUSE_TMP_STATE == STATE_PAUSE) { + CURRENT_JZVD.onStatePause(); + CURRENT_JZVD.mediaInterface.pause(); + } else { + CURRENT_JZVD.onStatePlaying(); + CURRENT_JZVD.mediaInterface.start(); + } + ON_PLAY_PAUSE_TMP_STATE = 0; + } + } + } + + public static void goOnPlayOnPause() { + if (CURRENT_JZVD != null) { + if (CURRENT_JZVD.state == Jzvd.STATE_AUTO_COMPLETE || + CURRENT_JZVD.state == Jzvd.STATE_NORMAL || + CURRENT_JZVD.state == Jzvd.STATE_ERROR) { + Jzvd.resetAllVideos(); + } else { + ON_PLAY_PAUSE_TMP_STATE = CURRENT_JZVD.state; + CURRENT_JZVD.onStatePause(); + CURRENT_JZVD.mediaInterface.pause(); + } + } + } + + public static void startFullscreenDirectly(Context context, Class _class, String url, String title) { + startFullscreenDirectly(context, _class, new JZDataSource(url, title)); + } + + public static void startFullscreenDirectly(Context context, Class _class, JZDataSource jzDataSource) { + JZUtils.hideStatusBar(context); + JZUtils.setRequestedOrientation(context, FULLSCREEN_ORIENTATION); + JZUtils.hideSystemUI(context); + + ViewGroup vp = (ViewGroup) JZUtils.scanForActivity(context).getWindow().getDecorView(); + try { + Constructor constructor = _class.getConstructor(Context.class); + final Jzvd jzvd = constructor.newInstance(context); + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + vp.addView(jzvd, lp); + jzvd.setUp(jzDataSource, JzvdStd.SCREEN_FULLSCREEN); + jzvd.startVideo(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + public static void resetAllVideos() { + Log.d(TAG, "resetAllVideos"); + if (CURRENT_JZVD != null) { + CURRENT_JZVD.reset(); + CURRENT_JZVD = null; + } + } + + public static boolean backPress() { + Log.i(TAG, "backPress"); + if (CONTAINER_LIST.size() != 0 && CURRENT_JZVD != null) {//判断条件,因为当前所有goBack都是回到普通窗口 + CURRENT_JZVD.gotoScreenNormal(); + return true; + } else if (CONTAINER_LIST.size() == 0 && CURRENT_JZVD != null && CURRENT_JZVD.screen != SCREEN_NORMAL) {//退出直接进入的全屏 + CURRENT_JZVD.clearFloatScreen(); + return true; + } + return false; + } + + public static void setCurrentJzvd(Jzvd jzvd) { + if (CURRENT_JZVD != null) CURRENT_JZVD.reset(); + CURRENT_JZVD = jzvd; + } + + public static void clearSavedProgress(Context context, String url) { + JZUtils.clearSavedProgress(context, url); + } + + public static void setTextureViewRotation(int rotation) { + if (CURRENT_JZVD != null && CURRENT_JZVD.textureView != null) { + CURRENT_JZVD.textureView.setRotation(rotation); + } + } + + public static void setVideoImageDisplayType(int type) { + Jzvd.VIDEO_IMAGE_DISPLAY_TYPE = type; + if (CURRENT_JZVD != null && CURRENT_JZVD.textureView != null) { + CURRENT_JZVD.textureView.requestLayout(); + } + } + } diff --git a/jiaozivideoplayer/src/main/java/cn/jzvd/JzvdStd.java b/jiaozivideoplayer/src/main/java/cn/jzvd/JzvdStd.java index ee9cc0565..bc1efc96f 100644 --- a/jiaozivideoplayer/src/main/java/cn/jzvd/JzvdStd.java +++ b/jiaozivideoplayer/src/main/java/cn/jzvd/JzvdStd.java @@ -38,6 +38,7 @@ public class JzvdStd extends Jzvd { public static long LAST_GET_BATTERYLEVEL_TIME = 0; public static int LAST_GET_BATTERYLEVEL_PERCENT = 70; protected static Timer DISMISS_CONTROL_VIEW_TIMER; + public ImageView backButton; public ProgressBar bottomProgressBar, loadingProgressBar; public TextView titleTextView; @@ -64,23 +65,7 @@ public class JzvdStd extends Jzvd { protected Dialog mBrightnessDialog; protected ProgressBar mDialogBrightnessProgressBar; protected TextView mDialogBrightnessTextView; - private BroadcastReceiver battertReceiver = new BroadcastReceiver() { - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { - int level = intent.getIntExtra("level", 0); - int scale = intent.getIntExtra("scale", 100); - int percent = level * 100 / scale; - LAST_GET_BATTERYLEVEL_PERCENT = percent; - setBatteryLevel(); - try { - getContext().unregisterReceiver(battertReceiver); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - }; + public JzvdStd(Context context) { super(context); @@ -134,47 +119,6 @@ public int getLayoutId() { return R.layout.jz_layout_std; } - - @Override - public void setScreenNormal() { - super.setScreenNormal(); - fullscreenButton.setImageResource(R.drawable.jz_enlarge); - backButton.setVisibility(View.GONE); - tinyBackImageView.setVisibility(View.INVISIBLE); - changeStartButtonSize((int) getResources().getDimension(R.dimen.jz_start_button_w_h_normal)); - batteryTimeLayout.setVisibility(View.GONE); - clarity.setVisibility(View.GONE); - } - - - @Override - public void setScreenFullscreen() { - super.setScreenFullscreen(); - //进入全屏之后要保证原来的播放状态和ui状态不变,改变个别的ui - fullscreenButton.setImageResource(R.drawable.jz_shrink); - backButton.setVisibility(View.VISIBLE); - tinyBackImageView.setVisibility(View.INVISIBLE); - batteryTimeLayout.setVisibility(View.VISIBLE); - if (jzDataSource.urlsMap.size() == 1) { - clarity.setVisibility(GONE); - } else { - clarity.setText(jzDataSource.getCurrentKey().toString()); - clarity.setVisibility(View.VISIBLE); - } - changeStartButtonSize((int) getResources().getDimension(R.dimen.jz_start_button_w_h_fullscreen)); - setSystemTimeAndBattery(); - } - - @Override - public void setScreenTiny() { - super.setScreenTiny(); - tinyBackImageView.setVisibility(View.VISIBLE); - setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, - View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE); - batteryTimeLayout.setVisibility(View.GONE); - clarity.setVisibility(View.GONE); - } - @Override public void onStateNormal() { super.onStateNormal(); @@ -187,23 +131,6 @@ public void onStatePreparing() { changeUiToPreparing(); } - @Override - public void changeUrl(int urlMapIndex, long seekToInAdvance) { - super.changeUrl(urlMapIndex, seekToInAdvance); - startButton.setVisibility(INVISIBLE); - replayTextView.setVisibility(View.GONE); - mRetryLayout.setVisibility(View.GONE); - } - - @Override - public void changeUrl(JZDataSource jzDataSource, long seekToInAdvance) { - super.changeUrl(jzDataSource, seekToInAdvance); - titleTextView.setText(jzDataSource.title); - startButton.setVisibility(INVISIBLE); - replayTextView.setVisibility(View.GONE); - mRetryLayout.setVisibility(View.GONE); - } - @Override public void onStatePlaying() { super.onStatePlaying(); @@ -231,6 +158,23 @@ public void onStateAutoComplete() { bottomProgressBar.setProgress(100); } + @Override + public void changeUrl(int urlMapIndex, long seekToInAdvance) { + super.changeUrl(urlMapIndex, seekToInAdvance); + startButton.setVisibility(INVISIBLE); + replayTextView.setVisibility(View.GONE); + mRetryLayout.setVisibility(View.GONE); + } + + @Override + public void changeUrl(JZDataSource jzDataSource, long seekToInAdvance) { + super.changeUrl(jzDataSource, seekToInAdvance); + titleTextView.setText(jzDataSource.title); + startButton.setVisibility(INVISIBLE); + replayTextView.setVisibility(View.GONE); + mRetryLayout.setVisibility(View.GONE); + } + @Override public boolean onTouch(View v, MotionEvent event) { int id = v.getId(); @@ -274,7 +218,7 @@ public void onClick(View v) { Toast.makeText(getContext(), getResources().getString(R.string.no_url), Toast.LENGTH_SHORT).show(); return; } - if (currentState == CURRENT_STATE_NORMAL) { + if (state == STATE_NORMAL) { if (!jzDataSource.getCurrentUrl().toString().startsWith("file") && !jzDataSource.getCurrentUrl().toString().startsWith("/") && !JZUtils.isWifiConnected(getContext()) && !WIFI_TIP_DIALOG_SHOWED) { @@ -282,7 +226,7 @@ public void onClick(View v) { return; } startVideo(); - } else if (currentState == CURRENT_STATE_AUTO_COMPLETE) { + } else if (state == STATE_AUTO_COMPLETE) { onClickUiToggle(); } } else if (i == R.id.surface_container) { @@ -347,6 +291,45 @@ public void onClick(View v) { } } + @Override + public void setScreenNormal() { + super.setScreenNormal(); + fullscreenButton.setImageResource(R.drawable.jz_enlarge); + backButton.setVisibility(View.GONE); + tinyBackImageView.setVisibility(View.INVISIBLE); + changeStartButtonSize((int) getResources().getDimension(R.dimen.jz_start_button_w_h_normal)); + batteryTimeLayout.setVisibility(View.GONE); + clarity.setVisibility(View.GONE); + } + + @Override + public void setScreenFullscreen() { + super.setScreenFullscreen(); + //进入全屏之后要保证原来的播放状态和ui状态不变,改变个别的ui + fullscreenButton.setImageResource(R.drawable.jz_shrink); + backButton.setVisibility(View.VISIBLE); + tinyBackImageView.setVisibility(View.INVISIBLE); + batteryTimeLayout.setVisibility(View.VISIBLE); + if (jzDataSource.urlsMap.size() == 1) { + clarity.setVisibility(GONE); + } else { + clarity.setText(jzDataSource.getCurrentKey().toString()); + clarity.setVisibility(View.VISIBLE); + } + changeStartButtonSize((int) getResources().getDimension(R.dimen.jz_start_button_w_h_fullscreen)); + setSystemTimeAndBattery(); + } + + @Override + public void setScreenTiny() { + super.setScreenTiny(); + tinyBackImageView.setVisibility(View.VISIBLE); + setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, + View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE); + batteryTimeLayout.setVisibility(View.GONE); + clarity.setVisibility(View.GONE); + } + @Override public void showWifiDialog() { super.showWifiDialog(); @@ -382,19 +365,19 @@ public void onClickUiToggle() {//这是事件 setSystemTimeAndBattery(); clarity.setText(jzDataSource.getCurrentKey().toString()); } - if (currentState == CURRENT_STATE_PREPARING) { + if (state == STATE_PREPARING) { changeUiToPreparing(); if (bottomContainer.getVisibility() == View.VISIBLE) { } else { setSystemTimeAndBattery(); } - } else if (currentState == CURRENT_STATE_PLAYING) { + } else if (state == STATE_PLAYING) { if (bottomContainer.getVisibility() == View.VISIBLE) { changeUiToPlayingClear(); } else { changeUiToPlayingShow(); } - } else if (currentState == CURRENT_STATE_PAUSE) { + } else if (state == STATE_PAUSE) { if (bottomContainer.getVisibility() == View.VISIBLE) { changeUiToPauseClear(); } else { @@ -436,22 +419,22 @@ public void setBatteryLevel() { } public void onCLickUiToggleToClear() { - if (currentState == CURRENT_STATE_PREPARING) { + if (state == STATE_PREPARING) { if (bottomContainer.getVisibility() == View.VISIBLE) { changeUiToPreparing(); } else { } - } else if (currentState == CURRENT_STATE_PLAYING) { + } else if (state == STATE_PLAYING) { if (bottomContainer.getVisibility() == View.VISIBLE) { changeUiToPlayingClear(); } else { } - } else if (currentState == CURRENT_STATE_PAUSE) { + } else if (state == STATE_PAUSE) { if (bottomContainer.getVisibility() == View.VISIBLE) { changeUiToPauseClear(); } else { } - } else if (currentState == CURRENT_STATE_AUTO_COMPLETE) { + } else if (state == STATE_AUTO_COMPLETE) { if (bottomContainer.getVisibility() == View.VISIBLE) { changeUiToComplete(); } else { @@ -480,142 +463,134 @@ public void resetProgressAndTime() { } public void changeUiToNormal() { - switch (currentScreen) { + switch (screen) { case SCREEN_NORMAL: - case SCREEN_WINDOW_LIST: setAllControlsVisiblity(View.VISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE); updateStartImage(); break; - case SCREEN_WINDOW_FULLSCREEN: + case SCREEN_FULLSCREEN: setAllControlsVisiblity(View.VISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE); updateStartImage(); break; - case SCREEN_WINDOW_TINY: + case SCREEN_TINY: break; } } public void changeUiToPreparing() { - switch (currentScreen) { + switch (screen) { case SCREEN_NORMAL: - case SCREEN_WINDOW_LIST: - case SCREEN_WINDOW_FULLSCREEN: + case SCREEN_FULLSCREEN: setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE); updateStartImage(); break; - case SCREEN_WINDOW_TINY: + case SCREEN_TINY: break; } } public void changeUiToPlayingShow() { - switch (currentScreen) { + switch (screen) { case SCREEN_NORMAL: - case SCREEN_WINDOW_LIST: setAllControlsVisiblity(View.VISIBLE, View.VISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE); updateStartImage(); break; - case SCREEN_WINDOW_FULLSCREEN: + case SCREEN_FULLSCREEN: setAllControlsVisiblity(View.VISIBLE, View.VISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE); updateStartImage(); break; - case SCREEN_WINDOW_TINY: + case SCREEN_TINY: break; } } public void changeUiToPlayingClear() { - switch (currentScreen) { + switch (screen) { case SCREEN_NORMAL: - case SCREEN_WINDOW_LIST: setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE); break; - case SCREEN_WINDOW_FULLSCREEN: + case SCREEN_FULLSCREEN: setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE); break; - case SCREEN_WINDOW_TINY: + case SCREEN_TINY: break; } } public void changeUiToPauseShow() { - switch (currentScreen) { + switch (screen) { case SCREEN_NORMAL: - case SCREEN_WINDOW_LIST: setAllControlsVisiblity(View.VISIBLE, View.VISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE); updateStartImage(); break; - case SCREEN_WINDOW_FULLSCREEN: + case SCREEN_FULLSCREEN: setAllControlsVisiblity(View.VISIBLE, View.VISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE); updateStartImage(); break; - case SCREEN_WINDOW_TINY: + case SCREEN_TINY: break; } } public void changeUiToPauseClear() { - switch (currentScreen) { + switch (screen) { case SCREEN_NORMAL: - case SCREEN_WINDOW_LIST: setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE); break; - case SCREEN_WINDOW_FULLSCREEN: + case SCREEN_FULLSCREEN: setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE); break; - case SCREEN_WINDOW_TINY: + case SCREEN_TINY: break; } } public void changeUiToComplete() { - switch (currentScreen) { + switch (screen) { case SCREEN_NORMAL: - case SCREEN_WINDOW_LIST: setAllControlsVisiblity(View.VISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE); updateStartImage(); break; - case SCREEN_WINDOW_FULLSCREEN: + case SCREEN_FULLSCREEN: setAllControlsVisiblity(View.VISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE); updateStartImage(); break; - case SCREEN_WINDOW_TINY: + case SCREEN_TINY: break; } } public void changeUiToError() { - switch (currentScreen) { + switch (screen) { case SCREEN_NORMAL: - case SCREEN_WINDOW_LIST: setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE); updateStartImage(); break; - case SCREEN_WINDOW_FULLSCREEN: + case SCREEN_FULLSCREEN: setAllControlsVisiblity(View.VISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE); updateStartImage(); break; - case SCREEN_WINDOW_TINY: + case SCREEN_TINY: break; } @@ -633,14 +608,14 @@ public void setAllControlsVisiblity(int topCon, int bottomCon, int startBtn, int } public void updateStartImage() { - if (currentState == CURRENT_STATE_PLAYING) { + if (state == STATE_PLAYING) { startButton.setVisibility(VISIBLE); startButton.setImageResource(R.drawable.jz_click_pause_selector); replayTextView.setVisibility(GONE); - } else if (currentState == CURRENT_STATE_ERROR) { + } else if (state == STATE_ERROR) { startButton.setVisibility(INVISIBLE); replayTextView.setVisibility(GONE); - } else if (currentState == CURRENT_STATE_AUTO_COMPLETE) { + } else if (state == STATE_AUTO_COMPLETE) { startButton.setVisibility(VISIBLE); startButton.setImageResource(R.drawable.jz_click_replay_selector); replayTextView.setVisibility(VISIBLE); @@ -797,9 +772,9 @@ public void reset() { } public void dissmissControlView() { - if (currentState != CURRENT_STATE_NORMAL - && currentState != CURRENT_STATE_ERROR - && currentState != CURRENT_STATE_AUTO_COMPLETE) { + if (state != STATE_NORMAL + && state != STATE_ERROR + && state != STATE_AUTO_COMPLETE) { post(() -> { bottomContainer.setVisibility(View.INVISIBLE); topContainer.setVisibility(View.INVISIBLE); @@ -807,7 +782,7 @@ public void dissmissControlView() { if (clarityPopWindow != null) { clarityPopWindow.dismiss(); } - if (currentScreen != SCREEN_WINDOW_TINY) { + if (screen != SCREEN_TINY) { bottomProgressBar.setVisibility(View.VISIBLE); } }); @@ -821,4 +796,22 @@ public void run() { dissmissControlView(); } } + + private BroadcastReceiver battertReceiver = new BroadcastReceiver() { + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { + int level = intent.getIntExtra("level", 0); + int scale = intent.getIntExtra("scale", 100); + int percent = level * 100 / scale; + LAST_GET_BATTERYLEVEL_PERCENT = percent; + setBatteryLevel(); + try { + getContext().unregisterReceiver(battertReceiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + }; } diff --git a/jiaozivideoplayer/src/test/java/cn/jzvd/ExampleUnitTest.java b/jiaozivideoplayer/src/test/java/cn/jzvd/ExampleUnitTest.java deleted file mode 100644 index ec90f54f1..000000000 --- a/jiaozivideoplayer/src/test/java/cn/jzvd/ExampleUnitTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.jzvd; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * To work on unit tests, switch the Test Artifact in the Build Variants view. - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() throws Exception { - assertEquals(4, 2 + 2); - } -}