diff --git a/app/build.gradle b/app/build.gradle index 33429fb..9640624 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { applicationId "com.uiui.videoplayer" minSdkVersion 24 targetSdkVersion 28 - versionCode 116 - versionName "1.1.5" + versionCode 117 + versionName "1.1.6" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -146,9 +146,6 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' - //bindView - implementation 'com.jakewharton:butterknife:10.2.3' - annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' //okhttp implementation 'com.squareup.okhttp3:okhttp:4.9.1' //Retrofit @@ -202,5 +199,7 @@ dependencies { implementation 'com.github.hackware1993:MagicIndicator:1.7.0' // for androidx implementation 'com.github.Othershe:CombineBitmap:1.0.5' // implementation 'com.github.wuao:FlycoTabLayout2:Tag1.1.3' - + //autosize会改变第三方view的大小 + //https://github.com/JessYanCoding/AndroidAutoSize + //implementation 'me.jessyan:autosize:1.2.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1862ce1..155bf31 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,19 +12,43 @@ android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> + + + + + + + + + + + android:launchMode="singleTask" + android:screenOrientation="portrait"> + + + + + + + + android:launchMode="singleTask" + android:screenOrientation="portrait" /> + android:launchMode="singleTask" + android:screenOrientation="portrait" /> + android:screenOrientation="portrait" /> + android:screenOrientation="portrait" + android:theme="@style/activity_styles" /> + + + \ No newline at end of file diff --git a/app/src/main/java/com/uiui/videoplayer/activity/main/MainActivity.java b/app/src/main/java/com/uiui/videoplayer/activity/main/MainActivity.java index 2b2f9da..2ea9b04 100644 --- a/app/src/main/java/com/uiui/videoplayer/activity/main/MainActivity.java +++ b/app/src/main/java/com/uiui/videoplayer/activity/main/MainActivity.java @@ -62,7 +62,7 @@ public class MainActivity extends BaseMvvmActivity { +public class MainViewModel extends BaseViewModel { @Override public ActivityMainBinding getVDBinding() { return binding; diff --git a/app/src/main/java/com/uiui/videoplayer/activity/main/land/LandMainActivity.java b/app/src/main/java/com/uiui/videoplayer/activity/main/land/LandMainActivity.java deleted file mode 100644 index 57e54ba..0000000 --- a/app/src/main/java/com/uiui/videoplayer/activity/main/land/LandMainActivity.java +++ /dev/null @@ -1,463 +0,0 @@ -package com.uiui.videoplayer.activity.main.land; - -import android.Manifest; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.os.Build; -import android.util.Log; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; - -import com.uiui.videoplayer.BuildConfig; -import com.uiui.videoplayer.R; -import com.uiui.videoplayer.base.mvp.BaseActivity; -import com.uiui.videoplayer.bean.BaseResponse; -import com.uiui.videoplayer.bean.SpaceInfo; -import com.uiui.videoplayer.fragment.doc.DocFragment; -import com.uiui.videoplayer.fragment.pic.PictureFragment; -import com.uiui.videoplayer.fragment.video.VideoFragment; -import com.uiui.videoplayer.network.NetInterfaceManager; -import com.uiui.videoplayer.utils.JGYUtils; -import com.uiui.videoplayer.utils.ToastUtil; -import com.uiui.videoplayer.utils.Utils; -import com.uiui.videoplayer.utils.VideoUtils; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.core.Observer; -import io.reactivex.rxjava3.disposables.Disposable; -import io.reactivex.rxjava3.schedulers.Schedulers; - -public class LandMainActivity extends BaseActivity { - private static final int REQUEST_PERMISSION_CODE = 200; - - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.cl_pic) - ConstraintLayout cl_pic; - @BindView(R.id.cl_video) - ConstraintLayout cl_video; - @BindView(R.id.cl_doc) - ConstraintLayout cl_doc; - @BindView(R.id.iv_pic) - ImageView iv_pic; - @BindView(R.id.iv_video) - ImageView iv_video; - @BindView(R.id.iv_doc) - ImageView iv_doc; - @BindView(R.id.tv_space) - TextView tv_space; - @BindView(R.id.tv_rank) - TextView tv_rank; - - @BindView(R.id.tv_version) - TextView tv_version; - - private FragmentManager mFragmentManager; - private Fragment[] mFragments; - - String[] permissions = new String[]{ - Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE - }; - - @Override - public int getLayoutId() { - return R.layout.activity_main; - } - - @Override - public boolean setNightMode() { - return true; - } - - @Override - public void initView() { -// getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); -// //注意要清除 FLAG_TRANSLUCENT_STATUS flag -// getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); -// getWindow().setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark)); - ButterKnife.bind(this); - tv_version.setText("版本号:V" + BuildConfig.VERSION_NAME); - iv_back.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - cl_pic.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - switchContent(0); - } - }); - cl_video.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - switchContent(1); - } - }); - cl_doc.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - switchContent(2); - } - }); - mFragmentManager = getSupportFragmentManager(); - mFragments = new Fragment[3]; - switchContent(0); - } - - @Override - public void initData() { - getHomeSpaceInfo(); - } - - @Override - protected void onResume() { - super.onResume(); - checkSelfPermission(); - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == REQUEST_PERMISSION_CODE) { - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - Log.e("TAG", "onRequestPermissionsResult: "); - getThumbnail(); - } else if (grantResults[0] == PackageManager.PERMISSION_DENIED) { - if (ActivityCompat.shouldShowRequestPermissionRationale(LandMainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)) { - ToastUtil.show("需要存储空间权限才能正常使用软件"); - checkSelfPermission(); - } else { - ToastUtil.show("请打开存储空间权限后使用软件"); - Intent intent = new Intent(); - intent.setAction(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - intent.setData(Uri.parse("package:" + this.getPackageName())); - startActivity(intent); - } - } - } - } - - private void checkSelfPermission() { - List mPermissionList = new ArrayList<>(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - for (String s : permissions) { - if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) { - mPermissionList.add(s); - } else { - Log.e("TAG", "checkSelfPermission: "); -// mPresenter.getHomeVideo(); - getThumbnail(); - } - } - if (mPermissionList.size() > 0) {//有权限没有通过,需要申请 - ActivityCompat.requestPermissions(this, permissions, REQUEST_PERMISSION_CODE); - } - } - } - - private void getHomeSpaceInfo() { - NetInterfaceManager.getInstance().getHomeSpaceInfoControl() - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getHomeSpaceInfo", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse spaceInfoBaseResponse) { - Log.e("getHomeSpaceInfo", "onNext: " + spaceInfoBaseResponse); - if (spaceInfoBaseResponse.code == 200) { - SpaceInfo spaceInfo = spaceInfoBaseResponse.data; - String home_video_grade = spaceInfo.getHome_video_grade(); - long quota = spaceInfo.getQuota(); - long use_quota = spaceInfo.getUse_quota(); - tv_rank.setText(home_video_grade); - tv_space.setText(Utils.formatFileSize(use_quota) + "/" + Utils.formatFileSize(quota)); - } else { - tv_rank.setText("普通"); - tv_space.setText("0GB/0GB"); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getHomeSpaceInfo", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getHomeSpaceInfo", "onComplete: "); - } - }); - } - - // 切换显示内容 - public void switchContent(int index) { - switchPic(index); - FragmentTransaction transaction = mFragmentManager.beginTransaction(); - hideFragments(transaction); - try { - switch (index) { - case 0: - if (mFragments[0] == null) { - mFragments[0] = new PictureFragment(); - transaction.add(R.id.content, mFragments[0], 0 + ""); - } else { - transaction.show(mFragments[0]); - } - break; - case 1: - if (mFragments[1] == null) { - mFragments[1] = new VideoFragment(); - transaction.add(R.id.content, mFragments[1], 1 + ""); - } else { - transaction.show(mFragments[1]); - } - break; - case 2: - if (mFragments[2] == null) { - mFragments[2] = new DocFragment(); - transaction.add(R.id.content, mFragments[2], 2 + ""); - } else { - transaction.show(mFragments[2]); - } - break; - default: - } - transaction.commit(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void switchPic(int index) { -// iv_pic.setImageDrawable(getDrawable(R.drawable.home_icon_picture_normal)); -// iv_video.setImageDrawable(getDrawable(R.drawable.home_icon_video_normal)); -// iv_doc.setImageDrawable(getDrawable(R.drawable.home_icon_doc_normal)); -// Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_small); - cl_pic.setBackground(null); - cl_video.setBackground(null); - cl_doc.setBackground(null); - switch (index) { - case 0: -// iv_pic.startAnimation(animation); - iv_pic.setImageDrawable(getDrawable(R.drawable.home_icon_picture_pressed)); - iv_video.setImageDrawable(getDrawable(R.drawable.home_icon_video_normal)); - cl_pic.setBackground(getDrawable(R.drawable.alarm_pressed_background)); - break; - case 1: -// iv_video.startAnimation(animation); - iv_pic.setImageDrawable(getDrawable(R.drawable.home_icon_picture_normal)); - iv_video.setImageDrawable(getDrawable(R.drawable.home_icon_video_pressed)); - cl_video.setBackground(getDrawable(R.drawable.alarm_pressed_background)); - break; - case 2: -// iv_doc.startAnimation(animation); -// iv_doc.setImageDrawable(getDrawable(R.drawable.home_icon_doc_checked)); - cl_doc.setBackground(getDrawable(R.drawable.alarm_pressed_background)); - break; - default: - } - } - - // 将所有的Fragment都置为隐藏状态。 - private void hideFragments(FragmentTransaction transaction) { - if (mFragments != null) { - for (Fragment fragment : mFragments) { - if (fragment != null) { - transaction.hide(fragment); - } - } - } - } - - private void getThumbnail() { - long s1 = System.currentTimeMillis(); - List picFileList = new ArrayList<>(); - List videoFileList = new ArrayList<>(); - String rootPath = JGYUtils.getInstance().getDownLoadPath() + File.separator; - File file = new File(rootPath); - if (file.exists()) { - LinkedList list = new LinkedList(); - File[] files = file.listFiles(); - if (files == null) { - return; - } - for (File file2 : files) { - if (file2.isDirectory()) { - list.add(file2); - } else { - if (VideoUtils.isPicFormat(file2.getAbsolutePath())) { - picFileList.add(file2.getAbsolutePath()); - } else if (VideoUtils.isVideoFormat(file2.getAbsolutePath())) { - videoFileList.add(file2.getAbsolutePath()); - } - } - } - File temp_file; - while (!list.isEmpty()) { - temp_file = list.removeFirst(); - files = temp_file.listFiles(); - if (files == null) { - continue; - } - for (File file2 : files) { - if (file2.isDirectory()) { - list.add(file2); - } else { - if (VideoUtils.isPicFormat(file2.getAbsolutePath())) { - picFileList.add(file2.getAbsolutePath()); - } else if (VideoUtils.isVideoFormat(file2.getAbsolutePath())) { - videoFileList.add(file2.getAbsolutePath()); - } - } - } - } - } else { - Log.e("traverseFolder1", "文件不存在!"); - } - Log.e("ScanTask", "doInBackground: " + "Scan time = " + (System.currentTimeMillis() - s1) + "ms"); - Log.e("getThumbnail", "picFileList: " + picFileList); - Log.e("getThumbnail", "videoFileList: " + videoFileList); - Log.e("getThumbnail", "picFileList size = " + picFileList.size()); - Log.e("getThumbnail", "videoFileList size = " + videoFileList.size()); -// if (picFileList.size() == 0) { -// nv_pic.setImageDrawable(getDrawable(R.drawable.icon_pic)); -// } else { -// nv_pic.setImageDrawable(path2Drawable(picFileList.get(0))); -// } -// if (videoFileList.size() == 0) { -// nv_video.setImageDrawable(getDrawable(R.drawable.icon_video)); -// } else { -// Observable.create(new ObservableOnSubscribe() { -// @Override -// public void subscribe(ObservableEmitter emitter) throws Exception { -// FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever(); -// mmr.setDataSource(videoFileList.get(0)); -// Bitmap bitmap = mmr.getFrameAtTime();//获得视频第一帧的Bitmap对象. -// mmr.release(); -// emitter.onNext(bitmap); -// } -// }).subscribeOn(Schedulers.newThread()) -// .observeOn(AndroidSchedulers.mainThread()) -// .subscribe(new Observer() { -// @Override -// public void onSubscribe(Disposable d) { -// Log.e("VideoResult", "onSubscribe: "); -// } -// -// @Override -// public void onNext(Bitmap result) { -// Log.e("VideoResult", "onNext: " + result); -// nv_video.setImageBitmap(result); -//// Glide.with(nv_video).load(result).error(R.drawable.icon_video).into(nv_video); -// } -// -// @Override -// public void onError(Throwable e) { -// Log.e("VideoResult", "onError: " + e.getMessage()); -// } -// -// @Override -// public void onComplete() { -// Log.e("VideoResult", "onComplete: "); -// } -// }); -// } - Log.e("getThumbnail", "videoFileList size = " + videoFileList.size()); -// CombineBitmap.init(this) -// .setLayoutManager(new DingLayoutManager()) // 必选, 设置图片的组合形式,支持WechatLayoutManager、DingLayoutManager -// .setSize(100) // 必选,组合后Bitmap的尺寸,单位dp -// .setGap(1) // 单个图片之间的距离,单位dp,默认0dp -//// .setGapColor() // 单个图片间距的颜色,默认白色 -//// .setPlaceholder() // 单个图片加载失败的默认显示图片 -// .setUrls(picFileList.toArray(new String[picFileList.size()])) // 要加载的图片url数组 -// .setBitmaps() // 要加载的图片bitmap数组 -// .setResourceIds() // 要加载的图片资源id数组 -// .setImageView(nv_pic) // 直接设置要显示图片的ImageView -// // 设置“子图片”的点击事件,需使用setImageView(),index和图片资源数组的索引对应 -//// .setOnSubItemClickListener(new OnSubItemClickListener() { -//// @Override -//// public void onSubItemClick(int index) { -//// -//// } -//// }) -//// // 加载进度的回调函数,如果不使用setImageView()方法,可在onComplete()完成最终图片的显示 -//// .setProgressListener(new ProgressListener() { -//// @Override -//// public void onStart() { -//// -//// } -//// -//// @Override -//// public void onComplete(Bitmap bitmap) { -//// -//// } -//// }) -// .build(); - -// CombineBitmap.init(this) -// .setLayoutManager(new DingLayoutManager()) // 必选, 设置图片的组合形式,支持WechatLayoutManager、DingLayoutManager -// .setSize(100) // 必选,组合后Bitmap的尺寸,单位dp -// .setGap(1) // 单个图片之间的距离,单位dp,默认0dp -//// .setGapColor() // 单个图片间距的颜色,默认白色 -//// .setPlaceholder() // 单个图片加载失败的默认显示图片 -// .setUrls(videoFileList.toArray(new String[videoFileList.size()])) // 要加载的图片url数组 -// .setBitmaps() // 要加载的图片bitmap数组 -// .setResourceIds() // 要加载的图片资源id数组 -// .setImageView(nv_video) // 直接设置要显示图片的ImageView -// .build(); - } - - - /** - * 将本地图片转换为 Drawable - * - * @param file 文件路径 - * @return - */ - public Drawable path2Drawable(String file) { - if (file == null || file.isEmpty()) { - return null; - } - Drawable drawable = null; - try { - FileInputStream fis = new FileInputStream(file); - Bitmap bitmap = BitmapFactory.decodeStream(fis); - drawable = new BitmapDrawable(getResources(), bitmap); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - - return drawable; - } -} diff --git a/app/src/main/java/com/uiui/videoplayer/activity/pic/GalleryActivity.java b/app/src/main/java/com/uiui/videoplayer/activity/pic/GalleryActivity.java index 4a80ae3..6d966a2 100644 --- a/app/src/main/java/com/uiui/videoplayer/activity/pic/GalleryActivity.java +++ b/app/src/main/java/com/uiui/videoplayer/activity/pic/GalleryActivity.java @@ -1,40 +1,24 @@ package com.uiui.videoplayer.activity.pic; -import androidx.constraintlayout.widget.ConstraintLayout; +import android.view.View; + +import androidx.lifecycle.Observer; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; -import android.view.View; -import android.widget.ImageView; - import com.uiui.videoplayer.R; import com.uiui.videoplayer.adapter.PicAdapter; -import com.uiui.videoplayer.view.BGAGridDivider; -import com.uiui.videoplayer.base.mvp.BaseActivity; +import com.uiui.videoplayer.base.mvvm.BaseMvvmActivity; import com.uiui.videoplayer.bean.PhotoInfo; +import com.uiui.videoplayer.databinding.ActivityGalleryBinding; import com.uiui.videoplayer.utils.ToastUtil; +import com.uiui.videoplayer.view.BGAGridDivider; import java.util.ArrayList; -import butterknife.BindView; -import butterknife.ButterKnife; +public class GalleryActivity extends BaseMvvmActivity { -public class GalleryActivity extends BaseActivity implements GalleryContact.GalleryView { - - @BindView(R.id.swipeRefreshLayout) - SwipeRefreshLayout swipeRefreshLayout; - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - @BindView(R.id.cl_nodata) - ConstraintLayout cl_nodata; - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.iv_refresh) - ImageView iv_refresh; - - private GalleryPresenter mPresenter; private PicAdapter mPicAdapter; private static final int SPAN_COUNT = 3; @@ -49,62 +33,65 @@ public class GalleryActivity extends BaseActivity implements GalleryContact.Gall } @Override - public void initView() { - ButterKnife.bind(this); - mPresenter = new GalleryPresenter(this); - mPresenter.setLifecycle(getLifecycleSubject()); - mPresenter.attachView(this); + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); + } + @Override + public void initView() { GridLayoutManager layoutManager = new GridLayoutManager(this, SPAN_COUNT, LinearLayoutManager.VERTICAL, false); mPicAdapter = new PicAdapter(layoutManager); - recyclerView.setLayoutManager(layoutManager); - recyclerView.addItemDecoration(BGAGridDivider.newInstanceWithSpaceRes(R.dimen.dp_2)); - recyclerView.setAdapter(mPicAdapter); - swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + mViewDataBinding.recyclerView.setLayoutManager(layoutManager); + mViewDataBinding.recyclerView.addItemDecoration(BGAGridDivider.newInstanceWithSpaceRes(R.dimen.dp_2)); + mViewDataBinding.recyclerView.setAdapter(mPicAdapter); + mViewDataBinding.swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { getHomePhoto(); } }); - iv_back.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - iv_refresh.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - getHomePhoto(); - } - }); } @Override public void initData() { + mViewModel.mPhotoInfosData.observe(this, new Observer>() { + @Override + public void onChanged(ArrayList photoInfos) { + mPicAdapter.setPhotoInfos(photoInfos); + if (photoInfos == null || photoInfos.size() == 0) { + mViewDataBinding.clNodata.setVisibility(View.VISIBLE); + mViewDataBinding.recyclerView.setVisibility(View.GONE); + ToastUtil.show("没有数据"); + } else { + mViewDataBinding.clNodata.setVisibility(View.GONE); + mViewDataBinding.recyclerView.setVisibility(View.VISIBLE); + } + } + }); + mViewModel.mCompleteData.observe(this, new Observer() { + @Override + public void onChanged(Boolean aBoolean) { + mViewDataBinding.swipeRefreshLayout.setRefreshing(false); + } + }); getHomePhoto(); } private void getHomePhoto() { - swipeRefreshLayout.setRefreshing(true); - mPresenter.getHomePhoto(); + mViewDataBinding.swipeRefreshLayout.setRefreshing(true); + mViewModel.getHomePhoto(); } - @Override - public void setHomePhoto(ArrayList photoInfos) { - mPicAdapter.setPhotoInfos(photoInfos); - if (photoInfos == null || photoInfos.size() == 0) { - cl_nodata.setVisibility(View.VISIBLE); - recyclerView.setVisibility(View.GONE); - ToastUtil.show("没有数据"); - } else { - cl_nodata.setVisibility(View.GONE); - recyclerView.setVisibility(View.VISIBLE); + public class BtnClick { + public void exit(View view) { + finish(); + } + + public void refresh(View view) { + getHomePhoto(); } } - - @Override - public void getHomePhotoFinish() { - swipeRefreshLayout.setRefreshing(false); - } } diff --git a/app/src/main/java/com/uiui/videoplayer/activity/pic/GalleryContact.java b/app/src/main/java/com/uiui/videoplayer/activity/pic/GalleryContact.java deleted file mode 100644 index 7e993cc..0000000 --- a/app/src/main/java/com/uiui/videoplayer/activity/pic/GalleryContact.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.uiui.videoplayer.activity.pic; - -import com.uiui.videoplayer.base.mvp.BasePresenter; -import com.uiui.videoplayer.base.mvp.BaseView; -import com.uiui.videoplayer.bean.PhotoInfo; - -import java.util.ArrayList; - -public class GalleryContact { - interface Presenter extends BasePresenter { - /*获取视频*/ - void getHomePhoto(); - } - - public interface GalleryView extends BaseView { - void setHomePhoto(ArrayList photoInfos); - void getHomePhotoFinish(); - } -} diff --git a/app/src/main/java/com/uiui/videoplayer/activity/pic/GalleryPresenter.java b/app/src/main/java/com/uiui/videoplayer/activity/pic/GalleryPresenter.java deleted file mode 100644 index 12a4418..0000000 --- a/app/src/main/java/com/uiui/videoplayer/activity/pic/GalleryPresenter.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.uiui.videoplayer.activity.pic; - -import android.content.Context; - -import com.trello.rxlifecycle4.RxLifecycle; -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.uiui.videoplayer.bean.BaseResponse; -import com.uiui.videoplayer.bean.PhotoInfo; -import com.uiui.videoplayer.network.NetInterfaceManager; - -import java.util.ArrayList; -import java.util.List; - -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.core.Observer; -import io.reactivex.rxjava3.disposables.Disposable; -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public class GalleryPresenter implements GalleryContact.Presenter { - - private GalleryContact.GalleryView mView; - private Context mContext; - - public GalleryPresenter(Context context) { - this.mContext = context; - } - - private BehaviorSubject lifecycle; - - public void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - @Override - public void attachView(GalleryContact.GalleryView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - @Override - public void getHomePhoto() { - NetInterfaceManager.getInstance().getHomePhoto(true, getLifecycle(), new NetInterfaceManager.onPhotoCallback() { - @Override - public void setPhotoList(ArrayList photoList) { - mView.setHomePhoto(photoList); - } - - @Override - public void onComplete() { - mView.getHomePhotoFinish(); - } - }); - } -} diff --git a/app/src/main/java/com/uiui/videoplayer/activity/pic/GalleryViewModel.java b/app/src/main/java/com/uiui/videoplayer/activity/pic/GalleryViewModel.java new file mode 100644 index 0000000..503940c --- /dev/null +++ b/app/src/main/java/com/uiui/videoplayer/activity/pic/GalleryViewModel.java @@ -0,0 +1,42 @@ +package com.uiui.videoplayer.activity.pic; + +import androidx.lifecycle.MutableLiveData; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiui.videoplayer.base.mvvm.BaseViewModel; +import com.uiui.videoplayer.bean.PhotoInfo; +import com.uiui.videoplayer.databinding.ActivityGalleryBinding; +import com.uiui.videoplayer.network.NetInterfaceManager; + +import java.util.ArrayList; + +public class GalleryViewModel extends BaseViewModel { + + @Override + public ActivityGalleryBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + public MutableLiveData> mPhotoInfosData = new MutableLiveData<>(); + + public MutableLiveData mCompleteData = new MutableLiveData<>(); + + public void getHomePhoto() { + NetInterfaceManager.getInstance().getHomePhoto(true, getLifecycle(), new NetInterfaceManager.onPhotoCallback() { + @Override + public void setPhotoList(ArrayList photoList) { + mPhotoInfosData.setValue(photoList); + } + + @Override + public void onComplete() { + mCompleteData.setValue(true); + } + }); + } +} diff --git a/app/src/main/java/com/uiui/videoplayer/activity/preview/PreviewActivity.java b/app/src/main/java/com/uiui/videoplayer/activity/preview/PreviewActivity.java index 060af49..37907db 100644 --- a/app/src/main/java/com/uiui/videoplayer/activity/preview/PreviewActivity.java +++ b/app/src/main/java/com/uiui/videoplayer/activity/preview/PreviewActivity.java @@ -5,31 +5,20 @@ import android.graphics.Color; import android.os.Bundle; import android.widget.ImageView; -import androidx.viewpager.widget.ViewPager; - import com.bumptech.glide.Glide; import com.uiui.videoplayer.R; import com.uiui.videoplayer.adapter.PreviewAdapter; -import com.uiui.videoplayer.base.mvp.BaseActivity; -import com.uiui.videoplayer.view.ScaleCircleNavigator; +import com.uiui.videoplayer.base.mvvm.BaseMvvmActivity; import com.uiui.videoplayer.bean.PhotoInfo; -import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; +import com.uiui.videoplayer.databinding.ActivityPreviewBinding; +import com.uiui.videoplayer.view.ScaleCircleNavigator; -import net.lucode.hackware.magicindicator.MagicIndicator; import net.lucode.hackware.magicindicator.ViewPagerHelper; import java.util.ArrayList; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - -public class PreviewActivity extends BaseActivity { - - @BindView(R.id.viewPager) - ViewPager viewPager; - @BindView(R.id.magicIndicator) - MagicIndicator mMagicIndicator; +public class PreviewActivity extends BaseMvvmActivity { private PreviewAdapter mPreviewAdapter; private ScaleCircleNavigator scaleCircleNavigator; @@ -46,20 +35,17 @@ public class PreviewActivity extends BaseActivity { } @Override - public void initView() { - UltimateBarX.statusBar(this) - .transparent() - .fitWindow(false) - .light(true) - .apply(); - UltimateBarX.navigationBar(this) - .transparent() - .light(true) - .apply(); + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); + } - ButterKnife.bind(this); + @Override + public void initView() { mPreviewAdapter = new PreviewAdapter(); - viewPager.setAdapter(mPreviewAdapter); + mViewDataBinding.viewPager.setAdapter(mPreviewAdapter); scaleCircleNavigator = new ScaleCircleNavigator(this); } @@ -78,12 +64,12 @@ public class PreviewActivity extends BaseActivity { } int position = bundle.getInt("position"); setImageViews(photoInfos); - viewPager.setCurrentItem(position); + mViewDataBinding.viewPager.setCurrentItem(position); } private void setImageViews(List photoInfos) { - mMagicIndicator.setNavigator(scaleCircleNavigator); + mViewDataBinding.magicIndicator.setNavigator(scaleCircleNavigator); scaleCircleNavigator.setCircleCount(photoInfos.size()); scaleCircleNavigator.setNormalCircleColor(Color.DKGRAY); scaleCircleNavigator.setSelectedCircleColor(Color.LTGRAY); @@ -93,7 +79,7 @@ public class PreviewActivity extends BaseActivity { } }); - ViewPagerHelper.bind(mMagicIndicator, viewPager); + ViewPagerHelper.bind(mViewDataBinding.magicIndicator, mViewDataBinding.viewPager); List imageViews = new ArrayList<>(); for (PhotoInfo photoInfo : photoInfos) { ImageView image = new ImageView(this); @@ -105,4 +91,6 @@ public class PreviewActivity extends BaseActivity { mPreviewAdapter.setImageViews(imageViews); mPreviewAdapter.notifyDataSetChanged(); } + + } diff --git a/app/src/main/java/com/uiui/videoplayer/activity/preview/PreviewViewModel.java b/app/src/main/java/com/uiui/videoplayer/activity/preview/PreviewViewModel.java new file mode 100644 index 0000000..4aabd65 --- /dev/null +++ b/app/src/main/java/com/uiui/videoplayer/activity/preview/PreviewViewModel.java @@ -0,0 +1,18 @@ +package com.uiui.videoplayer.activity.preview; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiui.videoplayer.base.mvvm.BaseViewModel; +import com.uiui.videoplayer.databinding.ActivityPreviewBinding; + +public class PreviewViewModel extends BaseViewModel { + + @Override + public ActivityPreviewBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiui/videoplayer/activity/privacy/PrivacyActivity.java b/app/src/main/java/com/uiui/videoplayer/activity/privacy/PrivacyActivity.java new file mode 100644 index 0000000..5c6845f --- /dev/null +++ b/app/src/main/java/com/uiui/videoplayer/activity/privacy/PrivacyActivity.java @@ -0,0 +1,90 @@ +package com.uiui.videoplayer.activity.privacy; + +import android.content.Intent; +import android.view.View; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import com.uiui.videoplayer.R; +import com.uiui.videoplayer.base.mvvm.BaseMvvmActivity; +import com.uiui.videoplayer.databinding.ActivityPrivacyaBinding; + +public class PrivacyActivity extends BaseMvvmActivity { + private static final String TAG = "PrivacyActivity"; + + + @Override + public boolean setNightMode() { + return true; + } + + @Override + public boolean setfitWindow() { + return true; + } + + @Override + protected int getLayoutId() { + return R.layout.activity_privacya; + } + + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView() { + WebSettings settings = mViewDataBinding.webView.getSettings(); +// settings.setUseWideViewPort(true); + settings.setJavaScriptEnabled(true); + settings.setAllowFileAccess(true); + settings.setAllowContentAccess(true); + settings.setAllowFileAccessFromFileURLs(true); + settings.setAllowUniversalAccessFromFileURLs(true); + settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + + mViewDataBinding.webView.setWebViewClient(new WebViewClient()); + mViewDataBinding.webView.setWebChromeClient(new WebChromeClient() { + @Override + public void onProgressChanged(WebView view, int newProgress) { + super.onProgressChanged(view, newProgress); + if (newProgress == 100) { + mViewDataBinding.progressBar.setVisibility(View.GONE); + } else { + mViewDataBinding.progressBar.setVisibility(View.VISIBLE); + mViewDataBinding.progressBar.setMax(100); + mViewDataBinding.progressBar.setProgress(newProgress); + } + } + }); + Intent intent = getIntent(); + int contentType = intent.getIntExtra("ContentType", 1); + switch (contentType) { + default: + case 1: + mViewDataBinding.tvTitle.setText("用户协议"); + mViewDataBinding.webView.loadUrl("https://www.uiuios.com/agreement.html?section=1-5"); + break; + + } + + } + + @Override + protected void initData() { + + } + + + public class BtnClick { + public void exit(View view) { + finish(); + } + } +} diff --git a/app/src/main/java/com/uiui/videoplayer/activity/privacy/PrivacyViewModel.java b/app/src/main/java/com/uiui/videoplayer/activity/privacy/PrivacyViewModel.java new file mode 100644 index 0000000..1e235b2 --- /dev/null +++ b/app/src/main/java/com/uiui/videoplayer/activity/privacy/PrivacyViewModel.java @@ -0,0 +1,18 @@ +package com.uiui.videoplayer.activity.privacy; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiui.videoplayer.base.mvvm.BaseViewModel; +import com.uiui.videoplayer.databinding.ActivityPrivacyaBinding; + +public class PrivacyViewModel extends BaseViewModel { + + @Override + public ActivityPrivacyaBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiui/videoplayer/activity/splash/SplashActivity.java b/app/src/main/java/com/uiui/videoplayer/activity/splash/SplashActivity.java new file mode 100644 index 0000000..3932139 --- /dev/null +++ b/app/src/main/java/com/uiui/videoplayer/activity/splash/SplashActivity.java @@ -0,0 +1,92 @@ +package com.uiui.videoplayer.activity.splash; + +import android.content.Intent; +import android.os.Build; +import android.util.Log; + +import androidx.databinding.DataBindingUtil; + +import com.tencent.mmkv.MMKV; +import com.uiui.videoplayer.R; +import com.uiui.videoplayer.activity.main.MainActivity; +import com.uiui.videoplayer.base.BaseDataBindingActivity; +import com.uiui.videoplayer.config.CommonConfig; +import com.uiui.videoplayer.databinding.ActivitySplashBinding; +import com.uiui.videoplayer.dialog.PrivacyPolicyDialog; + +public class SplashActivity extends BaseDataBindingActivity { + private static final String TAG = "SplashActivity"; + + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + private ActivitySplashBinding mBinding; + + @Override + protected void initDataBinding() { + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_splash); + } + + @Override + protected void initView() { + boolean showed = mMMKV.decodeBool(CommonConfig.SHOW_SPLASH_KEY, false); + Log.e(TAG, "initView: showed = " + showed); + boolean agree = mMMKV.decodeBool(CommonConfig.AGREED_THE_PRIVACY_AGREEMENT, false); + Log.e(TAG, "initView: agree = " + agree); + if (showed && agree) { + openMain(); + } else { + showPolicyDialog(); + } + } + + @Override + protected void initData() { + + } + + private PrivacyPolicyDialog mPrivacyPolicyDialog; + + private void showPolicyDialog() { + if (mPrivacyPolicyDialog == null) { + mPrivacyPolicyDialog = new PrivacyPolicyDialog(this); + mPrivacyPolicyDialog.setCancelable(false); + mPrivacyPolicyDialog.setPrivacyPolicyCallback(new PrivacyPolicyDialog.PrivacyPolicyCallback() { + @Override + public void onCancel() { + mPrivacyPolicyDialog.dismiss(); + mPrivacyPolicyDialog = null; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + finishAndRemoveTask(); + } else { + finishAffinity(); + } + android.os.Process.killProcess(android.os.Process.myPid()); + System.exit(0); + } + + @Override + public void onConfirm() { + mMMKV.encode(CommonConfig.SHOW_SPLASH_KEY, true); + mMMKV.encode(CommonConfig.AGREED_THE_PRIVACY_AGREEMENT, true); + mPrivacyPolicyDialog.dismiss(); + mPrivacyPolicyDialog = null; + openMain(); + } + }); + } + if (!mPrivacyPolicyDialog.isShowing()) { + mPrivacyPolicyDialog.show(); + } + } + + private void openMain() { + Intent intent = new Intent(SplashActivity.this, MainActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + public class BtnClick { + + } +} diff --git a/app/src/main/java/com/uiui/videoplayer/activity/ActivityTikTok.java b/app/src/main/java/com/uiui/videoplayer/activity/tiktok/TikTokActivity.java similarity index 69% rename from app/src/main/java/com/uiui/videoplayer/activity/ActivityTikTok.java rename to app/src/main/java/com/uiui/videoplayer/activity/tiktok/TikTokActivity.java index 6d0beff..d949205 100644 --- a/app/src/main/java/com/uiui/videoplayer/activity/ActivityTikTok.java +++ b/app/src/main/java/com/uiui/videoplayer/activity/tiktok/TikTokActivity.java @@ -1,9 +1,8 @@ -package com.uiui.videoplayer.activity; +package com.uiui.videoplayer.activity.tiktok; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.Configuration; -import android.os.Bundle; import android.util.Log; import android.view.MenuItem; import android.view.View; @@ -12,30 +11,30 @@ import android.view.Window; import android.view.WindowManager; import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.OrientationHelper; import androidx.recyclerview.widget.RecyclerView; import com.uiui.videoplayer.CustomJzvd.JzvdStdAssert; import com.uiui.videoplayer.R; import com.uiui.videoplayer.adapter.TikTokRecyclerViewAdapter; -import com.uiui.videoplayer.view.ViewPagerLayoutManager; +import com.uiui.videoplayer.base.mvvm.BaseMvvmActivity; import com.uiui.videoplayer.bean.LocalVideoInfo; +import com.uiui.videoplayer.databinding.ActivityTiktokBinding; import com.uiui.videoplayer.listener.OnViewPagerListener; import com.uiui.videoplayer.utils.SPUtils; import com.uiui.videoplayer.utils.ToastUtil; +import com.uiui.videoplayer.view.ViewPagerLayoutManager; import java.util.ArrayList; import java.util.List; import cn.jzvd.Jzvd; -public class ActivityTikTok extends AppCompatActivity { +public class TikTokActivity extends BaseMvvmActivity { + private static final String TAG = "TikTokActivity"; + + private TikTokRecyclerViewAdapter mTikTokRecyclerViewAdapter; - private static final String TAG = "ActivityTikTok"; - private RecyclerView rvTiktok; - private TikTokRecyclerViewAdapter mAdapter; - private ViewPagerLayoutManager mViewPagerLayoutManager; private int mCurrentPosition = -1; private int position = 0; private List videoPath = new ArrayList<>(); @@ -43,13 +42,28 @@ public class ActivityTikTok extends AppCompatActivity { private int oldOrientation = 0; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public boolean setfitWindow() { + return false; + } + + @Override + protected int getLayoutId() { requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + return R.layout.activity_tiktok; + } - setContentView(R.layout.activity_tiktok); + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView() { Configuration config = getResources().getConfiguration(); oldOrientation = config.orientation; Log.e(TAG, "orientation first:" + oldOrientation); @@ -59,31 +73,30 @@ public class ActivityTikTok extends AppCompatActivity { position = intent.getIntExtra("position", 0); videoPath = intent.getParcelableArrayListExtra("list"); } - rvTiktok = findViewById(R.id.rv_tiktok); - mAdapter = new TikTokRecyclerViewAdapter(this, videoPath); - mAdapter.setVideoCompletListener(() -> { + mTikTokRecyclerViewAdapter = new TikTokRecyclerViewAdapter(this, videoPath); + mTikTokRecyclerViewAdapter.setVideoCompletListener(() -> { if (mCurrentPosition + 1 < videoPath.size()) { - rvTiktok.smoothScrollToPosition(mCurrentPosition + 1); + mViewDataBinding.rvTiktok.smoothScrollToPosition(mCurrentPosition + 1); } else { - int singleLoop = (int) SPUtils.get(ActivityTikTok.this, "loop", 0); + int singleLoop = (int) SPUtils.get(TikTokActivity.this, "loop", 0); if (singleLoop == 0) { ToastUtil.show("播放完成"); finish(); } else { - rvTiktok.scrollToPosition(0); + mViewDataBinding.rvTiktok.scrollToPosition(0); mCurrentPosition = 0; ToastUtil.show("列表结束,开始播放第一个视频"); } } }); - mAdapter.setOrientationChangeListener(new TikTokRecyclerViewAdapter.onOrientationChangeListener() { + mTikTokRecyclerViewAdapter.setOrientationChangeListener(new TikTokRecyclerViewAdapter.onOrientationChangeListener() { @Override public void onOrientationChange() { Configuration config = getResources().getConfiguration(); Log.e(TAG, "orientation onOrientationChange:" + config.orientation); } }); - mAdapter.setGotoFullScreenListener(new TikTokRecyclerViewAdapter.onGotoFullScreenListener() { + mTikTokRecyclerViewAdapter.setGotoFullScreenListener(new TikTokRecyclerViewAdapter.onGotoFullScreenListener() { @Override public void gotoFullScreen() { Configuration config = getResources().getConfiguration(); @@ -91,21 +104,21 @@ public class ActivityTikTok extends AppCompatActivity { Log.e(TAG, "orientation gotoFullScreen:" + config.orientation); } }); - mViewPagerLayoutManager = new ViewPagerLayoutManager(this, OrientationHelper.VERTICAL); - rvTiktok.setLayoutManager(mViewPagerLayoutManager); - rvTiktok.setNestedScrollingEnabled(false); - rvTiktok.setAdapter(mAdapter); - rvTiktok.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + ViewPagerLayoutManager viewPagerLayoutManager = new ViewPagerLayoutManager(this, OrientationHelper.VERTICAL); + mViewDataBinding.rvTiktok.setLayoutManager(viewPagerLayoutManager); + mViewDataBinding.rvTiktok.setNestedScrollingEnabled(false); + mViewDataBinding.rvTiktok.setAdapter(mTikTokRecyclerViewAdapter); + mViewDataBinding.rvTiktok.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { if (onGlobalLayout == -1) { - rvTiktok.scrollToPosition(position); + mViewDataBinding.rvTiktok.scrollToPosition(position); mCurrentPosition = position; onGlobalLayout = 0;//只在第一次进行跳转 } } }); - mViewPagerLayoutManager.setOnViewPagerListener(new OnViewPagerListener() { + viewPagerLayoutManager.setOnViewPagerListener(new OnViewPagerListener() { @Override public void onInitComplete() { //自动播放第一条 @@ -129,7 +142,7 @@ public class ActivityTikTok extends AppCompatActivity { } }); - rvTiktok.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() { + mViewDataBinding.rvTiktok.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() { @Override public void onChildViewAttachedToWindow(View view) { @@ -146,6 +159,12 @@ public class ActivityTikTok extends AppCompatActivity { } } }); + + } + + @Override + protected void initData() { + } @Override @@ -155,7 +174,7 @@ public class ActivityTikTok extends AppCompatActivity { if (oldOrientation != config.orientation) { if (oldOrientation == Configuration.ORIENTATION_LANDSCAPE) { // 设为竖屏 - this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); oldOrientation = Configuration.ORIENTATION_LANDSCAPE; } // 如果当前是竖屏 @@ -171,11 +190,11 @@ public class ActivityTikTok extends AppCompatActivity { } private void autoPlayVideo() { - View child = rvTiktok.getChildAt(0); - if (rvTiktok == null || child == null) { + View child = mViewDataBinding.rvTiktok.getChildAt(0); + if (child == null) { return; } - JzvdStdAssert player = rvTiktok.getChildAt(0).findViewById(R.id.videoplayer); + JzvdStdAssert player = mViewDataBinding.rvTiktok.getChildAt(0).findViewById(R.id.videoplayer); if (player != null) { player.startVideoAfterPreloading(); } @@ -209,11 +228,8 @@ public class ActivityTikTok extends AppCompatActivity { @Override protected void onDestroy() { super.onDestroy(); - if (null != rvTiktok) { - rvTiktok = null; - } - if (null != mAdapter) { - mAdapter = null; + if (null != mTikTokRecyclerViewAdapter) { + mTikTokRecyclerViewAdapter = null; } } } diff --git a/app/src/main/java/com/uiui/videoplayer/activity/tiktok/TikTokViewModel.java b/app/src/main/java/com/uiui/videoplayer/activity/tiktok/TikTokViewModel.java new file mode 100644 index 0000000..92533eb --- /dev/null +++ b/app/src/main/java/com/uiui/videoplayer/activity/tiktok/TikTokViewModel.java @@ -0,0 +1,18 @@ +package com.uiui.videoplayer.activity.tiktok; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiui.videoplayer.base.mvvm.BaseViewModel; +import com.uiui.videoplayer.databinding.ActivityTiktokBinding; + +public class TikTokViewModel extends BaseViewModel { + + @Override + public ActivityTiktokBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiui/videoplayer/activity/video/VideoActivity.java b/app/src/main/java/com/uiui/videoplayer/activity/video/VideoActivity.java index 41a0ce1..97ad5ea 100644 --- a/app/src/main/java/com/uiui/videoplayer/activity/video/VideoActivity.java +++ b/app/src/main/java/com/uiui/videoplayer/activity/video/VideoActivity.java @@ -12,15 +12,12 @@ import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; -import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.SimpleItemAnimator; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; @@ -30,103 +27,33 @@ import com.arialyy.aria.core.task.DownloadTask; import com.google.gson.JsonObject; import com.uiui.videoplayer.R; import com.uiui.videoplayer.adapter.VideoAdapter; -import com.uiui.videoplayer.base.mvp.BaseActivity; -import com.uiui.videoplayer.view.CustomDialog; -import com.uiui.videoplayer.view.RecycleGridLayoutManager; +import com.uiui.videoplayer.base.mvvm.BaseMvvmActivity; import com.uiui.videoplayer.bean.LocalVideoInfo; +import com.uiui.videoplayer.databinding.ActivityVideoBinding; import com.uiui.videoplayer.gson.GsonUtils; import com.uiui.videoplayer.utils.SPUtils; import com.uiui.videoplayer.utils.ToastUtil; import com.uiui.videoplayer.utils.VideoUtils; +import com.uiui.videoplayer.view.CustomDialog; +import com.uiui.videoplayer.view.RecycleGridLayoutManager; import java.io.File; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; +public class VideoActivity extends BaseMvvmActivity { + private static final String TAG = "VideoActivity"; -public class VideoActivity extends BaseActivity implements VideoContact.VideoView { - - private static final String TAG = VideoActivity.class.getSimpleName(); - - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - @BindView(R.id.cl_nodata) - ConstraintLayout cl_nodata; - @BindView(R.id.tv_scan) - TextView tv_scan; - @BindView(R.id.swipeRefreshLayout) - SwipeRefreshLayout refreshLayout; - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.iv_refresh) - ImageView iv_refresh; - - private VideoPresenter mPresenter; - private List paths = new ArrayList<>(); + private List mPaths = new ArrayList<>(); private RecycleGridLayoutManager mManager; - private VideoAdapter adapter; + private VideoAdapter mVideoAdapter; @Override - public void initView() { - ButterKnife.bind(this); - mPresenter = new VideoPresenter(this); - mPresenter.setLifecycle(getLifecycleSubject()); - mPresenter.attachView(this); - - Aria.download(this).register(); - -// initActionBar(); - refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { - @Override - public void onRefresh() { - mPresenter.getHomeVideo(); - } - }); - ((SimpleItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false); - int orientation = getResources().getConfiguration().orientation; - if (orientation == Configuration.ORIENTATION_LANDSCAPE) { - mManager = new RecycleGridLayoutManager(VideoActivity.this, 3); - } else if (orientation == Configuration.ORIENTATION_PORTRAIT) { - mManager = new RecycleGridLayoutManager(VideoActivity.this, 2); - } - recyclerView.setLayoutManager(mManager); - recyclerView.setNestedScrollingEnabled(false); - - ((DefaultItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false); - adapter = new VideoAdapter(VideoActivity.this); - adapter.setOnLongClickListener(new VideoAdapter.onItemLongClickListener() { - @Override - public void onItemLongClick(String path, int position) { - showDialog(path, position); - } - }); - recyclerView.setAdapter(adapter); - iv_back.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - iv_refresh.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - getHomeVideo(); - } - }); + public boolean setNightMode() { + return false; } - @Override - public void initData() { - getHomeVideo(); - } - - private void getHomeVideo(){ - refreshLayout.setRefreshing(true); - mPresenter.getHomeVideo(); - } @Override public int getLayoutId() { @@ -134,8 +61,75 @@ public class VideoActivity extends BaseActivity implements VideoContact.VideoVie } @Override - public boolean setNightMode() { - return true; + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + public void initView() { + Aria.download(this).register(); + +// initActionBar(); + mViewDataBinding.swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + mViewModel.getHomeVideo(); + } + }); + ((SimpleItemAnimator) mViewDataBinding.recyclerView.getItemAnimator()).setSupportsChangeAnimations(false); + int orientation = getResources().getConfiguration().orientation; + if (orientation == Configuration.ORIENTATION_LANDSCAPE) { + mManager = new RecycleGridLayoutManager(VideoActivity.this, 3); + } else if (orientation == Configuration.ORIENTATION_PORTRAIT) { + mManager = new RecycleGridLayoutManager(VideoActivity.this, 2); + } + mViewDataBinding.recyclerView.setLayoutManager(mManager); + mViewDataBinding.recyclerView.setNestedScrollingEnabled(false); + + ((DefaultItemAnimator) mViewDataBinding.recyclerView.getItemAnimator()).setSupportsChangeAnimations(false); + mVideoAdapter = new VideoAdapter(VideoActivity.this); + mVideoAdapter.setOnLongClickListener(new VideoAdapter.onItemLongClickListener() { + @Override + public void onItemLongClick(String path, int position) { + showDialog(path, position); + } + }); + mViewDataBinding.recyclerView.setAdapter(mVideoAdapter); + } + + @Override + public void initData() { + mViewModel.mPhotoInfosData.observe(this, new Observer>() { + @Override + public void onChanged(ArrayList localVideoInfos) { + if (localVideoInfos == null || localVideoInfos.size() == 0) { + mViewDataBinding.clNodata.setVisibility(View.VISIBLE); + mViewDataBinding.recyclerView.setVisibility(View.GONE); + ToastUtil.show("没有数据"); + } else { + mViewDataBinding.clNodata.setVisibility(View.GONE); + mViewDataBinding.recyclerView.setVisibility(View.VISIBLE); + mVideoAdapter.setData(localVideoInfos); + } + mViewDataBinding.tvScan.setVisibility(View.GONE); + mViewDataBinding.swipeRefreshLayout.setRefreshing(false); + } + }); + mViewModel.mCompleteData.observe(this, new Observer() { + @Override + public void onChanged(Boolean aBoolean) { + mViewDataBinding.swipeRefreshLayout.setRefreshing(false); + } + }); + getHomeVideo(); + } + + private void getHomeVideo() { + mViewDataBinding.swipeRefreshLayout.setRefreshing(true); + mViewModel.getHomeVideo(); } @Override @@ -149,11 +143,11 @@ public class VideoActivity extends BaseActivity implements VideoContact.VideoVie Configuration config = getResources().getConfiguration(); if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) { mManager = new RecycleGridLayoutManager(VideoActivity.this, 2); - recyclerView.setLayoutManager(mManager); + mViewDataBinding.recyclerView.setLayoutManager(mManager); } if (config.orientation == Configuration.ORIENTATION_PORTRAIT) { mManager = new RecycleGridLayoutManager(VideoActivity.this, 3); - recyclerView.setLayoutManager(mManager); + mViewDataBinding.recyclerView.setLayoutManager(mManager); } } @@ -169,7 +163,7 @@ public class VideoActivity extends BaseActivity implements VideoContact.VideoVie dialog.dismiss(); File file = new File(path); if (file.delete()) { - adapter.removeItem(position); + mVideoAdapter.removeItem(position); ToastUtil.show("删除成功"); } else { ToastUtil.show("删除失败,检查权限是否开启"); @@ -254,7 +248,7 @@ public class VideoActivity extends BaseActivity implements VideoContact.VideoVie @Override protected List doInBackground(Void... voids) { long s1 = System.currentTimeMillis(); - paths.clear(); + mPaths.clear(); List fileList = new ArrayList<>(); String rootPath = Environment.getExternalStorageDirectory().getPath() + File.separator; File file = new File(rootPath); @@ -300,9 +294,9 @@ public class VideoActivity extends BaseActivity implements VideoContact.VideoVie @Override protected void onProgressUpdate(String... values) { super.onProgressUpdate(values); - paths.add(values[0]); - tv_scan.setVisibility(View.VISIBLE); - tv_scan.setText("正在扫描:" + values[0]); + mPaths.add(values[0]); + mViewDataBinding.tvScan.setVisibility(View.VISIBLE); + mViewDataBinding.tvScan.setText("正在扫描:" + values[0]); // adapter.setData(paths); } @@ -311,15 +305,15 @@ public class VideoActivity extends BaseActivity implements VideoContact.VideoVie super.onPostExecute(strings); Log.e("ScanTask", "onPostExecute: " + strings.size()); if (strings.size() == 0) { - cl_nodata.setVisibility(View.VISIBLE); - recyclerView.setVisibility(View.GONE); + mViewDataBinding.clNodata.setVisibility(View.VISIBLE); + mViewDataBinding.recyclerView.setVisibility(View.GONE); } else { - cl_nodata.setVisibility(View.GONE); - recyclerView.setVisibility(View.VISIBLE); + mViewDataBinding.clNodata.setVisibility(View.GONE); + mViewDataBinding.recyclerView.setVisibility(View.VISIBLE); // adapter.setData(strings); } - tv_scan.setVisibility(View.GONE); - refreshLayout.setRefreshing(false); + mViewDataBinding.tvScan.setVisibility(View.GONE); + mViewDataBinding.swipeRefreshLayout.setRefreshing(false); } } @@ -410,27 +404,16 @@ public class VideoActivity extends BaseActivity implements VideoContact.VideoVie } } - @Override - public void setHomeVideo(ArrayList video) { - if (video == null || video.size() == 0) { - cl_nodata.setVisibility(View.VISIBLE); - recyclerView.setVisibility(View.GONE); - ToastUtil.show("没有数据"); - } else { - cl_nodata.setVisibility(View.GONE); - recyclerView.setVisibility(View.VISIBLE); - adapter.setData(video); + public class BtnClick { + public void exie(View view) { + finish(); } - tv_scan.setVisibility(View.GONE); - refreshLayout.setRefreshing(false); - } - @Override - public void getHomeVideoFinish() { - refreshLayout.setRefreshing(false); + public void refresh(View view) { + getHomeVideo(); + } } - //在这里处理任务执行中的状态,如进度进度条的刷新 @Download.onTaskRunning void running(DownloadTask task) { @@ -448,7 +431,7 @@ public class VideoActivity extends BaseActivity implements VideoContact.VideoVie //在这里处理任务完成的状态 Log.e("taskComplete", task.getExtendField()); // Aria.download(this).load(task.getDownloadEntity().getId()).cancel(); - mPresenter.getHomeVideo(); + mViewModel.getHomeVideo(); } @Download.onTaskFail @@ -463,6 +446,6 @@ public class VideoActivity extends BaseActivity implements VideoContact.VideoVie } Log.e(TAG, "taskFail: " + packageName + "filepath: " + filepath); - mPresenter.getHomeVideo(); + mViewModel.getHomeVideo(); } } diff --git a/app/src/main/java/com/uiui/videoplayer/activity/video/VideoContact.java b/app/src/main/java/com/uiui/videoplayer/activity/video/VideoContact.java deleted file mode 100644 index cbc1173..0000000 --- a/app/src/main/java/com/uiui/videoplayer/activity/video/VideoContact.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.uiui.videoplayer.activity.video; - -import com.uiui.videoplayer.base.mvp.BasePresenter; -import com.uiui.videoplayer.base.mvp.BaseView; -import com.uiui.videoplayer.bean.LocalVideoInfo; - -import java.util.ArrayList; - -public class VideoContact { - interface Presenter extends BasePresenter { - /*获取视频*/ - void getHomeVideo(); - } - - public interface VideoView extends BaseView { - void setHomeVideo(ArrayList video); - void getHomeVideoFinish(); - } -} diff --git a/app/src/main/java/com/uiui/videoplayer/activity/video/VideoPresenter.java b/app/src/main/java/com/uiui/videoplayer/activity/video/VideoPresenter.java deleted file mode 100644 index 765af2b..0000000 --- a/app/src/main/java/com/uiui/videoplayer/activity/video/VideoPresenter.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.uiui.videoplayer.activity.video; - -import android.content.Context; - -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.uiui.videoplayer.bean.LocalVideoInfo; -import com.uiui.videoplayer.disklrucache.CacheHelper; -import com.uiui.videoplayer.network.NetInterfaceManager; - -import java.util.ArrayList; - -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -/** - * @author jgy02 - */ -public class VideoPresenter implements VideoContact.Presenter { - private static final String TAG = VideoPresenter.class.getSimpleName(); - - private VideoContact.VideoView mView; - private Context mContext; - private CacheHelper mCacheHelper; - - public VideoPresenter(Context context) { - this.mContext = context; - this.mCacheHelper = new CacheHelper(context); - } - - private BehaviorSubject lifecycle; - - public void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - @Override - public void attachView(VideoContact.VideoView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - @Override - public void getHomeVideo() { - NetInterfaceManager.getInstance().getHomeVideo(true, lifecycle, new NetInterfaceManager.onVideoPathCallback() { - @Override - public void setVideoList(ArrayList videoList) { - mView.setHomeVideo(videoList); - } - - @Override - public void onComplete() { - mView.getHomeVideoFinish(); - } - }); - } -} diff --git a/app/src/main/java/com/uiui/videoplayer/activity/video/VideoViewModel.java b/app/src/main/java/com/uiui/videoplayer/activity/video/VideoViewModel.java new file mode 100644 index 0000000..cbb559c --- /dev/null +++ b/app/src/main/java/com/uiui/videoplayer/activity/video/VideoViewModel.java @@ -0,0 +1,42 @@ +package com.uiui.videoplayer.activity.video; + +import androidx.lifecycle.MutableLiveData; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiui.videoplayer.base.mvvm.BaseViewModel; +import com.uiui.videoplayer.bean.LocalVideoInfo; +import com.uiui.videoplayer.databinding.ActivityVideoBinding; +import com.uiui.videoplayer.network.NetInterfaceManager; + +import java.util.ArrayList; + +public class VideoViewModel extends BaseViewModel { + + @Override + public ActivityVideoBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + public MutableLiveData> mPhotoInfosData = new MutableLiveData<>(); + + public MutableLiveData mCompleteData = new MutableLiveData<>(); + + public void getHomeVideo() { + NetInterfaceManager.getInstance().getHomeVideo(true, getLifecycle(), new NetInterfaceManager.onVideoPathCallback() { + @Override + public void setVideoList(ArrayList videoList) { + mPhotoInfosData.setValue(videoList); + } + + @Override + public void onComplete() { + mCompleteData.setValue(true); + } + }); + } +} diff --git a/app/src/main/java/com/uiui/videoplayer/activity/vip/VipActivity.java b/app/src/main/java/com/uiui/videoplayer/activity/vip/VipActivity.java index 6d6faab..ad49773 100644 --- a/app/src/main/java/com/uiui/videoplayer/activity/vip/VipActivity.java +++ b/app/src/main/java/com/uiui/videoplayer/activity/vip/VipActivity.java @@ -4,6 +4,7 @@ import android.view.View; import androidx.lifecycle.Observer; +import com.uiui.videoplayer.BuildConfig; import com.uiui.videoplayer.R; import com.uiui.videoplayer.base.mvvm.BaseMvvmActivity; import com.uiui.videoplayer.bean.SpaceInfo; @@ -42,7 +43,7 @@ public class VipActivity extends BaseMvvmActivity() { + mViewModel.mSpaceInfoData.observe(this, new Observer() { @Override public void onChanged(SpaceInfo spaceInfo) { if (spaceInfo == null) { @@ -63,9 +64,8 @@ public class VipActivity extends BaseMvvmActivity { +public class VipViewModel extends BaseViewModel { @Override public ActivityVipBinding getVDBinding() { return binding; @@ -29,11 +29,7 @@ public class VipViewModel extends BaseViewModel { } - private MutableLiveData mSpaceInfoData = new MutableLiveData<>(); - - public MutableLiveData getSpaceInfoData() { - return mSpaceInfoData; - } + public MutableLiveData mSpaceInfoData = new MutableLiveData<>(); public void getHomeSpaceInfo() { NetInterfaceManager.getInstance().getHomeSpaceInfoControl() diff --git a/app/src/main/java/com/uiui/videoplayer/adapter/VideoAdapter.java b/app/src/main/java/com/uiui/videoplayer/adapter/VideoAdapter.java index 1c16d97..53a788d 100644 --- a/app/src/main/java/com/uiui/videoplayer/adapter/VideoAdapter.java +++ b/app/src/main/java/com/uiui/videoplayer/adapter/VideoAdapter.java @@ -22,7 +22,7 @@ import com.google.gson.Gson; import com.google.gson.JsonParser; import com.shehuan.niv.NiceImageView; import com.uiui.videoplayer.R; -import com.uiui.videoplayer.activity.ActivityTikTok; +import com.uiui.videoplayer.activity.tiktok.TikTokActivity; import com.uiui.videoplayer.bean.LocalVideoInfo; import com.uiui.videoplayer.gson.GsonUtils; import com.uiui.videoplayer.utils.JGYUtils; @@ -34,7 +34,7 @@ import java.io.File; import java.util.ArrayList; public class VideoAdapter extends RecyclerView.Adapter { - private static final String TAG = VideoAdapter.class.getSimpleName(); + private static final String TAG = "VideoAdapter"; private Activity mContext; private ArrayList mLocalVideoInfos; private onItemLongClickListener onItemLongClickListener; @@ -164,7 +164,7 @@ public class VideoAdapter extends RecyclerView.Adapter public void onClick(View v) { if (TextUtils.isEmpty(localPath)) { if (JGYUtils.getInstance().fileExists(url)) { - Intent intent = new Intent(mContext, ActivityTikTok.class); + Intent intent = new Intent(mContext, TikTokActivity.class); intent.putExtra("position", position); intent.putParcelableArrayListExtra("list", mLocalVideoInfos); mContext.startActivity(intent); @@ -173,7 +173,7 @@ public class VideoAdapter extends RecyclerView.Adapter ToastUtil.show(String.format(mContext.getString(R.string.download_now), VideoUtils.getFileNameWithoutExtension(url))); } } else { - Intent intent = new Intent(mContext, ActivityTikTok.class); + Intent intent = new Intent(mContext, TikTokActivity.class); intent.putExtra("position", position); intent.putParcelableArrayListExtra("list", mLocalVideoInfos); mContext.startActivity(intent); @@ -187,7 +187,7 @@ public class VideoAdapter extends RecyclerView.Adapter public void onClick(View view) { if (TextUtils.isEmpty(localPath)) { if (JGYUtils.getInstance().fileExists(url)) { - Intent intent = new Intent(mContext, ActivityTikTok.class); + Intent intent = new Intent(mContext, TikTokActivity.class); intent.putExtra("position", position); intent.putParcelableArrayListExtra("list", mLocalVideoInfos); mContext.startActivity(intent); @@ -196,7 +196,7 @@ public class VideoAdapter extends RecyclerView.Adapter ToastUtil.show(String.format(mContext.getString(R.string.download_now), VideoUtils.getFileNameWithoutExtension(url))); } } else { - Intent intent = new Intent(mContext, ActivityTikTok.class); + Intent intent = new Intent(mContext, TikTokActivity.class); intent.putExtra("position", position); intent.putParcelableArrayListExtra("list", mLocalVideoInfos); mContext.startActivity(intent); diff --git a/app/src/main/java/com/uiui/videoplayer/base/BaseApplication.java b/app/src/main/java/com/uiui/videoplayer/base/BaseApplication.java index ac3d807..d6f5cf2 100644 --- a/app/src/main/java/com/uiui/videoplayer/base/BaseApplication.java +++ b/app/src/main/java/com/uiui/videoplayer/base/BaseApplication.java @@ -12,7 +12,7 @@ import com.uiui.videoplayer.utils.JGYUtils; import com.uiui.videoplayer.utils.ToastUtil; public class BaseApplication extends Application { - private static final String TAG = BaseApplication.class.getSimpleName(); + private static final String TAG = "BaseApplication"; @Override public void onCreate() { diff --git a/app/src/main/java/com/uiui/videoplayer/base/BaseDataBindingActivity.java b/app/src/main/java/com/uiui/videoplayer/base/BaseDataBindingActivity.java index 8e6ab03..81478ff 100644 --- a/app/src/main/java/com/uiui/videoplayer/base/BaseDataBindingActivity.java +++ b/app/src/main/java/com/uiui/videoplayer/base/BaseDataBindingActivity.java @@ -5,7 +5,11 @@ import android.os.Bundle; import androidx.annotation.CallSuper; import androidx.annotation.Nullable; -public abstract class BaseDataBindingActivity extends BaseTransparentActivity { +import com.uiui.videoplayer.R; +import com.uiui.videoplayer.base.rx.BaseRxActivity; +import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; + +public abstract class BaseDataBindingActivity extends BaseRxActivity { public BaseDataBindingActivity() { super(); @@ -15,10 +19,43 @@ public abstract class BaseDataBindingActivity extends BaseTransparentActivity { @CallSuper protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); +// StatusBarUtil.init(this); + UltimateBarX.statusBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(setNightMode()) + .fitWindow(setfitWindow()) + .apply(); + UltimateBarX.navigationBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(setNightMode()) + .fitWindow(setfitWindow()) + .apply(); + initDataBinding(); initView(); initData(); } + /** + * @return 是否是黑色状态栏 + */ +// protected abstract boolean setNightMode(); + public boolean setNightMode() { + return false; + } + + /** + * @return 是否是入侵 + */ +// protected abstract boolean setNightMode(); + public boolean setfitWindow() { + return false; + } + + + protected abstract void initDataBinding(); + /** * 初始化视图 */ @@ -28,4 +65,4 @@ public abstract class BaseDataBindingActivity extends BaseTransparentActivity { * 初始化数据 */ protected abstract void initData(); -} +} \ No newline at end of file diff --git a/app/src/main/java/com/uiui/videoplayer/base/mvvm/BaseMvvmActivity.java b/app/src/main/java/com/uiui/videoplayer/base/mvvm/BaseMvvmActivity.java index 2a091c0..ec33c38 100644 --- a/app/src/main/java/com/uiui/videoplayer/base/mvvm/BaseMvvmActivity.java +++ b/app/src/main/java/com/uiui/videoplayer/base/mvvm/BaseMvvmActivity.java @@ -16,7 +16,7 @@ import java.lang.reflect.ParameterizedType; public abstract class BaseMvvmActivity extends BaseTransparentActivity { - private static final String TAG = BaseMvvmActivity.class.getSimpleName(); + private static final String TAG = "BaseMvvmActivity"; protected VM mViewModel; protected VDB mViewDataBinding; diff --git a/app/src/main/java/com/uiui/videoplayer/base/mvvm/BaseViewModel.java b/app/src/main/java/com/uiui/videoplayer/base/mvvm/BaseViewModel.java index e84064b..e20ccfa 100644 --- a/app/src/main/java/com/uiui/videoplayer/base/mvvm/BaseViewModel.java +++ b/app/src/main/java/com/uiui/videoplayer/base/mvvm/BaseViewModel.java @@ -5,8 +5,6 @@ import android.content.Context; import androidx.databinding.ViewDataBinding; import androidx.lifecycle.ViewModel; -import com.trello.rxlifecycle4.android.ActivityEvent; - import java.lang.ref.WeakReference; import io.reactivex.rxjava3.subjects.BehaviorSubject; @@ -14,7 +12,7 @@ import io.reactivex.rxjava3.subjects.BehaviorSubject; /** * 所有viewmodel的基类 */ -public abstract class BaseViewModel extends ViewModel implements ViewDataBindingCallback { +public abstract class BaseViewModel extends ViewModel implements ViewDataBindingCallback { /** * 当前viewmodel对应的页面binding @@ -24,7 +22,7 @@ public abstract class BaseViewModel extends ViewMod @Override public void setVDBinding(ViewDataBinding vdBinding) { - binding = (VDB)vdBinding; + binding = (VDB) vdBinding; } @Override @@ -43,7 +41,7 @@ public abstract class BaseViewModel extends ViewMod @Override public void setCtx(Context context) { - if(ctx == null) { + if (ctx == null) { ctx = new WeakReference<>(context); } } @@ -59,15 +57,15 @@ public abstract class BaseViewModel extends ViewMod public abstract void onDestroy(); - private BehaviorSubject mBehaviorSubject; + private BehaviorSubject mBehaviorSubject; @Override public void setLifecycle(BehaviorSubject subject) { - this.mBehaviorSubject =subject; + this.mBehaviorSubject = (BehaviorSubject) subject; } @Override - public BehaviorSubject getLifecycle() { + public BehaviorSubject getLifecycle() { return mBehaviorSubject; } } diff --git a/app/src/main/java/com/uiui/videoplayer/base/mvvm/fragment/BaseMvvmFragment.java b/app/src/main/java/com/uiui/videoplayer/base/mvvm/fragment/BaseMvvmFragment.java new file mode 100644 index 0000000..063d1e0 --- /dev/null +++ b/app/src/main/java/com/uiui/videoplayer/base/mvvm/fragment/BaseMvvmFragment.java @@ -0,0 +1,275 @@ +package com.uiui.videoplayer.base.mvvm.fragment; + +import android.app.Activity; +import android.content.Context; +import android.content.res.Configuration; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; + +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ViewDataBinding; +import androidx.lifecycle.ViewModel; +import androidx.lifecycle.ViewModelProvider; + +import com.uiui.videoplayer.base.BaseFragment; + +import java.lang.ref.WeakReference; +import java.lang.reflect.ParameterizedType; + +/** + * @author: lml + * @date: 2021/12/15 + */ +public abstract class BaseMvvmFragment extends BaseFragment { + protected String mTag = this.getClass().getSimpleName(); + /** + * 是否顯示了 + */ + protected boolean mIsVisible; + /** + * 是否準備好了-Created + */ + protected boolean mHasPrepare; + + + protected VM mViewModel; + protected VDB mViewDataBinding; + protected Class vmClass; + // +// protected Toolbar toolbar; +// protected View statusBarView; + // + protected Bundle bundle;//来自getArguments() + protected Bundle savedInstanceState; + +// protected Context context; + + /** + * 上下文 + */ + private WeakReference ctx; + + public Context getCtx() { + return ctx == null ? null : ctx.get(); + } + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); +// this.context = context; + ctx = new WeakReference<>(context); + } + + /** + * onCreate、onResume里不能调用 + * + * @return + */ + public boolean isAttached() { + boolean flag = getCtx() != null && isAdded(); + Log.e(" >> isAttached >>", "flag = " + flag); + return flag; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + //ViewDataBinding + mViewDataBinding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false); + mViewDataBinding.setLifecycleOwner(this); + + //ViewModel + vmClass = (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + mViewModel = new ViewModelProvider(this).get(vmClass); + // + return mViewDataBinding.getRoot(); + } + + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + +// if (initStatusBarToolBar()) { +// toolbar = getToolbar(); +// } + //注册eventbus +// if (getClass().isAnnotationPresent(BindEventBus.class)) +// EventBusManager.register(this); + // + +// fitsLayoutOverlap(); + initDataBinding(); + initView(bundle = getArguments()); + // + initData(this.savedInstanceState = savedInstanceState); + // + if (mIsVisible) { + onEnter(); + } + mHasPrepare = true; + // +// LiveDataBus.get().with(ConstantUtils.DATA_BUS_LOADING_FRAGMENT, Boolean.class).observe(getActivity(), bool -> { +// L.e(" >> LiveDataBus >> DATA_BUS_LOADING_FRAGMENT: %s", bool); +// if(bool) { +// showLoading(R.string.str_please_wait); +// } else { +// hideLoading(); +// } +// }); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + mHasPrepare = false; + mViewDataBinding = null; + //移除eventbus +// if (getClass().isAnnotationPresent(BindEventBus.class)) +// EventBusManager.unregister(this); + // + } + + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if (mIsVisible == getUserVisibleHint()) + return; + mIsVisible = getUserVisibleHint(); + if (mIsVisible) { + if (!mHasPrepare) + return; + onEnter(); + } else { + onExit(); + } + } + + @LayoutRes + protected abstract int getLayoutId(); + +// protected abstract Toolbar getToolbar(); + +// protected View getStatusView() { +// return null; +// } + + protected abstract void initDataBinding(); + + protected abstract void initView(Bundle bundle); + + protected abstract void initData(Bundle savedInstanceState); + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); +// fitsLayoutOverlap(); + } + +// protected boolean isImmersionBarEnabled() { +// return true; +// } + +// protected boolean initStatusBarToolBar() { +// return true; +// } + + +// private void fitsLayoutOverlap() { +// if (!isImmersionBarEnabled()) return; +// if (statusBarView != null) { +// ImmersionBar.setStatusBarView(getActivity(), statusBarView); +// } +// if (toolbar != null) { +// ImmersionBar.setTitleBar(getActivity(), toolbar); +// } +// } + + protected void hideInputMethod(Activity activity) { + InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); + View view = activity.getCurrentFocus(); + if (view != null) { + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } + + protected void hideInputMethod(Activity activity, EditText editText) { + InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Activity.INPUT_METHOD_SERVICE); + View view = activity.getCurrentFocus(); + if (view != null) { + imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); + } + } + + protected void showInputMethod(EditText editText) { + InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); + } + + +// private CustomDialog mWaitDialog; +// +// public void showLoading(@StringRes int contentID) { +// showLoading(contentID, R.color.white); +// } +// +// public void showLoading(@StringRes int contentID, @ColorRes int color) { +// hideLoading(); +// DialogX.init(getActivity()); +// if (color == R.color.white) { +// mWaitDialog = DialogXUtil.getInstance().showLoading(getActivity(), getString(contentID), getResources().getColor(color)); +// } else { +// mWaitDialog = DialogXUtil.getInstance().showLoading_black(getActivity(), getString(contentID), getResources().getColor(color)); +// } +// } +// +// public void updateLoadingTip(@StringRes int messageID, int percent) { +// try { +// if (mWaitDialog != null && mWaitDialog.isShow()) { +// TextView tvTip = mWaitDialog.getCustomView().findViewById(R.id.tv_load_tip); +// if (tvTip != null) +// tvTip.setText(getResources().getString(messageID) + (percent == -1 ? "" : percent + "%")); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// +// public boolean isShowLoading() { +// return mWaitDialog != null && mWaitDialog.isShow(); +// } +// +// public void hideLoading() { +// try { +// boolean isShow = isShowLoading(); +// L.d(" >> hideLoading :: isShow: %s", isShow); +// if (isShow) +// mWaitDialog.dismiss(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } + + /** + * 進入界面 + */ + protected void onEnter() { + + } + + /** + * 離開界面 + */ + protected void onExit() { + + } + +} diff --git a/app/src/main/java/com/uiui/videoplayer/config/CommonConfig.java b/app/src/main/java/com/uiui/videoplayer/config/CommonConfig.java index ed66bb3..667ce77 100644 --- a/app/src/main/java/com/uiui/videoplayer/config/CommonConfig.java +++ b/app/src/main/java/com/uiui/videoplayer/config/CommonConfig.java @@ -3,4 +3,9 @@ package com.uiui.videoplayer.config; public class CommonConfig { public static final String MMKV_ID = "InterProcessKV"; + + /*是否进入主页*/ + public static final String SHOW_SPLASH_KEY = "show_splash"; + /*是否同意隐私协议*/ + public static final String AGREED_THE_PRIVACY_AGREEMENT = "agreed_the_privacy_agreement"; } diff --git a/app/src/main/java/com/uiui/videoplayer/dialog/PrivacyPolicyDialog.java b/app/src/main/java/com/uiui/videoplayer/dialog/PrivacyPolicyDialog.java new file mode 100644 index 0000000..78c80f3 --- /dev/null +++ b/app/src/main/java/com/uiui/videoplayer/dialog/PrivacyPolicyDialog.java @@ -0,0 +1,94 @@ +package com.uiui.videoplayer.dialog; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.Spanned; +import android.text.method.LinkMovementMethod; +import android.text.style.ClickableSpan; +import android.text.style.ForegroundColorSpan; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; + +import com.uiui.videoplayer.R; +import com.uiui.videoplayer.activity.privacy.PrivacyActivity; + +public class PrivacyPolicyDialog extends AlertDialog { + private Context mContext; + private TextView tv_content; + private TextView tv_cancel; + private TextView tv_confirm; + + public PrivacyPolicyDialog(@NonNull Context context) { + super(context, R.style.CustomDialog); + this.mContext = context; + } + + public PrivacyPolicyDialog(@NonNull Context context, int themeResId) { + super(context, themeResId); + this.mContext = context; + } + + public PrivacyPolicyDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) { + super(context, cancelable, cancelListener); + this.mContext = context; + } + + public void setPrivacyPolicyCallback(PrivacyPolicyCallback callback) { + this.privacyPolicyCallback = callback; + } + + private PrivacyPolicyCallback privacyPolicyCallback; + + public interface PrivacyPolicyCallback { + void onCancel(); + + void onConfirm(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_privacy_policy); + tv_content = findViewById(R.id.tv_content); + tv_cancel = findViewById(R.id.tv_cancel); + tv_confirm = findViewById(R.id.tv_confirm); + SpannableString spannableString = new SpannableString(mContext.getResources().getString(R.string.privacy_agreement_content)); + spannableString.setSpan(new ClickableSpan() { + @Override + public void onClick(@NonNull View widget) { + Intent intent = new Intent(mContext, PrivacyActivity.class); + mContext.startActivity(intent); + } + }, 80, 86, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + spannableString.setSpan(new ForegroundColorSpan(Color.BLUE), 80, 86, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + tv_content.setText(spannableString); + tv_content.setMovementMethod(LinkMovementMethod.getInstance()); + + tv_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (privacyPolicyCallback != null) { + privacyPolicyCallback.onCancel(); + } + } + }); + + tv_confirm.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (privacyPolicyCallback != null) { + privacyPolicyCallback.onConfirm(); + } + } + }); + } +} diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocContact.java b/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocContact.java deleted file mode 100644 index 70ab85d..0000000 --- a/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocContact.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.uiui.videoplayer.fragment.doc; - -import com.uiui.videoplayer.base.mvp.BasePresenter; -import com.uiui.videoplayer.base.mvp.BaseView; - -public class DocContact { - public interface Presenter extends BasePresenter { - - } - - public interface DocView extends BaseView { - - } -} diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocFragment.java b/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocFragment.java index 516e58f..13823fd 100644 --- a/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocFragment.java +++ b/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocFragment.java @@ -2,27 +2,21 @@ package com.uiui.videoplayer.fragment.doc; import android.app.Activity; import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; import androidx.fragment.app.Fragment; import com.uiui.videoplayer.R; -import com.uiui.videoplayer.base.BaseFragment; - -import butterknife.ButterKnife; +import com.uiui.videoplayer.base.mvvm.fragment.BaseMvvmFragment; +import com.uiui.videoplayer.databinding.FragmentDocBinding; /** * A simple {@link Fragment} subclass. * Use the {@link DocFragment#newInstance} factory method to * create an instance of this fragment. */ -public class DocFragment extends BaseFragment implements DocContact.DocView { - private static final String TAG = DocFragment.class.getSimpleName(); +public class DocFragment extends BaseMvvmFragment { + private static final String TAG = "DocFragment"; - private View rootView;// 设置为全局的 private Activity mContext; // TODO: Rename parameter arguments, choose names that match @@ -66,30 +60,31 @@ public class DocFragment extends BaseFragment implements DocContact.DocView { } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - Log.e(TAG, "onCreateView: "); - if (null != rootView) { - ViewGroup parent = (ViewGroup) rootView.getParent(); - if (null != parent) { - parent.removeView(rootView); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_doc, container, false); - mContext = (Activity) rootView.getContext(); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + protected int getLayoutId() { + return R.layout.fragment_doc; + } + + @Override + protected void initDataBinding() { + mContext = getActivity(); + mViewModel.setCtx(getCtx()); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); +// mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView(Bundle bundle) { + + } + + @Override + protected void initData(Bundle savedInstanceState) { + } @Override public void fetchData() { } - - private void initView() { - - } } diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocPresenter.java b/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocPresenter.java deleted file mode 100644 index 734607f..0000000 --- a/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocPresenter.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.uiui.videoplayer.fragment.doc; - -import android.content.Context; - -import com.trello.rxlifecycle4.android.FragmentEvent; -import com.uiui.videoplayer.disklrucache.CacheHelper; - -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public class DocPresenter implements DocContact.Presenter { - private static final String TAG = DocPresenter.class.getSimpleName(); - private DocContact.DocView mView; - private Context mContext; - private CacheHelper mCacheHelper; - - public DocPresenter(Context context) { - this.mContext = context; - this.mCacheHelper = new CacheHelper(context); - } - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - @Override - public void attachView(@NonNull DocContact.DocView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - -} diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocViewModel.java b/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocViewModel.java new file mode 100644 index 0000000..f770269 --- /dev/null +++ b/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocViewModel.java @@ -0,0 +1,18 @@ +package com.uiui.videoplayer.fragment.doc; + +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.uiui.videoplayer.base.mvvm.BaseViewModel; +import com.uiui.videoplayer.databinding.FragmentDocBinding; + +public class DocViewModel extends BaseViewModel { + + @Override + public FragmentDocBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureContact.java b/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureContact.java deleted file mode 100644 index 6c3798d..0000000 --- a/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureContact.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiui.videoplayer.fragment.pic; - -import com.uiui.videoplayer.base.mvp.BasePresenter; -import com.uiui.videoplayer.base.mvp.BaseView; -import com.uiui.videoplayer.bean.PhotoInfo; - -import java.util.ArrayList; - -public class PictureContact { - public interface Presenter extends BasePresenter { - void getHomePhoto(); - } - - public interface PictureView extends BaseView { - void setHomePhoto(ArrayList photoInfos); - void getHomePhotoFinish(); - } -} diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureFragment.java b/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureFragment.java index b810944..3187c35 100644 --- a/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureFragment.java +++ b/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureFragment.java @@ -2,51 +2,36 @@ package com.uiui.videoplayer.fragment.pic; import android.app.Activity; import android.os.Bundle; +import android.util.Log; +import android.view.View; -import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - import com.uiui.videoplayer.R; -import com.uiui.videoplayer.view.EquallyDividedItemDecoration; import com.uiui.videoplayer.adapter.PicAdapter; -import com.uiui.videoplayer.base.BaseFragment; +import com.uiui.videoplayer.base.mvvm.fragment.BaseMvvmFragment; import com.uiui.videoplayer.bean.PhotoInfo; +import com.uiui.videoplayer.databinding.FragmentPictureBinding; import com.uiui.videoplayer.utils.ScreenUtils; import com.uiui.videoplayer.utils.ToastUtil; +import com.uiui.videoplayer.view.EquallyDividedItemDecoration; import java.util.ArrayList; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link PictureFragment#newInstance} factory method to * create an instance of this fragment. */ -public class PictureFragment extends BaseFragment implements PictureContact.PictureView { - private static final String TAG = PictureFragment.class.getSimpleName(); +public class PictureFragment extends BaseMvvmFragment { + private static final String TAG = "PictureFragment"; - @BindView(R.id.swipeRefreshLayout) - SwipeRefreshLayout swipeRefreshLayout; - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - @BindView(R.id.cl_nodata) - ConstraintLayout cl_nodata; - - private View rootView;// 设置为全局的 private Activity mContext; - private PicturePresenter mPresenter; private PicAdapter mPicAdapter; private static final int SPAN_COUNT = 2; @@ -91,22 +76,62 @@ public class PictureFragment extends BaseFragment implements PictureContact.Pict } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - Log.e(TAG, "onCreateView: "); - if (null != rootView) { - ViewGroup parent = (ViewGroup) rootView.getParent(); - if (null != parent) { - parent.removeView(rootView); + protected int getLayoutId() { + return R.layout.fragment_picture; + } + + @Override + protected void initDataBinding() { + mContext = getActivity(); + mViewModel.setCtx(getCtx()); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView(Bundle bundle) { + GridLayoutManager layoutManager = new GridLayoutManager(mContext, SPAN_COUNT, LinearLayoutManager.VERTICAL, false); + mViewDataBinding.recyclerView.setLayoutManager(layoutManager); + + EquallyDividedItemDecoration equallyDividedItemDecoration = new EquallyDividedItemDecoration(SPAN_COUNT, ScreenUtils.dip2px(mContext, 1)); + mViewDataBinding.recyclerView.addItemDecoration(equallyDividedItemDecoration); + + mPicAdapter = new PicAdapter(layoutManager); + mViewDataBinding.recyclerView.setAdapter(mPicAdapter); + mViewDataBinding.swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + mViewModel.getHomePhoto(); + mViewDataBinding.swipeRefreshLayout.setRefreshing(true); } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_picture, container, false); - mContext = (Activity) rootView.getContext(); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + }); + } + + @Override + protected void initData(Bundle savedInstanceState) { + mViewModel.mPhotoInfosData.observe(this, new Observer>() { + @Override + public void onChanged(ArrayList photoInfos) { + mPicAdapter.setPhotoInfos(photoInfos); + if (photoInfos == null || photoInfos.size() == 0) { + mViewDataBinding.clNodata.setVisibility(View.VISIBLE); + mViewDataBinding.recyclerView.setVisibility(View.GONE); + ToastUtil.show("没有数据"); + } else { + mViewDataBinding.clNodata.setVisibility(View.GONE); + mViewDataBinding.recyclerView.setVisibility(View.VISIBLE); + } + } + }); + mViewModel.mCompleteData.observe(this, new Observer() { + @Override + public void onChanged(Boolean aBoolean) { + mViewDataBinding.swipeRefreshLayout.setRefreshing(false); + } + }); + mViewModel.getHomePhoto(); + mViewDataBinding.swipeRefreshLayout.setRefreshing(true); } @Override @@ -115,45 +140,8 @@ public class PictureFragment extends BaseFragment implements PictureContact.Pict } - private void initView() { - mPresenter = new PicturePresenter(mContext); - mPresenter.setLifecycle(getLifecycleSubject()); - mPresenter.attachView(this); + public class BtnClick { - GridLayoutManager layoutManager = new GridLayoutManager(mContext, SPAN_COUNT, LinearLayoutManager.VERTICAL, false); - recyclerView.setLayoutManager(layoutManager); - - EquallyDividedItemDecoration equallyDividedItemDecoration = new EquallyDividedItemDecoration(SPAN_COUNT, ScreenUtils.dip2px(mContext, 1)); - recyclerView.addItemDecoration(equallyDividedItemDecoration); - - mPicAdapter = new PicAdapter(layoutManager); - recyclerView.setAdapter(mPicAdapter); - swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { - @Override - public void onRefresh() { - mPresenter.getHomePhoto(); - swipeRefreshLayout.setRefreshing(true); - } - }); - mPresenter.getHomePhoto(); - swipeRefreshLayout.setRefreshing(true); } - @Override - public void setHomePhoto(ArrayList photoInfos) { - mPicAdapter.setPhotoInfos(photoInfos); - if (photoInfos == null || photoInfos.size() == 0) { - cl_nodata.setVisibility(View.VISIBLE); - recyclerView.setVisibility(View.GONE); - ToastUtil.show("没有数据"); - } else { - cl_nodata.setVisibility(View.GONE); - recyclerView.setVisibility(View.VISIBLE); - } - } - - @Override - public void getHomePhotoFinish() { - swipeRefreshLayout.setRefreshing(false); - } } diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/pic/PicturePresenter.java b/app/src/main/java/com/uiui/videoplayer/fragment/pic/PicturePresenter.java deleted file mode 100644 index c4e098d..0000000 --- a/app/src/main/java/com/uiui/videoplayer/fragment/pic/PicturePresenter.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.uiui.videoplayer.fragment.pic; - -import android.content.Context; - -import com.trello.rxlifecycle4.android.FragmentEvent; -import com.uiui.videoplayer.bean.PhotoInfo; -import com.uiui.videoplayer.disklrucache.CacheHelper; -import com.uiui.videoplayer.network.NetInterfaceManager; - -import java.util.ArrayList; - -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public class PicturePresenter implements PictureContact.Presenter { - private static final String TAG = PicturePresenter.class.getSimpleName(); - private PictureContact.PictureView mView; - private Context mContext; - private CacheHelper mCacheHelper; - - public PicturePresenter(Context context) { - this.mContext = context; - this.mCacheHelper = new CacheHelper(context); - } - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - @Override - public void attachView(@NonNull PictureContact.PictureView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - @Override - public void getHomePhoto() { - NetInterfaceManager.getInstance().getHomePhotoFragment( getLifecycle(), new NetInterfaceManager.onPhotoCallback() { - @Override - public void setPhotoList(ArrayList photoList) { - mView.setHomePhoto(photoList); - } - - @Override - public void onComplete() { - mView.getHomePhotoFinish(); - } - }); - } -} diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureViewModel.java b/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureViewModel.java new file mode 100644 index 0000000..1e2313d --- /dev/null +++ b/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureViewModel.java @@ -0,0 +1,42 @@ +package com.uiui.videoplayer.fragment.pic; + +import androidx.lifecycle.MutableLiveData; + +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.uiui.videoplayer.base.mvvm.BaseViewModel; +import com.uiui.videoplayer.bean.PhotoInfo; +import com.uiui.videoplayer.databinding.FragmentPictureBinding; +import com.uiui.videoplayer.network.NetInterfaceManager; + +import java.util.ArrayList; + +public class PictureViewModel extends BaseViewModel { + + @Override + public FragmentPictureBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + public MutableLiveData> mPhotoInfosData = new MutableLiveData<>(); + + public MutableLiveData mCompleteData = new MutableLiveData<>(); + + public void getHomePhoto() { + NetInterfaceManager.getInstance().getHomePhotoFragment(getLifecycle(), new NetInterfaceManager.onPhotoCallback() { + @Override + public void setPhotoList(ArrayList photoList) { + mPhotoInfosData.setValue(photoList); + } + + @Override + public void onComplete() { + mCompleteData.setValue(true); + } + }); + } +} diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoContact.java b/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoContact.java deleted file mode 100644 index 7d20460..0000000 --- a/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoContact.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiui.videoplayer.fragment.video; - -import com.uiui.videoplayer.base.mvp.BasePresenter; -import com.uiui.videoplayer.base.mvp.BaseView; -import com.uiui.videoplayer.bean.LocalVideoInfo; - -import java.util.ArrayList; - -public class VideoContact { - public interface Presenter extends BasePresenter { - void getHomeVideo(); - } - - public interface VideoView extends BaseView { - void setHomeVideo(ArrayList video); - void getHomeVideoFinish(); - } -} diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoFragment.java b/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoFragment.java index 44db695..5f39e0b 100644 --- a/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoFragment.java +++ b/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoFragment.java @@ -3,14 +3,11 @@ package com.uiui.videoplayer.fragment.video; import android.app.Activity; import android.os.Bundle; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; -import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.arialyy.annotations.Download; @@ -18,42 +15,31 @@ import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.task.DownloadTask; import com.google.gson.JsonObject; import com.uiui.videoplayer.R; -import com.uiui.videoplayer.view.EquallyDividedItemDecoration; import com.uiui.videoplayer.adapter.VideoAdapter; -import com.uiui.videoplayer.base.BaseFragment; -import com.uiui.videoplayer.view.CustomDialog; -import com.uiui.videoplayer.view.RecycleGridLayoutManager; +import com.uiui.videoplayer.base.mvvm.fragment.BaseMvvmFragment; import com.uiui.videoplayer.bean.LocalVideoInfo; +import com.uiui.videoplayer.databinding.FragmentVideoBinding; import com.uiui.videoplayer.gson.GsonUtils; import com.uiui.videoplayer.utils.ScreenUtils; import com.uiui.videoplayer.utils.ToastUtil; import com.uiui.videoplayer.utils.VideoUtils; +import com.uiui.videoplayer.view.CustomDialog; +import com.uiui.videoplayer.view.EquallyDividedItemDecoration; +import com.uiui.videoplayer.view.RecycleGridLayoutManager; import java.io.File; import java.util.ArrayList; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link VideoFragment#newInstance} factory method to * create an instance of this fragment. */ -public class VideoFragment extends BaseFragment implements VideoContact.VideoView { - private static final String TAG = VideoFragment.class.getSimpleName(); +public class VideoFragment extends BaseMvvmFragment { + private static final String TAG = "VideoFragment"; - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - @BindView(R.id.cl_nodata) - ConstraintLayout cl_nodata; - @BindView(R.id.swipeRefreshLayout) - SwipeRefreshLayout refreshLayout; - - private View rootView;// 设置为全局的 private Activity mContext; - private VideoPresenter mPresenter; private RecycleGridLayoutManager mManager; private VideoAdapter mVideoAdapter; private static final int SPAN_COUNT = 2; @@ -99,51 +85,38 @@ public class VideoFragment extends BaseFragment implements VideoContact.VideoVie } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - Log.e(TAG, "onCreateView: "); - if (null != rootView) { - ViewGroup parent = (ViewGroup) rootView.getParent(); - if (null != parent) { - parent.removeView(rootView); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_video, container, false); - mContext = (Activity) rootView.getContext(); - ButterKnife.bind(this, rootView); - initView(); - } - return rootView; + protected int getLayoutId() { + return R.layout.fragment_video; } @Override - public void fetchData() { - + protected void initDataBinding() { + mContext = getActivity(); + mViewModel.setCtx(getCtx()); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); +// mViewDataBinding.setClick(new BtnClick()); } - private void initView() { - mPresenter = new VideoPresenter(mContext); - mPresenter.setLifecycle(getLifecycleSubject()); - mPresenter.attachView(this); - + @Override + protected void initView(Bundle bundle) { Aria.download(this).register(); - refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + mViewDataBinding.swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { - mPresenter.getHomeVideo(); - refreshLayout.setRefreshing(true); + mViewModel.getHomeVideo(); + mViewDataBinding.swipeRefreshLayout.setRefreshing(true); } }); mManager = new RecycleGridLayoutManager(mContext, SPAN_COUNT); - recyclerView.setLayoutManager(mManager); + mViewDataBinding.recyclerView.setLayoutManager(mManager); EquallyDividedItemDecoration equallyDividedItemDecoration = new EquallyDividedItemDecoration(SPAN_COUNT, ScreenUtils.dip2px(mContext, 1)); - recyclerView.addItemDecoration(equallyDividedItemDecoration); - recyclerView.setNestedScrollingEnabled(false); + mViewDataBinding.recyclerView.addItemDecoration(equallyDividedItemDecoration); + mViewDataBinding.recyclerView.setNestedScrollingEnabled(false); - ((DefaultItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false); + ((DefaultItemAnimator) mViewDataBinding.recyclerView.getItemAnimator()).setSupportsChangeAnimations(false); mVideoAdapter = new VideoAdapter(mContext); mVideoAdapter.setOnLongClickListener(new VideoAdapter.onItemLongClickListener() { @Override @@ -151,10 +124,41 @@ public class VideoFragment extends BaseFragment implements VideoContact.VideoVie showDialog(path, position); } }); - recyclerView.setAdapter(mVideoAdapter); + mViewDataBinding.recyclerView.setAdapter(mVideoAdapter); + + mViewModel.getHomeVideo(); + mViewDataBinding.swipeRefreshLayout.setRefreshing(true); + } + + @Override + protected void initData(Bundle savedInstanceState) { + + } + + @Override + public void fetchData() { + mViewModel.mPhotoInfosData.observe(this, new Observer>() { + @Override + public void onChanged(ArrayList localVideoInfos) { + if (localVideoInfos == null || localVideoInfos.size() == 0) { + mViewDataBinding.clNodata.setVisibility(View.VISIBLE); + mViewDataBinding.recyclerView.setVisibility(View.GONE); + ToastUtil.show("没有数据"); + } else { + mViewDataBinding.clNodata.setVisibility(View.GONE); + mViewDataBinding.recyclerView.setVisibility(View.VISIBLE); + mVideoAdapter.setData(localVideoInfos); + } + mViewDataBinding.swipeRefreshLayout.setRefreshing(false); + } + }); + mViewModel.mCompleteData.observe(this, new Observer() { + @Override + public void onChanged(Boolean aBoolean) { + mViewDataBinding.swipeRefreshLayout.setRefreshing(false); + } + }); - mPresenter.getHomeVideo(); - refreshLayout.setRefreshing(true); } private void showDialog(String path, int position) { @@ -185,26 +189,6 @@ public class VideoFragment extends BaseFragment implements VideoContact.VideoVie } - @Override - public void setHomeVideo(ArrayList video) { - if (video == null || video.size() == 0) { - cl_nodata.setVisibility(View.VISIBLE); - recyclerView.setVisibility(View.GONE); - ToastUtil.show("没有数据"); - } else { - cl_nodata.setVisibility(View.GONE); - recyclerView.setVisibility(View.VISIBLE); - mVideoAdapter.setData(video); - } - refreshLayout.setRefreshing(false); - } - - @Override - public void getHomeVideoFinish() { - refreshLayout.setRefreshing(false); - } - - //在这里处理任务执行中的状态,如进度进度条的刷新 @Download.onTaskRunning void running(DownloadTask task) { @@ -222,7 +206,7 @@ public class VideoFragment extends BaseFragment implements VideoContact.VideoVie //在这里处理任务完成的状态 Log.e("taskComplete", task.getExtendField()); // Aria.download(this).load(task.getDownloadEntity().getId()).cancel(); - mPresenter.getHomeVideo(); + mViewModel.getHomeVideo(); } @Download.onTaskFail @@ -237,6 +221,6 @@ public class VideoFragment extends BaseFragment implements VideoContact.VideoVie } Log.e(TAG, "taskFail: " + packageName + "filepath: " + filepath); - mPresenter.getHomeVideo(); + mViewModel.getHomeVideo(); } } diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoPresenter.java b/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoPresenter.java deleted file mode 100644 index abc0e66..0000000 --- a/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoPresenter.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.uiui.videoplayer.fragment.video; - -import android.content.Context; - -import com.trello.rxlifecycle4.android.FragmentEvent; -import com.uiui.videoplayer.bean.LocalVideoInfo; -import com.uiui.videoplayer.disklrucache.CacheHelper; -import com.uiui.videoplayer.network.NetInterfaceManager; - -import java.util.ArrayList; - -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public class VideoPresenter implements VideoContact.Presenter { - private static final String TAG = VideoPresenter.class.getSimpleName(); - private VideoContact.VideoView mView; - private Context mContext; - private CacheHelper mCacheHelper; - - public VideoPresenter(Context context) { - this.mContext = context; - this.mCacheHelper = new CacheHelper(context); - } - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - @Override - public void attachView(@NonNull VideoContact.VideoView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - - @Override - public void getHomeVideo() { - NetInterfaceManager.getInstance().getHomeVideoFragment( lifecycle, new NetInterfaceManager.onVideoPathCallback() { - @Override - public void setVideoList(ArrayList videoList) { - mView.setHomeVideo(videoList); - } - - @Override - public void onComplete() { - mView.getHomeVideoFinish(); - } - }); - } -} diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoViewModel.java b/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoViewModel.java new file mode 100644 index 0000000..c3d4af4 --- /dev/null +++ b/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoViewModel.java @@ -0,0 +1,42 @@ +package com.uiui.videoplayer.fragment.video; + +import androidx.lifecycle.MutableLiveData; + +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.uiui.videoplayer.base.mvvm.BaseViewModel; +import com.uiui.videoplayer.bean.LocalVideoInfo; +import com.uiui.videoplayer.databinding.FragmentVideoBinding; +import com.uiui.videoplayer.network.NetInterfaceManager; + +import java.util.ArrayList; + +public class VideoViewModel extends BaseViewModel { + + @Override + public FragmentVideoBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + public MutableLiveData> mPhotoInfosData = new MutableLiveData<>(); + + public MutableLiveData mCompleteData = new MutableLiveData<>(); + + public void getHomeVideo() { + NetInterfaceManager.getInstance().getHomeVideoFragment(getLifecycle(), new NetInterfaceManager.onVideoPathCallback() { + @Override + public void setVideoList(ArrayList videoList) { + mPhotoInfosData.setValue(videoList); + } + + @Override + public void onComplete() { + mCompleteData.setValue(true); + } + }); + } +} diff --git a/app/src/main/java/com/uiui/videoplayer/manager/ConnectManager.java b/app/src/main/java/com/uiui/videoplayer/manager/ConnectManager.java index 53488b3..d6e6f59 100644 --- a/app/src/main/java/com/uiui/videoplayer/manager/ConnectManager.java +++ b/app/src/main/java/com/uiui/videoplayer/manager/ConnectManager.java @@ -8,7 +8,7 @@ import com.tencent.mmkv.MMKV; import com.uiui.videoplayer.config.CommonConfig; public class ConnectManager { - private static final String TAG = ConnectManager.class.getSimpleName(); + private static final String TAG = "ConnectManager"; public static final long ONE_SECOND_TIME = 1000; diff --git a/app/src/main/java/com/uiui/videoplayer/network/NetInterfaceManager.java b/app/src/main/java/com/uiui/videoplayer/network/NetInterfaceManager.java index 55bf950..36287b6 100644 --- a/app/src/main/java/com/uiui/videoplayer/network/NetInterfaceManager.java +++ b/app/src/main/java/com/uiui/videoplayer/network/NetInterfaceManager.java @@ -14,10 +14,10 @@ import com.trello.rxlifecycle4.android.ActivityEvent; import com.trello.rxlifecycle4.android.FragmentEvent; import com.uiui.sn.manager.RemoteManager; import com.uiui.videoplayer.bean.BaseResponse; +import com.uiui.videoplayer.bean.LocalVideoInfo; import com.uiui.videoplayer.bean.PhotoInfo; import com.uiui.videoplayer.bean.SpaceInfo; import com.uiui.videoplayer.bean.VideoInfo; -import com.uiui.videoplayer.bean.LocalVideoInfo; import com.uiui.videoplayer.config.CommonConfig; import com.uiui.videoplayer.disklrucache.CacheHelper; import com.uiui.videoplayer.gson.GsonUtils; @@ -56,7 +56,7 @@ import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; public class NetInterfaceManager { - private static final String TAG = NetInterfaceManager.class.getSimpleName(); + private static final String TAG = "NetInterfaceManager"; @SuppressLint("StaticFieldLeak") private static NetInterfaceManager INSTANCE; diff --git a/app/src/main/java/com/uiui/videoplayer/network/interceptor/RepeatRequestInterceptor.java b/app/src/main/java/com/uiui/videoplayer/network/interceptor/RepeatRequestInterceptor.java index 7b2c1ee..a8d11cb 100644 --- a/app/src/main/java/com/uiui/videoplayer/network/interceptor/RepeatRequestInterceptor.java +++ b/app/src/main/java/com/uiui/videoplayer/network/interceptor/RepeatRequestInterceptor.java @@ -22,7 +22,7 @@ import okio.Buffer; * v1.0 2022-07-15 16:16:52 */ public class RepeatRequestInterceptor implements Interceptor { - private static final String TAG = RepeatRequestInterceptor.class.getSimpleName(); + private static final String TAG = "RepeatRequestInterceptor"; private final ConcurrentHashMap requestIdsMap = new ConcurrentHashMap<>(); public static final String REPEAT_REQUEST_PROTOCOL = "OKHTTP_REPEAT_REQUEST_PROTOCOL"; diff --git a/app/src/main/java/com/uiui/videoplayer/utils/JGYUtils.java b/app/src/main/java/com/uiui/videoplayer/utils/JGYUtils.java index aab1d2a..4f12a40 100644 --- a/app/src/main/java/com/uiui/videoplayer/utils/JGYUtils.java +++ b/app/src/main/java/com/uiui/videoplayer/utils/JGYUtils.java @@ -14,7 +14,7 @@ import com.google.gson.JsonObject; import java.io.File; public class JGYUtils { - private static final String TAG = JGYUtils.class.getSimpleName(); + private static final String TAG = "JGYUtils"; @SuppressLint("StaticFieldLeak") private static JGYUtils sInstance; private Context mContext; diff --git a/app/src/main/java/com/uiui/videoplayer/view/BGABaseAdapterUtil.java b/app/src/main/java/com/uiui/videoplayer/view/BGABaseAdapterUtil.java index d8568c3..aba62bb 100644 --- a/app/src/main/java/com/uiui/videoplayer/view/BGABaseAdapterUtil.java +++ b/app/src/main/java/com/uiui/videoplayer/view/BGABaseAdapterUtil.java @@ -7,11 +7,12 @@ import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import androidx.annotation.ColorRes; -import androidx.annotation.DimenRes; import android.util.Log; import android.util.TypedValue; +import androidx.annotation.ColorRes; +import androidx.annotation.DimenRes; + import java.util.List; /** @@ -29,11 +30,11 @@ public class BGABaseAdapterUtil { if (app == null) throw new IllegalStateException("Static initialization of Applications must be on main thread."); } catch (final Exception e) { - Log.e(BGABaseAdapterUtil.class.getSimpleName(), "Failed to get current application from AppGlobals." + e.getMessage()); + Log.e("BGABaseAdapterUtil", "Failed to get current application from AppGlobals." + e.getMessage()); try { app = (Application) Class.forName("android.app.ActivityThread").getMethod("currentApplication").invoke(null); } catch (final Exception ex) { - Log.e(BGABaseAdapterUtil.class.getSimpleName(), "Failed to get current application from ActivityThread." + e.getMessage()); + Log.e("BGABaseAdapterUtil", "Failed to get current application from ActivityThread." + e.getMessage()); } } finally { sApp = app; diff --git a/app/src/main/java/com/uiui/videoplayer/view/EquallyDividedItemDecoration.java b/app/src/main/java/com/uiui/videoplayer/view/EquallyDividedItemDecoration.java index 6116546..f6eb4ed 100644 --- a/app/src/main/java/com/uiui/videoplayer/view/EquallyDividedItemDecoration.java +++ b/app/src/main/java/com/uiui/videoplayer/view/EquallyDividedItemDecoration.java @@ -8,7 +8,7 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; public class EquallyDividedItemDecoration extends RecyclerView.ItemDecoration { - private static final String TAG = EquallyDividedItemDecoration.class.getSimpleName(); + private static final String TAG = "EquallyDividedItemDecoration"; private int mSpanCount;// 横条目数量 private int mHalfRowSpacing;// 行间距的一半 diff --git a/app/src/main/res/drawable-hdpi/icon_back.png b/app/src/main/res/drawable-hdpi/icon_back.png index 1375742..32be961 100644 Binary files a/app/src/main/res/drawable-hdpi/icon_back.png and b/app/src/main/res/drawable-hdpi/icon_back.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_back_black.png b/app/src/main/res/drawable-hdpi/icon_back_black.png new file mode 100644 index 0000000..a566684 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_back_black.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_family.png b/app/src/main/res/drawable-hdpi/icon_family.png new file mode 100644 index 0000000..47e48a9 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_family.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_info.png b/app/src/main/res/drawable-hdpi/icon_info.png new file mode 100644 index 0000000..d028016 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_info.png differ diff --git a/app/src/main/res/drawable/alarm_pressed_background.xml b/app/src/main/res/drawable/alarm_pressed_background.xml index 1aa7340..0883976 100644 --- a/app/src/main/res/drawable/alarm_pressed_background.xml +++ b/app/src/main/res/drawable/alarm_pressed_background.xml @@ -3,8 +3,9 @@ - diff --git a/app/src/main/res/drawable/background_add.xml b/app/src/main/res/drawable/background_add.xml new file mode 100644 index 0000000..9bf867d --- /dev/null +++ b/app/src/main/res/drawable/background_add.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bt_cancel_normnl.xml b/app/src/main/res/drawable/bt_cancel_normnl.xml index df3dd39..17a6232 100644 --- a/app/src/main/res/drawable/bt_cancel_normnl.xml +++ b/app/src/main/res/drawable/bt_cancel_normnl.xml @@ -6,8 +6,8 @@ android:color="@color/btn_cancel" /> + android:topLeftRadius="40dp" + android:topRightRadius="40dp" + android:bottomLeftRadius="40dp" + android:bottomRightRadius="40dp" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/bt_cancel_pressed.xml b/app/src/main/res/drawable/bt_cancel_pressed.xml index 7e12d4d..c6fb43b 100644 --- a/app/src/main/res/drawable/bt_cancel_pressed.xml +++ b/app/src/main/res/drawable/bt_cancel_pressed.xml @@ -6,8 +6,8 @@ android:color="@color/btn_cancel_pressed" /> + android:topLeftRadius="40dp" + android:topRightRadius="40dp" + android:bottomLeftRadius="40dp" + android:bottomRightRadius="40dp" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/bt_sure_normnl.xml b/app/src/main/res/drawable/bt_sure_normnl.xml index aec3440..e57d9bd 100644 --- a/app/src/main/res/drawable/bt_sure_normnl.xml +++ b/app/src/main/res/drawable/bt_sure_normnl.xml @@ -6,8 +6,8 @@ android:color="@color/btn_sure" /> + android:topLeftRadius="40dp" + android:topRightRadius="40dp" + android:bottomLeftRadius="40dp" + android:bottomRightRadius="40dp" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/bt_sure_pressed.xml b/app/src/main/res/drawable/bt_sure_pressed.xml index aec3440..e57d9bd 100644 --- a/app/src/main/res/drawable/bt_sure_pressed.xml +++ b/app/src/main/res/drawable/bt_sure_pressed.xml @@ -6,8 +6,8 @@ android:color="@color/btn_sure" /> + android:topLeftRadius="40dp" + android:topRightRadius="40dp" + android:bottomLeftRadius="40dp" + android:bottomRightRadius="40dp" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/bt_vip_backround.xml b/app/src/main/res/drawable/bt_vip_backround.xml index 3e590f9..c567672 100644 --- a/app/src/main/res/drawable/bt_vip_backround.xml +++ b/app/src/main/res/drawable/bt_vip_backround.xml @@ -4,14 +4,14 @@ + android:bottomLeftRadius="16dp" + android:bottomRightRadius="16dp" + android:topLeftRadius="16dp" + android:topRightRadius="16dp" /> + android:bottom="4dp" + android:left="12dp" + android:right="12dp" + android:top="4dp" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/pg.xml b/app/src/main/res/drawable/pg.xml new file mode 100644 index 0000000..4f3104c --- /dev/null +++ b/app/src/main/res/drawable/pg.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/space_background.xml b/app/src/main/res/drawable/space_background.xml index ffe2cc5..75c8775 100644 --- a/app/src/main/res/drawable/space_background.xml +++ b/app/src/main/res/drawable/space_background.xml @@ -4,14 +4,14 @@ + android:bottomLeftRadius="8dp" + android:bottomRightRadius="8dp" + android:topLeftRadius="8dp" + android:topRightRadius="8dp" /> + android:bottom="4dp" + android:left="4dp" + android:right="4dp" + android:top="4dp" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/tv_vip_background.xml b/app/src/main/res/drawable/tv_vip_background.xml new file mode 100644 index 0000000..be9c073 --- /dev/null +++ b/app/src/main/res/drawable/tv_vip_background.xml @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/vip_background.xml b/app/src/main/res/drawable/vip_background.xml index f5e4b3c..dae48ec 100644 --- a/app/src/main/res/drawable/vip_background.xml +++ b/app/src/main/res/drawable/vip_background.xml @@ -3,15 +3,15 @@ + android:bottomLeftRadius="8dp" + android:bottomRightRadius="8dp" + android:topLeftRadius="8dp" + android:topRightRadius="8dp" /> + android:bottom="8dp" + android:left="8dp" + android:right="8dp" + android:top="8dp" /> \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_tiktok.xml b/app/src/main/res/layout-land/activity_tiktok.xml deleted file mode 100644 index 3fb6c33..0000000 --- a/app/src/main/res/layout-land/activity_tiktok.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_video.xml b/app/src/main/res/layout-land/activity_video.xml deleted file mode 100644 index 6c8f7e6..0000000 --- a/app/src/main/res/layout-land/activity_video.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_tiktok.xml b/app/src/main/res/layout-port/activity_tiktok.xml deleted file mode 100644 index 3fb6c33..0000000 --- a/app/src/main/res/layout-port/activity_tiktok.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_video.xml b/app/src/main/res/layout-port/activity_video.xml deleted file mode 100644 index 139e3bd..0000000 --- a/app/src/main/res/layout-port/activity_video.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout-port/custom_dialog.xml b/app/src/main/res/layout-port/custom_dialog.xml deleted file mode 100644 index e64c8f3..0000000 --- a/app/src/main/res/layout-port/custom_dialog.xml +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -