diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c0776bf39..f480d7cce 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -54,6 +54,7 @@ + diff --git a/common/build.gradle b/common/build.gradle index 907facb14..fe009a375 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -86,6 +86,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) api files('libs/jcc-bate-0.7.3.jar') compileOnly fileTree(dir: '../libs', include: ['*.aar']) + api 'androidx.activity:activity:1.9.1' api rootProject.ext.dependencies["appcompat-androidx"] api rootProject.ext.dependencies["recyclerview-androidx"] api rootProject.ext.dependencies["cardview-androidx"] diff --git a/common/src/main/java/com/yunbao/common/utils/ProcessImageUtil.java b/common/src/main/java/com/yunbao/common/utils/ProcessImageUtil.java index 541d223c6..9fd1b52ff 100644 --- a/common/src/main/java/com/yunbao/common/utils/ProcessImageUtil.java +++ b/common/src/main/java/com/yunbao/common/utils/ProcessImageUtil.java @@ -3,13 +3,21 @@ package com.yunbao.common.utils; import android.Manifest; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.ImageDecoder; import android.net.Uri; import android.os.Build; import android.provider.MediaStore; + +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.PickVisualMediaRequest; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentActivity; import androidx.core.content.FileProvider; +import com.blankj.utilcode.util.LogUtils; import com.yalantis.ucrop.UCrop; import com.yalantis.ucrop.util.FileUtils; import com.yunbao.common.CommonAppConfig; @@ -39,6 +47,7 @@ public class ProcessImageUtil extends ProcessResultUtil { private ImageResultCallback mResultCallback; private boolean mNeedCrop;//是否需要裁剪 private boolean mNeedGif;//允许gif图 + ActivityResultLauncher launcher; public void setNeedGif(boolean mNeedGif) { this.mNeedGif = mNeedGif; @@ -117,6 +126,19 @@ public class ProcessImageUtil extends ProcessResultUtil { return; } String path = FileUtils.getPath(mContext, intent.getData()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + ImageDecoder.Source source = ImageDecoder.createSource(mContext.getContentResolver(), intent.getData()); + try { + Bitmap bitmap = ImageDecoder.decodeBitmap(source); + path=BitmapUtil.getInstance().saveBitmap(bitmap); + bitmap.recycle(); + } catch (Exception e) { + e.printStackTrace(); + mResultCallback.onFailure(); + return; + } + + } File file = new File(path); if (file.exists()) { mResultCallback.onSuccess(file); @@ -153,6 +175,19 @@ public class ProcessImageUtil extends ProcessResultUtil { } } }; + launcher = ((AppCompatActivity) mContext).registerForActivityResult(new ActivityResultContracts.PickVisualMedia(), new androidx.activity.result.ActivityResultCallback() { + @Override + public void onActivityResult(Uri result) { + LogUtils.e("result:" + result); + if (result == null) { + mAlumbResultCallback.onFailure(); + return; + } + Intent intent = new Intent(); + intent.setData(result); + mAlumbResultCallback.onSuccess(intent); + } + }); } /** @@ -173,15 +208,28 @@ public class ProcessImageUtil extends ProcessResultUtil { /** * 相册获取图片 */ - public void getImageByAlumb() { + public void getImageByAlbum() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + showSystemPick(); + return; + } requestPermissions(mAlumbPermissions, mAlumbPermissionCallback); } - public void getImageByAlumb(boolean needCrop) { + public void getImageByAlbum(boolean needCrop) { this.mNeedCrop = needCrop; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + showSystemPick(); + return; + } requestPermissions(mAlumbPermissions, mAlumbPermissionCallback); } + private void showSystemPick() { + PickVisualMediaRequest.Builder builder = new PickVisualMediaRequest.Builder() + .setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE); + launcher.launch(builder.build()); + } /** * 开启摄像头,执行照相 diff --git a/common/src/main/java/com/yunbao/common/utils/WordUtil.java b/common/src/main/java/com/yunbao/common/utils/WordUtil.java index 657da30c4..a312b6b4e 100644 --- a/common/src/main/java/com/yunbao/common/utils/WordUtil.java +++ b/common/src/main/java/com/yunbao/common/utils/WordUtil.java @@ -35,7 +35,9 @@ public class WordUtil { public static boolean isNewZh() { return IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE - || IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.TRADITIONAL_CHINESE ; + || IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.TRADITIONAL_CHINESE + || IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.CHINESE + || IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.CHINA; } public static String getNewString(int res) { diff --git a/dependencies.gradle b/dependencies.gradle index fd32a5d29..740ce8126 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -22,7 +22,7 @@ ext { // "tencent-bugly" : 'com.tencent.bugly:crashreport:2.6.6',//腾讯bugly // "umeng-common" : 'com.umeng.sdk:common:1.5.3',//友盟统计 // "umeng-analytics" : 'com.umeng.sdk:analytics:7.5.3',//友盟统计 - "ucrop" : 'com.github.yalantis:ucrop:2.2.3',//图片裁剪 + "ucrop" : 'com.github.yalantis:ucrop:2.2.9',//图片裁剪 "smartRefreshLayout" : 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-20',//下拉刷新上拉加载 "magicIndicator" : 'com.github.hackware1993:MagicIndicator:1.6.0',//ViewPager指示器 "banner" : 'com.ms:banner:1.0.0',//轮播图 diff --git a/live/src/main/java/com/yunbao/live/adapter/LiveReportAdapter.java b/live/src/main/java/com/yunbao/live/adapter/LiveReportAdapter.java index 129445c10..052e063fa 100644 --- a/live/src/main/java/com/yunbao/live/adapter/LiveReportAdapter.java +++ b/live/src/main/java/com/yunbao/live/adapter/LiveReportAdapter.java @@ -237,7 +237,7 @@ public class LiveReportAdapter extends RecyclerView.Adapter { if (tag == R.string.camera) { mImageUtil.getImageByCamera(); } else { - mImageUtil.getImageByAlumb(); + mImageUtil.getImageByAlbum(); } } }); diff --git a/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java index efdacdffc..6def839ff 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java @@ -691,7 +691,7 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl */ private void setAvatar() { if (mLiveSdk == Constants.LIVE_SDK_TX) { - mImageUtil.getImageByAlumb(); + mImageUtil.getImageByAlbum(); } else { DialogUitl.showStringArrayDialog(mContext, new Integer[]{ R.string.camera, R.string.alumb}, new DialogUitl.StringArrayDialogCallback() { @@ -700,7 +700,7 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl if (tag == R.string.camera) { mImageUtil.getImageByCamera(); } else { - mImageUtil.getImageByAlumb(); + mImageUtil.getImageByAlbum(); } } }); diff --git a/live/src/main/java/com/yunbao/live/views/LiveNewReadySwViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveNewReadySwViewHolder.java index 3d949e264..0be3d139a 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveNewReadySwViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveNewReadySwViewHolder.java @@ -673,7 +673,7 @@ public class LiveNewReadySwViewHolder extends AbsViewHolder implements View.OnCl */ private void setAvatar() { if (mLiveSdk == Constants.LIVE_SDK_TX) { - mImageUtil.getImageByAlumb(); + mImageUtil.getImageByAlbum(true); } else { DialogUitl.showStringArrayDialog(mContext, new Integer[]{ R.string.camera, R.string.alumb}, new DialogUitl.StringArrayDialogCallback() { @@ -682,7 +682,7 @@ public class LiveNewReadySwViewHolder extends AbsViewHolder implements View.OnCl if (tag == R.string.camera) { mImageUtil.getImageByCamera(); } else { - mImageUtil.getImageByAlumb(); + mImageUtil.getImageByAlbum(true); } } }); diff --git a/live/src/main/java/com/yunbao/live/views/LiveReadyRyViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveReadyRyViewHolder.java index 8d44d530f..6e26b6276 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveReadyRyViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveReadyRyViewHolder.java @@ -35,7 +35,6 @@ import com.yunbao.live.R; import com.yunbao.live.activity.LiveActivity; import com.yunbao.live.activity.LiveChooseClassActivity; import com.yunbao.live.activity.LiveRyAnchorActivity; -import com.yunbao.live.activity.LiveRyAnchorActivity; import com.yunbao.live.adapter.LiveReadyShareAdapter; import com.yunbao.common.bean.LiveRoomTypeBean; import com.yunbao.live.dialog.LiveRoomTypeDialogFragment; @@ -262,7 +261,7 @@ public class LiveReadyRyViewHolder extends AbsViewHolder implements View.OnClick */ private void setAvatar() { if (mLiveSdk == Constants.LIVE_SDK_TX) { - mImageUtil.getImageByAlumb(); + mImageUtil.getImageByAlbum(); } else { DialogUitl.showStringArrayDialog(mContext, new Integer[]{ R.string.camera, R.string.alumb}, new DialogUitl.StringArrayDialogCallback() { @@ -271,7 +270,7 @@ public class LiveReadyRyViewHolder extends AbsViewHolder implements View.OnClick if (tag == R.string.camera) { mImageUtil.getImageByCamera(); } else { - mImageUtil.getImageByAlumb(); + mImageUtil.getImageByAlbum(); } } }); diff --git a/live/src/main/java/com/yunbao/live/views/LiveReadyViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveReadyViewHolder.java index a19123a46..6f88ab017 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveReadyViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveReadyViewHolder.java @@ -285,7 +285,7 @@ public class LiveReadyViewHolder extends AbsViewHolder implements View.OnClickLi */ private void setAvatar() { if (mLiveSdk == Constants.LIVE_SDK_TX) { - mImageUtil.getImageByAlumb(); + mImageUtil.getImageByAlbum(); } else { DialogUitl.showStringArrayDialog(mContext, new Integer[]{ R.string.camera, R.string.alumb}, new DialogUitl.StringArrayDialogCallback() { @@ -294,7 +294,7 @@ public class LiveReadyViewHolder extends AbsViewHolder implements View.OnClickLi if (tag == R.string.camera) { mImageUtil.getImageByCamera(); } else { - mImageUtil.getImageByAlumb(); + mImageUtil.getImageByAlbum(); } } }); diff --git a/main/src/main/java/com/yunbao/main/activity/CompleteUserInfoActivity.java b/main/src/main/java/com/yunbao/main/activity/CompleteUserInfoActivity.java index b6328db14..a1281e664 100644 --- a/main/src/main/java/com/yunbao/main/activity/CompleteUserInfoActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/CompleteUserInfoActivity.java @@ -218,7 +218,7 @@ public class CompleteUserInfoActivity extends AbsActivity { if (isCamera) { cameraUtil.getImageByCamera(); } else { - cameraUtil.getImageByAlumb(); + cameraUtil.getImageByAlbum(); } }); new XPopup.Builder(mContext).asCustom(userAvatarPopup).show(); diff --git a/main/src/main/java/com/yunbao/main/activity/EditProfileActivity.java b/main/src/main/java/com/yunbao/main/activity/EditProfileActivity.java index 23e020744..5bde4bb94 100644 --- a/main/src/main/java/com/yunbao/main/activity/EditProfileActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/EditProfileActivity.java @@ -546,7 +546,7 @@ public class EditProfileActivity extends AbsActivity { if (tag == R.string.camera) { mImageUtil.getImageByCamera(); } else if (tag == R.string.alumb) { - mImageUtil.getImageByAlumb(); + mImageUtil.getImageByAlbum(true); } else { RouteUtil.forwardUserAvatarSelect(); } diff --git a/main/src/main/java/com/yunbao/main/activity/FeedbackEditActivity.java b/main/src/main/java/com/yunbao/main/activity/FeedbackEditActivity.java index 61a3df228..0e654e3a7 100644 --- a/main/src/main/java/com/yunbao/main/activity/FeedbackEditActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/FeedbackEditActivity.java @@ -33,8 +33,6 @@ import com.yunbao.main.R; import java.io.File; import java.util.Locale; -import java.util.regex.Matcher; -import java.util.regex.Pattern; @Route(path = RouteUtil.PATH_FEEDBACK_EDIT_ACTIVITY) public class FeedbackEditActivity extends AbsActivity { @@ -299,7 +297,7 @@ public class FeedbackEditActivity extends AbsActivity { loadingDialog = DialogUitl.loadingDialog(mContext); loadingDialog.show(); if (tag == 1) { - imageUtil.getImageByAlumb(false); + imageUtil.getImageByAlbum(false); } else { imageUtil.getImageByCamera(false); } diff --git a/main/src/main/java/com/yunbao/main/activity/MainActivity.java b/main/src/main/java/com/yunbao/main/activity/MainActivity.java index 2305ea97f..254cb9766 100644 --- a/main/src/main/java/com/yunbao/main/activity/MainActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MainActivity.java @@ -41,6 +41,7 @@ import androidx.viewpager.widget.ViewPager; import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.blankj.utilcode.util.LogUtils; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.jakewharton.rxbinding3.view.RxView; @@ -137,7 +138,7 @@ import com.yunbao.main.views.MainHomeViewHolder; import com.yunbao.main.views.MainMeViewHolder; import com.yunbao.main.views.MainMessageViewHolder; import com.yunbao.video.utils.VideoStorge; - +import com.yunbao.common.CommonAppContext; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -224,7 +225,6 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene super.create(); getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); getWindow().setSharedElementEnterTransition(new FullAdToBannerTransition(1, 0.4f, new DecelerateInterpolator())); - } @Override @@ -235,6 +235,11 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene @Override protected void main() { + LogUtils.e("MainActivity", + "语言:"+IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage(), + "测试文本:"+getString(R.string.hot) + ); + ToastUtil.showDebug("打包时间:"+CommonAppConfig.BUILD_TIME+"\n系统语言:"+IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage()); //初始化声网 SWAuManager.get().initRtcEngine(this); ActivityCompat.postponeEnterTransition(this); @@ -352,6 +357,8 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene frameLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); mViewList.add(frameLayout); } + mainHomeComViewHolder = new MainHomeComViewHolder(mContext, MainActivity.this, mViewList.get(0)); + mViewPager.setAdapter(new ViewPagerAdapter(mViewList)); mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override @@ -1281,7 +1288,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene return; } if (position == 0) { - mainHomeComViewHolder = new MainHomeComViewHolder(mContext, MainActivity.this, parent); + //mainHomeComViewHolder = new MainHomeComViewHolder(mContext, MainActivity.this, parent); vh = mainHomeComViewHolder; } else if (position == 1) { mainHomeViewHolder = new MainHomeViewHolder(mContext, parent); diff --git a/main/src/main/java/com/yunbao/main/activity/MessageHiConfigActivity.java b/main/src/main/java/com/yunbao/main/activity/MessageHiConfigActivity.java index b8835eeb1..e823d6a07 100644 --- a/main/src/main/java/com/yunbao/main/activity/MessageHiConfigActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MessageHiConfigActivity.java @@ -409,7 +409,7 @@ public class MessageHiConfigActivity extends AbsActivity { } } }); - imageUtil.getImageByAlumb(); + imageUtil.getImageByAlbum(); loading = DialogUitl.loadingDialog(mContext); loading.show(); } diff --git a/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity.java b/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity.java index 3f9271639..ce9e2b291 100644 --- a/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity.java @@ -586,7 +586,7 @@ public class MyWebViewActivity extends AbsActivity { if (tag == com.yunbao.main.R.string.camera) { mImageUtil.getImageByCamera(); } else { - mImageUtil.getImageByAlumb(); + mImageUtil.getImageByAlbum(); } } }); diff --git a/main/src/main/java/com/yunbao/main/activity/OneLoginActivity.java b/main/src/main/java/com/yunbao/main/activity/OneLoginActivity.java index eade89493..c862ccf60 100644 --- a/main/src/main/java/com/yunbao/main/activity/OneLoginActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/OneLoginActivity.java @@ -49,7 +49,7 @@ public class OneLoginActivity extends AbsActivity { if (tag == R.string.camera) { mImageUtil.getImageByCamera(); } else { - mImageUtil.getImageByAlumb(); + mImageUtil.getImageByAlbum(); } } }); diff --git a/main/src/main/java/com/yunbao/main/dialog/MainStartDialogFragment.java b/main/src/main/java/com/yunbao/main/dialog/MainStartDialogFragment.java index d36f91ea1..c31076a13 100644 --- a/main/src/main/java/com/yunbao/main/dialog/MainStartDialogFragment.java +++ b/main/src/main/java/com/yunbao/main/dialog/MainStartDialogFragment.java @@ -174,7 +174,12 @@ public class MainStartDialogFragment extends AbsDialogFragment implements View.O boolean isAnchor = IMLoginManager.get(mContext).getUserInfo().anchorUserType(); if (isAnchor) { String[] permissions; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + permissions = new String[]{ + Manifest.permission.CAMERA, + Manifest.permission.RECORD_AUDIO + }; + } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU) { permissions = new String[]{ //Manifest.permission.READ_MEDIA_IMAGES, 去掉选择图片的权限,到里面选择封面的时候再去申请 Manifest.permission.CAMERA, @@ -200,7 +205,12 @@ public class MainStartDialogFragment extends AbsDialogFragment implements View.O boolean isAnchor = IMLoginManager.get(mContext).getUserInfo().anchorUserType(); if (isAnchor) { String[] permissions; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + permissions = new String[]{ + Manifest.permission.CAMERA, + Manifest.permission.RECORD_AUDIO + }; + } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU) { permissions = new String[]{ Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.CAMERA, @@ -239,9 +249,9 @@ public class MainStartDialogFragment extends AbsDialogFragment implements View.O JSONObject obj = JSON.parseObject(info[0]); JSONObject obj1 = JSON.parseObject(info1[0]); try { - if(code==201){ //声网 + if (code == 201) { //声网 LiveSwAnchorActivity.forward(mContext, Constants.LIVE_SDK_SW, JSON.parseObject(obj.getString("android"), LiveKsyConfigBean.class)); - }else if(code==200){//融云 + } else if (code == 200) {//融云 LiveRyAnchorActivity.forward(mContext, obj.getIntValue("live_sdk"), JSON.parseObject(obj.getString("android"), LiveKsyConfigBean.class)); } } catch (Exception e) { @@ -316,7 +326,7 @@ public class MainStartDialogFragment extends AbsDialogFragment implements View.O if (i == R.id.btn_close) { } else if (i == R.id.btn_live) { if (isWifiProxy(mContext) || checkVPN((ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE))) { - ToastUtil.show(WordUtil.isNewZh()?"檢測開啓了VPN或者代理,請先關閉VPN或者代理再開播。": + ToastUtil.show(WordUtil.isNewZh() ? "檢測開啓了VPN或者代理,請先關閉VPN或者代理再開播。" : "It is detected that VPN or proxy is turned on. Please turn off VPN or proxy before starting the broadcast."); DebugUtils.runDebugCode(() -> mCallback.onLiveClick()); } else { @@ -332,6 +342,7 @@ public class MainStartDialogFragment extends AbsDialogFragment implements View.O } } } + private boolean isWifiProxy(Context context) { final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH; String proxyAddress; @@ -353,6 +364,7 @@ public class MainStartDialogFragment extends AbsDialogFragment implements View.O boolean isVpnConn = networkInfo == null ? false : networkInfo.isConnected(); return isVpnConn; } + @Override public void onDestroy() { super.onDestroy(); diff --git a/video/src/main/java/com/yunbao/video/views/VideoPlayViewHolder.java b/video/src/main/java/com/yunbao/video/views/VideoPlayViewHolder.java index ca9b69667..94421560e 100644 --- a/video/src/main/java/com/yunbao/video/views/VideoPlayViewHolder.java +++ b/video/src/main/java/com/yunbao/video/views/VideoPlayViewHolder.java @@ -6,6 +6,7 @@ import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.view.animation.AccelerateInterpolator; +import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.DefaultLoadControl;