From 2de4f7aa233215f5aa6049d5db9df54ad454d5e6 Mon Sep 17 00:00:00 2001 From: Devlin Chiu Date: Tue, 27 Jun 2017 16:34:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0FullScreenController?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 22 +- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 22 +- .../{yyplayer => dcplayer}/MainActivity.java | 20 +- .../activity/DanmakuActivity.java | 29 +- .../activity/FullScreenActivity.java | 30 +- .../activity/ListViewActivity.java | 24 +- .../activity/LivePlayerActivity.java | 28 +- .../activity/PlayerActivity.java | 25 +- .../activity/RecyclerViewActivity.java | 26 +- .../activity/VodPlayerActivity.java | 31 +- .../adapter/VideoListViewAdapter.java | 16 +- .../adapter/VideoRecyclerViewAdapter.java | 22 +- .../app/MyApplication.java | 2 +- .../bean/VideoBean.java | 2 +- .../widget/CenteredImageSpan.java | 2 +- .../res/layout/activity_danmaku_player.xml | 2 +- .../main/res/layout/activity_live_player.xml | 2 +- .../main/res/layout/activity_vod_player.xml | 2 +- app/src/main/res/layout/item_video.xml | 2 +- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 6871 -> 4556 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 6565 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 3697 -> 2573 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3564 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 9265 -> 6186 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 8939 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 17227 -> 11382 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 16638 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 24324 -> 17756 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 24383 bytes app/src/main/res/values/strings.xml | 2 +- library/build.gradle | 4 +- library/src/main/AndroidManifest.xml | 4 +- .../controller/AdController.java | 19 +- .../controller/BaseVideoController.java | 16 +- .../controller/FloatController.java | 26 +- .../controller/FullScreenController.java | 360 ++++++++++++++++++ .../controller/StandardVideoController.java | 57 ++- .../listener/ControllerListener.java | 10 + .../listener/MyControllerListener.java | 13 + .../videoplayer/listener/MyVideoListener.java | 28 ++ .../videoplayer/listener/VideoListener.java | 19 + .../player/BackgroundPlayService.java | 14 +- .../player/IjkVideoView.java} | 77 ++-- .../player/VideoCacheManager.java | 4 +- .../player/VideoModel.java | 4 +- .../player/VideoViewManager.java} | 18 +- .../util/Constants.java | 2 +- .../util/KeyUtil.java | 2 +- .../util/L.java | 4 +- .../util/NetworkUtil.java | 2 +- .../util/StorageUtil.java | 2 +- .../util/WindowUtil.java | 2 +- .../widget/CenterView.java | 4 +- .../widget/FloatView.java | 12 +- .../widget/PlayProgressButton.java | 6 +- .../widget/ResizeSurfaceView.java} | 18 +- .../widget/ResizeTextureView.java} | 18 +- .../widget/StatusView.java | 8 +- .../res/layout/layout_float_controller.xml | 2 +- .../layout/layout_fullscreen_controller.xml | 165 ++++++++ 61 files changed, 911 insertions(+), 322 deletions(-) rename app/src/main/java/com/devlin_n/{yyplayer => dcplayer}/MainActivity.java (86%) rename app/src/main/java/com/devlin_n/{yyplayer => dcplayer}/activity/DanmakuActivity.java (93%) rename app/src/main/java/com/devlin_n/{yyplayer => dcplayer}/activity/FullScreenActivity.java (69%) rename app/src/main/java/com/devlin_n/{yyplayer => dcplayer}/activity/ListViewActivity.java (91%) rename app/src/main/java/com/devlin_n/{yyplayer => dcplayer}/activity/LivePlayerActivity.java (80%) rename app/src/main/java/com/devlin_n/{yyplayer => dcplayer}/activity/PlayerActivity.java (80%) rename app/src/main/java/com/devlin_n/{yyplayer => dcplayer}/activity/RecyclerViewActivity.java (88%) rename app/src/main/java/com/devlin_n/{yyplayer => dcplayer}/activity/VodPlayerActivity.java (79%) rename app/src/main/java/com/devlin_n/{yyplayer => dcplayer}/adapter/VideoListViewAdapter.java (83%) rename app/src/main/java/com/devlin_n/{yyplayer => dcplayer}/adapter/VideoRecyclerViewAdapter.java (76%) rename app/src/main/java/com/devlin_n/{yyplayer => dcplayer}/app/MyApplication.java (91%) rename app/src/main/java/com/devlin_n/{yyplayer => dcplayer}/bean/VideoBean.java (95%) rename app/src/main/java/com/devlin_n/{yyplayer => dcplayer}/widget/CenteredImageSpan.java (97%) create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/controller/AdController.java (87%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/controller/BaseVideoController.java (96%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/controller/FloatController.java (82%) create mode 100644 library/src/main/java/com/devlin_n/videoplayer/controller/FullScreenController.java rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/controller/StandardVideoController.java (90%) create mode 100644 library/src/main/java/com/devlin_n/videoplayer/listener/ControllerListener.java create mode 100644 library/src/main/java/com/devlin_n/videoplayer/listener/MyControllerListener.java create mode 100644 library/src/main/java/com/devlin_n/videoplayer/listener/MyVideoListener.java create mode 100644 library/src/main/java/com/devlin_n/videoplayer/listener/VideoListener.java rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/player/BackgroundPlayService.java (88%) rename library/src/main/java/com/devlin_n/{yinyangplayer/player/YinYangPlayer.java => videoplayer/player/IjkVideoView.java} (93%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/player/VideoCacheManager.java (94%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/player/VideoModel.java (76%) rename library/src/main/java/com/devlin_n/{yinyangplayer/player/YinYangPlayerManager.java => videoplayer/player/VideoViewManager.java} (55%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/util/Constants.java (88%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/util/KeyUtil.java (85%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/util/L.java (72%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/util/NetworkUtil.java (98%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/util/StorageUtil.java (99%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/util/WindowUtil.java (99%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/widget/CenterView.java (95%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/widget/FloatView.java (87%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/widget/PlayProgressButton.java (96%) rename library/src/main/java/com/devlin_n/{yinyangplayer/widget/YinYangSurfaceView.java => videoplayer/widget/ResizeSurfaceView.java} (91%) rename library/src/main/java/com/devlin_n/{yinyangplayer/widget/YinYangTextureView.java => videoplayer/widget/ResizeTextureView.java} (91%) rename library/src/main/java/com/devlin_n/{yinyangplayer => videoplayer}/widget/StatusView.java (93%) create mode 100644 library/src/main/res/layout/layout_fullscreen_controller.xml diff --git a/README.md b/README.md index 62aa9af6..a2f8d1ec 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# YinYangPlayer +# DCPlayer A video player based on [IjkPlayer](https://github.com/Bilibili/ijkplayer). [![](https://www.jitpack.io/v/DevlinChiu/YinYangPlayer.svg)](https://www.jitpack.io/#DevlinChiu/YinYangPlayer) @@ -39,14 +39,14 @@ Step 1.Add it in your root build.gradle at the end of repositories: Step 2. Add the dependency dependencies { - compile 'com.github.DevlinChiu:YinYangPlayer:1.2' + compile 'com.github.DevlinChiu:dcplayer:1.3' } ``` 或者将library下载并导入项目中使用 2.添加布局 ```xml - @@ -54,9 +54,9 @@ Step 2. Add the dependency 3.设置视频地址、标题、Controller等 ```java -yinYangPlayer = (YinYangPlayer) findViewById(R.id.player); +ijkVideoView = (IjkVideoView) findViewById(R.id.player); StandardVideoController controller = new StandardVideoController(this); -yinYangPlayer +ijkVideoView .autoRotate() //启用重力感应自动进入/推出全屏功能 .enableCache() //启用边播边缓存功能 .useSurfaceView() //启用SurfaceView显示视频,不调用默认使用TextureView @@ -72,25 +72,25 @@ yinYangPlayer @Override protected void onPause() { super.onPause(); - yinYangPlayer.pause(); + ijkVideoView.pause(); } @Override protected void onResume() { super.onResume(); - yinYangPlayer.resume(); + ijkVideoView.resume(); } @Override protected void onDestroy() { super.onDestroy(); - yinYangPlayer.release(); + ijkVideoView.release(); } @Override public void onBackPressed() { - if (!yinYangPlayer.onBackPressed()) { + if (!ijkVideoView.onBackPressed()) { super.onBackPressed(); } } @@ -123,5 +123,5 @@ yinYangPlayer ## 混淆 -keep class tv.danmaku.ijk.** { *; } -dontwarn tv.danmaku.ijk.** - -keep class com.devlin_n.yinyangplayer.** { *; } - -dontwarn com.devlin_n.yinyangplayer.** + -keep class com.devlin_n.videoplayer.** { *; } + -dontwarn com.devlin_n.videoplayer.** diff --git a/app/build.gradle b/app/build.gradle index 10115eb1..a6194eb5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { - applicationId "com.devlin_n.yyplayer" + applicationId "com.devlin_n.dcplayer" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 6 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc96ba2a..3a64ef23 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,19 +1,19 @@ + package="com.devlin_n.dcplayer"> @@ -24,31 +24,31 @@ diff --git a/app/src/main/java/com/devlin_n/yyplayer/MainActivity.java b/app/src/main/java/com/devlin_n/dcplayer/MainActivity.java similarity index 86% rename from app/src/main/java/com/devlin_n/yyplayer/MainActivity.java rename to app/src/main/java/com/devlin_n/dcplayer/MainActivity.java index 0c1031fc..8096d5d4 100644 --- a/app/src/main/java/com/devlin_n/yyplayer/MainActivity.java +++ b/app/src/main/java/com/devlin_n/dcplayer/MainActivity.java @@ -1,4 +1,4 @@ -package com.devlin_n.yyplayer; +package com.devlin_n.dcplayer; import android.Manifest; import android.content.Intent; @@ -16,15 +16,15 @@ import android.widget.RadioGroup; import android.widget.Toast; -import com.devlin_n.yinyangplayer.player.BackgroundPlayService; -import com.devlin_n.yinyangplayer.player.VideoCacheManager; -import com.devlin_n.yyplayer.activity.DanmakuActivity; -import com.devlin_n.yyplayer.activity.FullScreenActivity; -import com.devlin_n.yyplayer.activity.ListViewActivity; -import com.devlin_n.yyplayer.activity.LivePlayerActivity; -import com.devlin_n.yyplayer.activity.PlayerActivity; -import com.devlin_n.yyplayer.activity.RecyclerViewActivity; -import com.devlin_n.yyplayer.activity.VodPlayerActivity; +import com.devlin_n.videoplayer.player.BackgroundPlayService; +import com.devlin_n.videoplayer.player.VideoCacheManager; +import com.devlin_n.dcplayer.activity.DanmakuActivity; +import com.devlin_n.dcplayer.activity.FullScreenActivity; +import com.devlin_n.dcplayer.activity.ListViewActivity; +import com.devlin_n.dcplayer.activity.LivePlayerActivity; +import com.devlin_n.dcplayer.activity.PlayerActivity; +import com.devlin_n.dcplayer.activity.RecyclerViewActivity; +import com.devlin_n.dcplayer.activity.VodPlayerActivity; public class MainActivity extends AppCompatActivity { diff --git a/app/src/main/java/com/devlin_n/yyplayer/activity/DanmakuActivity.java b/app/src/main/java/com/devlin_n/dcplayer/activity/DanmakuActivity.java similarity index 93% rename from app/src/main/java/com/devlin_n/yyplayer/activity/DanmakuActivity.java rename to app/src/main/java/com/devlin_n/dcplayer/activity/DanmakuActivity.java index becf41b0..f99277fb 100644 --- a/app/src/main/java/com/devlin_n/yyplayer/activity/DanmakuActivity.java +++ b/app/src/main/java/com/devlin_n/dcplayer/activity/DanmakuActivity.java @@ -1,4 +1,4 @@ -package com.devlin_n.yyplayer.activity; +package com.devlin_n.dcplayer.activity; import android.content.Intent; import android.graphics.Canvas; @@ -20,11 +20,11 @@ import android.widget.Toast; import com.devlin_n.floatWindowPermission.FloatWindowManager; -import com.devlin_n.yinyangplayer.controller.StandardVideoController; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; -import com.devlin_n.yinyangplayer.util.WindowUtil; -import com.devlin_n.yyplayer.R; -import com.devlin_n.yyplayer.widget.CenteredImageSpan; +import com.devlin_n.videoplayer.controller.StandardVideoController; +import com.devlin_n.videoplayer.player.IjkVideoView; +import com.devlin_n.videoplayer.util.WindowUtil; +import com.devlin_n.dcplayer.R; +import com.devlin_n.dcplayer.widget.CenteredImageSpan; import java.util.HashMap; @@ -49,7 +49,7 @@ public class DanmakuActivity extends AppCompatActivity { private DanmakuView mDanmakuView; private DanmakuContext mContext; private BaseDanmakuParser mParser; - private YinYangPlayer yinYangPlayer; + private IjkVideoView ijkVideoView; private static final String URL_VOD = "http://mov.bn.netease.com/open-movie/nos/flv/2017/01/03/SC8U8K7BC_hd.flv"; // private static final String URL_VOD = "http://uploads.cutv.com:8088/video/data/201703/10/encode_file/515b6a95601ba6b39620358f2677a17358c2472411d53.mp4"; @@ -62,10 +62,10 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { actionBar.setTitle("弹幕"); actionBar.setDisplayHomeAsUpEnabled(true); } - yinYangPlayer = (YinYangPlayer) findViewById(R.id.player); + ijkVideoView = (IjkVideoView) findViewById(R.id.player); initDanMuView(); - yinYangPlayer + ijkVideoView .autoRotate() // .enableCache() // .useSurfaceView() @@ -88,26 +88,25 @@ public boolean onOptionsItemSelected(MenuItem item) { @Override protected void onPause() { super.onPause(); - yinYangPlayer.pause(); + ijkVideoView.pause(); } @Override protected void onResume() { super.onResume(); -// yinYangPlayer.resume(); - yinYangPlayer.stopFloatWindow(); + ijkVideoView.stopFloatWindow(); } @Override protected void onDestroy() { super.onDestroy(); - yinYangPlayer.release(); + ijkVideoView.release(); } @Override public void onBackPressed() { - if (!yinYangPlayer.onBackPressed()) { + if (!ijkVideoView.onBackPressed()) { super.onBackPressed(); } } @@ -116,7 +115,7 @@ public void onBackPressed() { protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == FloatWindowManager.PERMISSION_REQUEST_CODE) { if (FloatWindowManager.getInstance().checkPermission(this)) { - yinYangPlayer.startFloatWindow(); + ijkVideoView.startFloatWindow(); } else { Toast.makeText(DanmakuActivity.this, "权限授予失败,无法开启悬浮窗", Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/devlin_n/yyplayer/activity/FullScreenActivity.java b/app/src/main/java/com/devlin_n/dcplayer/activity/FullScreenActivity.java similarity index 69% rename from app/src/main/java/com/devlin_n/yyplayer/activity/FullScreenActivity.java rename to app/src/main/java/com/devlin_n/dcplayer/activity/FullScreenActivity.java index 9387dfe4..8a440027 100644 --- a/app/src/main/java/com/devlin_n/yyplayer/activity/FullScreenActivity.java +++ b/app/src/main/java/com/devlin_n/dcplayer/activity/FullScreenActivity.java @@ -1,4 +1,4 @@ -package com.devlin_n.yyplayer.activity; +package com.devlin_n.dcplayer.activity; import android.content.Intent; import android.os.Bundle; @@ -7,8 +7,8 @@ import android.widget.Toast; import com.devlin_n.floatWindowPermission.FloatWindowManager; -import com.devlin_n.yinyangplayer.controller.StandardVideoController; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; +import com.devlin_n.videoplayer.controller.FullScreenController; +import com.devlin_n.videoplayer.player.IjkVideoView; /** * 全屏播放 @@ -17,46 +17,46 @@ public class FullScreenActivity extends AppCompatActivity{ - private YinYangPlayer yinYangPlayer; + private IjkVideoView ijkVideoView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - yinYangPlayer = new YinYangPlayer(this); - setContentView(yinYangPlayer); - yinYangPlayer + ijkVideoView = new IjkVideoView(this); + setContentView(ijkVideoView); + ijkVideoView .autoRotate() .alwaysFullScreen() // .useAndroidMediaPlayer() .setTitle("这是一个标题") .setUrl("http://flv2.bn.netease.com/videolib3/1611/28/GbgsL3639/HD/movie_index.m3u8") - .setVideoController(new StandardVideoController(this)) - .setScreenScale(YinYangPlayer.SCREEN_SCALE_16_9) + .setVideoController(new FullScreenController(this)) + .setScreenScale(IjkVideoView.SCREEN_SCALE_16_9) .start(); } @Override protected void onPause() { super.onPause(); - yinYangPlayer.pause(); + ijkVideoView.pause(); } @Override protected void onResume() { super.onResume(); - yinYangPlayer.resume(); - yinYangPlayer.stopFloatWindow(); + ijkVideoView.resume(); + ijkVideoView.stopFloatWindow(); } @Override protected void onDestroy() { super.onDestroy(); - yinYangPlayer.release(); + ijkVideoView.release(); } @Override public void onBackPressed() { - if (!yinYangPlayer.onBackPressed()){ + if (!ijkVideoView.onBackPressed()){ super.onBackPressed(); } } @@ -65,7 +65,7 @@ public void onBackPressed() { protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == FloatWindowManager.PERMISSION_REQUEST_CODE) { if (FloatWindowManager.getInstance().checkPermission(this)) { - yinYangPlayer.startFloatWindow(); + ijkVideoView.startFloatWindow(); } else { Toast.makeText(FullScreenActivity.this, "权限授予失败,无法开启悬浮窗", Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/devlin_n/yyplayer/activity/ListViewActivity.java b/app/src/main/java/com/devlin_n/dcplayer/activity/ListViewActivity.java similarity index 91% rename from app/src/main/java/com/devlin_n/yyplayer/activity/ListViewActivity.java rename to app/src/main/java/com/devlin_n/dcplayer/activity/ListViewActivity.java index 3bd3b3e5..f82fbd9b 100644 --- a/app/src/main/java/com/devlin_n/yyplayer/activity/ListViewActivity.java +++ b/app/src/main/java/com/devlin_n/dcplayer/activity/ListViewActivity.java @@ -1,4 +1,4 @@ -package com.devlin_n.yyplayer.activity; +package com.devlin_n.dcplayer.activity; import android.content.Intent; import android.os.Bundle; @@ -12,11 +12,11 @@ import android.widget.Toast; import com.devlin_n.floatWindowPermission.FloatWindowManager; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; -import com.devlin_n.yinyangplayer.player.YinYangPlayerManager; -import com.devlin_n.yyplayer.R; -import com.devlin_n.yyplayer.adapter.VideoListViewAdapter; -import com.devlin_n.yyplayer.bean.VideoBean; +import com.devlin_n.videoplayer.player.IjkVideoView; +import com.devlin_n.videoplayer.player.VideoViewManager; +import com.devlin_n.dcplayer.R; +import com.devlin_n.dcplayer.adapter.VideoListViewAdapter; +import com.devlin_n.dcplayer.bean.VideoBean; import java.util.ArrayList; import java.util.List; @@ -86,9 +86,9 @@ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCoun private void gcView(View gcView) { if (gcView != null) { - YinYangPlayer yinYangPlayer = (YinYangPlayer) gcView.findViewById(R.id.video_player); - if (yinYangPlayer != null && !yinYangPlayer.isFullScreen()) { - yinYangPlayer.release(); + IjkVideoView ijkVideoView = (IjkVideoView) gcView.findViewById(R.id.video_player); + if (ijkVideoView != null && !ijkVideoView.isFullScreen()) { + ijkVideoView.release(); } } } @@ -106,7 +106,7 @@ public boolean onOptionsItemSelected(MenuItem item) { @Override protected void onPause() { super.onPause(); - YinYangPlayer currentVideoPlayer = YinYangPlayerManager.instance().getCurrentVideoPlayer(); + IjkVideoView currentVideoPlayer = VideoViewManager.instance().getCurrentVideoPlayer(); if (currentVideoPlayer != null) { currentVideoPlayer.release(); } @@ -114,7 +114,7 @@ protected void onPause() { @Override public void onBackPressed() { - if (!YinYangPlayerManager.instance().onBackPressed()) { + if (!VideoViewManager.instance().onBackPressed()) { super.onBackPressed(); } } @@ -123,7 +123,7 @@ public void onBackPressed() { protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == FloatWindowManager.PERMISSION_REQUEST_CODE) { if (FloatWindowManager.getInstance().checkPermission(this)) { - YinYangPlayerManager.instance().getCurrentVideoPlayer().startFloatWindow(); + VideoViewManager.instance().getCurrentVideoPlayer().startFloatWindow(); } else { Toast.makeText(this, "权限授予失败,无法开启悬浮窗", Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/devlin_n/yyplayer/activity/LivePlayerActivity.java b/app/src/main/java/com/devlin_n/dcplayer/activity/LivePlayerActivity.java similarity index 80% rename from app/src/main/java/com/devlin_n/yyplayer/activity/LivePlayerActivity.java rename to app/src/main/java/com/devlin_n/dcplayer/activity/LivePlayerActivity.java index 343f8653..6b098692 100644 --- a/app/src/main/java/com/devlin_n/yyplayer/activity/LivePlayerActivity.java +++ b/app/src/main/java/com/devlin_n/dcplayer/activity/LivePlayerActivity.java @@ -1,4 +1,4 @@ -package com.devlin_n.yyplayer.activity; +package com.devlin_n.dcplayer.activity; import android.content.Intent; import android.os.Bundle; @@ -10,9 +10,9 @@ import com.bumptech.glide.Glide; import com.devlin_n.floatWindowPermission.FloatWindowManager; -import com.devlin_n.yinyangplayer.controller.StandardVideoController; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; -import com.devlin_n.yyplayer.R; +import com.devlin_n.videoplayer.controller.StandardVideoController; +import com.devlin_n.videoplayer.player.IjkVideoView; +import com.devlin_n.dcplayer.R; /** * 直播播放 @@ -21,7 +21,7 @@ public class LivePlayerActivity extends AppCompatActivity { - private YinYangPlayer yinYangPlayer; + private IjkVideoView ijkVideoView; private static final String URL = "http://ivi.bupt.edu.cn/hls/hunanhd.m3u8"; @Override @@ -33,9 +33,9 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { actionBar.setTitle("LIVE"); actionBar.setDisplayHomeAsUpEnabled(true); } - yinYangPlayer = (YinYangPlayer) findViewById(R.id.player); + ijkVideoView = (IjkVideoView) findViewById(R.id.player); // int widthPixels = getResources().getDisplayMetrics().widthPixels; -// yinYangPlayer.setLayoutParams(new LinearLayout.LayoutParams(widthPixels, widthPixels / 4 * 3)); +// ijkVideoView.setLayoutParams(new LinearLayout.LayoutParams(widthPixels, widthPixels / 4 * 3)); StandardVideoController controller = new StandardVideoController(this); controller.setLive(true); @@ -47,7 +47,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { .animate(R.anim.anim_alpha_in) .placeholder(android.R.color.darker_gray) .into(controller.getThumb()); - yinYangPlayer + ijkVideoView .autoRotate() // .useAndroidMediaPlayer() .setUrl(URL) @@ -67,26 +67,26 @@ public boolean onOptionsItemSelected(MenuItem item) { @Override protected void onPause() { super.onPause(); - yinYangPlayer.pause(); + ijkVideoView.pause(); } @Override protected void onResume() { super.onResume(); - yinYangPlayer.resume(); - yinYangPlayer.stopFloatWindow(); + ijkVideoView.resume(); + ijkVideoView.stopFloatWindow(); } @Override protected void onDestroy() { super.onDestroy(); - yinYangPlayer.release(); + ijkVideoView.release(); } @Override public void onBackPressed() { - if (!yinYangPlayer.onBackPressed()) { + if (!ijkVideoView.onBackPressed()) { super.onBackPressed(); } } @@ -95,7 +95,7 @@ public void onBackPressed() { protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == FloatWindowManager.PERMISSION_REQUEST_CODE) { if (FloatWindowManager.getInstance().checkPermission(this)) { - yinYangPlayer.startFloatWindow(); + ijkVideoView.startFloatWindow(); } else { Toast.makeText(LivePlayerActivity.this, "权限授予失败,无法开启悬浮窗", Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/devlin_n/yyplayer/activity/PlayerActivity.java b/app/src/main/java/com/devlin_n/dcplayer/activity/PlayerActivity.java similarity index 80% rename from app/src/main/java/com/devlin_n/yyplayer/activity/PlayerActivity.java rename to app/src/main/java/com/devlin_n/dcplayer/activity/PlayerActivity.java index 18f630a6..97f7a4e7 100644 --- a/app/src/main/java/com/devlin_n/yyplayer/activity/PlayerActivity.java +++ b/app/src/main/java/com/devlin_n/dcplayer/activity/PlayerActivity.java @@ -1,4 +1,4 @@ -package com.devlin_n.yyplayer.activity; +package com.devlin_n.dcplayer.activity; import android.content.Intent; import android.os.Bundle; @@ -9,9 +9,9 @@ import android.widget.Toast; import com.devlin_n.floatWindowPermission.FloatWindowManager; -import com.devlin_n.yinyangplayer.controller.StandardVideoController; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; -import com.devlin_n.yyplayer.R; +import com.devlin_n.videoplayer.controller.StandardVideoController; +import com.devlin_n.videoplayer.player.IjkVideoView; +import com.devlin_n.dcplayer.R; /** * 播放其他链接 @@ -20,7 +20,7 @@ public class PlayerActivity extends AppCompatActivity { - private YinYangPlayer yinYangPlayer; + private IjkVideoView ijkVideoView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -31,7 +31,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { actionBar.setTitle("Player"); actionBar.setDisplayHomeAsUpEnabled(true); } - yinYangPlayer = (YinYangPlayer) findViewById(R.id.player); + ijkVideoView = (IjkVideoView) findViewById(R.id.player); Intent intent = getIntent(); if (intent != null) { @@ -40,7 +40,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { if (isLive) { controller.setLive(true); } - yinYangPlayer + ijkVideoView .autoRotate() // .useAndroidMediaPlayer() .setUrl(intent.getStringExtra("url")) @@ -60,26 +60,25 @@ public boolean onOptionsItemSelected(MenuItem item) { @Override protected void onPause() { super.onPause(); - yinYangPlayer.pause(); + ijkVideoView.pause(); } @Override protected void onResume() { super.onResume(); -// yinYangPlayer.resume(); - yinYangPlayer.stopFloatWindow(); + ijkVideoView.stopFloatWindow(); } @Override protected void onDestroy() { super.onDestroy(); - yinYangPlayer.release(); + ijkVideoView.release(); } @Override public void onBackPressed() { - if (!yinYangPlayer.onBackPressed()) { + if (!ijkVideoView.onBackPressed()) { super.onBackPressed(); } } @@ -88,7 +87,7 @@ public void onBackPressed() { protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == FloatWindowManager.PERMISSION_REQUEST_CODE) { if (FloatWindowManager.getInstance().checkPermission(this)) { - yinYangPlayer.startFloatWindow(); + ijkVideoView.startFloatWindow(); } else { Toast.makeText(PlayerActivity.this, "权限授予失败,无法开启悬浮窗", Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/devlin_n/yyplayer/activity/RecyclerViewActivity.java b/app/src/main/java/com/devlin_n/dcplayer/activity/RecyclerViewActivity.java similarity index 88% rename from app/src/main/java/com/devlin_n/yyplayer/activity/RecyclerViewActivity.java rename to app/src/main/java/com/devlin_n/dcplayer/activity/RecyclerViewActivity.java index 2d587cb3..7766f4cd 100644 --- a/app/src/main/java/com/devlin_n/yyplayer/activity/RecyclerViewActivity.java +++ b/app/src/main/java/com/devlin_n/dcplayer/activity/RecyclerViewActivity.java @@ -1,4 +1,4 @@ -package com.devlin_n.yyplayer.activity; +package com.devlin_n.dcplayer.activity; import android.content.Intent; import android.os.Bundle; @@ -13,11 +13,11 @@ import android.widget.Toast; import com.devlin_n.floatWindowPermission.FloatWindowManager; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; -import com.devlin_n.yinyangplayer.player.YinYangPlayerManager; -import com.devlin_n.yyplayer.R; -import com.devlin_n.yyplayer.bean.VideoBean; -import com.devlin_n.yyplayer.adapter.VideoRecyclerViewAdapter; +import com.devlin_n.videoplayer.player.IjkVideoView; +import com.devlin_n.videoplayer.player.VideoViewManager; +import com.devlin_n.dcplayer.R; +import com.devlin_n.dcplayer.bean.VideoBean; +import com.devlin_n.dcplayer.adapter.VideoRecyclerViewAdapter; import java.util.ArrayList; import java.util.List; @@ -60,12 +60,12 @@ public void onChildViewAttachedToWindow(View view) { @Override public void onChildViewDetachedFromWindow(View view) { - YinYangPlayer yinYangPlayer = (YinYangPlayer) view.findViewById(R.id.video_player); - if (yinYangPlayer != null && !yinYangPlayer.isFullScreen()) { + IjkVideoView ijkVideoView = (IjkVideoView) view.findViewById(R.id.video_player); + if (ijkVideoView != null && !ijkVideoView.isFullScreen()) { Log.d("@@@@@@", "onChildViewDetachedFromWindow: called"); - int tag = (int) yinYangPlayer.getTag(); + int tag = (int) ijkVideoView.getTag(); Log.d("@@@@@@", "onChildViewDetachedFromWindow: position: " + tag); - yinYangPlayer.release(); + ijkVideoView.release(); } } }); @@ -127,7 +127,7 @@ public List getVideoList() { @Override protected void onPause() { super.onPause(); - YinYangPlayer currentVideoPlayer = YinYangPlayerManager.instance().getCurrentVideoPlayer(); + IjkVideoView currentVideoPlayer = VideoViewManager.instance().getCurrentVideoPlayer(); if (currentVideoPlayer != null){ currentVideoPlayer.release(); } @@ -135,7 +135,7 @@ protected void onPause() { @Override public void onBackPressed() { - if (!YinYangPlayerManager.instance().onBackPressed()){ + if (!VideoViewManager.instance().onBackPressed()){ super.onBackPressed(); } } @@ -144,7 +144,7 @@ public void onBackPressed() { protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == FloatWindowManager.PERMISSION_REQUEST_CODE) { if (FloatWindowManager.getInstance().checkPermission(this)) { - YinYangPlayerManager.instance().getCurrentVideoPlayer().startFloatWindow(); + VideoViewManager.instance().getCurrentVideoPlayer().startFloatWindow(); } else { Toast.makeText(this, "权限授予失败,无法开启悬浮窗", Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/devlin_n/yyplayer/activity/VodPlayerActivity.java b/app/src/main/java/com/devlin_n/dcplayer/activity/VodPlayerActivity.java similarity index 79% rename from app/src/main/java/com/devlin_n/yyplayer/activity/VodPlayerActivity.java rename to app/src/main/java/com/devlin_n/dcplayer/activity/VodPlayerActivity.java index 0428b5b6..70ca70e4 100644 --- a/app/src/main/java/com/devlin_n/yyplayer/activity/VodPlayerActivity.java +++ b/app/src/main/java/com/devlin_n/dcplayer/activity/VodPlayerActivity.java @@ -1,4 +1,4 @@ -package com.devlin_n.yyplayer.activity; +package com.devlin_n.dcplayer.activity; import android.content.Intent; import android.os.Bundle; @@ -9,11 +9,11 @@ import android.widget.Toast; import com.devlin_n.floatWindowPermission.FloatWindowManager; -import com.devlin_n.yinyangplayer.controller.AdController; -import com.devlin_n.yinyangplayer.controller.StandardVideoController; -import com.devlin_n.yinyangplayer.player.VideoModel; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; -import com.devlin_n.yyplayer.R; +import com.devlin_n.videoplayer.controller.AdController; +import com.devlin_n.videoplayer.controller.StandardVideoController; +import com.devlin_n.videoplayer.player.VideoModel; +import com.devlin_n.videoplayer.player.IjkVideoView; +import com.devlin_n.dcplayer.R; import java.util.ArrayList; import java.util.List; @@ -25,7 +25,7 @@ public class VodPlayerActivity extends AppCompatActivity { - private YinYangPlayer yinYangPlayer; + private IjkVideoView ijkVideoView; // private static final String URL_VOD = "http://mov.bn.netease.com/open-movie/nos/flv/2017/01/03/SC8U8K7BC_hd.flv"; private static final String URL_VOD = "http://baobab.wdjcdn.com/14564977406580.mp4"; // private static final String URL_VOD = "http://uploads.cutv.com:8088/video/data/201703/10/encode_file/515b6a95601ba6b39620358f2677a17358c2472411d53.mp4"; @@ -40,15 +40,15 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { actionBar.setTitle("VOD"); actionBar.setDisplayHomeAsUpEnabled(true); } - yinYangPlayer = (YinYangPlayer) findViewById(R.id.player); + ijkVideoView = (IjkVideoView) findViewById(R.id.player); // int widthPixels = getResources().getDisplayMetrics().widthPixels; -// yinYangPlayer.setLayoutParams(new LinearLayout.LayoutParams(widthPixels, widthPixels / 16 * 9)); +// ijkVideoView.setLayoutParams(new LinearLayout.LayoutParams(widthPixels, widthPixels / 16 * 9)); List videos = new ArrayList<>(); videos.add(new VideoModel(URL_AD, "广告", new AdController(this))); videos.add(new VideoModel(URL_VOD, "奥斯卡", new StandardVideoController(this))); - yinYangPlayer + ijkVideoView .autoRotate() // .enableCache() // .useSurfaceView() @@ -70,26 +70,25 @@ public boolean onOptionsItemSelected(MenuItem item) { @Override protected void onPause() { super.onPause(); - yinYangPlayer.pause(); + ijkVideoView.pause(); } @Override protected void onResume() { super.onResume(); -// yinYangPlayer.resume(); - yinYangPlayer.stopFloatWindow(); + ijkVideoView.stopFloatWindow(); } @Override protected void onDestroy() { super.onDestroy(); - yinYangPlayer.release(); + ijkVideoView.release(); } @Override public void onBackPressed() { - if (!yinYangPlayer.onBackPressed()) { + if (!ijkVideoView.onBackPressed()) { super.onBackPressed(); } } @@ -98,7 +97,7 @@ public void onBackPressed() { protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == FloatWindowManager.PERMISSION_REQUEST_CODE) { if (FloatWindowManager.getInstance().checkPermission(this)) { - yinYangPlayer.startFloatWindow(); + ijkVideoView.startFloatWindow(); } else { Toast.makeText(VodPlayerActivity.this, "权限授予失败,无法开启悬浮窗", Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/devlin_n/yyplayer/adapter/VideoListViewAdapter.java b/app/src/main/java/com/devlin_n/dcplayer/adapter/VideoListViewAdapter.java similarity index 83% rename from app/src/main/java/com/devlin_n/yyplayer/adapter/VideoListViewAdapter.java rename to app/src/main/java/com/devlin_n/dcplayer/adapter/VideoListViewAdapter.java index 4164e7f9..d862d8e4 100644 --- a/app/src/main/java/com/devlin_n/yyplayer/adapter/VideoListViewAdapter.java +++ b/app/src/main/java/com/devlin_n/dcplayer/adapter/VideoListViewAdapter.java @@ -1,4 +1,4 @@ -package com.devlin_n.yyplayer.adapter; +package com.devlin_n.dcplayer.adapter; import android.content.Context; import android.view.LayoutInflater; @@ -7,10 +7,10 @@ import android.widget.BaseAdapter; import com.bumptech.glide.Glide; -import com.devlin_n.yinyangplayer.controller.StandardVideoController; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; -import com.devlin_n.yyplayer.R; -import com.devlin_n.yyplayer.bean.VideoBean; +import com.devlin_n.videoplayer.controller.StandardVideoController; +import com.devlin_n.videoplayer.player.IjkVideoView; +import com.devlin_n.dcplayer.R; +import com.devlin_n.dcplayer.bean.VideoBean; import java.util.ArrayList; import java.util.List; @@ -52,7 +52,7 @@ public View getView(int position, View convertView, ViewGroup parent) { viewHolder = (ViewHolder) convertView.getTag(); } - viewHolder.yinYangPlayer + viewHolder.ijkVideoView .enableCache() .autoRotate() // .useAndroidMediaPlayer() @@ -71,11 +71,11 @@ public View getView(int position, View convertView, ViewGroup parent) { private class ViewHolder { - private YinYangPlayer yinYangPlayer; + private IjkVideoView ijkVideoView; private StandardVideoController controller; ViewHolder(View itemView) { - this.yinYangPlayer = (YinYangPlayer) itemView.findViewById(R.id.video_player); + this.ijkVideoView = (IjkVideoView) itemView.findViewById(R.id.video_player); controller = new StandardVideoController(context); } } diff --git a/app/src/main/java/com/devlin_n/yyplayer/adapter/VideoRecyclerViewAdapter.java b/app/src/main/java/com/devlin_n/dcplayer/adapter/VideoRecyclerViewAdapter.java similarity index 76% rename from app/src/main/java/com/devlin_n/yyplayer/adapter/VideoRecyclerViewAdapter.java rename to app/src/main/java/com/devlin_n/dcplayer/adapter/VideoRecyclerViewAdapter.java index ffecdaa7..966b27f2 100644 --- a/app/src/main/java/com/devlin_n/yyplayer/adapter/VideoRecyclerViewAdapter.java +++ b/app/src/main/java/com/devlin_n/dcplayer/adapter/VideoRecyclerViewAdapter.java @@ -1,4 +1,4 @@ -package com.devlin_n.yyplayer.adapter; +package com.devlin_n.dcplayer.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; @@ -8,10 +8,10 @@ import android.widget.LinearLayout; import com.bumptech.glide.Glide; -import com.devlin_n.yinyangplayer.controller.StandardVideoController; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; -import com.devlin_n.yyplayer.R; -import com.devlin_n.yyplayer.bean.VideoBean; +import com.devlin_n.videoplayer.controller.StandardVideoController; +import com.devlin_n.videoplayer.player.IjkVideoView; +import com.devlin_n.dcplayer.R; +import com.devlin_n.dcplayer.bean.VideoBean; import java.util.List; @@ -42,7 +42,7 @@ public void onBindViewHolder(final VideoHolder holder, int position) { .crossFade() .placeholder(android.R.color.darker_gray) .into(holder.controller.getThumb()); - holder.yinYangPlayer + holder.ijkVideoView .enableCache() .autoRotate() // .useAndroidMediaPlayer() @@ -50,7 +50,7 @@ public void onBindViewHolder(final VideoHolder holder, int position) { .setUrl(videoBean.getUrl()) .setTitle(videoBean.getTitle()) .setVideoController(holder.controller); - holder.yinYangPlayer.setTag(position); + holder.ijkVideoView.setTag(position); } @@ -61,16 +61,16 @@ public int getItemCount() { class VideoHolder extends RecyclerView.ViewHolder { - private YinYangPlayer yinYangPlayer; + private IjkVideoView ijkVideoView; private StandardVideoController controller; VideoHolder(View itemView) { super(itemView); - yinYangPlayer = (YinYangPlayer) itemView.findViewById(R.id.video_player); + ijkVideoView = (IjkVideoView) itemView.findViewById(R.id.video_player); int widthPixels = context.getResources().getDisplayMetrics().widthPixels; - yinYangPlayer.setLayoutParams(new LinearLayout.LayoutParams(widthPixels, widthPixels / 16 * 9)); + ijkVideoView.setLayoutParams(new LinearLayout.LayoutParams(widthPixels, widthPixels / 16 * 9)); controller = new StandardVideoController(context); - yinYangPlayer.setVideoController(controller); + ijkVideoView.setVideoController(controller); } } } \ No newline at end of file diff --git a/app/src/main/java/com/devlin_n/yyplayer/app/MyApplication.java b/app/src/main/java/com/devlin_n/dcplayer/app/MyApplication.java similarity index 91% rename from app/src/main/java/com/devlin_n/yyplayer/app/MyApplication.java rename to app/src/main/java/com/devlin_n/dcplayer/app/MyApplication.java index 0e4ab3ea..cdbb7441 100644 --- a/app/src/main/java/com/devlin_n/yyplayer/app/MyApplication.java +++ b/app/src/main/java/com/devlin_n/dcplayer/app/MyApplication.java @@ -1,4 +1,4 @@ -package com.devlin_n.yyplayer.app; +package com.devlin_n.dcplayer.app; import android.app.Application; diff --git a/app/src/main/java/com/devlin_n/yyplayer/bean/VideoBean.java b/app/src/main/java/com/devlin_n/dcplayer/bean/VideoBean.java similarity index 95% rename from app/src/main/java/com/devlin_n/yyplayer/bean/VideoBean.java rename to app/src/main/java/com/devlin_n/dcplayer/bean/VideoBean.java index 0e2581cc..3921a9b2 100644 --- a/app/src/main/java/com/devlin_n/yyplayer/bean/VideoBean.java +++ b/app/src/main/java/com/devlin_n/dcplayer/bean/VideoBean.java @@ -1,4 +1,4 @@ -package com.devlin_n.yyplayer.bean; +package com.devlin_n.dcplayer.bean; /** * Created by Devlin_n on 2017/6/1. diff --git a/app/src/main/java/com/devlin_n/yyplayer/widget/CenteredImageSpan.java b/app/src/main/java/com/devlin_n/dcplayer/widget/CenteredImageSpan.java similarity index 97% rename from app/src/main/java/com/devlin_n/yyplayer/widget/CenteredImageSpan.java rename to app/src/main/java/com/devlin_n/dcplayer/widget/CenteredImageSpan.java index 3ded795d..74b70251 100644 --- a/app/src/main/java/com/devlin_n/yyplayer/widget/CenteredImageSpan.java +++ b/app/src/main/java/com/devlin_n/dcplayer/widget/CenteredImageSpan.java @@ -1,4 +1,4 @@ -package com.devlin_n.yyplayer.widget; +package com.devlin_n.dcplayer.widget; import android.graphics.Canvas; import android.graphics.Paint; diff --git a/app/src/main/res/layout/activity_danmaku_player.xml b/app/src/main/res/layout/activity_danmaku_player.xml index 64617ada..ffc0dbd3 100644 --- a/app/src/main/res/layout/activity_danmaku_player.xml +++ b/app/src/main/res/layout/activity_danmaku_player.xml @@ -4,7 +4,7 @@ android:layout_height="match_parent" android:orientation="vertical"> - diff --git a/app/src/main/res/layout/activity_live_player.xml b/app/src/main/res/layout/activity_live_player.xml index e3cccd1e..02134ec0 100644 --- a/app/src/main/res/layout/activity_live_player.xml +++ b/app/src/main/res/layout/activity_live_player.xml @@ -4,7 +4,7 @@ android:layout_height="match_parent" android:orientation="vertical"> - diff --git a/app/src/main/res/layout/activity_vod_player.xml b/app/src/main/res/layout/activity_vod_player.xml index 8d0538d9..3b5573c0 100644 --- a/app/src/main/res/layout/activity_vod_player.xml +++ b/app/src/main/res/layout/activity_vod_player.xml @@ -4,7 +4,7 @@ android:layout_height="match_parent" android:orientation="vertical"> - diff --git a/app/src/main/res/layout/item_video.xml b/app/src/main/res/layout/item_video.xml index d2333fbe..a38924b4 100644 --- a/app/src/main/res/layout/item_video.xml +++ b/app/src/main/res/layout/item_video.xml @@ -4,7 +4,7 @@ android:layout_height="wrap_content" android:orientation="vertical"> - diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index fb0a979ccc5c27d6bab47aa67b2ed44b1ea234dc..2da77eb813c86292f12a2aca4544ee579e956c0a 100644 GIT binary patch literal 4556 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 R7DfO7002ovPDHLkV1jBjEm;5n diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..2f0371e7a29e0a922424f84feeb6feec9e36cf61 GIT binary patch literal 6565 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 P00000NkvXXu0mjff?FKw diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..dfcc69d04c00ec1369c73c4957d82f3669dc3451 GIT binary patch literal 3564 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 G(EkCw36ePg literal 9265 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 IM2!Rg2kNbWG5`Po literal 17227 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 N002ovPDHLkV1idhd8PmW literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index ea40d32fb454e33a24973c326bb5e55d5270f8ef..a27e46e1d5e7d9ab21c6c12ef699e3aa18430bb0 100644 GIT binary patch literal 17756 zcmcFrRaYHNw48&xdvJGmJ-E9CcZURbcb9`ha6*6}3GVLh1P?BO;BGhHUF-gY`!L;) zyL;B`>b<|8c{wSKe{;`&4+7l3QDfZ^9stMzc`0!%Z{xE7_$=bV z#=l}_Zfa<9M>URnsJg>nSvT zd)T%B287wm88Dzt)!2ewE;s;lQi27XXb^jOrdZ$u0lYbZ(8Xq)o&^<%GeQWT^?onJ zc7FW>Me*A7?7L#%2vgIYM$#HsQ5O*5odjS)~9QZ?pyudu_FJhAyUhs%X6 zr=m#BPBbc&w+lMTIAXruI7EyiA-(zIIzkZwGvPHo{$?u`UJvJ^kZ7sefUec9SM`jY`b!Pzhr;qE1$zR?C(vX3di^;#^Fhuzu^Xczwzxef~wq zmxdHh4wxROLdgYeM;uO76Kq}#mu=<`Whi|n?f2slQv6{)wvi-f97hmANCKJMjSJmM zsxwb(Ec^7H#b+ZE-@YF&?)x|fe$t8!sP9bo7ZLp*ePY22{$8_Bo(D|`1=zypV_ zd;z?F@DHMq`#+MQpDeA?wKtaDR{T^8+`8vrN>P!XU^qHlmL! zOvcbXIl*7{I&>+3nJw6B=<CY`0$qp&o`h92 zHe5{oL1f3F;FCUf8bJF99eXDdaeRA5)U}jf1A3WQVlRl|@SFHESr z0^oE}b43T$*s2qRp19V`P|F1tf6mtpfc-283cRtRm~TR+WsbYsYR+r=>-vRQBVeoRJ8RNS{Ysee^!YzbCS1Hj zx4nH7t=$6oncobfHc8V>=KyM;JZM0WP7ML*d!s{jzJnYtw`TVz{MMijEa373kCNT| zcr*765c5kpJGZ&JX5ooe7*o63k zU3P(PV&_@@tqTx0;WEP!e6Sx&E>gR0_%CQV046t;ZJ`I~pT~&`Km8Z;6fNd_{|I;T z0uJ~1q=j9HOll{MfVp0rco4DN^1*26J^`;hTn&8hWf*Wsy1d0 zKTEzjFxGrqg4336OA`Tk5id4^4XDH-{%!7lQD5yQQ0$Nbr+<&HCcNaG&h@nWJw!NK zd+e49xp`oMGKmQ$v__PlrXm!VK$tTcfGJZ_#`Nuw|J zy-MI2N+B=_fFgcAs%a6~_-YjIsNj7&v$HL)uS<UlcK9*F4qPn$;had ztyILDE~7dn;l&%5=m^*D>o)@#HT6^FTlM8S8nc>pvPzi*=}bZD^^dG(R4>Ay!rs=m zh0Ax{b9`mh&>K%jNk12-;?9slO`SinT-haHo*(~Yn7@$j`-ZTeW6Fi zN13vGWeyZ=kGAAuWnNi9q=^BRKr*%=q||GE(KN6qd2naXc>^@h?nYLrc~X#>J|43o z-MLbg?4E6i_D4wQ;@83brL`hgj^BPXK1DCFsj0lpmQ8*n!XrWv`1f3C-vk8%+X!Qc zb;xDa`~@nnKdJd58)kF9M2WXwo%5ytsdBF6yIPM|E?rw?t>E-a*L9hm1{p5&6|;WgE@wf^kl3KilcwVm3~FqAb6uWlL1Y7)>N@oMte zVQtRD7-p7l4#kDq+b@z1NW9I4c{`fEBO2*h(IWDwrb0pHWVh+%5M-DLVJzL|<5-A` zuhuWkXWU}>ywp;!+Kcvjt@0`>UIl+Cpz^1is<3VDC4mUd2S@c62O5oeFI z5)7vQIw~z?gmREcTRQo$_sh8HT*}|ITfSW7>zMUHcm%rL*RsE#UMvT@f0X(}#s3xX zhY7P*s^#SD%+y;v1TLBe)1GurR>rKHuIU^oY^);Cf6&=0bgcFd*1DJ>+cNhaSpFF+Gufm zYWB1erTa?B3S)A5&6}umdQQNaCA*uJ4RI%@?ewt~V%W4owGf>A)~bZJteg{BPpg8) z~MLslmOX9eeWqkMH=i4fEf8SbsJn6U;)%hQv^JCnTcWmJP+Cm zw4RBmd{X)#q&nAS-tXMhCQ=Y{G%&3zBwK8z!Ce4ey+q6kIye*CaN*R<`A7fv$pYfS zQn75w3Rl6Fu?Y885Mqqr`%C1N8njt7hd}%1wb4 z-y6TyLl@{b0VGf}tQfY~b8;QthUD>QCcFU7JRluYWIik5F%Jbn2cHP#rqj-phOzsx z!2pPr%S}$bY|9;S_kMz3xw&X^$BB`4FBH~HvPB~I#423~0{xF>+b3sP(jOlmtk#-- ze`DGjIM^hm#*&w3ODW=$oT!=Tn0`YO$NJ^|Izo$K7YxQSkq=a+Rt4m)WuZ(3tyNc_ zxdEZk?>SyO?^VW$xFk+@#cg>OjXfdargDKUB)I(Kqd`mMKOa{2!e&0o_Y2j)y0)2nKMH}g4fpvJ}!qW#EQ_+T2{1|{N()PAC z=hqLlrqZfWhFVzW@~+pXwo!UKWs?0Hz=quxjA*%6pAYnRu(uzP(}Q=zIJgSFk1_H)ud7jOrNz}828GQ~B6lyVJnIT~q7 z)!)IImnX=t#M|W7YX6`O{a-Dx;U(Gh9YK!?)zoUBSletu=tDtJ9IfvkW4q zqrDG{X<0WB^tri^NADFLxE9yG{mT5Bf-JAXo-O7Gx4}-616QbMS?zck0K%Q7!Is~4 zzO{1cxyoC+Y}7SoMG2)AXfmciJ3fWr;C%IyxEhaM;pmUt{T4+^1u@+B=9tV868zCw zjk>0<|HF0Mx})9)ThOmfJw?T0J-LYAee0FIxC>Nr@`t0U2JLon5rdn#Uso^jQnu$p}A8e;;hBnHSZVrdr)_4Sb6b@3}WKBxc--asLCMF`MBisg^mpAfY|t%L zpOr&%fQr$Aj8Ti!54NF8EXwVtZK$qZjSLk%JYo)))S=83gb$#T1t73h8-(F8#aTL4 zn+ukd74+3O1`@my>e$d#{Uwc8*8SbrpVWu@Z3^r$Knyc`BK!U^yt~#UOp22MoLqRW zrOu5Fqke!kTPXt%#z6gzs67u)-wpS%*+Qtse@~R#!%IF_T@GW^K_bVlR-sbkl9H@6 z(?5mTH^;#F*ROvGJh8&>-;G#aQNf*32d5u1l=S88vctQOpCalz^)iIMXCuQw{qMpYB9zyE4) zi`kSVZ_u;M#%E49!UOV5#8#Wu%JkQ&Fam}KVdqIP^82V_>!9RfrD)5|PjYe!3ryX zT|BeDZHsb?OO(~%LMo{;r|)*9#iEw9`gkg&97tjUFTX|-&rh5TTsFe)cSK@owM!fH zhK3^GLhO@W*zu)L`SB^&6Up#o{FdOHa@w=mKM7>SyN41cSp9H@m zrcoL8tTGOw#G(OnfSIwq3&Tw|`A$lI#`s!Ms{I`BUmM)TqO(Dq=WE z4)bp#OMrNdHR)~<$P$O1u2>ugHWq?l(Ch|Zlk-fT<5#}Q9wVht#kwYTV&u{9@YRw# zJDF>$i4XLZFKlm$cHQk(m&0YRTn+RUD@1jZs^KSzeDq1o8D{l%tUW5o37r|$kMY^^v%kzaN!GR?1! zILy3N3$DlD&v*YI=g-IGRMtwj)od=wMVe4%E7^~*seTDnq*Fyk1^af%ngrpB8FT=h z+MI2aM-m4}oydYIw3PSZo2~e(JY>cQ>~rfl#f<~)^wu~M{SqFuVei6^?h}GXzh~U- z{~QlBA{PwTm60U+rHO(BPVA_tPv+H3ezQKI0-?uBJTz_TN3}S2)WufXq=o)Ozfb5$ z#ktZ~Vt!HVjiZd1d5KOv|8+r$6MZCJvcvt=S=Jv zueKpPjdEJQ)Y~*1gSsk4fUMT6Cy?O;$)1-a^oVo@q3INCT0czN)2J*g0CQb0nIT7+ zU5r70U%YCa{I>=RNJgYPF4as;go0&p_7i%0xEyymdU%y!W6gV*8$xZl+kcd!)f~Y* z$3(DqkRFg+!8ad}3!RW)3LDjKeCUtiN@g{)4||3)+4zB`EB1y^b;6j-I&ibVQO3w| zEII+_X@^GW!5_=(iQZg_4idLzj4jjC{;#aeH<{ByK*h_1JHiHpZ@suRW2!aM8-7sIfiJNwKBjs`M@YCv+VEg# z6|2}rRz*;p<$3RXUzSRA_kY+FO2&+p4<*l*qtG*m&~nO4p-a)OJ4_&r`b-k&ZhNen zbieO+J_Jd`qmY-Um)i#4$Wf-0#n-iG4+~88qJ-F!$K$$;yX;CL z$2K>8>a{WUUtQ8dfm%9gHKfLng8L8fA8!)PTdo{}Z}*@vfI32}x6)*#704t<%jjbC zc;g)+#F9EB0xKD!e8+?#X?^io^V{zDw`r8l7WbXnt&frIy3F`WwlZcA9v*Wu9xgpR zQZWx+A}apwfikkE*Y}>vnzRFQj(?1YLL|{K+|lQODQadpxz+|$WOf02>1;9g4)%bw z?zGX^DQ-(KIa`();MZlSQu;G1K!@({2>GVhCDtb%1 zBC_FgIvj>)%?B8preFx;#}h5lC8fxl~&jTtVJ~1koJSJK~?}na%jC|<2tHOkqC8387DEpoGw2@sfa;cr}wg#Ht%u}0uNi% zc*wExCE|~XKN>Rc=QL}CdldH66wB)J9(*)G6kR1D>KhMw#pjBszrAC3yySUUU2vV_ z4uU0?*1bP>Lt(+>)*+SjgmmbmHbov)%4N=50{G^R;dKdQ%>JOH&zt2`;&YCgG0JYm zh6orp0svBzVx>z!Kn18K|DGU+a}GW^k==%0VApQqs&qQ*xB+*7LUf(`|~rJ^G~Tnyq=kX zn+bS@8{k=0J4&S_b`*;%kAjd7p~luB;3I@bYRsP;sWHM^+hjSeQ)Ck#1iV$w#LLqK zdc6rxtWoj=e@QAKR`+DAX8xNU074_+6~6H}=z3ILzj@MdcahP~7PrQVccb=k$}xs) zE$*@q!t(ubAian$h{emE8(Hm@_}WT?9YXitvm^NJIn#Jq~NU+~oyPC~m3t z0-Qm=%E}zRYE+6Y=|Sb`at+E0awVwH7F}dpiW^GM47%gxeeuR~uQZkuj;?@hF^-#} zGaGD_htWb?u0tOt*O_HhEiQLXFQAP^0p<}|tpvjxs;_wfI?ZBx02M$AV}u%0Ba6_r zTsIKv`ZW4kBTc+Vh5hSmh07NGy5C+&rkP{-PD4fw>xAz`?GyyHmu%ogZ$VdUr$+D4 z%+ccE>Tu0OFVsM%i-vQW5^8{Zn~3}?CQ0g%VI!rrP_b+AsXo>ns3lE`qYWE|@hAO~ zks|&Yjz+fa23--v#5|9nic+KOieEn(mmUcT2ps|F%RsTQOxZ#%JOgPa(A;{2+Yd;? zNnBqTt7{|+rKO_P>KU&`(b&JeGT?)eU-GDu`eCEUaP2O^ui5vSu-ajXURAM!*|{ku;mh)vS*E0#$hpuIhP8)>r+f2 zvjhCHrc%+Ckd*I^5hSGrvUg0E_2c@~tfMm#&QjQk8VpXRL19mf^~}A6coAu>%e~a* z{|j#NSM_JV$bhW-7UqZgi%8hm8s@mwxL8mxw>k0!TdYS0J~r{rdq(1HhWJF zCtD%O9!i}uzOPUMI@w8C6E3_>SGx!nTLI!*2gEykp(mn_*HLewbA=i!qGDnHT8Zan zbTz7G`8!pmH)+FH@4B0-=g61p;w-Zl4d=y*`4B(!EIvQYYeHUwP6lUr6zsh zUh{`}Z9Y28xGNfW(UlkGEkdA%(V(OqOv)50$=GJ8b#?+JW6YNE!Wy+aoB8)Amf_Ul z5==V@FqO#8$~CgHrdhHN3P&&G4mN$mu@cozXqUSe;&XSKn}CJVJ#JEpuSm9~4MWs! zY&qXim4fQI^xCLVY@%^v*#ESDk#hOG`;@90xA4vc{CLXqhyRG*mHz1s2PPyLx6&lI zb*&^}F3z+=K9YW9w|AA%hr#0AaP05TY#Gq#^ztQ?cmb&AJNKeG52NEyc*#WJDUs>s zuI<>Ey&C4NDZGML^oru|b=Nh$jY?^pwMLmRq=-+$+B)0YilVrfKyyV74Q@W}3)_b~ zF_#`K|FiH^3DwFGeY{V`4M31lx5BU9FCaXk6eoL4XaYgC%$O{+pXz503dXwf>1Rhd zrlw$e`(x!+AE`Dh-W`iZ*G&j2JV5M_X-_%n3U+#jwn*IdXBdlC%R>Ov>HTK5z zaUao8o%cJ2f5dgAItCVj(jH6d3O*&WAVJj_Y1Bu0N3%VGEaq^%Zy>6&&^>w06;)O0 zVI?PLYNG`-3piV)tj5{;X&w=c3F&59P-dlW<%eeg%O~|ha(&O-D;6Rpl6+$S_!@X z(o;T=4Z~YLaLv?<>nFZf)>ZnwjWtF&p^7`gM#v8EL2hW|^cAH?Z9K9i!wFnLW}{fO77N!H~9g!r65*lv2FSn=OhXJv{~F zyq*{I;~Gcefk9?u-&v1PiM$$QtEj~Z5~!m02O4$pyK`xF28&t#3ib*64eSDmoR|J& zjq1&t&~3rBMZ2$7ke8}Yl+cA*sDbp<=~uqT#y6ik z-USZ|{_;CMAKBevKp1ccHp({MlOhd%GV&3{c!YL*K15Hxg8~ViNH00}~NhuNIk3!_(X*usx zqyqhJY5z38Vc*7U98tiU$By_OxD%Cvw1Or-ebsIi=ki>+uK-hNQIM6deXLvk1-j0J?lVHC+9193-bjMPF7H~juy zL)j^-Nbg%ran8>txcbo1`sCtBJQ#6YyQJhZxW$oh?5>N(9HN;A&inW%qtl}-YzY=R ze|%-LwR-w~u~Q`*IS@BQ*#Um6YAf8qBhckiS)X1G@(}VI4hikKqOH(FA!SJ;h6Z?3 zq++0VpOfqqfSfxRazU#(!;|Dh9GPo9DK4q)apb@bNTDX%M)URcS`Vey&O{xksFktl zR2$H@ens4Cve-z|oNk5(fu8_jgEB*aoGe%&Xg?B1;r358Kd!bgb*|s5N0tiT$oK#W z?r^~UFZAsW=xg*-pNdG;5Tf1m#M{&tS}p~ao_Taj@%7z96Jk4i zcNdadN^zU9H+ip zN8DEhtFdCE6D`bAr^G9^{1zu1yP7@Bn*Wn*wCRx$My7m~K9!yh!BYtMGGBDo3f{_h zWj|2LC-UtTKvB@7fY?p>Ymf-1B$XAf+`bL6n#+WR?|lfpckWzk>3ZxL^0nF|S8J0MM;p88f9=x3gV;~? z$k<>UGrDOk)=Eu{58}ztUm9E=YOz&%<6}}KxoGnqy7TknGMhdxz9Q)>#7Jck_ua;! z=f%!b+7859ZO^NU#%epU)bZ&^hw!6}O;{a>_sIp$uTzAz(`NUP(B&n%VDgSVto%{D z9LYep49Vb(a1RKQ8=Xeh@dUgTr#p-tj>ia`BJbXSI>rWKBJd5g+MGg!cm>HEG3f7b zBieNoPcVB>DWR0cnGKykK~%!V@cDP7z_+Q4$%g|sRkIH(&xY9yzWvy)n_Wb7t`f>3 zfdR8LDgFse1^IEyUT0|~I|(8ncMnIc(OPYU>S|&}odT8Jl=*3KXs3RhtJ_=rf?i6Z z=vuCUfI^UzB+4U!6m!vC!s#~-jea3?Q@ZD~1oAYgDQk|eW(a?? z+ybdbWo~j@#%pJdO&r2$7Vo5PiZ%;^CnS(fa=1|o#4gk1tY_%*--L9UxW_9nD(SL3 zP11NY+-I?}Ha|LZdL8-yv?2JMX{q<{8pGwhkaa=3lhLH}<$1zzn4E2eiP>2aVr#G*KOsu>0;T9_U_K)$6d4UvT(p7 zP?WC%>hTkF_faAT0o%|Qp5Ot~%HLHpYBZTJ?v60u>Uv7(_a)RLU?-RFX~!Z%a; z_a`W4OZ!BF>jt&wlsUEWuo=H!esg1!u<&?5bot=Pv&)2>KUnr@Rcr;0_`HaA_cTJN z^@_7aro)69@%G_?d8&XNaZ8N$FdIM zZJIis*D{AT;9^M_oI}B>jT;5`koG01Adnb+ zUd~;+tXDL42FkFkR3;*tu(VS5X(xbgCr8s-iU`u!*lA=N(s<_NLxbtNi`X>_MIn>D z-PpbqUbgo-&x|~bLKZ*I77sx8TFsqH?r^U+x67t#Ca zds0Hcm{zS&uPCtsBcKFSJ%4z|FftO zHdEx8-xqP+H`Q^IC9;J9{KZH<=wN!4+Sk z4;4^J^x--38$2XIVhN$K$;W3w$B>2|5e7atRox-#%u|e+L0x{t!Q@cmZPJ6Iz*e;< zjuIG$WGD|djBa;2j)}K;Uxg588{pfC!`1-nFMahb7Ly9pc5Wi1>czCnqohUxchf5& zwBn|>)|ZPF^OvpYdBlQ@|s?}5*#rzgic&oE3yJ)shr@^*5x z?~Ay9A#9EGjXJCSa5pJZd&IgB?d}Apho{l5f3bt#O=Jgc?~5~rEZh}{8hBZ&J1bd6 z|4c4Xi8W~%@5yV6a*F`fzO&B zqIMLch+{@2BV|_8H%gJkD?8gi9By1WG@vlM18QwBFUD_ zMiCXXC;lY-ygs5I{MSX=4ZB8LNPEr@ycC~vjS6FnYKnrQa^Om!p&k>5o)xO9nw@yU z$^PyXXEOBOagT z({L%XB2igknY7AMN0~0A%}JwmJ2S?p^nurq{r$%Yky&Kgb^55a%XldM#W$Ywu~uOi z8MC*M*)!`HxX+IaHPdF&KLz;CiezBJ1mYWAANKVQ%}=s^T7i0-rqG1%d*M2|+=TF) z)HxawoBLpM%X7dy@Hf%ZKJ;slsW|baKLA6eP?xFSgtVZsU7x*c|A31lmgE0bu%gqQzh zU>g^zZ85*5HGCX_w*6i`XMs3aj)%FdlWi|J_~pg)w64z&J5HVXW_~S>>6_9pzMbu- z5j)IJIWwmvO`D{Sr?$ffiD>_(exdf9ne}-pTdh>S+dtvb zl&EkEq$KhkXP`dfMK(2V|5bf6C{=!XI=Yk$IJ->}iT{?{^r5MHY$tbHRr4t-?d8jT z3`#ILQBVC+q`@BXd=Y#G+^@xz7zeU0^zl{wgo)Iyy_zf8HD4kfdhirHeYm2oblEAf|Sf8yE0_HL57 zo*&a3&mt%GBu%G8PHUy+;Lzt9hDpo2BjfOwNPpMZ2pL<4;Y@TPqyjO97g{135z}n+ zG7`sw?q{@`f_Lt!BFTjdR)HyFy6*6dGy?+{o^suIUWEDFI|V&%@K5`(&;xZ4Dmib_ zS{w-6;BC?G`|?mR{DX0xD!X8kWbnZ-;`q}PCT@;(SNM|t%9}4Sa*~xg5jaOeuT)?E zvLXz9Sl8wYW`%ykLY_l+=X(aiK2CMY7r@IF*-|Z~LnKJ>JNJ zr%wq-yTI}95u>rdsH$8LT0kVbS4WxtKN|KC$S2VXL>CJNz|-9ot%yN-4H#aXZ%B+o z@fq{w9_#vNDkYxf&0bZ__2bs&te+L?p+F9xd}S#LOMyHI-V-&P1n%CD^N-Tf!a3jXmcWaJ1OSKyry zXf@@Sb;nRys=q9vz)Ee9|09iX>yA^$@*+s>DsuP92Vyex=%c{1{4z56Grg2eD?r{i zOrr3_2*;sZBwf00f<0!Y1DTAd6TK$agO@gupj9?fF6j29-rMvs*Oqp)HhXLIK|_)8 zc=}mjPx+RWcqh$YucP(b7LW`NDJCKhJ696n)?kprP?Hgfgc$IN`ipJS$TruIj^;3q zIiFVv+1g;D z&e}~DWLef8g;v)tCgJ}MGPQeBij=BzcC&kU}bfTUk+Yb-w!#h137ULN_thksB zcH5!%I@_v>_-2~YNENF@tu7SvaU>>9&#jI|=NM$0v$ubpQ%Ap#02iDgP|^|ZIC380 z6?(ap`vsGy>Of)TXvFu;LF~_O*yGKgFlnH4oLC?{i+5E-A}$hB>-g7EhP>VRO1iOo zUJfppxDf3utv2#uo}6bqdN;WQE$VmjwWY*ax!*09&)X-Os!81DKedL=PtSVKknw+y z;*S4pswWv8f)jv}Ia_52g*u1~2u)mXtIX<}NURNvg!!=-AMNuWJf+%}AzD)Rhil4) z{iM_h%cxU>`RGbt(Ig@{Xsx4?hV<^%FZklLqS4W1Mxt*Uw%4XlUCC%gA~s#NowuZH zjql0Cw^g1GEqOJLXtP-)tUCIc+b^0FXCDXo;M+S>z3lRSs*GB_;vk69Y$?uBmJX}h zDa&o9_u(X-i=(cFG#%HDdN472-$xx)NA)w@+N!?GFeIYo{8o3?z#vR3fCQqg?MYTQ zb;^hxCEHlOB9`bIM74uGxPIx1I93dTlK1y&4JXa8=hH|AtjlFMuG_K_(COC0uT zQr$K>)`P$Tj>4b5eE8%Z787sb7P-upsy7mpn(#3e4F#&iE4xI(wW|0A(UK))0VjKj zx9}^jrcC@m)HkKU1$7Jdz+dc2#G+XJCkhTv6i-f04zSt$xdxtQw@uaFF1HF*Ym3YT zVjDB2GZ7OKp9Y!@G`|v-Qj5)}IQ`@HpNC#3o-(AN!_EJlj~!>pM+`J>(O(3Rb*@?W zatxA>PoR9c?$Wr6qg)Xd!&$ueYTHN(I6(3OzRAQ2v)*#M*bH!!C#{s#T=j`h-Zj2B z*z5Fi6!_Zic;&yk5V5k?HR6sa9v|JhLAQ(^cCGRM`~$XY?<|QG&Jd)`l#vZ#hk<{ltK{QZ*GdeH^Z|S8U0$>OguYt zl9+40yDJpQmHuW`#Fw6S*LfF5eI!u4D+iTRmPGI5EYJ}^|ERYw{lD#>WgWy+*ge+E z1Yc>AA+XLwNHFE>2xBqH)i?ZxumQF=XRyB*W7iA0ksHyM?yE>O0t?cNmK-Eo=f?-O zH2c2fVW!A$4(0SorskcO#OXZ$thZO)-Fx?3L5|`U!NH9nzDu_`C1o481}4U*(U5`4 z5=B({477$*0SuvAHAuo+*@R|U*ikA54GF_a<;aTul;4bUTX+~%n!NtPsW`7~?()H} zC`duO2o-d&e{eBTVO9WjshGSek4r+J?kixPA{9L?QB#lHd3M%Rt%y82Fe}4>{I;X? znKnBs!Cg2%E3Z3~rZem~!8Q>tI4}ROv-U>f$}3&_s+}j7CD8Jj`d&}biJbQquYGFG zO~zx54iWonjIy$M|9G|#&$8YJnpNsO>h!GB??clcs8FPlOE{8)l}S@JwBN9DMPA7t zAN8I{fx#KGJDBoWDl8Pn&RQ@y&c?%?Vt%DUocvm5$QEt*$bxtW;VqyGG^23$aFjMJnF5BY<>vs^;Vrk8A+YcGFSxP}o2jG&A zBBVi;B2f3f!YVUsztYnde>J}Lv!!+RaXK9Px2EIc`Bnc?`fMbatguhd?5h^%y?eyo zm?Qvlfzj@973^jFKT}5rl8}pe?}V9F9VJAm)bXD+bBa~OUz;mZ)=X=2KOt{sqgC9l zm>`Z3FN(x?^!F-=)`!tC5X;d1yZYcu;yK4xv24tSnU_yf#!SY``?;eNZlyk87DV(V zxWAJk4GWn)n7Cj2n$7Fw+K!dz=9SX8y*Rrb;-Z(=uAdvXEVIHj<`fM~Wct#|e%GGL zj!wJ(^Q&@(gtE8i{t2hoD2{kA@*L(b5Gw+ZWQjoo)@u}och)a{H1DEd$A4t0e3;7UM#ovv))(0;v8c=x|45T}lYvJTfOeJz~@w1s?ma)-3ZhU*>>WuthX2aimVCuQ7 z#sXiVTt-(v=h(Tdpd-B;D;J1;s)q8{d50hHn@WVobTMR~)MvGa%#dL5UL4b05$hA#(rQz`e+Z1b<1dt9Tc z%rd|xR$oRw>mR(0jKs#?($kyyqivM0OAref-5`6g*6Y1AxdhjjxBpyjh*$ zd4nFl-+j z-ZgO=yNn|w8Z2=sJaBR%(ezz57(86F(G-~?ysKu-fmoC(5kc(4HMZBTY8>oGGC7@Ak?;SwUdMUE1zvgi4S?`jL3zJ(MH`#*c+ji(<;e z&%MHudXoixkf2(wpgZT$>AsSHUdX%uwVzmr5vWix8!Qb1x6oln-*w^uSudkWWP%57 z1wO*sx*x)I1CkI8v{N$Se_ImTL9wEGDyk%*R2NYFSstisr|x!2+*b^YGQD@TgwNii zLj}{^8N6>faV<{=Tp2+Fon!DnzUvzjEB;epdjRs9TA{1^?k9_Wig``BDhdFAMgH%< z0IEnIP#MEx=}l)mNv+}oz`wiB-*|$aWUua#5$>=?RU2#{mkp-b-k&^l84k|>Y3ctO z9HK&cU<8vE(E3Rwyd8>+MtYqccV4?`!~6)hgB#(~Nx5T;wW*s|4qfipck&l9NeU_! zFl;=22;3S(#Xq}LFcz5L?uwBZWxJzYVCA!pt~bfrJbd$PF8TBIXFIRc-<6l#t%CpA z?$m=xuTmFs2rxD%Ij}I?R9O)h7b$p&VVSbdmIG6=*Y7MjvQoWnf6g7jQ5$ zxo2EvS?z9eJkUBMOyJ4=%829T+h^PFE9o@bb1EH}`=(?Fv)JC=mi)X)^?r2u=X^Pn z8S|YNsQi8DzJCvcg4uVIEewnfe|&ylEZ={v;6h{gl{cIF_g+nJtZ0uvWUG<9yZ>`H zU+V6Y>H%Nh-(d_}qj#{p(0lTqPeH7c^7p*Y6P#`H{wL4L_pX}{$~-TBQeNb6{n^=! z+U%qG_kW-C-5(w_|MCC3Z9f+)JGl7k1Gj8j$UCG7SRS4tETAx>;Hs#x`<#+L^&$PT zv2z!7GAN#1xPjq=)%g^uF22e}huOBOQyeQY>;E&E|K{tSY0tVi^cZuM=f67E#`Og^ zj8*EFZ56#6y}fj+PSm&NuiO9rl$`oSX>)sSy)k2&$dXFthKx7Yn0T0&oX%cI?w7HD zx2b!7m~GyC<4e3>J4JXWtXkn_ zdJ@WIk)hIY)i+hRj6Ww%@SZ)tXto_-Al}X!+{Lv$t9m&pgwY zQ+|Hhy=Tj|N8kH#{ZDT3{HS$vVv@?bz6mf`ygR?pzx{Lc8O~?tIT-Q;Hh8K4CuvW_ zFSyf~C3Q6|v~km6yMu0jmNL(0%Gq_n`mca$@hoGcMkIW2m}c zW>c`mt`IhxcaBBs3zW%UqIeQL-PTf zQ-;zJ9_d*nA3K>FK?iCa(mHlt0Ccp5(_}rnLWKa}aUBj3M}J5<0T1qQ$hdS=osR`{ zDhJ1E347-ZAdACy*N-EO4!|=%m=i@Gr*nW#|5)fLKHow>19-HD!kVN%JPUz`d?=W_ zd?d`y1UkW^CA4S0q6v`Iq83~8$YBBSe2~TsT_25GKqrMQq?>$}G_T2*ZZexv&0tCc6XYNjn|zS#1z(BJ>ni~tlz_=w z;`KqX8GOZ(*H70eD?A>klq9J1N+9_tX>%f0BW95a z)R;l*c&(R$yk;^1(JrV#5-k=;GFu?gVg(yO9t1N4Dx|Z_AS~>e3V~FK{`y(7nk6;P zzS(NAU*q!m8dZ2bQ0eg#yhxB*52U5?TSCIMZWHt@@wlPH;{lJ)OUWaQ zh&RFnS{gu0+N;7SK?A5Ufyjh5vl-GXR!FnizzVR|Rq6bu@Q>Z!&%W)p0u|fgjDbjJ ziUtTE{0Y`*h0IufKMMfJmnVQ5(6* z)0F`N2!F&&FQqgX*ymP@!+u|>S87n`a)Zk!h4s<|z#o+r4aFPPY50b-0gQT|(8Zc* zvqPHMdRTH*{ddpe)t|0>?6I=boe@qq1_&VhF(1B}UAuF)dwdT29i@_#RpfRN-#g#5 z4An@PK=1jrU{okc77G{@%CxbXOpsx-Lx$B_;B~p*KeF-ncYpr(0~mZ$Gn$PE+Zws= z>B0a3gn#ZMHz)KRd-MHfhhuz^+nrkEajW|0RsHk^4Bu#7pOH|6Nc`&Yg~;L$%EvaD zOps}{p;jpMRaL#R`iC#y-u3EdRi_&xoazh^K=>F`y><1{G4_Spz6n&jx15aX28!(oEL^K)*CWn7-iX~sycmW0+aRJBeJ?fJEi*P@7c z!63iw5;{!-gKD*H30|Am^VOj(Tb^2Y^WDcW-AN^=ru7&#;`>vL0l3sR%Q)Ze7@zNU zr51bKQKcmamT}l59WB@rFW4g!XNcgJmf@|%bXwml9RlfA8`QGfOMOn~D{BMogHuWy zoGJ{!r9MI)^OawJ(m1HGqhGbpnwS|W|5_eabBA8jx!5}2pGJ{pO7>;z^X zwGT2Z=1qBjZXY{)+^q*y?1LI1=|kPbslWgt*0O$}kc zcjRPyf1)LNE&qQcOsB;Z;en|4lit0t2RBu^*w>BpVuRYbHFb7>Ku zri9fXj93Q0B4SF-v=FLc(``1$wpce8?EU+?S!1vNi!p)dGObZ8P!ky-fcS4&z2rJe zO6pt3os}t7UT@eU5-lRrBGPERKU#*UUbq&DLSo4TTK<1kn5G#dq)gy2o1vZ~p-d_% zyKi#eL6d7T6Vx;Yki9%u33$ivt6!?Hn(xbXR*^V-B$7*$=yg)15$1~IKDET+NppQ_ zslE`f5(8+p5fZuF6TiBk|0@9CQ5eWtk6bO^*CYnu#E)gLmOD1Ad9T>yyQ$Fa(h|&? z-|LmkvBdt77@}Hl+=vFyV#263fXW5bY^!X$1Jc3t#TQ+B-^DZm+66VnIIbxSAQOM{ zE3Zr(^4R^K=K0|AQja@i@v2V2q*P2%)B+h|F3Erh4-%E^JiFX zkZrR3u>94xZuxuq^hyOJ(z^t4*{>!rfb8k%e)rv}oo^X8BhTmQQ|9q#(Wbm0M&L<2 zT%dY2jMjZ>z2TDvgLK10^+Y^;?lh|va?G|BJ3gN>`nPxAEv+dYqLa-4ocOH+CQYh) z?!Z1j9QC-mR4LLKqV@WO>&|dG!JbH9m!^i&>HP^;fyNa_vc&>*ZH^6p&i`rTh9_Rc zQcSc9@Cql*O?omJfJAi>?_d7G2aR(sIDf%Wm$Nwrw=`dhY$)Mds?lfis<|5WB}36Z@XjTsxNZAzAMV5$h+sYU6EO39h!qpio$*-H}Rn>VIcqJCpBOH;d zKm>s$_68+PA>$xJ5{eKdYkNpOc@Hzj9C%)AmFp+|K%wa)&2|HOdl~YkX>f%R!&fWl zMrsQ@-v55xtN#;B3sf5uR0jiy=?%79*ZlfOxx?|ao(QiR29LSq*J1)O>r|w3M%pIc zBb4vQ_OY31u6%=pWN4C<3_11$u$xV!T_Jv#VRHm91UA+!_qa*#QH+6J@8MK6qDwi5?g+_9IJbf*j9a76HAD`TB$XiSk zpt_8E#5mpzfak{_(&c;HobUQe4I9rXa5>FdAWu^*vz6A8M5>rS3>Q&2BLEmB(X*E3 zn2t?O!y41pOH6>)$!X9uDHXcc%7$~2QVdCat(}ioRl@3mTsTls4!g>VVShzAR7uov zKzmrTS1G?yrUAq^EI=zQZ<`U=6RqLRpFPL!@Y;_a898m_Rlf?F0B==`T(p)i=gd1Sxq6F@skGE(RK%`4c{q_LwmN67 zM$+e>V-806Ry5$jwEgIIft;{)0t+6UMzZDiesaL+ldBc;!3J#Je`5j?Sd6BM{z)KE70 zz+}QtdK;V(9Kz*ZD<`7IH^|HR9xUEdL(ud zKcJ(SI8!i{q1h7NzpRnPAGA;?w>@gv9A5iB2QK}7%=Js+X%xqU0XXir4VyHnS>20! zuRh|cN)JcW)hqb}9rncBWpD>2K05U4*c0I4mhIrY^b9hB=v3bhR+Pd2{@MlW3Ui4j z;C2FfhX@l;wZPPaKoTbj2J!W7V0Yvm`Dt#?c-jN8W&rN-u{7<}DRIze?=L;%adqT# zvqVBtlLT>>{EEi7L=i}|%o6VrRquW0w1&Ppbx#YzS2FIFq5^pL?_IF7yd=H z@M(zIDOz4PEeWsnz36?im`%{wY+L!wh%v(e%o*8tMRZ0V#xp`wHf{W7r*#SvpPcu zt;=`2WoNiiiLZt=b>-A3FNDO;HZ{1@GARY_Yta^3r>5&7p3`L~mn6ZYJ=@^t+@mzg zEPIQnjUaEzw2XM=9;xAA_P1=Sz3kZHB|X+X{tV7GL$45z6i59!V#NS{mnVSZmJKVX z9`<;Kg^FIpof%Xlzf$TWw!gG)L%5^)xlu3TseFRXh50aX*H*}LyQraz+5rDW^Dk({ z1`i|%f`kjBXoFy?uvbAK*nzH*#WH_N&wf_{Kun=fEEpgF`dmG8+Avqc`qRrKPms$~ zj|(&=lApS9f+fF~4yeZRyw}=yg%-)Fai?9p4UZ&&%k72=w;NoN2P&OTsBpQ!+);n#}W#~VwGjDPyK%Vk_Wy1;+kU~R{)p}C-IFMzM6?{0`ZGd zpE`TIP{*DKUv}$FeEad-_8vb5@Bg|O7XG=Fics{vn3-g?aL*D-Tr&W+c*I~F2C%R$ z!s~YJGcBsfVK>YxPi>?6N74s^c*e2SL=JNYAC#(!)$?^%Btt44H(W1;;5s< z(J%lL5ybGd_5aU=W_3r8+ECzjJ0g|%;owiClAk24`F!v|i?%SlZo`Nrh1!8fiVET7 zxwB#Sv7>ObtQ2fnSzxkQz+`1XGb9}5O`)mHr~!QBQ`{)55Mxld4-3diUT_x_K>frd zxPQ=47}CCD+=n|KC@q1zxBdpj1jbU$C3}gYV1j625FU>PF~$bgKlch6#A5wGMDI3Q z20&eI#oVxety%WbQM2zV5=%0WzNh9=i;3j-;+cJbX{V33Y7hNt*Ntd_lm{Vmf4_b$ zeD~Wr*pqu4teKf$w%NdB!)2hQi?~r@2f$zx{X*egVJB8%YD)P2#5-cjV6C)A0(U_X zbgN$ZNDIx#o`&$!%2{x_X!)Dke~aJxKgMFY)g` z-KHa4P^)&-#NzUJV9MH6FnP@?$df!^O-%t45nMiKNdWeTc9|VwYWs z?2Qm8v?Zc!s3ar009_IO$biQW0Y%M_`JbPz#*O%%!ws4q+4xO`#%4o&CUS1iJ-Bz`242V1s<5%n4wk_6(;DD}TywF2H; z{4>}xGr^LO2tHy9Qlh7@hc2Co5xtyP#>x|Me;QE@)D)BvC@F|7PGsmqc$-2v2LI{r z2#F8|5eo+x_e8Z$E_=mAS#I;j`$f)2FVKpYuAHE zTX)d&PF458K-m@V{+E;-+A=bz@yfg)MB?L1ClCN7JC*ok5eXykA`})tB7ai0M8V$$ zrOpc9m3>c;0myo>_yyqy&HyA5|s#!?!l&OP(MrGiJ=7)Sp6DCxJeKL`=0_97$Zj2m|20vfuyO`7`b#foL{_R6JTuT=|7n5KY)D#9J&#bKh|f-X+K4ZtA~mxSao0;0Y2mCJDf zxxFE`nnY|Ds7bk%PvH);`;kGg8w9ff2vlMz6jFI5%pG@g++zd?6UQx?2m9P^FeN3> zrd@((h}^11Um`t`-*5?c{6%98advLrBQq|&`ol=#0!A2sOMe>%zQ(Tmb#5WR1)+#v z&&>x>Yd9tl8cq?s%-o%*1+Hk&6z+(iUKd~FD|6?-^c{bIEj?W(e&W(3>~1F7fFOB- zcbS)mVSTCwD6^1-lwZ2qvT`P%-W{dn_s4;iOu%TL!9AYS6u<-w2H}Z2+7jU7>*KEl zw&&-qPqX0rJv+dfl1jZfNaRGq zBj&Mynb-i#xMeO-@*O97(zB5I#DiSGOtAZj9dmy0{^_1}iv^OcR(I8(vv1y4mK%)I&rXp&XS@R}Gs;Pah-!u#8|fF&gb zEC~s6$^=;t?hpudQVsWz8jKcCB_5t=vG}UyF6^=TxtDhuO_$b7z})zy(tp9s@kN;# zk89ne=7NS}0ud~V(qF*+sFL35&>h;OXKG$bxp-f#Tn=xqUmZaF2!ALeut=`iEHeR@ z@Pvwq&BxrK2yc|?K7bpzf1k!Jy5!V`+uC-7_F35h_w1A;cz(kgSabX+=>o@zNMr)a zWr0ipq+=X1141Ke5I@+y3tZE+yP-9SbmyxU{sjBVO2Cqm43@+M|GKbp0$zY03HF!e zpN=A&+Qp?W&Kf@EHH8+?3{B}}0NM44O?}6%TfVFiq_(;iO%IW)t`0jpBYq)*Qhz%)U1`R+Yooc6y-t1j9^=H^oj004-Cn>O51C0}~d?6GFgzzZ?poVnk<->;iCxEpY zI$3PVJr1|8Tug+3B{>Pq2?=yf`TB%PJCDNqLsvGisaK}SynSx3i!TCzDj_hY*^O8a z0|Xeq1Kxb8Yf|rCi*b^R;Y|-S1c+)s0~2G9v@D^Y2__TF?K9Z$EugD&`1@~DgO?FM z;(PjU?)|aIzJKo32}ovR)lx*wD_#c2LOhU##A-KL;MdErm`VROas6soaA<#ki!osN zd{h$~|x^upR~oFn+K7b^fclNeQV8Qj1rEd z15oMzSgQ^&s9poT?}+S&1ar}=FMvBMlMpi)Ffhe)R9~K3_huWnT@6H-}>3% zU`hzV1mUPyxOliAm=Xrz@9Adq{sk9Y+>OB?v359O2H@}qjbD5JS0;9I^y|Aw64G~7 z{kcK7Kzm7pc!qUfCfMKSrQQ=30iD#L8+10%n-kCd<;rF7-XEL5Ye&YKVN*0M1 zh;>jS*_!$#znrThq1VR;3r1cEsd&u@x2qP;0nE)Oc8VgaG{7A!p|+u(Ak+Zo+7scM ztFDjms>Tm1ce|kfoaw||HCxQ!LncT}AbC_`pfFmOXE+6d4T^nBRt{Y8#MA5bMuxRC z0I&B&>F*db(_op7tu$+1b!jvZ#_;7UcvCqFxy~iul|Ol|AG8G82#CYV9&~= z@WzU8hedW7?BV%7#QS0q!uxnr+@-08`N>WD4PP3V!u$6^jw2CfUUIo{Y7&l^v1cc| zvULMB%n_!EMK-)@j3>$=O!P_MmAv4ssDur--4oTdjUG(3z(x`jBe2b40c%nsm>p;n z2x$^g!k}=6XC686%)BeF!_){YmeGVkdKf^4KVw%d{=U#+?i+0R8C@#%7L+p2Fzl~P zcR&gEdWY_CzQTnV?&=7A9-KA>)|Hh|m}5cLCQ5q&^YeU`h$KHt~c?w#=5*59c{;_236Gh1FbgT(Lkg4g4rno^Qr&2_g_izi5Yz>8*m z2beU+H5T5pB{><)cDr02s#f`>W$@}mO_1SqFPuMM_;q?=P&ft%@cv}AXpz=?%BO!- z`n>kA8oB)nJ@wpX$bIJT+5yjOT@PlnB{&rur7Ta0!29qZ z1fnicgh8vXy9I33;0hIQe!`k%u;l1r=1^eSvd9GJ9daNO@Bl&R`Yj{aU+Gs#GMS4O z4;s}P%F8SDc!RVUfE2u=@jK*yuMhBb>-@cDWI^#N4co(9tt*n<@Wqa)-vsVy)lN4- zVHx9q|Gf^Lv@`;1h~&3eNpOq!`30jlEvGAs001BWNklo)y@F;3_X9G z3=;9AG1oHwk=X>q221WXnKp4bRBUDK@90SOipU420|MdM6 zCE2weh~{nTVTK^@29y34uMZaX8)oS8U#waV?{EKuVtx|rGLv#ff>GtXe$3_J-X4G8 ziP-t!FuxF@<>Qiww~9roy^;r{@(Ngg^IeASS-JCYS#iI0QIsU}|?~|ZOLK1x5Q$L=@`x*Sf z+fZV+f*IYO=<*b$K1+At*qYYn>hbn4%pVYmWWzKt7)4@rln4>NeKBAdw5}6*M~VwS zdIvn|DSp>2daLkR2nVnl1D;2O#;?~yG(q>;b>W?hjR_2$^sTwuw>!7N8{0QihXZpl zb9XX28!%eTH9;gquN6+pl)UTaT{L7QV*p+#L&xSQwonWpx<4IR=bV#v;kTddt@3)& z8x(SjnhAp74-4{mBzXS3F3`(BYm@1}uY*aOey8n9aM8(&Kuth{T{Pj1MJvUE4kMDE zGXXb%5&j_lCedmdneAY8z(-@zCNsYMuz3T#x@`-9l`$`mRC9R2GVQ3;XLZEP4!EuL zd2rkL=n}8~4PDp$XHNq%5ePLe-Z$O`vq#9%3rxW8P>UHfoJaD5CYsF7O}E|Fs&L!i zMOt=1I0lgM|KK-Yx!89>_vv_rsEItJ3ZW1!pb(t7^b$=bnAdlxp*MN;m!H6X$qm3< zo)kJzLgFq@$^d#JylRr4c|iG885Wd6g8(5AY5-4p1>Aey`EWzeUWV?!pu7yOp86FO zCnYiukd-n5i?)g{j#rA|C%LZVg{M0AfJ@HRm#$^##&qudz{(}C^2AZ5br}p|UMw0I zMor)VlieOvPoj1SjntulL-6$W-!@*k^nnSBh1?+3t`VUaAOQbgGWqlWbDq=m=}3rQ zOI^u#u44QW_~VtJLs|y>w~KxPI#OH&mreZ&Ob$D1VPd5<>^uU@-JL9HOP8Nt#Qcgx zEW)~S#|DIKR0DWD^!`mHrSL@W{xGsbCtc)I>2kriuRntWRugp}5~gL)hef8z@A7P7 zmMVfCGrX?kf!QN2hk9wcO0{*}lhK{N-?bfH*@lr}27|cPBG8kcEq+Xp`uD+!3&-8^ zKP@{T90PFwf8xm5-@Q^rxVZVpzcnaHiPMz@TKF+=mQ zi!O$d9XmmS6&-8p+mfBz;n@X0L0M`tfeA!w5iQ0Hd0vVs98RLYczp@$Bs@?D18^g+ z0Lw`j-O6tZBf|q{PX|v>q9J7fu_(xrlt`M4X-R$~^p>2P`}v~FuALy*0lb4;khV}> zH^Bdo>CcxgSum|4$#Ib$4WOG!#TO_HotFFHApG%2U3gye*%`1@In6ef0_C zA^~F1i(`M{|7ZFB1o>dCZ?NI3?eYv}0vWrp4h|%CAsE6K979cjOyDUiho?u3f@ayZ zAtNaXlI(WKD=UM%vQn7%(<~^$63^@`+I5cHJCmRUN3((*f*_ayEGNY=`$Ll8)!zM} zZ^I^$yo#6}bJLRfu&t=TZwSkE)?Dt=)y7BQOrX|4K`-_fZ$72Ux%`)lFTwotu<-yj z4Imo8n8KJia_y4!m0&WKddcoaPk}sb{lRK|WobrXL_1XB?%T@b`@k`4$ev5KKXMqe7Jj?zqFLY zAclc>lK^>YWrBk~zbG8Fx=Mt2#w38li!U66UI1hOULz3HF(MQL$Odpuj~>}w-g;$+ z2YfM`6B-i!U@8?Fa&m5q1cS5d!ebq}=zf*gefAOTHG3(sV5FDi{;=#%?)gDDp-63x zMDhn@`HC=zz&NCJ>I$VAfEBXK#Vm??3N*&?CS=zk^H%YA1#iTK%pkXrPfk;He2+lZOvo5Ne@xNqE*ADrBKNAs*J}M}`kn1KifIIb7FDzc*v}H=jZQ zmJ|}h(ZV9Y0s{~YpqP(K9xg)3FG?u(4A{!V%ZQ&qI^r6o#Vh1@qAl=U2yDkaB&@*} zm>A|K48dD2DmzZl8VA|+>XBg4WmiL5H4fDX$3R6@l`!z9@BQ`*e@59I%4(^(LBLMt z_YNs4;S6%Cd-|;YzyJ50Kf)Qp;TQmQQR2XNUmp!!I)7y3+J=~dwfN*Eegq~E$Uvi+ zpLFdFEi&}i{9gF^`yer|2{9Z={tv71B``=RE{PHR;iuu=Al}i9z#qcglnH1-50QQH z-(@Bc;u7?J8PSuD69V=Z;Q_A*WANw6ZWq9arY+*$7sv=LjF|faoNzj2TZT9xNIXN( z04gvi7EEB@u=Vz3_dbM`ItYVQJI94$0PX=w8aDNdhulq@JYtBbgW3UxSu!sDS?&+< z0wFe*ykG+#{4xN$UFh5Po;VKI&6_C)Uoe48?()D3-buxVc)sW*ztTG<_W0+LpBQqi zu7PBWQk5rkjb=3nqz;)Uk+B<9nJqw>&F}rmu-jn4D19}@`c^YGd)>Ee5vCeTXR#iNk)F{F1vt{eMxp zrQQBet4~nS11K0kZUQSwP{(G6seK0Ne&+ErrooDmLUs7Vy+Ev$ci>6m%LHWYP^-yp z5BM)osBoW!Q)Or>} z+(&k85&u8M%z^%M3A(0bz@%>a%KGqp-QRl?%$R%5U=Qu%FIIao0;8fwVCmopH?MI~ z3aD_dVC5Q+b|pe>Gwxv6dt3S{pj&;mtArFg8)zwDkUNu1E32u zY3SVPAGvGQ8lffGBkBZ4)rxEYbLo$+Jd|vsYuAVS+Uslk?Up3C@T-sg#EC~Z{R{%ij^0Qan2E?42vG<2345ds3miV185g>#pW9D6%s099A08Ux5KP{IH| z&-~V%p4KPQ6$=|YV6RX|C1xC}zVN4S^N=jEO9X93~1p@@QLbVtmdC20qKY5Z9J4VU? zYR3h^AMmF?m@u4=8bI>EJxyA|6|MB8K;)K|!X-aUp&EdDf$-mQv3oVbpD;`i4)X>< zBc;EewOK)6_3NmsAjv>wTrA(8k#ij_DTa{?X8FBwEIpdo0E7?(5{xku*vl%mEE{s^ zB>)gI77&U7NDCCy07I6}U+zh8Gz-GFD(YY94bl2tE`H(FU%a}>gA5?SgqCe#ShIkc z+acE;6W~VAoaUGO#OvV4|0L^^RO9&#FOe9<{1h#?qfhcH8{l%h$F3?S!|;o%oY?Q} zp^>BeJ9LII&03P)qNl=E;daACGp5i=Jkp2BpBc(q(37OTP~D^h{S)Mo^=blJMdi-r zgGQkj1#JL?K-?8dQ;+?<_vEF-%aO^C=mA0o7`*)FwUXUd-^gO?$r&Qg#SLIq^(EK0 z5(elEaA3~Hm{o1k+AR3g4Al0VQSFwu1PFy0}n2jR|N7s?(V$^d-Ixxb%|+G594^3xDk&`S+6d~qSj#2fBvqEyf&rw(+gl@0B( za-e6OdZ(PUS7WOFKTd&Ce8;RNn*{oJW-iIeQir8VCzw?TH2!PlV$I z@bbiVj{OuaPNR}Pc+j1Sw+C$+M&Oxt2Xw1lmkjUjR4a$1chqtuK$_h_#_k|=v$E>6 zST1o*IM;v~-$F6wXOY?lo}fs(Z;Kj02Ic%^sN8%Yh^0HAO+ZRt6`RlFcCGC@9NUL; z4G@$Lp~(RKm(Jf{N^sPQNWyEaeh>q&o;C~yO=_=S18g~b2>!if0a2}#3D5(CS^(FX zmO(0+SSk69GJzldP>D}lxU&pRA3(jtWN4R_1y6MDStFygTCXQo-}n1rGL+%!vrJdH zP@dTWLF=vq{`f7q&`jX1s>)w?@kkK@8E1e2OXjVHqy$4ouFrUAo_qc!}JQQFBUX`sj~9O>Vc!MmNp6vuyFRTrnHnGH)u>= zn1%*;qE$N>tkVs8xVQ+$%$_b6m(VtX7BE}U-^@Bd#0dU~lAjN&;N_ej_ZtH3Gvhy= zC?@M)O(*F*^>a%2JU+u*)I^wIWgfSgV$B4lW&73)9gWpgkuyNwxj)Rd)XI!}@^n~n zO7jBb7T+udnk0@%UU<0qxiG3_YhADDSZN7dHgg))03`K+b$(;s25g5y124e_YS`cu zySiWU`;V7%{J{sc9f>e`;0Q>@Qbt{Od}i!aTv-YIXHBKv8rCU}j-2HUbg{T!#Uamy zRe5OdPDA*2Cw)^+T#^KR zrhLX!tzQEGwmL^Y3;EPvVdOW={AJqQ(3PjN__me*`H>?+* z9(!sGKn6TeL-@j^G5TipW4AH^L!Pj z4wn3W4ZyoP;OFROEn&j>)ia7z-_zI3y?)%b6<+vrliZ;Xtk|TCcjpdtPQ-%fMKy2Q zci^jax8M7ukyHqg0WcXZx%Y?fOt5!sdv{!xmuUcT1{fiJ>?tXEA<^xD1tauNSXp=Y zAGmMXFVw&io3g5C06otm8os>z5Q)EeYC3!~XvA5}uVWD>E?Ee(bB|I8#2XYN3_^R1 z4IhsO{6U*S+P3434G%o}rqN_Lu^u3~%ZpEsO&`$rbsf*Dx{F%Uqd)r3GytChNm>fh z;SOZnr`rSHUo;r%rl#q-yvOT>-c!G%kcSk*Pz}Hnu9VePc+%kDmtXPnoGH1k7uA)| z2h#>#0*y~%+d*B6QA2hbJ$*79#10u&Klb;JqxGk#M+*WA7Ng_mbXk`7IV zVqi9C`&)1Anse*5Gh?xyLCipgNV5nkDHx~y^%4HibO<;6U*i@q_B{RN2*ZB-77AQW zGEqgY1Y;c+)EGc~E;YlKczv){3nTu=I(3IjYj6ctEZ$Qr&(ZChPr!=-Dxpq8jR9f} zfAD+--%h`D?`Pj^h@>C}6DtS<>6;K z0);5CB;rWVweg>WaLcO2tU<9w{^V_HhpOmZU?>MqEJiK5IEGaIam0-LU zfX`=O&5lFD(g-C#zf<>-6RS4ec-swv3l!&tVKGeDwkUW!Y5;^lq%RO*fGP@* zu@Ou9aJkeW7=R3WKwH4$fu~!Z2ZLJaONqb-xMkr_@Ml4uoD#u{FXWz-DonsD#kg*e z4PVyXt#M)!OdCErGD=`aZTaUQytZI2Z2ac{SW$8ko3XF4${j(YzQ|3@$gzLLBS^a1|E86>ZwV z!$U?uN)74p8Ocjuz3(r$d-bn$0*sghhYTUNdQ>6&C?!A7cab)3ePzRh|GXbA4T4jF z^7)iykx88%dvIvhs1YC0vcf<^IFiK)IEEXT9C8R%VYEAh1eqQQW{9Fc^lj!UD=7)!~m{`qQq?_{vsYfhi@CZF4qngvWoL3%1Nm|G;aq`n;Ty zMjVI`z;VB2r7)uLIq<^hD`?Q@6x=5MG9PB<^Y1-$Fq<%C-ERmhADx-R$bfhW%t$3oXT5MvS{h6q z64|`pqeX=<=!3Vxo|8kHba8?vO>YAYabj~YK_Hcu!R;M7!#xA^w}#ZWGS#!!K%Usz{dOd!G_GG2%p!o(fw@jwT+58l5_zZR(Sc%bk1Uo%6P4aSp)wBh5a z<>30^4>y1@SEFlYcElq`pPM%aW*j*v*C)%ZK$r%QQ?dEHFWDXJ1*xbQHa;)`EGjJo ztA~suyUOkp$Kk4lbLf;CQU}12-&j{@(!5N`0D?vg)i5_CYE{6JszZl2Z2i|==&?W# zP(%YVl!kCh*S97;oZ7wf9h$^!pn@=G1{#2MjTCX?fp{Z@miE)Kq_ue^w06hj8P| zmJ8;|vr|_v4+=ity*CU$PhU!SL^l|RgYKCz4OUf^vjOF_If1MRWFf?)e+(r*f0U|? zTR+(P$dlL=nlk|R0O^_#gXiH4KxPD>C#e0sclOV|`ijrU3o}6Ex_XL|C@UY4#0ZeY z1K6AZOpWk(;Qg)_LI<5~Qt%;;m6gJ!bARv;$R>5dimC7vboiU)@>m3ZdMG0fs8bJK z>Oa^pscb%U5N=sGS0;Ww^NW;fvKnPV2Dqkt&M%*i!zRiM&8Y`3j=0qDwNK^&y}$Yh zDjjz4$sPKHLU`V(FBb48gkQe+$2m9edjFGO6$Y^GA$gnu&<@}o;*yga*3Rhi#b>{n zlM@}fh&p7`Yn4~Sd*N_Rz=B~!60!kvm=~0sR|r4fc&j19@Z&!>!zbIfvSJL{jhGN3 z@#(T$6i)vfgY$_lY_`{}E!)6tosAEj{`$8y@aFa{^nOV#EFF79`V{dAj{GI!JzzQr zj#lN_v62S{)o%nZ4;p?l>Dkb=zg)Kl-rTzl%r^A?2m`)(8x%GHhYSGWes#4gXp~0= zcw>a)y%m+N9k>2pxAGGw3RRNe6mzK*qauX!C=Fo}5bOTk7gLfOH|}CY1L$5oB@7}{ z76m9INg%o0Fl*olsGX9k`?NT&bM(9!P~vv6UNnLh2w(yRfAGvQ1JIz{EiKx>?Ol85 zz9!#s+Ln#*>gM&V8VY;i(1bAJjUu(M{FI;IUkG&!w_#(G=$}V7}^0T-OtAgo2a*- zGz2~;m<-CpdAAq`V2yH-DBLtdw4KKbACERxp0NJ-QMhN>FEk+weGe#^xHm?0GYWn8 z{gY}uFfh9=yg1N!P0)@L$Km<~vt(DG91J4Kc}yEI8vvP|BnGn9@MNTtB*Bn+4dI20 zheo~L)o}u1{QmM2C4PnbllN(ry>Ox2yAeu$K5VaQ^VScxK1}dGFM~w5lZ16-+TfR#vw>{sy`@4T7(EhK!$1X zIbs+ACtffgywzs_^lsc#_p_d?9VJXffA>wOs+CDvlgNX;c^xokda~pZ!k;jbpFFqM z3xzX&x_Qt0pDb0u{{blwdKf@#lSqnV>?tW}UB3NvnIk(}llsCnnNs?{<=+Vb3SA=j zw0Kq`Nj*azxWJMCuMaoomoIm_VaTj$;K7TL4#mQd24$@N z|FH=^{Bsj)3d=`@GDDn?2$h>@v2myPyj~xqSuOC(<=37PZqU7Xxp2k&nP9ft{O#%G zLU;=Q2;>Mgy*^6GkHW;2n_sx?)_X2;m6eqU{(sfsczPH>)eboSo!6gE@6rh|mf=m4 zDU>jX5Fx@K56#JEg)&lUDZJPFV(8MSv7vh?b~$0l>}lj>P=9=&6edbQn7zd{Py?GC ze!M)QM}{(&3;O-=O+ZHkIUSg%Lm>PynS}Ysv@ZJIj-BC#wl&`ciW;`Zo3DaYw>EuF z(f7}XVGz$38;N8T{%A;k4u8rwZJDxd{C_6u#sA@K0R9~hh>>|=s0Gfw`Np1gZo2jx zqUKanibMC^QSKi^z04b=Iy0DIV!{MoFP!6);Oi@lXJ>x0Z3}#|<4^FBzPW+v5pv5D z5|O4DoWK&N6Mnn#--eh?+MFkB0?0xWLWq`?Q^Shhn{2%K2C7z#95$#Y+pi}bWJFGf#?7)_Bx1qln zjbE`Fw5tDK4+P>2!1IF88jqkuYsXhN91=D{gKbi zp93@Vu@eV_K70lk_X4pN_44#fk@CWHgbU^8=Ws{-#8Z~8`R$|aPd@hsV*q3V?)^dI zH^~35mjP7Wp$$h4Zq@XGd*@mb6Ny4Iq5*U*xuR5(rUg*xNZTf&OVkTqmkS0br@^yB z^jD1W>!VS8*YaOrS8);51f)+rgKwfY2qBlx3pTe0R^NaF2czHc+N+KqfxkyShs&4+&X_2Sku$|y+1MUhckgV5mF8J$3XI<_LQoez9awpVEECW z7w^&Q{?y9=xF2c&9u+2IlTZtE`TFCpQ(83FH^WqgX2LQJ^9B(qjGBPO1$en6pCE&{ z53?rU=`#?zHP+WfTD+C~s!F(T+3gx2TsxK%;?!R z@C@ZH7mWVuW5`WPppkX0v;w2-G?(9)ZOwYyN#NB-zm?aAt24X8iyQit=bna?#x>`~A_tVcs^q zhOYt4PXr@ENRJ1K7A<{x_iJxW6&OGl{2}jJ$7|#;D4uv z;GNl!_(_U1YoW+ns7RGgxS>H4xVtwt0x-Uzcj)moE8y3|2W3Al@y@VjUC4lFi+BnO zVft0$pjDl^#xHUj9Dz-UyT9`~Kz5cO`B}?ZX!zm7-4?S1V{r#E7!cUd*aLQ z3C1ta{R!*+F#>_OrVzbBBt<&4UAwyNUVLhvqjq+x5#rWO2WoKv9vx9$?RRgB+&iSVJ`lpYAg896=OuO=WXqH2eSwtH` zp$Ti2!A|TfK~ghVXE<&XV17_a2D~*kvgmL`H+7N^a(X;4@`JbGcv=cc>!1-|VeAnZ ze?(_8kO(_<{Bv4WXMzYYzq|}S9~7_s{mY$CKKrU7@+)?K2n&BWVe4I5Rb#mJg*}=y zf8voj_RI{!^}?zbR;m&*N|btXeMpVGR+lHpDWDK)0>_Db`110rp=qsbz0Vf3AFBG9 zfA5AjHm?T>4PiM!k20UTyd17+)(RdQX50lE@lBni13i)i_y6!6tSB!Avx6DEY~Zy# zj+T@=vMg6I=oL!DhDe1D=j{=>$yHeBJTmEjmmFWa{$M1=uTco3)B;HCvMtczzpqTp z?9p{hI2aVwyJJj1s-{TWUj!zU5P77Qca^5C)jg0=SPGww84C>zWR0rbsy}(6NZk6>hWsw!5ENyX6|g5acDnSQj>+8COV4B-|>Nz+67Ag z7-N3_I+>tw?YgPEpLp&C1@;eF`WP();>U{_qOwc0(Ws&4HoW8ZA8ncG{!UM!u4u$q z5Eqb?46?FGIdwpyL`kwInP-U47jU|uPFV$fFnTQ1&&Z65#_*Q6=jXzQTQ|b$!-r@f z4$mk_;4UeF;fs_9@P{+AZcgKz)Z4c7Ejn&M0_zd-zK+>uQDJl!Eq zk{{uKr>Iyu^xA)i9$&luABFS}oB64>Y#WidR|&s z6+#&RH@|mA@X~PCs8CKRRaHT);&S-(%4?!#0)G34N=snknq{!{_%U!{-yxq5+@)nu zNAkjFH{Aw}vrdl*kqCR9o&OX3cwjGB)6@OcU5N9=NH6|dgg%H@Lm9r&V1Duf&|vmL z@rKQFcTRZf(GYn*x{TjQAdsj9FeboTs1uJ+y?*_gHGc5US&r;%d+gIh*`<|UAz@q* z=^;dB3s5(yJZZ+|0>|+@nE9{Up;mH=9yZjqPhMpuytZxytUq!X3Mwl|K*o9WI6OIY z1YFs*M?^t6T^Fu~ozUQY=*RD1Y2FF2rlI6#6W+x%2k!Y{#4r2jc}|t`KBL6^+&AsY zFK``x|C3QCeqFI&@cbBZeTuhcR0D8ZKy08Zr$@AT;puy`FY0w`P;@v_*drdt?^^T< zaVSLW0a`(($^;${xc)u>YwjNpiMH5BadRumVf>=`u=&_ga2FPWr?eC%U3o2x?09}P zkZbHOG5DP~;HcFMmXs7q{3O+Zej=fZO^1ob=U$(9N`AEZ+#V=gv+k3<6JLIdWqgX$ zA9>?jP0vp(7yub3NDJ6%)k^F5zgOoZHEUW&H8dQHcO^!M2^_*iIi!Dyz!6eDi9UN$ zR*2=4ENJHSLdCAXVB+9mFs8G<$&*HI7gycwm7uV)61L}_fRC0ghTR7bK$pf%;qgl@ zg{Ik&yJd~sM>PAQ=d0g;Uxl*FbeiHI_w%9Eb3y)ovB)LPk{>ld#ozl6?tJv=E8O|{ zyy8o2dW8(Yyd?TpArcLsrUm4`rXQxD#}D*mO0*qyG_Sp|jV;iBvxSkR ziFDstTQ|WIvuA*%VSSp}DN6nj#4p!1$64|t@k`}pkT?71`}TkG`I1;*|7dIg&H!q0 z0n$yn!@IA)ozbadpJ)tX&DJZdrzr2LMiSQKdSW_tlD0QwDbzv)*;P;gjh!BN{?f~# zeS?OP(#&abT)EQ;6X(r_Ie+a2N9`OoR*L2Ju)1kA$sZ8xQWK*w!u-_m^+E9;e=gto zz+?9*pbt-ai%9x&LXPxBinRi~ffiwa>^{AkoiqNvABjO6gDoU8s4xN71T<32BDk!< z6=4$Aam`aw3ewSIa7WMHa7W+x%mI(VqsR3W>-PT*kI$X~$E{|trX>4`pFkhx?Lk83 zsm>_rNi#8;HZE6qDH$LZ-W~x%J5S_R9De7+D|1(^L&F!Vz3>MOU&DU?Alp2O6(*If zLMLh7KZr2Fxz9a$Z_b6iZZRjQ2Z%K#e3^H=0 z1E&irj~;_&HU~@`H3m9IP*V`a`kk~xv5fJ*OBTYk?SFtRyB3*O5E#@FidslT7j5Op zef>mo@~(Pu^7imVW$X-IxN6ONdtaFJp+NkI{l%1L!`MGs2qYe_%n>49AzNBnTDwWl zf1cX5O@b;V>$&Zo$@?E=j?0)3w8{HKZr2+#W@f*td z3AKii8o}cEkO9QOdfXsRs?)c3vxaxxIwiSrqm)R9+|Y}cy+e2uC3;L9k|)m)$&U&G zZ3W(Vm!?xlRZfs9D*<7Vr>F=f3>*q$yY@J33SY2k)xP{Z82iclP-(S*y>^bjT{}i~ zIpkqo^8%(go+QbSZ?W>wp|T?%e{*f#%9Z;R(q9~S7qZ@05Bv;%yA0-p;a!O(R5@!NlW=RcYFL)UfkQ|?aLcrcbj}93DH(t=& z&@I%oov~fvxGz42BDV_?8a9xlwnQrvBbTK$kY-^N-^+e}-Z`(DF+ai|cTo}KFIYVO zz{j8e5(fGNwL3Su{;^;HZcK|Q56?A~pxB_V-MU5UXKGPZ_9FBg;v ztqx`Tzz>ON@Qg74LZm7ucq%I783CTcBCu6Dp-+pJ@b=Y_k4TEa;~GB2*X!26`^$fY z0*?#qb!t=BCLwNGttB%68`Kv-^gO+RGX(|x>h*)M^!Bi)MBHEe`-W+|pL+2Xp~VRr zz6gDyHhjg!j1>dmIYqaq=oLz|rKP2|oAlggscqY~Ati@`fou593I`Zs0-iP@C(^Of zN=M*sF&UK5Yky(Okv=v)paUk!eK9yCIML~#H3r*3vvR&w0W z176~&)2N_Ntc+kKGbv*OXb=;lxK^KD&6?kL=hTGy_0UGp+#<=I2so+IFy^(zELK2@ zs?iXZ2U6hgwD#9mRRx}kO8=C2Ha7qzlee@C94-%ZZ`KU@wrmX}J9L8NlQ_+B^V}KdE0~ZqDk;?NO?g%EO1t z4uA0F_4%t;bKH-_uk`vv4SnLl03s9;hik}2@i`COHzvD(?8&ddWcRBQO+1+KR;&zcOl~bMUNc#!HN&3G?tS59k#l^LSamA^tlXOearUFM&gqgdvFO zg8Sjgg=voDSJVuZmEd!_L2_0>-Q*N#RkuF$Y}Onaq-Q{CViIJhq(DkS0%Rm6h4n5K zRa8J>Wd-Dyl|gA$CFGZv!PZ0nz@~o=!e4p0Ala;7vD?9%m(6(p!i|plQ2B+|mDFyCcR%&qiwdI`qrKeU&xt=aUKB<<@z4Mw6Yz{tK4gP3fz6iC?zI=*NI$Rjh32HB zASN(E*UEi0nMv>x$sQ>=t(uNWQcjB`nxK*z#=JI|cdeuOhxDEJr#<@ZGZK&Ba{z=- zQphiC0l`AKm>dTZGUDb9hWTI(l6}dITOO$L&mG{*K_$C?76LJXWkP2u4dD#kI7@yM z6lGigShVx07oPyPo8x^E_oKwn)#E1;x``J95QQvwhL8ccCLpd+Yfffro2Q?AE3Iwo z&ZY!MNKFvQL-Awuc!_Aey-4^%*(GBJBy5ZmAS2KzE`E*SX8`7M73C9WCZ;rGMiC^x z+=Wi;91_q=hcf{+P>FDsC*Cs;4QC2=9QWt*#=q2~Bg{e&Jv>wm(Pye=$&b*nbjO}e zJD;3*H&j;g93Ro+BbGSE#OtG^r+6}e$OKqDhCe)Ch+Xxz8Y??Y{&;^5~eOXhY#`L4Y? z|9<1GyQ&Tx#;$In^jD@j#D(}d&+8z&h<6ba=D1NDzy#^7TjVr-@ZJwnTDNKzX`fLe zOriQDA-zS6Bn4(bTu%&MfiXDoGcI5nf=-*^^uw8ePl5@M{4z9R6I7T~rtk;b!BA$9 z$GWob{jN&?z&#FmD3h>PEDYqMl3pSAs#)@*9aOew@4mzDd~iqc&b_%|h@X3WVv74k z8i=n5fHEn5`whFwO*cZowcHB|IO%5zomi{MiE6S)B=_iV7&-yKmRN z|Gj&6)!zq2*n{4lxO;rmXra0oK*CVKID0#o|`jMo*kn-WH8NPcV-P`+pHy8W-eJE7{>F-&pb#x9TY@(j%n^MX;^L>0dU61#BM(6hcs?r~w$J7jK)H$B`3#oF%_2FAvIh?4G{+ znHO<>7cLSfd|uMXF+Z>Cjhn~kWJ4hF`k|PBGXVK)@%TgI(mQp$(^0>!Nvo<%m6qep z3?!|BwNS@#O(a;xFufY|AzVO`G1N7i0`4fENrpGvjTyW{jgkBa39F7C^A&H|`p$vZ z-{E_uqAUa+}uIBs8dNlDiU!#BbmR^$<6gz6MT9!v-!FNKRLfem?JuL(x58qM+qx^R$)YXf_FkFE_GUUm6Hjt2EFaA5ZXo0Udt!*rI5 zMB?kQvqLc;(F9Is*lCHUinj+_l)H|ffU3hsmL8im`<>!-n^5Ybgcl`$ILH&X#5TPG zu%;QoT1+6$C>Fg$$OH(F$WOzYZ|IZRqs#v#)TvY7UaJ;K0@K3;)x``al?h@Y`F&n+ z6%>K<_^~7TD}Q_K_;=s0XM`^jKmRwE`bx-CqlmwzY58oYX%RAdr$iMJ5on0na50U;qY-Y;`Zc ztV3qcE?3#>)b3-?$}-#1(`l=Z056fYCpChAa#;RCID}1kYh;Ai2c%iByP(kPI+44g zXzg!bAD^>erwZYVOn}m!8@gft@#FIf<}I0CuztNL@sYqq zq8DA8BHXD_ULGw?Uz6ehTKCGo=h^^2kpVapi1vZV47?uM>S)q1t-)1SUXs+j=@?tB z%(~d13tNtailynjp-A`hxjoc76rhtMOl6i=$5`JUEb2kRcNY{Nuh_T$ha*4E{Ki4y;mlKQ721PW!ph-nm|7=bebXAmnSB-k6?bba5nw&#wurKPq- z8v%ReW3wqGGek<HNWVFH&cvQ%cBlHccY6QcK&lzQET#hWV+99(pK_WWO+hYpo73C;^rxO7*3 z^6$CC=TL`aepJ&^#r!g-A_NM>$YK;(45EpdrZOC2ZCYeTKq!^oy-VHf0sRIhG^#() znwHiao6K60l1Q`JNIO>OePdBEfr{kEF|kr*1#RtESp}}*vVG2@hZp58_;o?qpMPQ} z22RK#;ft_`YXOn)k?8r)DNXnyp4R)0PKEtA6DU(Elv=?Lhy1D70nCuut4ICxuIHbh zP`}>!*367fmgJ-y$_$JlSbM=(E{eQBC%u37X0*7ROEV!iZ?q? zoY+*le$%GHb-$xQt0a0(+??>mPZ8#vc7%VrG5|go*J@%AO-!;AnSm3%@{=3a{L`E< zpm*bpPUm+{s9XDdTY7pYOG;8Y!Xy(msPeJwB|$~j`&4J!2Q&`Iy`Opl!ZH|qYa>CA8>{cnL$b1 zY7D{uChp5&6=9~VfdiYTwrYBgH7l#3H7&J~B{8v~IlcSoTc8Mqtl=f#D1kwwSL`G2aB#Fe1%%Ju=X8@&! zQDZpKPEp>YlK4e}#D9wfD>8vd{Gv8c{#|*zlHku6!avg>kWpq(^CpQ>9vMN&EJ`L2 z&%qf%Bz~m}I+OZC3A%PJsuh$6ho-} zU8zBoOcuwbJT*>zx&*@FvD#{wU5%ji{4JCnpap@5jU2^~czit8=#)R_Sq9Mm3PTyO zYFa}Hb;NbnT5}PHi_um!`+yU8xKI60cn0pN^)k-DB{B5KYJ?q%*p05Wk`Y3Ai$vl# zbn|C-R!%8CyCSh#fl$P*mkC07W6n4)O{`u>sPp_k-akngc4DYH00000NkvXXu0mjf DS%jfF diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..439f2f763d5dd81bc5a47972acd1b3f64464033c GIT binary patch literal 24383 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 z%0D1L$Y3xEw;3Slck*j#>NNvXv(rxLoY|>k7kBggwyr=%J9kEATc_XC*5UI8&{8m9 zxLx3I;*XR4fQvu#|K`6(pMuRV!sATE51VX<6{-rJFs??0oe6%hMy(BQRqJcEDV5b* zg5~8~YF4jZvuEb)O%gq!!ZTU;Wh!G7cq2%N-^(G*14{4@WD5`r=te&Q|7`{aqwtf} z(5!(pY++?n8VXF6Q2OmMm~9ZqMa z)9cB_(oo>PRYi5Xi?>#DIsSpgxI8K#79EESf|@P5>~1 zr2!ohmO%zUG8TXY-}r211!Db9e(ymq^an~NI29@sFP|V&7Nho-ooORT%>HeBe>yBc zEI^q3-e^ILG^;VzaKHM@gUts>WOIzdY9`Efe;3OSFkVkA{%LUD_%0a9McG`~wp3c+d9l@F0BUApoSd>GJxS(HpbB+xo literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9fe91a44..65feee2f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - 阴阳播放器 + DC播放器 diff --git a/library/build.gradle b/library/build.gradle index de83b421..510140b3 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -9,8 +9,8 @@ android { defaultConfig { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 6 - versionName "1.1" + versionCode 7 + versionName "1.3" } sourceSets { diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml index a165abf6..3c40ece7 100644 --- a/library/src/main/AndroidManifest.xml +++ b/library/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="com.devlin_n.videoplayer"> @@ -9,7 +9,7 @@ - + diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/controller/AdController.java b/library/src/main/java/com/devlin_n/videoplayer/controller/AdController.java similarity index 87% rename from library/src/main/java/com/devlin_n/yinyangplayer/controller/AdController.java rename to library/src/main/java/com/devlin_n/videoplayer/controller/AdController.java index 8f38d72c..07e3210a 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/controller/AdController.java +++ b/library/src/main/java/com/devlin_n/videoplayer/controller/AdController.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.controller; +package com.devlin_n.videoplayer.controller; import android.content.Context; import android.support.annotation.NonNull; @@ -8,10 +8,9 @@ import android.view.View; import android.widget.ImageView; import android.widget.TextView; -import android.widget.Toast; -import com.devlin_n.yinyangplayer.R; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; +import com.devlin_n.videoplayer.R; +import com.devlin_n.videoplayer.player.IjkVideoView; /** * 广告控制器 @@ -63,7 +62,7 @@ public void onClick(View v) { } else if (id == R.id.iv_volume) { doMute(); } else if (id == R.id.ad_detail) { - Toast.makeText(getContext(), "施工中~", Toast.LENGTH_SHORT).show(); + if (listener != null) listener.onAdClick(); } else if (id == R.id.ad_time) { mediaPlayer.skipToNext(); } else if (id == R.id.iv_play) { @@ -84,11 +83,11 @@ private void doMute() { public void setPlayState(int playState) { super.setPlayState(playState); switch (playState) { - case YinYangPlayer.STATE_PLAYING: + case IjkVideoView.STATE_PLAYING: post(mShowProgress); playButton.setSelected(true); break; - case YinYangPlayer.STATE_PAUSED: + case IjkVideoView.STATE_PAUSED: playButton.setSelected(false); break; } @@ -98,10 +97,10 @@ public void setPlayState(int playState) { public void setPlayerState(int playerState) { super.setPlayerState(playerState); switch (playerState) { - case YinYangPlayer.PLAYER_NORMAL: + case IjkVideoView.PLAYER_NORMAL: back.setVisibility(GONE); break; - case YinYangPlayer.PLAYER_FULL_SCREEN: + case IjkVideoView.PLAYER_FULL_SCREEN: back.setVisibility(VISIBLE); break; } @@ -125,7 +124,7 @@ protected int setProgress() { public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - Toast.makeText(getContext(), "施工中~", Toast.LENGTH_SHORT).show(); + if (listener != null) listener.onAdClick(); break; } return false; diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/controller/BaseVideoController.java b/library/src/main/java/com/devlin_n/videoplayer/controller/BaseVideoController.java similarity index 96% rename from library/src/main/java/com/devlin_n/yinyangplayer/controller/BaseVideoController.java rename to library/src/main/java/com/devlin_n/videoplayer/controller/BaseVideoController.java index c7dc7816..53ad7aba 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/controller/BaseVideoController.java +++ b/library/src/main/java/com/devlin_n/videoplayer/controller/BaseVideoController.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.controller; +package com.devlin_n.videoplayer.controller; import android.content.Context; import android.content.pm.ActivityInfo; @@ -16,10 +16,11 @@ import android.view.WindowManager; import android.widget.FrameLayout; -import com.devlin_n.yinyangplayer.R; -import com.devlin_n.yinyangplayer.util.Constants; -import com.devlin_n.yinyangplayer.util.WindowUtil; -import com.devlin_n.yinyangplayer.widget.CenterView; +import com.devlin_n.videoplayer.R; +import com.devlin_n.videoplayer.listener.ControllerListener; +import com.devlin_n.videoplayer.util.Constants; +import com.devlin_n.videoplayer.util.WindowUtil; +import com.devlin_n.videoplayer.widget.CenterView; import java.util.Formatter; import java.util.Locale; @@ -44,6 +45,7 @@ public abstract class BaseVideoController extends FrameLayout { protected boolean gestureEnabled; private float downX; private float downY; + protected ControllerListener listener; public BaseVideoController(@NonNull Context context) { @@ -102,8 +104,8 @@ public void setPlayState(int playState) { public void setPlayerState(int playerState) { } - public void startFullScreenDirectly() { - + public void setControllerListener(ControllerListener listener) { + this.listener = listener; } protected void doPauseResume() { diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/controller/FloatController.java b/library/src/main/java/com/devlin_n/videoplayer/controller/FloatController.java similarity index 82% rename from library/src/main/java/com/devlin_n/yinyangplayer/controller/FloatController.java rename to library/src/main/java/com/devlin_n/videoplayer/controller/FloatController.java index 8fef7ca8..df5507f8 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/controller/FloatController.java +++ b/library/src/main/java/com/devlin_n/videoplayer/controller/FloatController.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.controller; +package com.devlin_n.videoplayer.controller; import android.content.Context; import android.support.annotation.NonNull; @@ -6,9 +6,9 @@ import android.util.AttributeSet; import android.view.View; -import com.devlin_n.yinyangplayer.R; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; -import com.devlin_n.yinyangplayer.widget.PlayProgressButton; +import com.devlin_n.videoplayer.R; +import com.devlin_n.videoplayer.player.IjkVideoView; +import com.devlin_n.videoplayer.widget.PlayProgressButton; /** * 悬浮播放控制器 @@ -59,33 +59,33 @@ public void onClick(View v) { public void setPlayState(int playState) { super.setPlayState(playState); switch (playState) { - case YinYangPlayer.STATE_IDLE: + case IjkVideoView.STATE_IDLE: break; - case YinYangPlayer.STATE_PLAYING: + case IjkVideoView.STATE_PLAYING: playProgressButton.setState(PlayProgressButton.STATE_PLAYING); hide(); break; - case YinYangPlayer.STATE_PAUSED: + case IjkVideoView.STATE_PAUSED: playProgressButton.setState(PlayProgressButton.STATE_PAUSE); show(0); break; - case YinYangPlayer.STATE_PREPARING: + case IjkVideoView.STATE_PREPARING: playProgressButton.setState(PlayProgressButton.STATE_LOADING); break; - case YinYangPlayer.STATE_PREPARED: + case IjkVideoView.STATE_PREPARED: playProgressButton.setVisibility(GONE); break; - case YinYangPlayer.STATE_ERROR: + case IjkVideoView.STATE_ERROR: break; - case YinYangPlayer.STATE_BUFFERING: + case IjkVideoView.STATE_BUFFERING: playProgressButton.setState(PlayProgressButton.STATE_LOADING); playProgressButton.setVisibility(VISIBLE); break; - case YinYangPlayer.STATE_BUFFERED: + case IjkVideoView.STATE_BUFFERED: playProgressButton.setState(PlayProgressButton.STATE_LOADING_END); if (!mShowing) playProgressButton.setVisibility(GONE); break; - case YinYangPlayer.STATE_PLAYBACK_COMPLETED: + case IjkVideoView.STATE_PLAYBACK_COMPLETED: playProgressButton.setState(PlayProgressButton.STATE_PAUSE); show(0); break; diff --git a/library/src/main/java/com/devlin_n/videoplayer/controller/FullScreenController.java b/library/src/main/java/com/devlin_n/videoplayer/controller/FullScreenController.java new file mode 100644 index 00000000..d083edbc --- /dev/null +++ b/library/src/main/java/com/devlin_n/videoplayer/controller/FullScreenController.java @@ -0,0 +1,360 @@ +package com.devlin_n.videoplayer.controller; + +import android.content.Context; +import android.support.annotation.AttrRes; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v7.widget.PopupMenu; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.MenuItem; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.SeekBar; +import android.widget.TextView; +import android.widget.Toast; + +import com.devlin_n.videoplayer.R; +import com.devlin_n.videoplayer.player.IjkVideoView; +import com.devlin_n.videoplayer.util.L; +import com.devlin_n.videoplayer.util.WindowUtil; + +/** + * 全屏控制器 + * Created by Devlin_n on 2017/4/7. + */ + +public class FullScreenController extends BaseVideoController implements View.OnClickListener, SeekBar.OnSeekBarChangeListener { + protected TextView totalTime, currTime; + protected LinearLayout bottomContainer, topContainer; + protected SeekBar videoProgress; + protected ImageView moreMenu; + protected ImageView backButton; + protected ImageView lock; + protected TextView title; + private boolean isLive; + private boolean isDragging; + + private ProgressBar bottomProgress; + private ImageView playButton; + private ProgressBar loadingProgress; + private LinearLayout completeContainer; + private Animation showAnim = AnimationUtils.loadAnimation(getContext(), R.anim.anim_alpha_in); + private Animation hideAnim = AnimationUtils.loadAnimation(getContext(), R.anim.anim_alpha_out); + private PopupMenu popupMenu; + + + public FullScreenController(@NonNull Context context) { + this(context, null); + } + + public FullScreenController(@NonNull Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public FullScreenController(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + protected int getLayoutId() { + return R.layout.layout_fullscreen_controller; + } + + @Override + protected void initView() { + super.initView(); + moreMenu = (ImageView) controllerView.findViewById(R.id.more_menu); + moreMenu.setOnClickListener(this); + bottomContainer = (LinearLayout) controllerView.findViewById(R.id.bottom_container); + topContainer = (LinearLayout) controllerView.findViewById(R.id.top_container); + videoProgress = (SeekBar) controllerView.findViewById(R.id.seekBar); + videoProgress.setOnSeekBarChangeListener(this); + totalTime = (TextView) controllerView.findViewById(R.id.total_time); + currTime = (TextView) controllerView.findViewById(R.id.curr_time); + backButton = (ImageView) controllerView.findViewById(R.id.back); + backButton.setOnClickListener(this); + lock = (ImageView) controllerView.findViewById(R.id.lock); + lock.setOnClickListener(this); + playButton = (ImageView) controllerView.findViewById(R.id.iv_play); + playButton.setOnClickListener(this); + loadingProgress = (ProgressBar) controllerView.findViewById(R.id.loading); + bottomProgress = (ProgressBar) controllerView.findViewById(R.id.bottom_progress); + ImageView rePlayButton = (ImageView) controllerView.findViewById(R.id.iv_replay); + rePlayButton.setOnClickListener(this); + completeContainer = (LinearLayout) controllerView.findViewById(R.id.complete_container); + completeContainer.setOnClickListener(this); + title = (TextView) controllerView.findViewById(R.id.title); + popupMenu = new PopupMenu(getContext(), moreMenu, Gravity.END); + popupMenu.getMenuInflater().inflate(R.menu.controller_menu, popupMenu.getMenu()); + popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + int itemId = item.getItemId(); + if (itemId == R.id.float_window) { + mediaPlayer.startFloatWindow(); + } else if (itemId == R.id.scale_default) { + mediaPlayer.setScreenScale(IjkVideoView.SCREEN_SCALE_DEFAULT); + } else if (itemId == R.id.scale_original) { + mediaPlayer.setScreenScale(IjkVideoView.SCREEN_SCALE_ORIGINAL); + } else if (itemId == R.id.scale_match) { + mediaPlayer.setScreenScale(IjkVideoView.SCREEN_SCALE_MATCH_PARENT); + } else if (itemId == R.id.scale_16_9) { + mediaPlayer.setScreenScale(IjkVideoView.SCREEN_SCALE_16_9); + } else if (itemId == R.id.scale_4_3) { + mediaPlayer.setScreenScale(IjkVideoView.SCREEN_SCALE_4_3); + } + popupMenu.dismiss(); + return false; + } + }); + } + + @Override + public void onClick(View v) { + int i = v.getId(); + if (i == R.id.lock) { + doLockUnlock(); + } else if (i == R.id.iv_play || i == R.id.iv_replay) { + doPauseResume(); + } else if (i == R.id.more_menu) { + popupMenu.show(); + show(); + } else if (i == R.id.back) { + WindowUtil.scanForActivity(getContext()).finish(); + } + } + + public void showTitle() { + title.setVisibility(VISIBLE); + } + + + @Override + public void setPlayState(int playState) { + super.setPlayState(playState); + switch (playState) { + case IjkVideoView.STATE_IDLE: + L.e("STATE_IDLE"); + hide(); + isLocked = false; + lock.setSelected(false); + mediaPlayer.setLock(false); + completeContainer.setVisibility(GONE); + bottomProgress.setVisibility(GONE); + loadingProgress.setVisibility(GONE); + break; + case IjkVideoView.STATE_PLAYING: + L.e("STATE_PLAYING"); + post(mShowProgress); + playButton.setSelected(true); + completeContainer.setVisibility(GONE); + break; + case IjkVideoView.STATE_PAUSED: + L.e("STATE_PAUSED"); + playButton.setSelected(false); + break; + case IjkVideoView.STATE_PREPARING: + L.e("STATE_PREPARING"); + completeContainer.setVisibility(GONE); + loadingProgress.setVisibility(VISIBLE); + break; + case IjkVideoView.STATE_PREPARED: + L.e("STATE_PREPARED"); + if (!isLive) bottomProgress.setVisibility(VISIBLE); + loadingProgress.setVisibility(GONE); + break; + case IjkVideoView.STATE_ERROR: + L.e("STATE_ERROR"); + break; + case IjkVideoView.STATE_BUFFERING: + L.e("STATE_BUFFERING"); + loadingProgress.setVisibility(VISIBLE); + break; + case IjkVideoView.STATE_BUFFERED: + loadingProgress.setVisibility(GONE); + L.e("STATE_BUFFERED"); + break; + case IjkVideoView.STATE_PLAYBACK_COMPLETED: + L.e("STATE_PLAYBACK_COMPLETED"); + hide(); + completeContainer.setVisibility(VISIBLE); + bottomProgress.setProgress(0); + bottomProgress.setSecondaryProgress(0); + isLocked = false; + mediaPlayer.setLock(false); + break; + } + } + + private void doLockUnlock() { + if (isLocked) { + isLocked = false; + mShowing = false; + gestureEnabled = true; + show(); + lock.setSelected(false); + Toast.makeText(getContext(), R.string.unlocked, Toast.LENGTH_SHORT).show(); + } else { + hide(); + isLocked = true; + gestureEnabled = false; + lock.setSelected(true); + Toast.makeText(getContext(), R.string.locked, Toast.LENGTH_SHORT).show(); + } + mediaPlayer.setLock(isLocked); + } + + /** + * 设置是否为直播视频 + */ + public void setLive(boolean live) { + isLive = live; + bottomProgress.setVisibility(GONE); + videoProgress.setVisibility(INVISIBLE); + totalTime.setVisibility(INVISIBLE); +// moreMenu.setVisibility(VISIBLE); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + isDragging = true; + removeCallbacks(mShowProgress); + removeCallbacks(mFadeOut); + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + long duration = mediaPlayer.getDuration(); + long newPosition = (duration * seekBar.getProgress()) / videoProgress.getMax(); + mediaPlayer.seekTo((int) newPosition); + isDragging = false; + post(mShowProgress); + show(); + } + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + if (!fromUser) { + return; + } + + long duration = mediaPlayer.getDuration(); + long newPosition = (duration * progress) / videoProgress.getMax(); + if (currTime != null) + currTime.setText(stringForTime((int) newPosition)); + } + + @Override + public void hide() { + if (mShowing) { + if (mediaPlayer.isFullScreen()) { + lock.setVisibility(GONE); + if (!isLocked) { + hideAllViews(); + WindowUtil.hideStatusBar(getContext()); + WindowUtil.hideNavKey(getContext()); + } + } else { + hideAllViews(); + } + if (!isLive && !isLocked) { + bottomProgress.setVisibility(VISIBLE); + bottomProgress.startAnimation(showAnim); + } + mShowing = false; + } + } + + private void hideAllViews() { + topContainer.setVisibility(GONE); + topContainer.startAnimation(hideAnim); + bottomContainer.setVisibility(GONE); + bottomContainer.startAnimation(hideAnim); + } + + private void show(int timeout) { + if (!mShowing) { + if (mediaPlayer.isFullScreen()) { + lock.setVisibility(VISIBLE); + if (!isLocked) { + showAllViews(); + } + } else { + showAllViews(); + } + if (!isLocked && !isLive) { + bottomProgress.setVisibility(GONE); + bottomProgress.startAnimation(hideAnim); + } + mShowing = true; + } + removeCallbacks(mFadeOut); + if (timeout != 0) { + postDelayed(mFadeOut, timeout); + } + } + + private void showAllViews() { + bottomContainer.setVisibility(VISIBLE); + bottomContainer.startAnimation(showAnim); + topContainer.setVisibility(VISIBLE); + topContainer.startAnimation(showAnim); + WindowUtil.showStatusBar(getContext()); + WindowUtil.showNavKey(getContext()); + } + + @Override + public void show() { + show(sDefaultTimeout); + } + + @Override + protected int setProgress() { + if (mediaPlayer == null || isDragging) { + return 0; + } + int position = mediaPlayer.getCurrentPosition(); + int duration = mediaPlayer.getDuration(); + if (videoProgress != null) { + if (duration > 0) { + videoProgress.setEnabled(true); + int pos = (int) (position * 1.0 / duration * videoProgress.getMax()); + videoProgress.setProgress(pos); + bottomProgress.setProgress(pos); + } else { + videoProgress.setEnabled(false); + } + int percent = mediaPlayer.getBufferPercentage(); + if (percent >= 95) { //修复第二进度不能100%问题 + videoProgress.setSecondaryProgress(videoProgress.getMax()); + bottomProgress.setSecondaryProgress(bottomProgress.getMax()); + } else { + videoProgress.setSecondaryProgress(percent * 10); + bottomProgress.setSecondaryProgress(percent * 10); + } + } + + if (totalTime != null) + totalTime.setText(stringForTime(duration)); + if (currTime != null) + currTime.setText(stringForTime(position)); + if (title != null) + title.setText(mediaPlayer.getTitle()); + return position; + } + + + @Override + protected void slideToChangePosition(float deltaX) { + if (isLive) { + mNeedSeek = false; + } else { + super.slideToChangePosition(deltaX); + } + } +} diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/controller/StandardVideoController.java b/library/src/main/java/com/devlin_n/videoplayer/controller/StandardVideoController.java similarity index 90% rename from library/src/main/java/com/devlin_n/yinyangplayer/controller/StandardVideoController.java rename to library/src/main/java/com/devlin_n/videoplayer/controller/StandardVideoController.java index 85d24348..8a1218eb 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/controller/StandardVideoController.java +++ b/library/src/main/java/com/devlin_n/videoplayer/controller/StandardVideoController.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.controller; +package com.devlin_n.videoplayer.controller; import android.content.Context; import android.support.annotation.AttrRes; @@ -20,11 +20,11 @@ import android.widget.TextView; import android.widget.Toast; -import com.devlin_n.yinyangplayer.R; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; -import com.devlin_n.yinyangplayer.util.Constants; -import com.devlin_n.yinyangplayer.util.L; -import com.devlin_n.yinyangplayer.util.WindowUtil; +import com.devlin_n.videoplayer.R; +import com.devlin_n.videoplayer.player.IjkVideoView; +import com.devlin_n.videoplayer.util.Constants; +import com.devlin_n.videoplayer.util.L; +import com.devlin_n.videoplayer.util.WindowUtil; /** * 直播/点播控制器 @@ -112,15 +112,15 @@ public boolean onMenuItemClick(MenuItem item) { if (itemId == R.id.float_window) { mediaPlayer.startFloatWindow(); } else if (itemId == R.id.scale_default) { - mediaPlayer.setScreenScale(YinYangPlayer.SCREEN_SCALE_DEFAULT); + mediaPlayer.setScreenScale(IjkVideoView.SCREEN_SCALE_DEFAULT); } else if (itemId == R.id.scale_original) { - mediaPlayer.setScreenScale(YinYangPlayer.SCREEN_SCALE_ORIGINAL); + mediaPlayer.setScreenScale(IjkVideoView.SCREEN_SCALE_ORIGINAL); } else if (itemId == R.id.scale_match) { - mediaPlayer.setScreenScale(YinYangPlayer.SCREEN_SCALE_MATCH_PARENT); + mediaPlayer.setScreenScale(IjkVideoView.SCREEN_SCALE_MATCH_PARENT); } else if (itemId == R.id.scale_16_9) { - mediaPlayer.setScreenScale(YinYangPlayer.SCREEN_SCALE_16_9); + mediaPlayer.setScreenScale(IjkVideoView.SCREEN_SCALE_16_9); } else if (itemId == R.id.scale_4_3) { - mediaPlayer.setScreenScale(YinYangPlayer.SCREEN_SCALE_4_3); + mediaPlayer.setScreenScale(IjkVideoView.SCREEN_SCALE_4_3); } popupMenu.dismiss(); return false; @@ -150,7 +150,7 @@ public void showTitle() { @Override public void setPlayerState(int playerState) { switch (playerState) { - case YinYangPlayer.PLAYER_NORMAL: + case IjkVideoView.PLAYER_NORMAL: L.e("PLAYER_NORMAL"); if (isLocked) return; setLayoutParams(new FrameLayout.LayoutParams( @@ -163,7 +163,7 @@ public void setPlayerState(int playerState) { statusHolder.setVisibility(GONE); title.setVisibility(INVISIBLE); break; - case YinYangPlayer.PLAYER_FULL_SCREEN: + case IjkVideoView.PLAYER_FULL_SCREEN: L.e("PLAYER_FULL_SCREEN"); if (isLocked) return; postDelayed(new Runnable() {//解决ListView无效问题 @@ -194,7 +194,7 @@ public void run() { public void setPlayState(int playState) { super.setPlayState(playState); switch (playState) { - case YinYangPlayer.STATE_IDLE: + case IjkVideoView.STATE_IDLE: L.e("STATE_IDLE"); hide(); isLocked = false; @@ -206,41 +206,41 @@ public void setPlayState(int playState) { startPlayButton.setVisibility(VISIBLE); thumb.setVisibility(VISIBLE); break; - case YinYangPlayer.STATE_PLAYING: + case IjkVideoView.STATE_PLAYING: L.e("STATE_PLAYING"); post(mShowProgress); playButton.setSelected(true); completeContainer.setVisibility(GONE); thumb.setVisibility(GONE); break; - case YinYangPlayer.STATE_PAUSED: + case IjkVideoView.STATE_PAUSED: L.e("STATE_PAUSED"); playButton.setSelected(false); break; - case YinYangPlayer.STATE_PREPARING: + case IjkVideoView.STATE_PREPARING: L.e("STATE_PREPARING"); completeContainer.setVisibility(GONE); startPlayButton.setVisibility(GONE); loadingProgress.setVisibility(VISIBLE); break; - case YinYangPlayer.STATE_PREPARED: + case IjkVideoView.STATE_PREPARED: L.e("STATE_PREPARED"); if (!isLive) bottomProgress.setVisibility(VISIBLE); loadingProgress.setVisibility(GONE); break; - case YinYangPlayer.STATE_ERROR: + case IjkVideoView.STATE_ERROR: L.e("STATE_ERROR"); break; - case YinYangPlayer.STATE_BUFFERING: + case IjkVideoView.STATE_BUFFERING: L.e("STATE_BUFFERING"); startPlayButton.setVisibility(GONE); loadingProgress.setVisibility(VISIBLE); break; - case YinYangPlayer.STATE_BUFFERED: + case IjkVideoView.STATE_BUFFERED: loadingProgress.setVisibility(GONE); L.e("STATE_BUFFERED"); break; - case YinYangPlayer.STATE_PLAYBACK_COMPLETED: + case IjkVideoView.STATE_PLAYBACK_COMPLETED: L.e("STATE_PLAYBACK_COMPLETED"); hide(); thumb.setVisibility(VISIBLE); @@ -271,19 +271,6 @@ private void doLockUnlock() { mediaPlayer.setLock(isLocked); } - @Override - public void startFullScreenDirectly() { - fullScreenButton.setVisibility(GONE); - backButton.setVisibility(VISIBLE); - statusHolder.setVisibility(VISIBLE); - backButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - WindowUtil.scanForActivity(getContext()).finish(); - } - }); - } - /** * 设置是否为直播视频 */ diff --git a/library/src/main/java/com/devlin_n/videoplayer/listener/ControllerListener.java b/library/src/main/java/com/devlin_n/videoplayer/listener/ControllerListener.java new file mode 100644 index 00000000..7b600857 --- /dev/null +++ b/library/src/main/java/com/devlin_n/videoplayer/listener/ControllerListener.java @@ -0,0 +1,10 @@ +package com.devlin_n.videoplayer.listener; + +/** + * Created by Devlin_n on 2017/6/26. + */ + +public interface ControllerListener { + + void onAdClick(); +} diff --git a/library/src/main/java/com/devlin_n/videoplayer/listener/MyControllerListener.java b/library/src/main/java/com/devlin_n/videoplayer/listener/MyControllerListener.java new file mode 100644 index 00000000..1f97f66f --- /dev/null +++ b/library/src/main/java/com/devlin_n/videoplayer/listener/MyControllerListener.java @@ -0,0 +1,13 @@ +package com.devlin_n.videoplayer.listener; + +/** + * 实现接口,使用时只需重写需要的方法即可 + * Created by Devlin_n on 2017/6/26. + */ + +public class MyControllerListener implements ControllerListener { + @Override + public void onAdClick() { + + } +} diff --git a/library/src/main/java/com/devlin_n/videoplayer/listener/MyVideoListener.java b/library/src/main/java/com/devlin_n/videoplayer/listener/MyVideoListener.java new file mode 100644 index 00000000..dc105c7b --- /dev/null +++ b/library/src/main/java/com/devlin_n/videoplayer/listener/MyVideoListener.java @@ -0,0 +1,28 @@ +package com.devlin_n.videoplayer.listener; + +/** + * 实现接口,使用时只需重写需要的方法即可 + * Created by Devlin_n on 2017/6/22. + */ + +public class MyVideoListener implements VideoListener{ + @Override + public void onComplete() { + + } + + @Override + public void onPrepared() { + + } + + @Override + public void onError() { + + } + + @Override + public void onInfo(int what, int extra) { + + } +} diff --git a/library/src/main/java/com/devlin_n/videoplayer/listener/VideoListener.java b/library/src/main/java/com/devlin_n/videoplayer/listener/VideoListener.java new file mode 100644 index 00000000..8b8efdd3 --- /dev/null +++ b/library/src/main/java/com/devlin_n/videoplayer/listener/VideoListener.java @@ -0,0 +1,19 @@ +package com.devlin_n.videoplayer.listener; + +/** + * Created by Devlin_n on 2017/6/22. + */ + +public interface VideoListener { + + //播放完成 + void onComplete(); + + //准备完成 + void onPrepared(); + + void onError(); + + void onInfo(int what, int extra); + +} diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/player/BackgroundPlayService.java b/library/src/main/java/com/devlin_n/videoplayer/player/BackgroundPlayService.java similarity index 88% rename from library/src/main/java/com/devlin_n/yinyangplayer/player/BackgroundPlayService.java rename to library/src/main/java/com/devlin_n/videoplayer/player/BackgroundPlayService.java index f6ec844c..71b864e6 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/player/BackgroundPlayService.java +++ b/library/src/main/java/com/devlin_n/videoplayer/player/BackgroundPlayService.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.player; +package com.devlin_n.videoplayer.player; import android.app.Service; import android.content.Intent; @@ -8,11 +8,11 @@ import android.view.Gravity; import android.view.WindowManager; -import com.devlin_n.yinyangplayer.controller.FloatController; -import com.devlin_n.yinyangplayer.util.Constants; -import com.devlin_n.yinyangplayer.util.KeyUtil; -import com.devlin_n.yinyangplayer.util.WindowUtil; -import com.devlin_n.yinyangplayer.widget.FloatView; +import com.devlin_n.videoplayer.controller.FloatController; +import com.devlin_n.videoplayer.util.Constants; +import com.devlin_n.videoplayer.util.KeyUtil; +import com.devlin_n.videoplayer.util.WindowUtil; +import com.devlin_n.videoplayer.widget.FloatView; /** * 悬浮播放 @@ -22,7 +22,7 @@ public class BackgroundPlayService extends Service { private WindowManager wm; private WindowManager.LayoutParams wmParams; - private YinYangPlayer videoView; + private IjkVideoView videoView; private String url; private FloatView floatView; private int position; diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/player/YinYangPlayer.java b/library/src/main/java/com/devlin_n/videoplayer/player/IjkVideoView.java similarity index 93% rename from library/src/main/java/com/devlin_n/yinyangplayer/player/YinYangPlayer.java rename to library/src/main/java/com/devlin_n/videoplayer/player/IjkVideoView.java index 6428af91..d2a79ad5 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/player/YinYangPlayer.java +++ b/library/src/main/java/com/devlin_n/videoplayer/player/IjkVideoView.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.player; +package com.devlin_n.videoplayer.player; import android.content.Context; import android.content.Intent; @@ -23,15 +23,16 @@ import com.danikula.videocache.CacheListener; import com.danikula.videocache.HttpProxyCacheServer; import com.devlin_n.floatWindowPermission.FloatWindowManager; -import com.devlin_n.yinyangplayer.R; -import com.devlin_n.yinyangplayer.controller.BaseVideoController; -import com.devlin_n.yinyangplayer.util.Constants; -import com.devlin_n.yinyangplayer.util.KeyUtil; -import com.devlin_n.yinyangplayer.util.NetworkUtil; -import com.devlin_n.yinyangplayer.util.WindowUtil; -import com.devlin_n.yinyangplayer.widget.StatusView; -import com.devlin_n.yinyangplayer.widget.YinYangSurfaceView; -import com.devlin_n.yinyangplayer.widget.YinYangTextureView; +import com.devlin_n.videoplayer.R; +import com.devlin_n.videoplayer.controller.BaseVideoController; +import com.devlin_n.videoplayer.listener.VideoListener; +import com.devlin_n.videoplayer.util.Constants; +import com.devlin_n.videoplayer.util.KeyUtil; +import com.devlin_n.videoplayer.util.NetworkUtil; +import com.devlin_n.videoplayer.util.WindowUtil; +import com.devlin_n.videoplayer.widget.StatusView; +import com.devlin_n.videoplayer.widget.ResizeSurfaceView; +import com.devlin_n.videoplayer.widget.ResizeTextureView; import java.io.File; import java.io.IOException; @@ -49,13 +50,14 @@ * Created by Devlin_n on 2017/4/7. */ -public class YinYangPlayer extends FrameLayout implements BaseVideoController.MediaPlayerControl { +public class IjkVideoView extends FrameLayout implements BaseVideoController.MediaPlayerControl { private IMediaPlayer mMediaPlayer;//ijkPlayer @Nullable private BaseVideoController mVideoController;//控制器 - private YinYangSurfaceView mSurfaceView; - private YinYangTextureView mTextureView; + private VideoListener listener; + private ResizeSurfaceView mSurfaceView; + private ResizeTextureView mTextureView; private SurfaceTexture mSurfaceTexture; private DanmakuView mDanmakuView; private DanmakuContext mContext; @@ -113,12 +115,12 @@ public class YinYangPlayer extends FrameLayout implements BaseVideoController.Me private boolean addToPlayerManager; - public YinYangPlayer(@NonNull Context context) { + public IjkVideoView(@NonNull Context context) { this(context, null); } - public YinYangPlayer(@NonNull Context context, @Nullable AttributeSet attrs) { + public IjkVideoView(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); initView(); } @@ -214,7 +216,7 @@ private HttpProxyCacheServer getCacheServer() { */ private void addSurfaceView() { playerContainer.removeView(mSurfaceView); - mSurfaceView = new YinYangSurfaceView(getContext()); + mSurfaceView = new ResizeSurfaceView(getContext()); SurfaceHolder surfaceHolder = mSurfaceView.getHolder(); surfaceHolder.addCallback(new SurfaceHolder.Callback() { @Override @@ -246,7 +248,7 @@ public void surfaceDestroyed(SurfaceHolder holder) { private void addTextureView() { playerContainer.removeView(mTextureView); mSurfaceTexture = null; - mTextureView = new YinYangTextureView(getContext()); + mTextureView = new ResizeTextureView(getContext()); mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) { @@ -283,8 +285,8 @@ public void start() { if (mCurrentState == STATE_IDLE) { if (mAlwaysFullScreen) startFullScreenDirectly(); if (addToPlayerManager) { - YinYangPlayerManager.instance().releaseVideoPlayer(); - YinYangPlayerManager.instance().setCurrentVideoPlayer(this); + VideoViewManager.instance().releaseVideoPlayer(); + VideoViewManager.instance().setCurrentVideoPlayer(this); } if (mAutoRotate && orientationEventListener != null) orientationEventListener.enable(); if (checkNetwork()) return; @@ -408,7 +410,7 @@ public void run() { /** * 添加弹幕 */ - public YinYangPlayer addDanmukuView(DanmakuView danmakuView, DanmakuContext context, BaseDanmakuParser parser) { + public IjkVideoView addDanmukuView(DanmakuView danmakuView, DanmakuContext context, BaseDanmakuParser parser) { this.mDanmakuView = danmakuView; this.mContext = context; this.mParser = parser; @@ -418,7 +420,7 @@ public YinYangPlayer addDanmukuView(DanmakuView danmakuView, DanmakuContext cont /** * 启用{@link AndroidMediaPlayer},如不调用默认使用 {@link IjkMediaPlayer} */ - public YinYangPlayer useAndroidMediaPlayer() { + public IjkVideoView useAndroidMediaPlayer() { this.useAndroidMediaPlayer = true; return this; } @@ -427,7 +429,7 @@ public YinYangPlayer useAndroidMediaPlayer() { * 设置视频比例 */ @Override - public YinYangPlayer setScreenScale(int screenScale) { + public IjkVideoView setScreenScale(int screenScale) { this.mCurrentScreenScale = screenScale; if (mSurfaceView != null) mSurfaceView.setScreenScale(screenScale); if (mTextureView != null) mTextureView.setScreenScale(screenScale); @@ -437,7 +439,7 @@ public YinYangPlayer setScreenScale(int screenScale) { /** * 设置视频地址 */ - public YinYangPlayer setUrl(String url) { + public IjkVideoView setUrl(String url) { this.mCurrentUrl = url; return this; } @@ -445,7 +447,7 @@ public YinYangPlayer setUrl(String url) { /** * 一开始播放就seek到预先设置好的位置 */ - public YinYangPlayer skipPositionWhenPlay(String url, int position) { + public IjkVideoView skipPositionWhenPlay(String url, int position) { this.mCurrentUrl = url; this.mCurrentPosition = position; return this; @@ -454,7 +456,7 @@ public YinYangPlayer skipPositionWhenPlay(String url, int position) { /** * 设置一个列表的视频 */ - public YinYangPlayer setVideos(List videoModels) { + public IjkVideoView setVideos(List videoModels) { this.mVideoModels = videoModels; playNext(); return this; @@ -463,7 +465,7 @@ public YinYangPlayer setVideos(List videoModels) { /** * 设置标题 */ - public YinYangPlayer setTitle(String title) { + public IjkVideoView setTitle(String title) { if (title != null) { this.mCurrentTitle = title; } @@ -473,15 +475,15 @@ public YinYangPlayer setTitle(String title) { /** * 开启缓存 */ - public YinYangPlayer enableCache() { + public IjkVideoView enableCache() { isCache = true; return this; } /** - * 添加到{@link YinYangPlayerManager},如需集成到RecyclerView或ListView请开启此选项 + * 添加到{@link VideoViewManager},如需集成到RecyclerView或ListView请开启此选项 */ - public YinYangPlayer addToPlayerManager() { + public IjkVideoView addToPlayerManager() { addToPlayerManager = true; return this; } @@ -502,11 +504,15 @@ private void playNext() { /** * 启用SurfaceView */ - public YinYangPlayer useSurfaceView() { + public IjkVideoView useSurfaceView() { this.useSurfaceView = true; return this; } + public void setVideoListener(VideoListener listener) { + this.listener = listener; + } + private boolean isInPlaybackState() { return (mMediaPlayer != null && mCurrentState != STATE_ERROR && mCurrentState != STATE_IDLE && mCurrentState != STATE_PREPARING); @@ -593,10 +599,9 @@ public void stopFloatWindow() { public void startFullScreenDirectly() { WindowUtil.scanForActivity(getContext()).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); startFullScreen(); - if (mVideoController != null) mVideoController.startFullScreenDirectly(); } - public YinYangPlayer alwaysFullScreen() { + public IjkVideoView alwaysFullScreen() { mAlwaysFullScreen = true; return this; } @@ -685,7 +690,7 @@ public String getTitle() { /** * 设置控制器 */ - public YinYangPlayer setVideoController(BaseVideoController mediaController) { + public IjkVideoView setVideoController(BaseVideoController mediaController) { playerContainer.removeView(mVideoController); if (mediaController != null) { mediaController.setMediaPlayer(this); @@ -702,6 +707,7 @@ public YinYangPlayer setVideoController(BaseVideoController mediaController) { @Override public boolean onError(IMediaPlayer iMediaPlayer, int framework_err, int impl_err) { mCurrentState = STATE_ERROR; + if (listener != null) listener.onError(); if (mVideoController != null) mVideoController.setPlayState(mCurrentState); mCurrentPosition = getCurrentPosition(); playerContainer.removeView(statusView); @@ -726,6 +732,7 @@ public void onClick(View v) { @Override public void onCompletion(IMediaPlayer iMediaPlayer) { mCurrentState = STATE_PLAYBACK_COMPLETED; + if (listener != null) listener.onComplete(); if (mVideoController != null) mVideoController.setPlayState(mCurrentState); setKeepScreenOn(false); mCurrentVideoPosition++; @@ -758,6 +765,7 @@ private void resetPlayer() { private IMediaPlayer.OnInfoListener onInfoListener = new IMediaPlayer.OnInfoListener() { @Override public boolean onInfo(IMediaPlayer iMediaPlayer, int what, int extra) { + if (listener != null) listener.onInfo(what, extra); switch (what) { case IMediaPlayer.MEDIA_INFO_BUFFERING_START: mCurrentState = STATE_BUFFERING; @@ -790,6 +798,7 @@ public void onBufferingUpdate(IMediaPlayer iMediaPlayer, int i) { @Override public void onPrepared(IMediaPlayer iMediaPlayer) { mCurrentState = STATE_PREPARED; + if (listener != null) listener.onPrepared(); if (mVideoController != null) mVideoController.setPlayState(mCurrentState); if (mCurrentPosition > 0) { seekTo(mCurrentPosition); @@ -927,7 +936,7 @@ boolean abandonFocus() { /** * 设置自动旋转 */ - public YinYangPlayer autoRotate() { + public IjkVideoView autoRotate() { this.mAutoRotate = true; if (orientationEventListener == null) { orientationEventListener = new OrientationEventListener(getContext()) { // 加速度传感器监听,用于自动旋转屏幕 diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/player/VideoCacheManager.java b/library/src/main/java/com/devlin_n/videoplayer/player/VideoCacheManager.java similarity index 94% rename from library/src/main/java/com/devlin_n/yinyangplayer/player/VideoCacheManager.java rename to library/src/main/java/com/devlin_n/videoplayer/player/VideoCacheManager.java index 62d0fc26..d0a32286 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/player/VideoCacheManager.java +++ b/library/src/main/java/com/devlin_n/videoplayer/player/VideoCacheManager.java @@ -1,10 +1,10 @@ -package com.devlin_n.yinyangplayer.player; +package com.devlin_n.videoplayer.player; import android.content.Context; import com.danikula.videocache.HttpProxyCacheServer; import com.danikula.videocache.file.Md5FileNameGenerator; -import com.devlin_n.yinyangplayer.util.StorageUtil; +import com.devlin_n.videoplayer.util.StorageUtil; import java.io.File; diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/player/VideoModel.java b/library/src/main/java/com/devlin_n/videoplayer/player/VideoModel.java similarity index 76% rename from library/src/main/java/com/devlin_n/yinyangplayer/player/VideoModel.java rename to library/src/main/java/com/devlin_n/videoplayer/player/VideoModel.java index 3a8bf8dc..57d274d3 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/player/VideoModel.java +++ b/library/src/main/java/com/devlin_n/videoplayer/player/VideoModel.java @@ -1,6 +1,6 @@ -package com.devlin_n.yinyangplayer.player; +package com.devlin_n.videoplayer.player; -import com.devlin_n.yinyangplayer.controller.BaseVideoController; +import com.devlin_n.videoplayer.controller.BaseVideoController; /** * Created by Devlin_n on 2017/4/11. diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/player/YinYangPlayerManager.java b/library/src/main/java/com/devlin_n/videoplayer/player/VideoViewManager.java similarity index 55% rename from library/src/main/java/com/devlin_n/yinyangplayer/player/YinYangPlayerManager.java rename to library/src/main/java/com/devlin_n/videoplayer/player/VideoViewManager.java index 78f8d309..ae1540ef 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/player/YinYangPlayerManager.java +++ b/library/src/main/java/com/devlin_n/videoplayer/player/VideoViewManager.java @@ -1,31 +1,31 @@ -package com.devlin_n.yinyangplayer.player; +package com.devlin_n.videoplayer.player; import java.lang.ref.WeakReference; /** * 视频播放器管理器. */ -public class YinYangPlayerManager { +public class VideoViewManager { - private WeakReference mPlayer; //写成弱引用防止内存泄露 + private WeakReference mPlayer; //写成弱引用防止内存泄露 - private YinYangPlayerManager() { + private VideoViewManager() { } - private static YinYangPlayerManager sInstance; + private static VideoViewManager sInstance; - public static synchronized YinYangPlayerManager instance() { + public static synchronized VideoViewManager instance() { if (sInstance == null) { - sInstance = new YinYangPlayerManager(); + sInstance = new VideoViewManager(); } return sInstance; } - public void setCurrentVideoPlayer(YinYangPlayer player) { + public void setCurrentVideoPlayer(IjkVideoView player) { mPlayer = new WeakReference<>(player); } - public YinYangPlayer getCurrentVideoPlayer() { + public IjkVideoView getCurrentVideoPlayer() { if (mPlayer == null) return null; return mPlayer.get(); } diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/util/Constants.java b/library/src/main/java/com/devlin_n/videoplayer/util/Constants.java similarity index 88% rename from library/src/main/java/com/devlin_n/yinyangplayer/util/Constants.java rename to library/src/main/java/com/devlin_n/videoplayer/util/Constants.java index d4e2afca..292ed9ad 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/util/Constants.java +++ b/library/src/main/java/com/devlin_n/videoplayer/util/Constants.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.util; +package com.devlin_n.videoplayer.util; /** * 常量 diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/util/KeyUtil.java b/library/src/main/java/com/devlin_n/videoplayer/util/KeyUtil.java similarity index 85% rename from library/src/main/java/com/devlin_n/yinyangplayer/util/KeyUtil.java rename to library/src/main/java/com/devlin_n/videoplayer/util/KeyUtil.java index 3db8aada..b1154d32 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/util/KeyUtil.java +++ b/library/src/main/java/com/devlin_n/videoplayer/util/KeyUtil.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.util; +package com.devlin_n.videoplayer.util; /** * Created by Devlin_n on 2017/4/14. diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/util/L.java b/library/src/main/java/com/devlin_n/videoplayer/util/L.java similarity index 72% rename from library/src/main/java/com/devlin_n/yinyangplayer/util/L.java rename to library/src/main/java/com/devlin_n/videoplayer/util/L.java index 747ea9ef..780d729d 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/util/L.java +++ b/library/src/main/java/com/devlin_n/videoplayer/util/L.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.util; +package com.devlin_n.videoplayer.util; import android.util.Log; @@ -9,7 +9,7 @@ public class L { - private static final String TAG = "YinYangPlayer"; + private static final String TAG = "DCPlayer"; public static void d(String msg) { diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/util/NetworkUtil.java b/library/src/main/java/com/devlin_n/videoplayer/util/NetworkUtil.java similarity index 98% rename from library/src/main/java/com/devlin_n/yinyangplayer/util/NetworkUtil.java rename to library/src/main/java/com/devlin_n/videoplayer/util/NetworkUtil.java index d3b8d007..12251952 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/util/NetworkUtil.java +++ b/library/src/main/java/com/devlin_n/videoplayer/util/NetworkUtil.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.util; +package com.devlin_n.videoplayer.util; import android.content.Context; import android.net.ConnectivityManager; diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/util/StorageUtil.java b/library/src/main/java/com/devlin_n/videoplayer/util/StorageUtil.java similarity index 99% rename from library/src/main/java/com/devlin_n/yinyangplayer/util/StorageUtil.java rename to library/src/main/java/com/devlin_n/videoplayer/util/StorageUtil.java index 5f9fac58..8bafb940 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/util/StorageUtil.java +++ b/library/src/main/java/com/devlin_n/videoplayer/util/StorageUtil.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.util; +package com.devlin_n.videoplayer.util; import android.content.Context; import android.os.Environment; diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/util/WindowUtil.java b/library/src/main/java/com/devlin_n/videoplayer/util/WindowUtil.java similarity index 99% rename from library/src/main/java/com/devlin_n/yinyangplayer/util/WindowUtil.java rename to library/src/main/java/com/devlin_n/videoplayer/util/WindowUtil.java index 2ee7789b..27bf0dd1 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/util/WindowUtil.java +++ b/library/src/main/java/com/devlin_n/videoplayer/util/WindowUtil.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.util; +package com.devlin_n.videoplayer.util; import android.app.Activity; import android.content.Context; diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/widget/CenterView.java b/library/src/main/java/com/devlin_n/videoplayer/widget/CenterView.java similarity index 95% rename from library/src/main/java/com/devlin_n/yinyangplayer/widget/CenterView.java rename to library/src/main/java/com/devlin_n/videoplayer/widget/CenterView.java index f8c30dcf..3cc6eb0c 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/widget/CenterView.java +++ b/library/src/main/java/com/devlin_n/videoplayer/widget/CenterView.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.widget; +package com.devlin_n.videoplayer.widget; import android.content.Context; import android.view.Gravity; @@ -11,7 +11,7 @@ import android.widget.ProgressBar; import android.widget.TextView; -import com.devlin_n.yinyangplayer.R; +import com.devlin_n.videoplayer.R; /** * 显示亮度,音量,进度 diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/widget/FloatView.java b/library/src/main/java/com/devlin_n/videoplayer/widget/FloatView.java similarity index 87% rename from library/src/main/java/com/devlin_n/yinyangplayer/widget/FloatView.java rename to library/src/main/java/com/devlin_n/videoplayer/widget/FloatView.java index dde7a188..5cdd19e7 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/widget/FloatView.java +++ b/library/src/main/java/com/devlin_n/videoplayer/widget/FloatView.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.widget; +package com.devlin_n.videoplayer.widget; import android.annotation.SuppressLint; import android.content.Context; @@ -7,9 +7,9 @@ import android.view.WindowManager; import android.widget.FrameLayout; -import com.devlin_n.yinyangplayer.R; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; -import com.devlin_n.yinyangplayer.util.WindowUtil; +import com.devlin_n.videoplayer.R; +import com.devlin_n.videoplayer.player.IjkVideoView; +import com.devlin_n.videoplayer.util.WindowUtil; /** * 悬浮窗控件(解决滑动冲突) @@ -22,7 +22,7 @@ public class FloatView extends FrameLayout{ private WindowManager mWindowManager; private WindowManager.LayoutParams mParams; - public YinYangPlayer magicVideoView; + public IjkVideoView magicVideoView; public FloatView(@NonNull Context context, WindowManager mWindowManager, WindowManager.LayoutParams mParams) { super(context); @@ -36,7 +36,7 @@ private void init() { setBackgroundResource(R.drawable.shape_float_window_background); int padding = WindowUtil.dp2px(getContext(), 1); setPadding(padding, padding, padding, padding); - magicVideoView = new YinYangPlayer(getContext()); + magicVideoView = new IjkVideoView(getContext()); addView(magicVideoView); } diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/widget/PlayProgressButton.java b/library/src/main/java/com/devlin_n/videoplayer/widget/PlayProgressButton.java similarity index 96% rename from library/src/main/java/com/devlin_n/yinyangplayer/widget/PlayProgressButton.java rename to library/src/main/java/com/devlin_n/videoplayer/widget/PlayProgressButton.java index 3533cf42..42f433a8 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/widget/PlayProgressButton.java +++ b/library/src/main/java/com/devlin_n/videoplayer/widget/PlayProgressButton.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.widget; +package com.devlin_n.videoplayer.widget; import android.content.Context; import android.support.annotation.AttrRes; @@ -11,8 +11,8 @@ import android.widget.ImageView; import android.widget.ProgressBar; -import com.devlin_n.yinyangplayer.R; -import com.devlin_n.yinyangplayer.util.WindowUtil; +import com.devlin_n.videoplayer.R; +import com.devlin_n.videoplayer.util.WindowUtil; /** * 播放按钮和加载进度条封装 diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/widget/YinYangSurfaceView.java b/library/src/main/java/com/devlin_n/videoplayer/widget/ResizeSurfaceView.java similarity index 91% rename from library/src/main/java/com/devlin_n/yinyangplayer/widget/YinYangSurfaceView.java rename to library/src/main/java/com/devlin_n/videoplayer/widget/ResizeSurfaceView.java index fcdb79f7..646253b2 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/widget/YinYangSurfaceView.java +++ b/library/src/main/java/com/devlin_n/videoplayer/widget/ResizeSurfaceView.java @@ -1,26 +1,26 @@ -package com.devlin_n.yinyangplayer.widget; +package com.devlin_n.videoplayer.widget; import android.content.Context; import android.util.AttributeSet; import android.view.SurfaceView; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; +import com.devlin_n.videoplayer.player.IjkVideoView; /** * Created by Devlin_n on 2017/4/10. */ -public class YinYangSurfaceView extends SurfaceView { +public class ResizeSurfaceView extends SurfaceView { private int mVideoWidth; private int mVideoHeight; private int screenType; - public YinYangSurfaceView(Context context) { + public ResizeSurfaceView(Context context) { super(context); } - public YinYangSurfaceView(Context context, AttributeSet attrs) { + public ResizeSurfaceView(Context context, AttributeSet attrs) { super(context, attrs); } @@ -49,18 +49,18 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //如果设置了比例 switch (screenType) { - case YinYangPlayer.SCREEN_SCALE_ORIGINAL: + case IjkVideoView.SCREEN_SCALE_ORIGINAL: width = mVideoWidth; height = mVideoHeight; break; - case YinYangPlayer.SCREEN_SCALE_16_9: + case IjkVideoView.SCREEN_SCALE_16_9: if (height > width / 16 * 9) { height = width / 16 * 9; } else { width = height / 9 * 16; } break; - case YinYangPlayer.SCREEN_SCALE_4_3: + case IjkVideoView.SCREEN_SCALE_4_3: if (height > width / 4 * 3) { height = width / 4 * 3; } else { @@ -68,7 +68,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } // Log.d("@@@@", "onMeasure 4:3 : width" + width + " height:" + height); break; - case YinYangPlayer.SCREEN_SCALE_MATCH_PARENT: + case IjkVideoView.SCREEN_SCALE_MATCH_PARENT: width = widthMeasureSpec; height = heightMeasureSpec; break; diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/widget/YinYangTextureView.java b/library/src/main/java/com/devlin_n/videoplayer/widget/ResizeTextureView.java similarity index 91% rename from library/src/main/java/com/devlin_n/yinyangplayer/widget/YinYangTextureView.java rename to library/src/main/java/com/devlin_n/videoplayer/widget/ResizeTextureView.java index def0d9a5..281c72ea 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/widget/YinYangTextureView.java +++ b/library/src/main/java/com/devlin_n/videoplayer/widget/ResizeTextureView.java @@ -1,16 +1,16 @@ -package com.devlin_n.yinyangplayer.widget; +package com.devlin_n.videoplayer.widget; import android.content.Context; import android.util.AttributeSet; import android.view.TextureView; -import com.devlin_n.yinyangplayer.player.YinYangPlayer; +import com.devlin_n.videoplayer.player.IjkVideoView; /** * 用于显示video的,做了横屏与竖屏的匹配,还有需要rotation需求的 */ -public class YinYangTextureView extends TextureView { +public class ResizeTextureView extends TextureView { private int mVideoWidth; @@ -18,11 +18,11 @@ public class YinYangTextureView extends TextureView { private int screenType; - public YinYangTextureView(Context context) { + public ResizeTextureView(Context context) { super(context); } - public YinYangTextureView(Context context, AttributeSet attrs) { + public ResizeTextureView(Context context, AttributeSet attrs) { super(context, attrs); } @@ -50,18 +50,18 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //如果设置了比例 switch (screenType) { - case YinYangPlayer.SCREEN_SCALE_ORIGINAL: + case IjkVideoView.SCREEN_SCALE_ORIGINAL: width = mVideoWidth; height = mVideoHeight; break; - case YinYangPlayer.SCREEN_SCALE_16_9: + case IjkVideoView.SCREEN_SCALE_16_9: if (height > width / 16 * 9) { height = width / 16 * 9; } else { width = height / 9 * 16; } break; - case YinYangPlayer.SCREEN_SCALE_4_3: + case IjkVideoView.SCREEN_SCALE_4_3: if (height > width / 4 * 3) { height = width / 4 * 3; } else { @@ -69,7 +69,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } // Log.d("@@@@", "onMeasure 4:3 : width" + width + " height:" + height); break; - case YinYangPlayer.SCREEN_SCALE_MATCH_PARENT: + case IjkVideoView.SCREEN_SCALE_MATCH_PARENT: width = widthMeasureSpec; height = heightMeasureSpec; break; diff --git a/library/src/main/java/com/devlin_n/yinyangplayer/widget/StatusView.java b/library/src/main/java/com/devlin_n/videoplayer/widget/StatusView.java similarity index 93% rename from library/src/main/java/com/devlin_n/yinyangplayer/widget/StatusView.java rename to library/src/main/java/com/devlin_n/videoplayer/widget/StatusView.java index 344f1f21..ca637e13 100644 --- a/library/src/main/java/com/devlin_n/yinyangplayer/widget/StatusView.java +++ b/library/src/main/java/com/devlin_n/videoplayer/widget/StatusView.java @@ -1,4 +1,4 @@ -package com.devlin_n.yinyangplayer.widget; +package com.devlin_n.videoplayer.widget; import android.content.Context; import android.content.Intent; @@ -12,9 +12,9 @@ import android.widget.LinearLayout; import android.widget.TextView; -import com.devlin_n.yinyangplayer.R; -import com.devlin_n.yinyangplayer.player.BackgroundPlayService; -import com.devlin_n.yinyangplayer.util.Constants; +import com.devlin_n.videoplayer.R; +import com.devlin_n.videoplayer.player.BackgroundPlayService; +import com.devlin_n.videoplayer.util.Constants; /** * 错误提示,网络提示 diff --git a/library/src/main/res/layout/layout_float_controller.xml b/library/src/main/res/layout/layout_float_controller.xml index 64da9b87..0487cf79 100644 --- a/library/src/main/res/layout/layout_float_controller.xml +++ b/library/src/main/res/layout/layout_float_controller.xml @@ -2,7 +2,7 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file