diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 8ca8c6e35b..bd7c5e4668 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -81,6 +81,7 @@ import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import com.gh.gamecenter.suggest.SuggestSelectFragment; import com.gh.gamecenter.suggest.SuggestType; +import com.google.android.exoplayer2.upstream.cache.Cache; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.halo.assistant.HaloApp; @@ -100,6 +101,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.lang.reflect.Field; import java.util.Enumeration; import java.util.List; import java.util.Timer; @@ -114,6 +116,7 @@ import okhttp3.MediaType; import okhttp3.RequestBody; import okhttp3.ResponseBody; import retrofit2.HttpException; +import tv.danmaku.ijk.media.exo2.ExoSourceManager; import static com.gh.common.util.EntranceUtils.ENTRANCE_BROWSER; import static com.gh.common.util.EntranceUtils.HOST_LAUNCH_SIMULATOR_GAME; @@ -326,6 +329,25 @@ public class MainActivity extends BaseActivity { super.onDestroy(); handler.removeCallbacksAndMessages(null); + releaseExoSourceCache(); + } + + /** + * 由于ExoTransformer中拦截了{@link ExoSourceManager#release}方法, + * 所以需要在app退出的时候手动release + */ + private void releaseExoSourceCache() { + Cache cache = ExoSourceManager.getCacheSingleInstance(HaloApp.getInstance().getApplication(), null); + cache.release(); + try { + Field cacheField = ExoSourceManager.class.getDeclaredField("mCache"); + cacheField.setAccessible(true); + cacheField.set(null, null); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } } private void observeAd() { @@ -339,7 +361,7 @@ public class MainActivity extends BaseActivity { } } }); - + AppExecutor.getUiExecutor().executeWithDelay(() -> hideAd(false), 950); } diff --git a/app/src/main/java/com/gh/gamecenter/home/video/AutomaticVideoView.kt b/app/src/main/java/com/gh/gamecenter/home/video/AutomaticVideoView.kt index 7be420b549..8948fc1eb6 100644 --- a/app/src/main/java/com/gh/gamecenter/home/video/AutomaticVideoView.kt +++ b/app/src/main/java/com/gh/gamecenter/home/video/AutomaticVideoView.kt @@ -11,6 +11,7 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat import com.gh.common.constant.Constants import com.gh.common.runOnIoThread import com.gh.common.runOnUiThread @@ -39,6 +40,7 @@ class AutomaticVideoView @JvmOverloads constructor(context: Context, attrs: Attr private var gameEntity: GameEntity? = null private var placeholderColor: String? = null private var mClickListener: OnClickListener? = null + private var randomPlaceholderColor = 0 override fun getLayoutId(): Int { return R.layout.empty_control_video @@ -47,6 +49,7 @@ class AutomaticVideoView @JvmOverloads constructor(context: Context, attrs: Attr fun setData(entity: GameEntity?, color: String?) { gameEntity = entity placeholderColor = color + setPlaceholderColor(mThumbImageViewLayout, false) } fun startPlayLogic(showMask: Boolean) { @@ -98,7 +101,7 @@ class AutomaticVideoView @JvmOverloads constructor(context: Context, attrs: Attr mMaskDisposable?.dispose() mMaskDisposable = null } - setDetailMaskBackground() + setPlaceholderColor(detailBtn) mMaskDisposable = countDownTimer(5) { finish, _ -> if (finish) { val offset = 44f.dip2px().toFloat() @@ -134,7 +137,7 @@ class AutomaticVideoView @JvmOverloads constructor(context: Context, attrs: Attr } } - private fun setDetailMaskBackground() { + private fun setPlaceholderColor(view: View?, isOnlyTop: Boolean = true) { if (!placeholderColor.isNullOrEmpty()) { try { //去掉透明度 @@ -143,20 +146,30 @@ class AutomaticVideoView @JvmOverloads constructor(context: Context, attrs: Attr } else { placeholderColor } - val drawable = DrawableView.getCornerDrawable(Color.parseColor(color), 0f, 0f, 6f, 6f) - detailBtn?.background = drawable + if (color!!.length < 7) { + setRandomBackground(view, isOnlyTop) + } else { + val topRadius = if (isOnlyTop) 0f else 6f + val drawable = DrawableView.getCornerDrawable(Color.parseColor(color), topRadius, topRadius, 6f, 6f) + view?.background = drawable + } } catch (e: Exception) { - val color = RandomUtils.getRandomPlaceholderColor() - val drawable = DrawableView.getCornerDrawable(color, 0f, 0f, 6f, 6f) - detailBtn?.background = drawable + setRandomBackground(view, isOnlyTop) } } else { - val color = RandomUtils.getRandomPlaceholderColor() - val drawable = DrawableView.getCornerDrawable(color, 0f, 0f, 6f, 6f) - detailBtn?.background = drawable + setRandomBackground(view, isOnlyTop) } } + private fun setRandomBackground(view: View?, isOnlyTop: Boolean = true) { + if (randomPlaceholderColor == 0) { + randomPlaceholderColor = RandomUtils.getRandomPlaceholderColor() + } + val topRadius = if (isOnlyTop) 0f else 6f + val drawable = DrawableView.getCornerDrawable(ContextCompat.getColor(context, randomPlaceholderColor), topRadius, topRadius, 6f, 6f) + view?.background = drawable + } + fun resetDetailMask() { detailBtn?.visibility = View.GONE containerView.setRadius(6f, 6f, 6f, 6f) diff --git a/app/src/main/java/com/gh/gamecenter/video/detail/CustomManager.java b/app/src/main/java/com/gh/gamecenter/video/detail/CustomManager.java index fa2445c203..1718ded1c6 100644 --- a/app/src/main/java/com/gh/gamecenter/video/detail/CustomManager.java +++ b/app/src/main/java/com/gh/gamecenter/video/detail/CustomManager.java @@ -58,7 +58,6 @@ public class CustomManager extends GSYVideoBaseManager { getCustomManager(key).listener().onCompletion(); } getCustomManager(key).releaseMediaPlayer(); - sMap.remove(key); } public static int getVideoManagerSize() { diff --git a/app/src/main/res/layout/empty_control_video.xml b/app/src/main/res/layout/empty_control_video.xml index 84589f6444..f311ed2ae0 100644 --- a/app/src/main/res/layout/empty_control_video.xml +++ b/app/src/main/res/layout/empty_control_video.xml @@ -30,7 +30,6 @@ android:id="@+id/thumb" android:layout_width="0dp" android:layout_height="0dp" - android:background="#000000" android:scaleType="fitCenter" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/buildSrc/src/main/groovy/com/gh/gamecenter/plugin/transform/ExoTransformer.groovy b/buildSrc/src/main/groovy/com/gh/gamecenter/plugin/transform/ExoTransformer.groovy index 7f6bd74a48..927d1a80ad 100644 --- a/buildSrc/src/main/groovy/com/gh/gamecenter/plugin/transform/ExoTransformer.groovy +++ b/buildSrc/src/main/groovy/com/gh/gamecenter/plugin/transform/ExoTransformer.groovy @@ -25,7 +25,7 @@ class ExoTransformer implements Transformer { //必须使用全类名,否则编译会找不到类 def body = ''' int size = com.gh.gamecenter.video.detail.CustomManager.getVideoManagerSize(); - if (size > 1) { + if (size > 0) { android.util.Log.e(\"gh_tag\",\"release:拦截成功\"); return; }