diff --git a/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml b/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml index 27faf9deaa..a328e9ddba 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml @@ -5,7 +5,9 @@ { - Intent intent = new Intent(getContext(), VideoActivity.class); - startActivity(intent); OverlayLeftViewUtils.INSTANCE.showOverlayView(getActivity()); - OverlayLeftViewUtils.INSTANCE.dragTarget(vOpenLeft); + OverlayLeftViewUtils.INSTANCE.addDragTarget(vOpenLeft); + VideoActivity.Companion.startActivity(getContext(),VideoActivity.VIDEOTYPE_CLOSE); //showOrHideArrivedEndLayout(true, "北京北京北京", "1527481606997577728"); //showOrHidePressengerCheckPager(true, "开始站点开", "开始站点开始站点开始", "2", "京A888888", "18811539480"); //OCHFloatWindowManager.getInstance().ShowFloatWindow(getContext()); - //OverlayViewUtils.showOverlayView(getActivity(),new TaxiPassengerMogoConsultView(getContext())); }); } @@ -263,7 +259,7 @@ public class TaxiPassengerBaseFragment extends MvpFragment() - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v","https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969511280/车队.png","蘑菇车联覆盖生活的方方面面")) - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v","https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png","蘑菇车联之红旗车队")) - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v","https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969536177/大运会.png","蘑菇车联牵手成都大运会")) - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v","https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969579713/三屏.png","多视角体验蘑菇车联自动驾驶")) - val recyclerVideoAdapter = RecyclerVideoAdapter(context, arrayListOf) - val carouselLayoutManager = CarouselLayoutManager(CarouselLayoutManager.HORIZONTAL, true) - carouselLayoutManager.setPostLayoutListener(CarouselZoomPostLayoutListener ()) - carouselLayoutManager.maxVisibleItems = 1 - indicatorView.notifyDataChanged(arrayListOf.size) - indicatorView.setSlideMode(IndicatorSlideMode.SCALE) - indicatorView.setOrientation(IndicatorOrientation.INDICATOR_HORIZONTAL) - indicatorView.setIndicatorStyle(IndicatorStyle.ROUND_RECT) - indicatorView.setSliderColor(Color.parseColor("#80FFFFFF"), Color.parseColor("#2972FF"),Color.parseColor("#27C8FF")) - indicatorView.setSliderWidth(16f, 101f) - indicatorView.setSliderHeight(16f) - indicatorView.setSliderGap(30f) - rvVideoPlaylist.addOnScrollListener(object: CenterScrollListener() { - var prePlayerPosition = 0 - override fun pageSelect(recyclerView: RecyclerView?, newState: Int) { - //播放视频 - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - indicatorView.onPageSelected(centerItemPosition) - if(player is ConsultVideoPlayer){ - if(prePlayerPosition!=centerItemPosition) { - if(player.currentState==GSYVideoView.CURRENT_STATE_PAUSE){ - player.onVideoReset() - }else{ - } - val playerHolder = carouselLayoutManager.findViewByPosition(prePlayerPosition) - val prePlayer = playerHolder?.findViewById(R.id.video_item_player) - prePlayer?.let { - if(it is ConsultVideoPlayer){ - it.onVideoReset() - } - } - val taxiPassengerVideoPlay = arrayListOf[centerItemPosition] - setBackageAndPlayNext(taxiPassengerVideoPlay, player, centerItemPosition) - }else{ - player.onVideoResume(false) - } - } - prePlayerPosition = centerItemPosition - } - - override fun pageStop() { - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - if(player is ConsultVideoPlayer){ - player.onVideoPause() - } - } - - }) - carouselLayoutManager.addOnDargAutoDiffListener { adapterPosition, currentPosition -> - val fl = adapterPosition - floor(adapterPosition) - var currentIndex = currentPosition - if(fl>0.5){ - if(currentPosition==0){ - currentIndex = rvVideoPlaylist.adapter!!.itemCount-1 - }else { - currentIndex -= 1 - } - } - indicatorView.onPageScrolled(currentIndex, fl, 0) - } - recyclerVideoAdapter.setOnThumbImageClilckListener { - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - if(player is ConsultVideoPlayer) { - player.onVideoReset() - player.thumbImageViewLayout.visibility = View.VISIBLE - } - rvVideoPlaylist.smoothScrollToPosition(it) - } - rvVideoPlaylist.layoutManager = carouselLayoutManager - rvVideoPlaylist.setHasFixedSize(true) - rvVideoPlaylist.adapter = recyclerVideoAdapter - } - - private fun setBackageAndPlayNext( - taxiPassengerVideoPlay: TaxiPassengerVideoPlay, - player: ConsultVideoPlayer, - centerItemPosition: Int, - ) { - // 设置背景图片 - Glide.with(context).asBitmap() - .load(taxiPassengerVideoPlay.imageUrl) - .apply( - RequestOptions().transform( - GlideBlurTransform(context, taxiPassengerVideoPlay.imageUrl, 100) - ) - ) - .into(object : SimpleTarget() { - override fun onResourceReady( - resource: Bitmap, - transition: Transition? - ) { - clContain.background = BitmapDrawable(context.resources, resource) - } - }) - if(player.getVideoAllCallBack()==null) { - player.setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onAutoComplete(url: String?, vararg objects: Any?) { - player.onVideoReset() - val itemCount = rvVideoPlaylist.adapter?.itemCount - itemCount?.let { - if (centerItemPosition == itemCount - 1) { - rvVideoPlaylist.smoothScrollToPosition(0) - } else { - rvVideoPlaylist.smoothScrollToPosition(centerItemPosition + 1) - } - } - } - - override fun onClickBlank(url: String?, vararg objects: Any?) { - super.onClickBlank(url, *objects) - rvVideoPlaylist.smoothScrollToPosition(centerItemPosition) - } - - override fun onPlayError(url: String?, vararg objects: Any?) { - super.onPlayError(url, *objects) - ToastUtils.showLong("哎呀,出错了,看看其他视频吧") - } - - override fun onClickStartError(url: String?, vararg objects: Any?) { - super.onClickStartError(url, *objects) - ToastUtils.showLong("哎呀,出错了,看看其他视频吧") - } - }) - } - } - - - override fun onWindowFocusChanged(hasWindowFocus: Boolean) { - super.onWindowFocusChanged(hasWindowFocus) - val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - player?.let { - if (player is ConsultVideoPlayer) { - if(hasWindowFocus){// 获取焦点两种情况 - // 恢复播放和开始播放 - if(player.isIfCurrentIsFullscreen){// 全屏了 - - }else { - when (player.currentState) { - GSYVideoView.CURRENT_STATE_PAUSE -> { - player.onVideoResume(false) - } - GSYVideoView.CURRENT_STATE_PLAYING -> { - } - else -> { - val recyclerVideoAdapter = - rvVideoPlaylist.adapter as RecyclerVideoAdapter - setBackageAndPlayNext( - recyclerVideoAdapter.getItemByPosition(centerItemPosition), - player, centerItemPosition - ) - //player.startPlayLogic() - } - } - } - }else { - // 离开应用 暂停视频 - // 关闭 onDetachedFromWindow 会reset - if(player.isIfCurrentIsFullscreen){// 全屏了 - - }else { - player.onVideoPause() - } - } - } - - } - - } - - private fun getPlayer(carouselLayoutManager: CarouselLayoutManager): Pair { - val centerItemPosition: Int = carouselLayoutManager.centerItemPosition - val playerHolder = carouselLayoutManager.findViewByPosition(centerItemPosition) - val player = playerHolder?.findViewById(R.id.video_item_player) - return Pair(centerItemPosition, player) - } - - - override fun onDetachedFromWindow() { - val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager - val (_: Int, player) = getPlayer(carouselLayoutManager) - player?.let { - if(player is ConsultVideoPlayer){ - player.currentPlayer.release() - player.onVideoReset() - } - } - OverlayLeftViewUtils.removeDragTarget(vOpenLeft) - super.onDetachedFromWindow() - } - - init { - try { - initView(context) - } catch (e: Exception) { - e.printStackTrace() - } - } - -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoMoviesView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoMoviesView.kt deleted file mode 100644 index 99c5aca7d3..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoMoviesView.kt +++ /dev/null @@ -1,269 +0,0 @@ -package com.mogo.och.taxi.passenger.ui.video - -import android.content.Context -import android.graphics.Bitmap -import android.graphics.Color -import android.graphics.drawable.BitmapDrawable -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.widget.RelativeLayout -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.recyclerview.widget.RecyclerView -import com.bumptech.glide.Glide -import com.bumptech.glide.request.RequestOptions -import com.bumptech.glide.request.target.SimpleTarget -import com.bumptech.glide.request.transition.Transition -import com.mogo.eagle.core.utilcode.util.ToastUtils -import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.bean.TaxiPassengerVideoPlay -import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils -import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CarouselLayoutManager -import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CarouselZoomPostLayoutListener -import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CenterScrollListener -import com.mogo.och.taxi.passenger.utils.blur.GlideBlurTransform -import com.mogo.och.taxi.passenger.widget.ConsultVideoPlayer -import com.mogo.och.taxi.passenger.widget.indicator.IndicatorView -import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorOrientation -import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorSlideMode -import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorStyle -import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack -import com.shuyu.gsyvideoplayer.video.base.GSYVideoView -import java.util.* -import kotlin.math.floor - - -/** - * - * 蘑菇咨询 - * Created on 2022/5/16 - */ -class TaxiPassengerMogoMoviesView :RelativeLayout { - - constructor(context: Context?) : super(context) - - constructor(context: Context?, attributeSet: AttributeSet) : super(context, attributeSet) - - constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) - - constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) - - private lateinit var rvVideoPlaylist: RecyclerView - private lateinit var indicatorView: IndicatorView - private lateinit var clContain: ConstraintLayout - private lateinit var vOpenLeft: View - - private fun initView(context: Context) { - LayoutInflater.from(context).inflate(R.layout.taxi_p_mogo_movies, this, true) - rvVideoPlaylist = findViewById(R.id.rv_video_playlist) - indicatorView = findViewById(R.id.indicatorView) - clContain = findViewById(R.id.cl_contain) - - vOpenLeft = findViewById(R.id.v_open_left) - OverlayLeftViewUtils.dragTarget(vOpenLeft) - - val arrayListOf = ArrayList() - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558672856/小宝宝.mp4","https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559345882/1.png","小宝宝")) - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558697055/小猫.mp4","https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559367261/2.png","小猫")) - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558730074/星空.mp4","https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559406169/4.png","星空")) - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558644708/海浪.mp4","https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559384635/3.png","星空")) - val recyclerVideoAdapter = RecyclerVideoAdapter(context, arrayListOf) - val carouselLayoutManager = CarouselLayoutManager(CarouselLayoutManager.HORIZONTAL, true) - carouselLayoutManager.setPostLayoutListener(CarouselZoomPostLayoutListener ()) - carouselLayoutManager.maxVisibleItems = 1 - indicatorView.notifyDataChanged(arrayListOf.size) - indicatorView.setSlideMode(IndicatorSlideMode.SCALE) - indicatorView.setOrientation(IndicatorOrientation.INDICATOR_HORIZONTAL) - indicatorView.setIndicatorStyle(IndicatorStyle.ROUND_RECT) - indicatorView.setSliderColor(Color.parseColor("#80FFFFFF"), Color.parseColor("#2972FF"),Color.parseColor("#27C8FF")) - indicatorView.setSliderWidth(16f, 101f) - indicatorView.setSliderHeight(16f) - indicatorView.setSliderGap(30f) - rvVideoPlaylist.addOnScrollListener(object: CenterScrollListener() { - var prePlayerPosition = 0 - override fun pageSelect(recyclerView: RecyclerView?, newState: Int) { - //播放视频 - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - indicatorView.onPageSelected(centerItemPosition) - if(player is ConsultVideoPlayer){ - if(prePlayerPosition!=centerItemPosition) { - if(player.currentState==GSYVideoView.CURRENT_STATE_PAUSE){ - player.onVideoReset() - }else{ - } - val playerHolder = carouselLayoutManager.findViewByPosition(prePlayerPosition) - val prePlayer = playerHolder?.findViewById(R.id.video_item_player) - prePlayer?.let { - if(it is ConsultVideoPlayer){ - it.onVideoReset() - } - } - val taxiPassengerVideoPlay = arrayListOf[centerItemPosition] - setBackageAndPlayNext(taxiPassengerVideoPlay, player, centerItemPosition) - }else{ - player.onVideoResume(false) - } - } - prePlayerPosition = centerItemPosition - } - - override fun pageStop() { - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - if(player is ConsultVideoPlayer){ - player.onVideoPause() - } - } - - }) - carouselLayoutManager.addOnDargAutoDiffListener { adapterPosition, currentPosition -> - val fl = adapterPosition - floor(adapterPosition) - var currentIndex = currentPosition - if(fl>0.5){ - if(currentPosition==0){ - currentIndex = rvVideoPlaylist.adapter!!.itemCount-1 - }else { - currentIndex -= 1 - } - } - indicatorView.onPageScrolled(currentIndex, fl, 0) - } - recyclerVideoAdapter.setOnThumbImageClilckListener { - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - if(player is ConsultVideoPlayer) { - player.onVideoReset() - player.thumbImageViewLayout.visibility = View.VISIBLE - } - rvVideoPlaylist.smoothScrollToPosition(it) - } - rvVideoPlaylist.layoutManager = carouselLayoutManager - rvVideoPlaylist.setHasFixedSize(true) - rvVideoPlaylist.adapter = recyclerVideoAdapter - } - - private fun setBackageAndPlayNext( - taxiPassengerVideoPlay: TaxiPassengerVideoPlay, - player: ConsultVideoPlayer, - centerItemPosition: Int, - ) { - // 设置背景图片 - Glide.with(context).asBitmap() - .load(taxiPassengerVideoPlay.imageUrl) - .apply( - RequestOptions().transform( - GlideBlurTransform(context, taxiPassengerVideoPlay.imageUrl, 85) - ) - ) - .into(object : SimpleTarget() { - override fun onResourceReady( - resource: Bitmap, - transition: Transition? - ) { - clContain.background = BitmapDrawable(context.resources, resource) - } - }) - if(player.getVideoAllCallBack()==null) { - player.setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onAutoComplete(url: String?, vararg objects: Any?) { - player.onVideoReset() - val itemCount = rvVideoPlaylist.adapter?.itemCount - itemCount?.let { - if (centerItemPosition == itemCount - 1) { - rvVideoPlaylist.smoothScrollToPosition(0) - } else { - rvVideoPlaylist.smoothScrollToPosition(centerItemPosition + 1) - } - } - } - - override fun onClickBlank(url: String?, vararg objects: Any?) { - super.onClickBlank(url, *objects) - rvVideoPlaylist.smoothScrollToPosition(centerItemPosition) - } - - override fun onPlayError(url: String?, vararg objects: Any?) { - super.onPlayError(url, *objects) - ToastUtils.showLong("哎呀,出错了,看看其他视频吧") - } - - override fun onClickStartError(url: String?, vararg objects: Any?) { - super.onClickStartError(url, *objects) - ToastUtils.showLong("哎呀,出错了,看看其他视频吧") - } - }) - } - } - - - override fun onWindowFocusChanged(hasWindowFocus: Boolean) { - super.onWindowFocusChanged(hasWindowFocus) - val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - player?.let { - if (player is ConsultVideoPlayer) { - if(hasWindowFocus){// 获取焦点两种情况 - // 恢复播放和开始播放 - if(player.isIfCurrentIsFullscreen){// 全屏了 - - }else { - when (player.currentState) { - GSYVideoView.CURRENT_STATE_PAUSE -> { - player.onVideoResume(false) - } - GSYVideoView.CURRENT_STATE_PLAYING -> { - } - else -> { - val recyclerVideoAdapter = - rvVideoPlaylist.adapter as RecyclerVideoAdapter - setBackageAndPlayNext( - recyclerVideoAdapter.getItemByPosition(centerItemPosition), - player, centerItemPosition - ) - //player.startPlayLogic() - } - } - } - }else { - // 离开应用 暂停视频 - // 关闭 onDetachedFromWindow 会reset - if(player.isIfCurrentIsFullscreen){// 全屏了 - - }else { - player.onVideoPause() - } - } - } - - } - - } - - private fun getPlayer(carouselLayoutManager: CarouselLayoutManager): Pair { - val centerItemPosition: Int = carouselLayoutManager.centerItemPosition - val playerHolder = carouselLayoutManager.findViewByPosition(centerItemPosition) - val player = playerHolder?.findViewById(R.id.video_item_player) - return Pair(centerItemPosition, player) - } - - - override fun onDetachedFromWindow() { - val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager - val (_: Int, player) = getPlayer(carouselLayoutManager) - player?.let { - if(player is ConsultVideoPlayer){ - player.currentPlayer.release() - player.onVideoReset() - } - } - OverlayLeftViewUtils.removeDragTarget(vOpenLeft) - super.onDetachedFromWindow() - } - - init { - try { - initView(context) - } catch (e: Exception) { - e.printStackTrace() - } - } - -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt index 659c725555..c86a82fa36 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt @@ -1,22 +1,23 @@ package com.mogo.och.taxi.passenger.ui.video -import android.content.ContentResolver -import android.database.Cursor +import android.content.Context +import android.content.Intent import android.graphics.Bitmap import android.graphics.Color import android.graphics.drawable.BitmapDrawable -import android.net.Uri import android.os.Bundle -import android.os.IBinder -import android.os.RemoteException import android.view.View +import android.widget.TextView import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.widget.AppCompatImageView import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide +import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.target.SimpleTarget import com.bumptech.glide.request.transition.Transition +import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.bean.TaxiPassengerVideoPlay @@ -37,26 +38,72 @@ import kotlin.math.floor class VideoActivity : AppCompatActivity() { - private lateinit var rvVideoPlaylist: RecyclerView + private var rvVideoPlaylist: RecyclerView?=null private lateinit var indicatorView: IndicatorView private lateinit var clContain: ConstraintLayout - private lateinit var vOpenLeft: View + private var vOpenLeft: View?=null + private lateinit var acivTitleIcon: AppCompatImageView + private lateinit var tvTitle: TextView + + private val arrayListOf = ArrayList() + companion object{ - const val SERVICE_ORDER = "order" + const val VIDEOTYPE = "VIDEOTYPE" + const val VIDEOTYPE_CONSULT = 0 + const val VIDEOTYPE_MOIES = 1 + const val VIDEOTYPE_CLOSE = 2 + + @JvmOverloads + fun startActivity(context:Context,videoType:Int){ + val intent = Intent(context, VideoActivity::class.java) + intent.putExtra(VIDEOTYPE, videoType) + context.startActivity(intent) + } } + private var videotype = VIDEOTYPE_CONSULT + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_video) + configPage() + } + override fun onNewIntent(intent: Intent?) { + super.onNewIntent(intent) + setIntent(intent) + configPage() + } + + private fun configPage() { + FullVideoUtils.dismissOverlayView(true) + releaseOnNewInstance() + setContentView(R.layout.taxi_p_arrived_mogo_consult) initView() + when (intent.getIntExtra(VIDEOTYPE, VIDEOTYPE_CONSULT)) { + VIDEOTYPE_CONSULT -> { + videotype = VIDEOTYPE_CONSULT + acivTitleIcon.setImageResource(R.drawable.taxi_p_mogo_consult_title_icon) + tvTitle.text = "蘑菇资讯" + initConsultData() + } + VIDEOTYPE_MOIES -> { + videotype = VIDEOTYPE_MOIES + acivTitleIcon.setImageResource(R.drawable.taxi_p_mogo_movies_title_icon) + tvTitle.text = "影视娱乐" + initMoviesData() + } + VIDEOTYPE_CLOSE ->{ + finish() + return + } + } initListener() initData() } - private fun initData() { - val arrayListOf = ArrayList() + private fun initConsultData(){ + arrayListOf.clear() arrayListOf.add( TaxiPassengerVideoPlay( "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v", @@ -85,6 +132,41 @@ class VideoActivity : AppCompatActivity() { "多视角体验蘑菇车联自动驾驶" ) ) + } + + private fun initMoviesData() { + arrayListOf.clear() + arrayListOf.add( + TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558672856/小宝宝.mp4", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559345882/1.png", + "小宝宝" + ) + ) + arrayListOf.add( + TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558697055/小猫.mp4", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559367261/2.png", + "小猫" + ) + ) + arrayListOf.add( + TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558730074/星空.mp4", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559406169/4.png", + "星空" + ) + ) + arrayListOf.add( + TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558644708/海浪.mp4", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559384635/3.png", + "星空" + ) + ) + } + + private fun initData() { val recyclerVideoAdapter = RecyclerVideoAdapter(this, arrayListOf) val carouselLayoutManager = CarouselLayoutManager(CarouselLayoutManager.HORIZONTAL, true) carouselLayoutManager.setPostLayoutListener(CarouselZoomPostLayoutListener()) @@ -100,11 +182,11 @@ class VideoActivity : AppCompatActivity() { indicatorView.setSliderWidth(16f, 101f) indicatorView.setSliderHeight(16f) indicatorView.setSliderGap(30f) - rvVideoPlaylist.addOnScrollListener(object : CenterScrollListener() { + rvVideoPlaylist?.addOnScrollListener(object : CenterScrollListener() { var prePlayerPosition = 0 override fun pageSelect(recyclerView: RecyclerView?, newState: Int) { //播放视频 - val (centerItemPosition: kotlin.Int, player) = getPlayer(carouselLayoutManager) + val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) indicatorView.onPageSelected(centerItemPosition) if (player is ConsultVideoPlayer) { if (prePlayerPosition != centerItemPosition) { @@ -131,7 +213,7 @@ class VideoActivity : AppCompatActivity() { } override fun pageStop() { - val (centerItemPosition: kotlin.Int, player) = getPlayer(carouselLayoutManager) + val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) if (player is ConsultVideoPlayer) { player.onVideoPause() } @@ -143,7 +225,7 @@ class VideoActivity : AppCompatActivity() { var currentIndex = currentPosition if (fl > 0.5) { if (currentPosition == 0) { - currentIndex = rvVideoPlaylist.adapter!!.itemCount - 1 + currentIndex = rvVideoPlaylist?.adapter!!.itemCount - 1 } else { currentIndex -= 1 } @@ -151,16 +233,16 @@ class VideoActivity : AppCompatActivity() { indicatorView.onPageScrolled(currentIndex, fl, 0) } recyclerVideoAdapter.setOnThumbImageClilckListener { - val (centerItemPosition: kotlin.Int, player) = getPlayer(carouselLayoutManager) + val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) if (player is ConsultVideoPlayer) { player.onVideoReset() player.thumbImageViewLayout.visibility = View.VISIBLE } - rvVideoPlaylist.smoothScrollToPosition(it) + rvVideoPlaylist?.smoothScrollToPosition(it) } - rvVideoPlaylist.layoutManager = carouselLayoutManager - rvVideoPlaylist.setHasFixedSize(true) - rvVideoPlaylist.adapter = recyclerVideoAdapter + rvVideoPlaylist?.layoutManager = carouselLayoutManager + rvVideoPlaylist?.setHasFixedSize(true) + rvVideoPlaylist?.adapter = recyclerVideoAdapter } private fun getPlayer(carouselLayoutManager: CarouselLayoutManager): Pair { @@ -171,7 +253,7 @@ class VideoActivity : AppCompatActivity() { } private fun initListener() { - OverlayLeftViewUtils.dragTarget(vOpenLeft) + OverlayLeftViewUtils.addDragTarget(vOpenLeft) } private fun initView() { @@ -179,6 +261,8 @@ class VideoActivity : AppCompatActivity() { indicatorView = findViewById(R.id.indicatorView) clContain = findViewById(R.id.cl_contain) vOpenLeft = findViewById(R.id.v_open_left) + acivTitleIcon = findViewById(R.id.aciv_title_icon) + tvTitle = findViewById(R.id.tv_mogo_consult) } @@ -192,8 +276,8 @@ class VideoActivity : AppCompatActivity() { .load(taxiPassengerVideoPlay.imageUrl) .apply( RequestOptions().transform( - GlideBlurTransform(this, taxiPassengerVideoPlay.imageUrl, 100) - ) + GlideBlurTransform(taxiPassengerVideoPlay.imageUrl, 100) + ).diskCacheStrategy(DiskCacheStrategy.RESOURCE) ) .into(object : SimpleTarget() { override fun onResourceReady( @@ -207,19 +291,19 @@ class VideoActivity : AppCompatActivity() { player.setVideoAllCallBack(object : GSYSampleCallBack() { override fun onAutoComplete(url: String?, vararg objects: Any?) { player.onVideoReset() - val itemCount = rvVideoPlaylist.adapter?.itemCount + val itemCount = rvVideoPlaylist?.adapter?.itemCount itemCount?.let { if (centerItemPosition == itemCount - 1) { - rvVideoPlaylist.smoothScrollToPosition(0) + rvVideoPlaylist?.smoothScrollToPosition(0) } else { - rvVideoPlaylist.smoothScrollToPosition(centerItemPosition + 1) + rvVideoPlaylist?.smoothScrollToPosition(centerItemPosition + 1) } } } override fun onClickBlank(url: String?, vararg objects: Any?) { super.onClickBlank(url, *objects) - rvVideoPlaylist.smoothScrollToPosition(centerItemPosition) + rvVideoPlaylist?.smoothScrollToPosition(centerItemPosition) } override fun onPlayError(url: String?, vararg objects: Any?) { @@ -237,7 +321,7 @@ class VideoActivity : AppCompatActivity() { override fun onResume() { super.onResume() - val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager + val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) player?.let { if (player is ConsultVideoPlayer) { @@ -254,7 +338,7 @@ class VideoActivity : AppCompatActivity() { } else -> { val recyclerVideoAdapter = - rvVideoPlaylist.adapter as RecyclerVideoAdapter + rvVideoPlaylist?.adapter as RecyclerVideoAdapter setBackageAndPlayNext( recyclerVideoAdapter.getItemByPosition(centerItemPosition), player, centerItemPosition @@ -271,7 +355,7 @@ class VideoActivity : AppCompatActivity() { override fun onPause() { super.onPause() - val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager + val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) player?.let { if (player is ConsultVideoPlayer) { @@ -287,14 +371,19 @@ class VideoActivity : AppCompatActivity() { override fun onDestroy() { super.onDestroy() - val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager - val (_: Int, player) = getPlayer(carouselLayoutManager) - player?.let { - if(player is ConsultVideoPlayer){ - player.currentPlayer.release() - player.onVideoReset() + releaseOnNewInstance() + } + + private fun releaseOnNewInstance() { + if (rvVideoPlaylist!=null&&rvVideoPlaylist?.layoutManager != null) { + val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager + val (_: Int, player) = getPlayer(carouselLayoutManager) + player?.let { + player.currentPlayer.release() + player.onVideoReset() } } + FullVideoUtils.dismissOverlayView(true) OverlayLeftViewUtils.removeDragTarget(vOpenLeft) } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/DiskLruCache.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/DiskLruCache.java deleted file mode 100644 index d20bd4e65e..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/DiskLruCache.java +++ /dev/null @@ -1,974 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.mogo.och.taxi.passenger.utils.blur; - -import java.io.BufferedWriter; -import java.io.Closeable; -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.FilterOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.concurrent.Callable; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * A cache that uses a bounded amount of space on a filesystem. Each cache - * entry has a string key and a fixed number of values. Each key must match - * the regex [a-z0-9_-]{1,64}. Values are byte sequences, - * accessible as streams or files. Each value must be between {@code 0} and - * {@code Integer.MAX_VALUE} bytes in length. - * - *

The cache stores its data in a directory on the filesystem. This - * directory must be exclusive to the cache; the cache may delete or overwrite - * files from its directory. It is an error for multiple processes to use the - * same cache directory at the same time. - * - *

This cache limits the number of bytes that it will store on the - * filesystem. When the number of stored bytes exceeds the limit, the cache will - * remove entries in the background until the limit is satisfied. The limit is - * not strict: the cache may temporarily exceed it while waiting for files to be - * deleted. The limit does not include filesystem overhead or the cache - * journal so space-sensitive applications should set a conservative limit. - * - *

Clients call {@link #edit} to create or update the values of an entry. An - * entry may have only one editor at one time; if a value is not available to be - * edited then {@link #edit} will return null. - *

    - *
  • When an entry is being created it is necessary to - * supply a full set of values; the empty value should be used as a - * placeholder if necessary. - *
  • When an entry is being edited, it is not necessary - * to supply data for every value; values default to their previous - * value. - *
- * Every {@link #edit} call must be matched by a call to {@link Editor#commit} - * or {@link Editor#abort}. Committing is atomic: a read observes the full set - * of values as they were before or after the commit, but never a mix of values. - * - *

Clients call {@link #get} to read a snapshot of an entry. The read will - * observe the value at the time that {@link #get} was called. Updates and - * removals after the call do not impact ongoing reads. - * - *

This class is tolerant of some I/O errors. If files are missing from the - * filesystem, the corresponding entries will be dropped from the cache. If - * an error occurs while writing a cache value, the edit will fail silently. - * Callers should handle other problems by catching {@code IOException} and - * responding appropriately. - */ -final class DiskLruCache implements Closeable { - static final String JOURNAL_FILE = "journal"; - static final String JOURNAL_FILE_TEMP = "journal.tmp"; - static final String JOURNAL_FILE_BACKUP = "journal.bkp"; - static final String MAGIC = "libcore.io.DiskLruCache"; - static final String VERSION_1 = "1"; - static final long ANY_SEQUENCE_NUMBER = -1; - static final Pattern LEGAL_KEY_PATTERN = Pattern.compile("[a-z0-9_-]{1,64}"); - private static final String CLEAN = "CLEAN"; - private static final String DIRTY = "DIRTY"; - private static final String REMOVE = "REMOVE"; - private static final String READ = "READ"; - - /* - * This cache uses a journal file named "journal". A typical journal file - * looks like this: - * libcore.io.DiskLruCache - * 1 - * 100 - * 2 - * - * CLEAN 3400330d1dfc7f3f7f4b8d4d803dfcf6 832 21054 - * DIRTY 335c4c6028171cfddfbaae1a9c313c52 - * CLEAN 335c4c6028171cfddfbaae1a9c313c52 3934 2342 - * REMOVE 335c4c6028171cfddfbaae1a9c313c52 - * DIRTY 1ab96a171faeeee38496d8b330771a7a - * CLEAN 1ab96a171faeeee38496d8b330771a7a 1600 234 - * READ 335c4c6028171cfddfbaae1a9c313c52 - * READ 3400330d1dfc7f3f7f4b8d4d803dfcf6 - * - * The first five lines of the journal form its header. They are the - * constant string "libcore.io.DiskLruCache", the disk cache's version, - * the application's version, the value count, and a blank line. - * - * Each of the subsequent lines in the file is a record of the state of a - * cache entry. Each line contains space-separated values: a state, a key, - * and optional state-specific values. - * o DIRTY lines track that an entry is actively being created or updated. - * Every successful DIRTY action should be followed by a CLEAN or REMOVE - * action. DIRTY lines without a matching CLEAN or REMOVE indicate that - * temporary files may need to be deleted. - * o CLEAN lines track a cache entry that has been successfully published - * and may be read. A publish line is followed by the lengths of each of - * its values. - * o READ lines track accesses for LRU. - * o REMOVE lines track entries that have been deleted. - * - * The journal file is appended to as cache operations occur. The journal may - * occasionally be compacted by dropping redundant lines. A temporary file named - * "journal.tmp" will be used during compaction; that file should be deleted if - * it exists when the cache is opened. - */ - - private final File directory; - private final File journalFile; - private final File journalFileTmp; - private final File journalFileBackup; - private final int appVersion; - private long maxSize; - private int maxFileCount; - private final int valueCount; - private long size = 0; - private int fileCount = 0; - private Writer journalWriter; - private final LinkedHashMap lruEntries = - new LinkedHashMap(0, 0.75f, true); - private int redundantOpCount; - - /** - * To differentiate between old and current snapshots, each entry is given - * a sequence number each time an edit is committed. A snapshot is stale if - * its sequence number is not equal to its entry's sequence number. - */ - private long nextSequenceNumber = 0; - - /** This cache uses a single background thread to evict entries. */ - final ThreadPoolExecutor executorService = - new ThreadPoolExecutor(0, 1, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue()); - private final Callable cleanupCallable = new Callable() { - public Void call() throws Exception { - synchronized (DiskLruCache.this) { - if (journalWriter == null) { - return null; // Closed. - } - trimToSize(); - trimToFileCount(); - if (journalRebuildRequired()) { - rebuildJournal(); - redundantOpCount = 0; - } - } - return null; - } - }; - - private DiskLruCache(File directory, int appVersion, int valueCount, long maxSize, int maxFileCount) { - this.directory = directory; - this.appVersion = appVersion; - this.journalFile = new File(directory, JOURNAL_FILE); - this.journalFileTmp = new File(directory, JOURNAL_FILE_TEMP); - this.journalFileBackup = new File(directory, JOURNAL_FILE_BACKUP); - this.valueCount = valueCount; - this.maxSize = maxSize; - this.maxFileCount = maxFileCount; - } - - /** - * Opens the cache in {@code directory}, creating a cache if none exists - * there. - * - * @param directory a writable directory - * @param valueCount the number of values per cache entry. Must be positive. - * @param maxSize the maximum number of bytes this cache should use to store - * @param maxFileCount the maximum file count this cache should store - * @throws IOException if reading or writing the cache directory fails - */ - public static DiskLruCache open(File directory, int appVersion, int valueCount, long maxSize, int maxFileCount) - throws IOException { - if (maxSize <= 0) { - throw new IllegalArgumentException("maxSize <= 0"); - } - if (maxFileCount <= 0) { - throw new IllegalArgumentException("maxFileCount <= 0"); - } - if (valueCount <= 0) { - throw new IllegalArgumentException("valueCount <= 0"); - } - - // If a bkp file exists, use it instead. - File backupFile = new File(directory, JOURNAL_FILE_BACKUP); - if (backupFile.exists()) { - File journalFile = new File(directory, JOURNAL_FILE); - // If journal file also exists just delete backup file. - if (journalFile.exists()) { - backupFile.delete(); - } else { - renameTo(backupFile, journalFile, false); - } - } - - // Prefer to pick up where we left off. - DiskLruCache cache = new DiskLruCache(directory, appVersion, valueCount, maxSize, maxFileCount); - if (cache.journalFile.exists()) { - try { - cache.readJournal(); - cache.processJournal(); - cache.journalWriter = new BufferedWriter( - new OutputStreamWriter(new FileOutputStream(cache.journalFile, true), Util.US_ASCII)); - return cache; - } catch (IOException journalIsCorrupt) { - System.out - .println("DiskLruCache " - + directory - + " is corrupt: " - + journalIsCorrupt.getMessage() - + ", removing"); - cache.delete(); - } - } - - // Create a new empty cache. - directory.mkdirs(); - cache = new DiskLruCache(directory, appVersion, valueCount, maxSize, maxFileCount); - cache.rebuildJournal(); - return cache; - } - - private void readJournal() throws IOException { - StrictLineReader reader = new StrictLineReader(new FileInputStream(journalFile), Util.US_ASCII); - try { - String magic = reader.readLine(); - String version = reader.readLine(); - String appVersionString = reader.readLine(); - String valueCountString = reader.readLine(); - String blank = reader.readLine(); - if (!MAGIC.equals(magic) - || !VERSION_1.equals(version) - || !Integer.toString(appVersion).equals(appVersionString) - || !Integer.toString(valueCount).equals(valueCountString) - || !"".equals(blank)) { - throw new IOException("unexpected journal header: [" + magic + ", " + version + ", " - + valueCountString + ", " + blank + "]"); - } - - int lineCount = 0; - while (true) { - try { - readJournalLine(reader.readLine()); - lineCount++; - } catch (EOFException endOfJournal) { - break; - } - } - redundantOpCount = lineCount - lruEntries.size(); - } finally { - Util.closeQuietly(reader); - } - } - - private void readJournalLine(String line) throws IOException { - int firstSpace = line.indexOf(' '); - if (firstSpace == -1) { - throw new IOException("unexpected journal line: " + line); - } - - int keyBegin = firstSpace + 1; - int secondSpace = line.indexOf(' ', keyBegin); - final String key; - if (secondSpace == -1) { - key = line.substring(keyBegin); - if (firstSpace == REMOVE.length() && line.startsWith(REMOVE)) { - lruEntries.remove(key); - return; - } - } else { - key = line.substring(keyBegin, secondSpace); - } - - Entry entry = lruEntries.get(key); - if (entry == null) { - entry = new Entry(key); - lruEntries.put(key, entry); - } - - if (secondSpace != -1 && firstSpace == CLEAN.length() && line.startsWith(CLEAN)) { - String[] parts = line.substring(secondSpace + 1).split(" "); - entry.readable = true; - entry.currentEditor = null; - entry.setLengths(parts); - } else if (secondSpace == -1 && firstSpace == DIRTY.length() && line.startsWith(DIRTY)) { - entry.currentEditor = new Editor(entry); - } else if (secondSpace == -1 && firstSpace == READ.length() && line.startsWith(READ)) { - // This work was already done by calling lruEntries.get(). - } else { - throw new IOException("unexpected journal line: " + line); - } - } - - /** - * Computes the initial size and collects garbage as a part of opening the - * cache. Dirty entries are assumed to be inconsistent and will be deleted. - */ - private void processJournal() throws IOException { - deleteIfExists(journalFileTmp); - for (Iterator i = lruEntries.values().iterator(); i.hasNext(); ) { - Entry entry = i.next(); - if (entry.currentEditor == null) { - for (int t = 0; t < valueCount; t++) { - size += entry.lengths[t]; - fileCount++; - } - } else { - entry.currentEditor = null; - for (int t = 0; t < valueCount; t++) { - deleteIfExists(entry.getCleanFile(t)); - deleteIfExists(entry.getDirtyFile(t)); - } - i.remove(); - } - } - } - - /** - * Creates a new journal that omits redundant information. This replaces the - * current journal if it exists. - */ - private synchronized void rebuildJournal() throws IOException { - if (journalWriter != null) { - journalWriter.close(); - } - - Writer writer = new BufferedWriter( - new OutputStreamWriter(new FileOutputStream(journalFileTmp), Util.US_ASCII)); - try { - writer.write(MAGIC); - writer.write("\n"); - writer.write(VERSION_1); - writer.write("\n"); - writer.write(Integer.toString(appVersion)); - writer.write("\n"); - writer.write(Integer.toString(valueCount)); - writer.write("\n"); - writer.write("\n"); - - for (Entry entry : lruEntries.values()) { - if (entry.currentEditor != null) { - writer.write(DIRTY + ' ' + entry.key + '\n'); - } else { - writer.write(CLEAN + ' ' + entry.key + entry.getLengths() + '\n'); - } - } - } finally { - writer.close(); - } - - if (journalFile.exists()) { - renameTo(journalFile, journalFileBackup, true); - } - renameTo(journalFileTmp, journalFile, false); - journalFileBackup.delete(); - - journalWriter = new BufferedWriter( - new OutputStreamWriter(new FileOutputStream(journalFile, true), Util.US_ASCII)); - } - - private static void deleteIfExists(File file) throws IOException { - if (file.exists() && !file.delete()) { - throw new IOException(); - } - } - - private static void renameTo(File from, File to, boolean deleteDestination) throws IOException { - if (deleteDestination) { - deleteIfExists(to); - } - if (!from.renameTo(to)) { - throw new IOException(); - } - } - - /** - * Returns a snapshot of the entry named {@code key}, or null if it doesn't - * exist is not currently readable. If a value is returned, it is moved to - * the head of the LRU queue. - */ - public synchronized Snapshot get(String key) throws IOException { - checkNotClosed(); - validateKey(key); - Entry entry = lruEntries.get(key); - if (entry == null) { - return null; - } - - if (!entry.readable) { - return null; - } - - // Open all streams eagerly to guarantee that we see a single published - // snapshot. If we opened streams lazily then the streams could come - // from different edits. - File[] files = new File[valueCount]; - InputStream[] ins = new InputStream[valueCount]; - try { - File file; - for (int i = 0; i < valueCount; i++) { - file = entry.getCleanFile(i); - files[i] = file; - ins[i] = new FileInputStream(file); - } - } catch (FileNotFoundException e) { - // A file must have been deleted manually! - for (int i = 0; i < valueCount; i++) { - if (ins[i] != null) { - Util.closeQuietly(ins[i]); - } else { - break; - } - } - return null; - } - - redundantOpCount++; - journalWriter.append(READ + ' ' + key + '\n'); - if (journalRebuildRequired()) { - executorService.submit(cleanupCallable); - } - - return new Snapshot(key, entry.sequenceNumber, files, ins, entry.lengths); - } - - /** - * Returns an editor for the entry named {@code key}, or null if another - * edit is in progress. - */ - public Editor edit(String key) throws IOException { - return edit(key, ANY_SEQUENCE_NUMBER); - } - - private synchronized Editor edit(String key, long expectedSequenceNumber) throws IOException { - checkNotClosed(); - validateKey(key); - Entry entry = lruEntries.get(key); - if (expectedSequenceNumber != ANY_SEQUENCE_NUMBER && (entry == null - || entry.sequenceNumber != expectedSequenceNumber)) { - return null; // Snapshot is stale. - } - if (entry == null) { - entry = new Entry(key); - lruEntries.put(key, entry); - } else if (entry.currentEditor != null) { - return null; // Another edit is in progress. - } - - Editor editor = new Editor(entry); - entry.currentEditor = editor; - - // Flush the journal before creating files to prevent file leaks. - journalWriter.write(DIRTY + ' ' + key + '\n'); - journalWriter.flush(); - return editor; - } - - /** Returns the directory where this cache stores its data. */ - public File getDirectory() { - return directory; - } - - /** - * Returns the maximum number of bytes that this cache should use to store - * its data. - */ - public synchronized long getMaxSize() { - return maxSize; - } - - /** Returns the maximum number of files that this cache should store */ - public synchronized int getMaxFileCount() { - return maxFileCount; - } - - /** - * Changes the maximum number of bytes the cache can store and queues a job - * to trim the existing store, if necessary. - */ - public synchronized void setMaxSize(long maxSize) { - this.maxSize = maxSize; - executorService.submit(cleanupCallable); - } - - /** - * Returns the number of bytes currently being used to store the values in - * this cache. This may be greater than the max size if a background - * deletion is pending. - */ - public synchronized long size() { - return size; - } - - /** - * Returns the number of files currently being used to store the values in - * this cache. This may be greater than the max file count if a background - * deletion is pending. - */ - public synchronized long fileCount() { - return fileCount; - } - - private synchronized void completeEdit(Editor editor, boolean success) throws IOException { - Entry entry = editor.entry; - if (entry.currentEditor != editor) { - throw new IllegalStateException(); - } - - // If this edit is creating the entry for the first time, every index must have a value. - if (success && !entry.readable) { - for (int i = 0; i < valueCount; i++) { - if (!editor.written[i]) { - editor.abort(); - throw new IllegalStateException("Newly created entry didn't create value for index " + i); - } - if (!entry.getDirtyFile(i).exists()) { - editor.abort(); - return; - } - } - } - - for (int i = 0; i < valueCount; i++) { - File dirty = entry.getDirtyFile(i); - if (success) { - if (dirty.exists()) { - File clean = entry.getCleanFile(i); - dirty.renameTo(clean); - long oldLength = entry.lengths[i]; - long newLength = clean.length(); - entry.lengths[i] = newLength; - size = size - oldLength + newLength; - fileCount++; - } - } else { - deleteIfExists(dirty); - } - } - - redundantOpCount++; - entry.currentEditor = null; - if (entry.readable | success) { - entry.readable = true; - journalWriter.write(CLEAN + ' ' + entry.key + entry.getLengths() + '\n'); - if (success) { - entry.sequenceNumber = nextSequenceNumber++; - } - } else { - lruEntries.remove(entry.key); - journalWriter.write(REMOVE + ' ' + entry.key + '\n'); - } - journalWriter.flush(); - - if (size > maxSize || fileCount > maxFileCount || journalRebuildRequired()) { - executorService.submit(cleanupCallable); - } - } - - /** - * We only rebuild the journal when it will halve the size of the journal - * and eliminate at least 2000 ops. - */ - private boolean journalRebuildRequired() { - final int redundantOpCompactThreshold = 2000; - return redundantOpCount >= redundantOpCompactThreshold // - && redundantOpCount >= lruEntries.size(); - } - - /** - * Drops the entry for {@code key} if it exists and can be removed. Entries - * actively being edited cannot be removed. - * - * @return true if an entry was removed. - */ - public synchronized boolean remove(String key) throws IOException { - checkNotClosed(); - validateKey(key); - Entry entry = lruEntries.get(key); - if (entry == null || entry.currentEditor != null) { - return false; - } - - for (int i = 0; i < valueCount; i++) { - File file = entry.getCleanFile(i); - if (file.exists() && !file.delete()) { - throw new IOException("failed to delete " + file); - } - size -= entry.lengths[i]; - fileCount--; - entry.lengths[i] = 0; - } - - redundantOpCount++; - journalWriter.append(REMOVE + ' ' + key + '\n'); - lruEntries.remove(key); - - if (journalRebuildRequired()) { - executorService.submit(cleanupCallable); - } - - return true; - } - - /** Returns true if this cache has been closed. */ - public synchronized boolean isClosed() { - return journalWriter == null; - } - - private void checkNotClosed() { - if (journalWriter == null) { - throw new IllegalStateException("cache is closed"); - } - } - - /** Force buffered operations to the filesystem. */ - public synchronized void flush() throws IOException { - checkNotClosed(); - trimToSize(); - trimToFileCount(); - journalWriter.flush(); - } - - /** Closes this cache. Stored values will remain on the filesystem. */ - public synchronized void close() throws IOException { - if (journalWriter == null) { - return; // Already closed. - } - for (Entry entry : new ArrayList(lruEntries.values())) { - if (entry.currentEditor != null) { - entry.currentEditor.abort(); - } - } - trimToSize(); - trimToFileCount(); - journalWriter.close(); - journalWriter = null; - } - - private void trimToSize() throws IOException { - while (size > maxSize) { - Map.Entry toEvict = lruEntries.entrySet().iterator().next(); - remove(toEvict.getKey()); - } - } - - private void trimToFileCount() throws IOException { - while (fileCount > maxFileCount) { - Map.Entry toEvict = lruEntries.entrySet().iterator().next(); - remove(toEvict.getKey()); - } - } - - /** - * Closes the cache and deletes all of its stored values. This will delete - * all files in the cache directory including files that weren't created by - * the cache. - */ - public void delete() throws IOException { - close(); - Util.deleteContents(directory); - } - - private void validateKey(String key) { - Matcher matcher = LEGAL_KEY_PATTERN.matcher(key); - if (!matcher.matches()) { - throw new IllegalArgumentException("keys must match regex [a-z0-9_-]{1,64}: \"" + key + "\""); - } - } - - private static String inputStreamToString(InputStream in) throws IOException { - return Util.readFully(new InputStreamReader(in, Util.UTF_8)); - } - - /** A snapshot of the values for an entry. */ - public final class Snapshot implements Closeable { - private final String key; - private final long sequenceNumber; - private File[] files; - private final InputStream[] ins; - private final long[] lengths; - - private Snapshot(String key, long sequenceNumber, File[] files, InputStream[] ins, long[] lengths) { - this.key = key; - this.sequenceNumber = sequenceNumber; - this.files = files; - this.ins = ins; - this.lengths = lengths; - } - - /** - * Returns an editor for this snapshot's entry, or null if either the - * entry has changed since this snapshot was created or if another edit - * is in progress. - */ - public Editor edit() throws IOException { - return DiskLruCache.this.edit(key, sequenceNumber); - } - - /** Returns file with the value for {@code index}. */ - public File getFile(int index) { - return files[index]; - } - - /** Returns the unbuffered stream with the value for {@code index}. */ - public InputStream getInputStream(int index) { - return ins[index]; - } - - /** Returns the string value for {@code index}. */ - public String getString(int index) throws IOException { - return inputStreamToString(getInputStream(index)); - } - - /** Returns the byte length of the value for {@code index}. */ - public long getLength(int index) { - return lengths[index]; - } - - public void close() { - for (InputStream in : ins) { - Util.closeQuietly(in); - } - } - } - - private static final OutputStream NULL_OUTPUT_STREAM = new OutputStream() { - @Override - public void write(int b) throws IOException { - // Eat all writes silently. Nom nom. - } - }; - - /** Edits the values for an entry. */ - public final class Editor { - private final Entry entry; - private final boolean[] written; - private boolean hasErrors; - private boolean committed; - - private Editor(Entry entry) { - this.entry = entry; - this.written = (entry.readable) ? null : new boolean[valueCount]; - } - - /** - * Returns an unbuffered input stream to read the last committed value, - * or null if no value has been committed. - */ - public InputStream newInputStream(int index) throws IOException { - synchronized (DiskLruCache.this) { - if (entry.currentEditor != this) { - throw new IllegalStateException(); - } - if (!entry.readable) { - return null; - } - try { - return new FileInputStream(entry.getCleanFile(index)); - } catch (FileNotFoundException e) { - return null; - } - } - } - - /** - * Returns the last committed value as a string, or null if no value - * has been committed. - */ - public String getString(int index) throws IOException { - InputStream in = newInputStream(index); - return in != null ? inputStreamToString(in) : null; - } - - /** - * Returns a new unbuffered output stream to write the value at - * {@code index}. If the underlying output stream encounters errors - * when writing to the filesystem, this edit will be aborted when - * {@link #commit} is called. The returned output stream does not throw - * IOExceptions. - */ - public OutputStream newOutputStream(int index) throws IOException { - synchronized (DiskLruCache.this) { - if (entry.currentEditor != this) { - throw new IllegalStateException(); - } - if (!entry.readable) { - written[index] = true; - } - File dirtyFile = entry.getDirtyFile(index); - FileOutputStream outputStream; - try { - outputStream = new FileOutputStream(dirtyFile); - } catch (FileNotFoundException e) { - // Attempt to recreate the cache directory. - directory.mkdirs(); - try { - outputStream = new FileOutputStream(dirtyFile); - } catch (FileNotFoundException e2) { - // We are unable to recover. Silently eat the writes. - return NULL_OUTPUT_STREAM; - } - } - return new FaultHidingOutputStream(outputStream); - } - } - - /** Sets the value at {@code index} to {@code value}. */ - public void set(int index, String value) throws IOException { - Writer writer = null; - try { - writer = new OutputStreamWriter(newOutputStream(index), Util.UTF_8); - writer.write(value); - } finally { - Util.closeQuietly(writer); - } - } - - /** - * Commits this edit so it is visible to readers. This releases the - * edit lock so another edit may be started on the same key. - */ - public void commit() throws IOException { - if (hasErrors) { - completeEdit(this, false); - remove(entry.key); // The previous entry is stale. - } else { - completeEdit(this, true); - } - committed = true; - } - - /** - * Aborts this edit. This releases the edit lock so another edit may be - * started on the same key. - */ - public void abort() throws IOException { - completeEdit(this, false); - } - - public void abortUnlessCommitted() { - if (!committed) { - try { - abort(); - } catch (IOException ignored) { - } - } - } - - private class FaultHidingOutputStream extends FilterOutputStream { - private FaultHidingOutputStream(OutputStream out) { - super(out); - } - - @Override public void write(int oneByte) { - try { - out.write(oneByte); - } catch (IOException e) { - hasErrors = true; - } - } - - @Override public void write(byte[] buffer, int offset, int length) { - try { - out.write(buffer, offset, length); - } catch (IOException e) { - hasErrors = true; - } - } - - @Override public void close() { - try { - out.close(); - } catch (IOException e) { - hasErrors = true; - } - } - - @Override public void flush() { - try { - out.flush(); - } catch (IOException e) { - hasErrors = true; - } - } - } - } - - private final class Entry { - private final String key; - - /** Lengths of this entry's files. */ - private final long[] lengths; - - /** True if this entry has ever been published. */ - private boolean readable; - - /** The ongoing edit or null if this entry is not being edited. */ - private Editor currentEditor; - - /** The sequence number of the most recently committed edit to this entry. */ - private long sequenceNumber; - - private Entry(String key) { - this.key = key; - this.lengths = new long[valueCount]; - } - - public String getLengths() throws IOException { - StringBuilder result = new StringBuilder(); - for (long size : lengths) { - result.append(' ').append(size); - } - return result.toString(); - } - - /** Set lengths using decimal numbers like "10123". */ - private void setLengths(String[] strings) throws IOException { - if (strings.length != valueCount) { - throw invalidLengths(strings); - } - - try { - for (int i = 0; i < strings.length; i++) { - lengths[i] = Long.parseLong(strings[i]); - } - } catch (NumberFormatException e) { - throw invalidLengths(strings); - } - } - - private IOException invalidLengths(String[] strings) throws IOException { - throw new IOException("unexpected journal line: " + java.util.Arrays.toString(strings)); - } - - public File getCleanFile(int i) { - return new File(directory, key + "" + i); - } - - public File getDirtyFile(int i) { - return new File(directory, key + "" + i + ".tmp"); - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/DiskLruCacheManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/DiskLruCacheManager.java deleted file mode 100644 index 424c5dce56..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/DiskLruCacheManager.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.mogo.och.taxi.passenger.utils.blur; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.text.TextUtils; - -import java.io.InputStream; -import java.io.OutputStream; -import java.math.BigInteger; -import java.security.MessageDigest; - -/******************************************************************************* - * Description: 用于缓存经过高斯模糊的图片 - * - * Author: Freeman - * - * Date: 2018/9/4 - * - * Copyright: all rights reserved by Freeman. - *******************************************************************************/ -public class DiskLruCacheManager { - - private DiskLruCache diskLruCache; - private static DiskLruCacheManager instance; - - private final int MAX_CACHE_SIZE = 64 * 1024 * 1024; - - private DiskLruCacheManager(Context context) { - try { - diskLruCache = DiskLruCache.open(context.getCacheDir(), 1, 1, - MAX_CACHE_SIZE, Integer.MAX_VALUE); - } catch (Exception e) { - e.printStackTrace(System.err); - } - } - - public static DiskLruCacheManager getInstance(Context context) { - if (instance == null) { - synchronized (DiskLruCacheManager.class) { - if (instance == null) { - instance = new DiskLruCacheManager(context.getApplicationContext()); - } - } - } - - return instance; - } - - public void put(String url, Bitmap bitmap) { - if (TextUtils.isEmpty(url) || bitmap == null || bitmap.isRecycled()) { - return; - } - - try { - DiskLruCache.Editor editor = diskLruCache.edit(getKey(url)); - OutputStream outputStream = editor.newOutputStream(0); - if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream)) { - editor.commit(); - } - diskLruCache.flush(); - } catch (Exception e) { - e.printStackTrace(System.err); - } - } - - public Bitmap get(String url) { - try { - DiskLruCache.Snapshot snapshot = diskLruCache.get(getKey(url)); - if (snapshot != null) { - InputStream inputStream = snapshot.getInputStream(0); - return BitmapFactory.decodeStream(inputStream); - } - } catch (Exception e) { - e.printStackTrace(System.err); - } - - return null; - } - - public static String getKey(String url) { - try { - MessageDigest digest = MessageDigest.getInstance("MD5"); - byte[] md5 = digest.digest(url.getBytes()); - BigInteger bigInteger = new BigInteger(1, md5); - return bigInteger.toString(16); - } catch (Exception e) { - e.printStackTrace(System.err); - } - - return null; - } - - public void close() { - try { - diskLruCache.close(); - } catch (Exception e) { - e.printStackTrace(System.err); - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/GlideBlurTransform.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/GlideBlurTransform.java index 8338546d19..de5dd4d9e8 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/GlideBlurTransform.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/GlideBlurTransform.java @@ -4,38 +4,45 @@ import android.content.Context; import android.graphics.Bitmap; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; public class GlideBlurTransform extends BitmapTransformation { private String key; - private Context context; private int blurRadius; - public GlideBlurTransform(Context context, String key, int blurRadius ) { - this.context = context; + public GlideBlurTransform(String key, int blurRadius) { this.key = key; this.blurRadius = blurRadius; } @Override protected Bitmap transform( @NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight ) { - Bitmap lruBitmap = DiskLruCacheManager.getInstance(context).get(key); - if(lruBitmap!=null){ - return lruBitmap; - } Bitmap bitmap = FastBlurUtil.doBlur( toTransform, 1, blurRadius ); - // 缓存高斯模糊图片 - DiskLruCacheManager.getInstance( context ).put( key, bitmap ); return bitmap; } @Override - public void updateDiskCacheKey( MessageDigest messageDigest ) { + public boolean equals(@Nullable Object obj) { + if (obj instanceof GlideBlurTransform) { + return ((GlideBlurTransform) obj).key.equals(key); + } + return false; + } + @Override + public int hashCode() { + return key.hashCode(); + } + + @Override + public void updateDiskCacheKey( MessageDigest messageDigest ) { + messageDigest.update(key.getBytes(StandardCharsets.UTF_8)); } } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/StrictLineReader.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/StrictLineReader.java deleted file mode 100644 index 94f756e38b..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/StrictLineReader.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.mogo.och.taxi.passenger.utils.blur; - -import java.io.ByteArrayOutputStream; -import java.io.Closeable; -import java.io.EOFException; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; - -/** - * Buffers input from an {@link InputStream} for reading lines. - * - *

This class is used for buffered reading of lines. For purposes of this class, a line ends - * with "\n" or "\r\n". End of input is reported by throwing {@code EOFException}. Unterminated - * line at end of input is invalid and will be ignored, the caller may use {@code - * hasUnterminatedLine()} to detect it after catching the {@code EOFException}. - * - *

This class is intended for reading input that strictly consists of lines, such as line-based - * cache entries or cache journal. Unlike the {@link java.io.BufferedReader} which in conjunction - * with {@link java.io.InputStreamReader} provides similar functionality, this class uses different - * end-of-input reporting and a more restrictive definition of a line. - * - *

This class supports only charsets that encode '\r' and '\n' as a single byte with value 13 - * and 10, respectively, and the representation of no other character contains these values. - * We currently check in constructor that the charset is one of US-ASCII, UTF-8 and ISO-8859-1. - * The default charset is US_ASCII. - */ -class StrictLineReader implements Closeable { - private static final byte CR = (byte) '\r'; - private static final byte LF = (byte) '\n'; - - private final InputStream in; - private final Charset charset; - - /* - * Buffered data is stored in {@code buf}. As long as no exception occurs, 0 <= pos <= end - * and the data in the range [pos, end) is buffered for reading. At end of input, if there is - * an unterminated line, we set end == -1, otherwise end == pos. If the underlying - * {@code InputStream} throws an {@code IOException}, end may remain as either pos or -1. - */ - private byte[] buf; - private int pos; - private int end; - - /** - * Constructs a new {@code LineReader} with the specified charset and the default capacity. - * - * @param in the {@code InputStream} to read data from. - * @param charset the charset used to decode data. Only US-ASCII, UTF-8 and ISO-8859-1 are - * supported. - * @throws NullPointerException if {@code in} or {@code charset} is null. - * @throws IllegalArgumentException if the specified charset is not supported. - */ - public StrictLineReader(InputStream in, Charset charset) { - this(in, 8192, charset); - } - - /** - * Constructs a new {@code LineReader} with the specified capacity and charset. - * - * @param in the {@code InputStream} to read data from. - * @param capacity the capacity of the buffer. - * @param charset the charset used to decode data. Only US-ASCII, UTF-8 and ISO-8859-1 are - * supported. - * @throws NullPointerException if {@code in} or {@code charset} is null. - * @throws IllegalArgumentException if {@code capacity} is negative or zero - * or the specified charset is not supported. - */ - public StrictLineReader(InputStream in, int capacity, Charset charset) { - if (in == null || charset == null) { - throw new NullPointerException(); - } - if (capacity < 0) { - throw new IllegalArgumentException("capacity <= 0"); - } - if (!(charset.equals(Util.US_ASCII))) { - throw new IllegalArgumentException("Unsupported encoding"); - } - - this.in = in; - this.charset = charset; - buf = new byte[capacity]; - } - - /** - * Closes the reader by closing the underlying {@code InputStream} and - * marking this reader as closed. - * - * @throws IOException for errors when closing the underlying {@code InputStream}. - */ - public void close() throws IOException { - synchronized (in) { - if (buf != null) { - buf = null; - in.close(); - } - } - } - - /** - * Reads the next line. A line ends with {@code "\n"} or {@code "\r\n"}, - * this end of line marker is not included in the result. - * - * @return the next line from the input. - * @throws IOException for underlying {@code InputStream} errors. - * @throws EOFException for the end of source stream. - */ - public String readLine() throws IOException { - synchronized (in) { - if (buf == null) { - throw new IOException("LineReader is closed"); - } - - // Read more data if we are at the end of the buffered data. - // Though it's an error to read after an exception, we will let {@code fillBuf()} - // throw again if that happens; thus we need to handle end == -1 as well as end == pos. - if (pos >= end) { - fillBuf(); - } - // Try to find LF in the buffered data and return the line if successful. - for (int i = pos; i != end; ++i) { - if (buf[i] == LF) { - int lineEnd = (i != pos && buf[i - 1] == CR) ? i - 1 : i; - String res = new String(buf, pos, lineEnd - pos, charset.name()); - pos = i + 1; - return res; - } - } - - // Let's anticipate up to 80 characters on top of those already read. - ByteArrayOutputStream out = new ByteArrayOutputStream(end - pos + 80) { - @Override - public String toString() { - int length = (count > 0 && buf[count - 1] == CR) ? count - 1 : count; - try { - return new String(buf, 0, length, charset.name()); - } catch (UnsupportedEncodingException e) { - throw new AssertionError(e); // Since we control the charset this will never happen. - } - } - }; - - while (true) { - out.write(buf, pos, end - pos); - // Mark unterminated line in case fillBuf throws EOFException or IOException. - end = -1; - fillBuf(); - // Try to find LF in the buffered data and return the line if successful. - for (int i = pos; i != end; ++i) { - if (buf[i] == LF) { - if (i != pos) { - out.write(buf, pos, i - pos); - } - pos = i + 1; - return out.toString(); - } - } - } - } - } - - /** - * Reads new input data into the buffer. Call only with pos == end or end == -1, - * depending on the desired outcome if the function throws. - */ - private void fillBuf() throws IOException { - int result = in.read(buf, 0, buf.length); - if (result == -1) { - throw new EOFException(); - } - pos = 0; - end = result; - } -} - diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/Util.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/Util.java deleted file mode 100644 index 7d9ad39ccb..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/Util.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.mogo.och.taxi.passenger.utils.blur; - -import java.io.Closeable; -import java.io.File; -import java.io.IOException; -import java.io.Reader; -import java.io.StringWriter; -import java.nio.charset.Charset; - -/** Junk drawer of utility methods. */ -final class Util { - static final Charset US_ASCII = Charset.forName("US-ASCII"); - static final Charset UTF_8 = Charset.forName("UTF-8"); - - private Util() { - } - - static String readFully(Reader reader) throws IOException { - try { - StringWriter writer = new StringWriter(); - char[] buffer = new char[1024]; - int count; - while ((count = reader.read(buffer)) != -1) { - writer.write(buffer, 0, count); - } - return writer.toString(); - } finally { - reader.close(); - } - } - - /** - * Deletes the contents of {@code dir}. Throws an IOException if any file - * could not be deleted, or if {@code dir} is not a readable directory. - */ - static void deleteContents(File dir) throws IOException { - File[] files = dir.listFiles(); - if (files == null) { - throw new IOException("not a readable directory: " + dir); - } - for (File file : files) { - if (file.isDirectory()) { - deleteContents(file); - } - if (!file.delete()) { - throw new IOException("failed to delete file: " + file); - } - } - } - - static void closeQuietly(/*Auto*/Closeable closeable) { - if (closeable != null) { - try { - closeable.close(); - } catch (RuntimeException rethrown) { - throw rethrown; - } catch (Exception ignored) { - } - } - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt index 10f9d251c4..aa31ef190f 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt @@ -3,7 +3,6 @@ package com.mogo.och.taxi.passenger.widget import android.app.Activity import android.content.Context import android.graphics.Color -import android.os.Build import android.util.AttributeSet import android.util.TypedValue import android.view.Gravity @@ -44,7 +43,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { private lateinit var totalTimeTextView: TextView private lateinit var aivStartPlay: AppCompatImageView private lateinit var layoutBottom: ConstraintLayout - lateinit var vPpenLeft: View + private lateinit var vPpenLeft: View private var fullVideoPlayer:ConsultVideoPlayer?=null var smalllPlayer:ConsultVideoPlayer?=null @@ -64,6 +63,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { totalTimeTextView = findViewById(R.id.total) aivStartPlay = findViewById(R.id.aiv_start_play) layoutBottom = findViewById(R.id.layout_bottom) + vPpenLeft = findViewById(R.id.v_open_left) fullscreenButton.setOnClickListener(this) aivStartPlay.setOnClickListener(this) if (mThumbImageViewLayout != null @@ -74,9 +74,11 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_FULL) aivStartPlay.scaleX = 0.8f aivStartPlay.scaleY = 0.8f - vPpenLeft = findViewById(R.id.v_open_left) + } - OverlayLeftViewUtils.dragTarget(vPpenLeft) + private fun addDrageAnchor(){ + vPpenLeft.visibility = VISIBLE + OverlayLeftViewUtils.addDragTarget(vPpenLeft) } override fun getLayoutId(): Int { @@ -178,6 +180,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { when (v?.id) { R.id.fullscreen -> { startWindowFullscreenOwn(context) +// startWindowFullscreen(context) } R.id.aiv_start_play -> { if(currentState==GSYVideoView.CURRENT_STATE_PAUSE){ @@ -351,6 +354,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { gsyVideoPlayer.id = fullId gsyVideoPlayer.isIfCurrentIsFullscreen = true gsyVideoPlayer.setVideoAllCallBack(mVideoAllCallBack) + gsyVideoPlayer.addDrageAnchor() cloneParams(this, gsyVideoPlayer) val frameLayout = FrameLayout(context) if (gsyVideoPlayer.fullscreenButton != null) { diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/activity_video.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/activity_video.xml deleted file mode 100644 index 6d7db62b32..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/activity_video.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_video_show.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_video_show.xml index 8db7c4d559..f417a51bd4 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_video_show.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_video_show.xml @@ -129,6 +129,7 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" + android:visibility="gone" android:layout_width="143px" android:layout_height="308px"/> diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml b/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml index 732e7c8a20..7e394c29f3 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml @@ -40,4 +40,21 @@ @anim/alpha_hide_show + + \ No newline at end of file