From d5ba38e04eb310c3508bbaa7aa11721eb4022a7b Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Fri, 6 Feb 2026 15:39:11 +0800 Subject: [PATCH] =?UTF-8?q?version:=20bugfixes:=E4=BF=AE=E5=A4=8D=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E4=B8=8B=E8=BD=BD=E8=A7=86=E9=A2=91=20update:?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=8B=E8=BD=BD=E5=88=97=E8=A1=A8=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=EF=BC=8C=E6=96=87=E4=BB=B6=E4=BD=8D=E7=BD=AE=E7=BB=9F?= =?UTF-8?q?=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../local/LocalCategoryViewModel.java | 3 +- .../online/CategoryVideoActivity.java | 19 ++- .../online/CategoryVideoViewModel.java | 3 +- .../vc/activity/main/MainActivity.java | 10 +- .../vc/adapter/CategoryVideoAdapter.java | 113 ++++++++++++++++-- .../com/hainaos/vc/config/Permissions.java | 10 ++ .../java/com/hainaos/vc/utils/FileUtils.java | 7 +- .../com/hainaos/vc/utils/LenovoCsdkUtil.java | 6 +- .../main/res/drawable/bg_delete_button.xml | 15 +++ .../main/res/drawable/bg_download_button.xml | 15 +++ .../res/layout/activity_category_video.xml | 27 ++++- .../main/res/layout/item_category_video.xml | 39 +++--- app/src/main/res/values/strings.xml | 1 + 13 files changed, 223 insertions(+), 45 deletions(-) create mode 100644 app/src/main/java/com/hainaos/vc/config/Permissions.java create mode 100644 app/src/main/res/drawable/bg_delete_button.xml create mode 100644 app/src/main/res/drawable/bg_download_button.xml diff --git a/app/src/main/java/com/hainaos/vc/activity/category/local/LocalCategoryViewModel.java b/app/src/main/java/com/hainaos/vc/activity/category/local/LocalCategoryViewModel.java index d099501..52ad640 100644 --- a/app/src/main/java/com/hainaos/vc/activity/category/local/LocalCategoryViewModel.java +++ b/app/src/main/java/com/hainaos/vc/activity/category/local/LocalCategoryViewModel.java @@ -1,6 +1,5 @@ package com.hainaos.vc.activity.category.local; -import android.os.Environment; import android.util.Log; import androidx.lifecycle.MutableLiveData; @@ -44,7 +43,7 @@ public class LocalCategoryViewModel extends BaseViewModel> mLocalVideoInfosData = new MutableLiveData<>(); public void getViedoList(String dir) { - File file = new File(Environment.getExternalStorageDirectory() + File.separator + "haina" + File.separator + dir); + File file = new File(FileUtils.getHainaVideoPath(getCtx()) + dir); Observable .fromCallable(new Callable>() { @Override diff --git a/app/src/main/java/com/hainaos/vc/activity/category/online/CategoryVideoActivity.java b/app/src/main/java/com/hainaos/vc/activity/category/online/CategoryVideoActivity.java index 3281910..2b127e2 100644 --- a/app/src/main/java/com/hainaos/vc/activity/category/online/CategoryVideoActivity.java +++ b/app/src/main/java/com/hainaos/vc/activity/category/online/CategoryVideoActivity.java @@ -3,8 +3,11 @@ package com.hainaos.vc.activity.category.online; import android.content.Intent; import android.view.View; +import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.recyclerview.widget.DefaultItemAnimator; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.hainaos.vc.R; @@ -20,7 +23,6 @@ import com.hainaos.vc.utils.FileUtils; import com.hainaos.vc.utils.ScreenUtils; import com.hainaos.vc.view.CustomDialog; import com.hainaos.vc.view.EquallyDividedItemDecoration; -import com.hainaos.vc.view.RecycleGridLayoutManager; import com.hjq.toast.Toaster; import java.io.File; @@ -50,7 +52,9 @@ public class CategoryVideoActivity extends BaseMvvmActivity permissions, boolean allGranted) { diff --git a/app/src/main/java/com/hainaos/vc/adapter/CategoryVideoAdapter.java b/app/src/main/java/com/hainaos/vc/adapter/CategoryVideoAdapter.java index 0caff0e..bf5a0b9 100644 --- a/app/src/main/java/com/hainaos/vc/adapter/CategoryVideoAdapter.java +++ b/app/src/main/java/com/hainaos/vc/adapter/CategoryVideoAdapter.java @@ -1,6 +1,7 @@ package com.hainaos.vc.adapter; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.media.MediaMetadataRetriever; @@ -11,6 +12,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; @@ -23,9 +25,16 @@ import com.arialyy.aria.core.task.DownloadTask; import com.hainaos.vc.R; import com.hainaos.vc.activity.preview.VideoPreviewActivity; import com.hainaos.vc.bean.CategoryVideoInfo; +import com.hainaos.vc.config.Permissions; +import com.hainaos.vc.dialog.PermissionsDialog; import com.hainaos.vc.utils.FileUtils; import com.hainaos.vc.utils.GlideLoadUtils; import com.hainaos.vc.utils.TimeUtils; +import com.hainaos.vc.utils.ToastUtil; +import com.hainaos.vc.view.CustomDialog; +import com.hjq.permissions.OnPermissionCallback; +import com.hjq.permissions.XXPermissions; +import com.hjq.toast.Toaster; import com.shehuan.niv.NiceImageView; import java.io.File; @@ -75,15 +84,31 @@ public class CategoryVideoAdapter extends RecyclerView.Adapter permissions, boolean allGranted) { + Log.e(TAG, "onGranted: permissions = " + permissions + " allGranted = " + allGranted); + if (!allGranted) { + Toast.makeText(context, "存储权限未正常授予", Toast.LENGTH_SHORT).show(); + return; + } + Log.e(TAG, "onGranted: 获取存储权限成功"); + } + + @Override + public void onDenied(@androidx.annotation.NonNull List permissions, boolean doNotAskAgain) { + Log.e(TAG, "onDenied: permissions = " + permissions + " doNotAskAgain = " + doNotAskAgain); + if (doNotAskAgain) { + Toast.makeText(context, "被永久拒绝授权,请手动授予存储权限", Toast.LENGTH_SHORT).show(); + // 如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.startPermissionActivity(context, permissions); + } else { + Log.e(TAG, "onGranted: 获取存储权限失败"); + } + } + }); + } + + @Override + public void onDenied() { + mPermissionsDialog.dismiss(); + } + }); + mPermissionsDialog.setContent("本软件需要获取存储权限保存照片和视频,授权之后才可以正常使用"); + mPermissionsDialog.show(); + } + + private void showDialog(String path, int position) { + CustomDialog dialog = new CustomDialog(mContext); + dialog.setTitle("删除文件") + .setMessage("确定要删除文件 " + FileUtils.getFileName(path) + "吗") + .setPositive("确定") + .setNegtive("取消") + .setOnClickBottomListener(new CustomDialog.OnClickBottomListener() { + @Override + public void onPositiveClick() { + dialog.dismiss(); + File file = new File(path); + if (file.delete()) { + removeItem(position); + ToastUtil.show("删除成功"); + } else { + ToastUtil.show("删除失败,检查权限是否开启"); + } + } + + @Override + public void onNegtiveClick() { + dialog.dismiss(); + } + }); + dialog.show(); + } public void removeItem(int position) { if (null != mLocalVideoInfos.get(position)) { @@ -123,16 +222,16 @@ public class CategoryVideoAdapter extends RecyclerView.Adapter + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_download_button.xml b/app/src/main/res/drawable/bg_download_button.xml new file mode 100644 index 0000000..016b8f2 --- /dev/null +++ b/app/src/main/res/drawable/bg_download_button.xml @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_category_video.xml b/app/src/main/res/layout/activity_category_video.xml index 441d2b6..0aa5714 100644 --- a/app/src/main/res/layout/activity_category_video.xml +++ b/app/src/main/res/layout/activity_category_video.xml @@ -28,6 +28,7 @@ app:layout_constraintTop_toTopOf="parent"> + + + android:layout_height="match_parent" + android:visibility="gone"> + app:is_cover_src="true" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - \t\t\t\t请你务必审慎阅读、充分理解“用户协议”,包括但不限于:为了向你提供即时通讯,内容分享等服务, 我们需要收集你的设备信息、操作日志等个人信息。 \n\t\t\t\t你可阅读《用户协议》了解详细信息。如你同意,请点击“同意”开始接受我们的服务 + 视频:%d个