version:
bugfixes:修复不能下载视频 update:修改下载列表样式,文件位置统一
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
package com.hainaos.vc.activity.category.local;
|
package com.hainaos.vc.activity.category.local;
|
||||||
|
|
||||||
import android.os.Environment;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
@@ -44,7 +43,7 @@ public class LocalCategoryViewModel extends BaseViewModel<ActivityCategoryLocalB
|
|||||||
public MutableLiveData<ArrayList<LocalVideoInfo>> mLocalVideoInfosData = new MutableLiveData<>();
|
public MutableLiveData<ArrayList<LocalVideoInfo>> mLocalVideoInfosData = new MutableLiveData<>();
|
||||||
|
|
||||||
public void getViedoList(String dir) {
|
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
|
Observable
|
||||||
.fromCallable(new Callable<List<String>>() {
|
.fromCallable(new Callable<List<String>>() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -3,8 +3,11 @@ package com.hainaos.vc.activity.category.online;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.Observer;
|
import androidx.lifecycle.Observer;
|
||||||
import androidx.recyclerview.widget.DefaultItemAnimator;
|
import androidx.recyclerview.widget.DefaultItemAnimator;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||||
|
|
||||||
import com.hainaos.vc.R;
|
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.utils.ScreenUtils;
|
||||||
import com.hainaos.vc.view.CustomDialog;
|
import com.hainaos.vc.view.CustomDialog;
|
||||||
import com.hainaos.vc.view.EquallyDividedItemDecoration;
|
import com.hainaos.vc.view.EquallyDividedItemDecoration;
|
||||||
import com.hainaos.vc.view.RecycleGridLayoutManager;
|
|
||||||
import com.hjq.toast.Toaster;
|
import com.hjq.toast.Toaster;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -50,7 +52,9 @@ public class CategoryVideoActivity extends BaseMvvmActivity<CategoryVideoViewMod
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void initView() {
|
protected void initView() {
|
||||||
RecycleGridLayoutManager manager = new RecycleGridLayoutManager(CategoryVideoActivity.this, SPAN_COUNT);
|
// RecycleGridLayoutManager manager = new RecycleGridLayoutManager(CategoryVideoActivity.this, SPAN_COUNT);
|
||||||
|
LinearLayoutManager manager = new LinearLayoutManager(CategoryVideoActivity.this);
|
||||||
|
manager.setOrientation(RecyclerView.VERTICAL);
|
||||||
mViewDataBinding.rvVideo.setLayoutManager(manager);
|
mViewDataBinding.rvVideo.setLayoutManager(manager);
|
||||||
|
|
||||||
EquallyDividedItemDecoration equallyDividedItemDecoration = new EquallyDividedItemDecoration(SPAN_COUNT, ScreenUtils.dip2px(CategoryVideoActivity.this, 1));
|
EquallyDividedItemDecoration equallyDividedItemDecoration = new EquallyDividedItemDecoration(SPAN_COUNT, ScreenUtils.dip2px(CategoryVideoActivity.this, 1));
|
||||||
@@ -68,6 +72,16 @@ public class CategoryVideoActivity extends BaseMvvmActivity<CategoryVideoViewMod
|
|||||||
mViewModel.getVideoList(mCategoryInfo.getUuid(), mPasswd);
|
mViewModel.getVideoList(mCategoryInfo.getUuid(), mPasswd);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
mViewDataBinding.rvVideo.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
|
@Override
|
||||||
|
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
|
||||||
|
super.onScrolled(recyclerView, dx, dy);
|
||||||
|
|
||||||
|
// canScrollVertically(-1) 检查是否可以往下拉(即是否不在顶部)
|
||||||
|
// 如果返回 true,说明不在顶部,此时禁用 SwipeRefreshLayout 的下拉手势
|
||||||
|
mViewDataBinding.swipeRefreshLayout.setEnabled(!recyclerView.canScrollVertically(-1));
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -106,6 +120,7 @@ public class CategoryVideoActivity extends BaseMvvmActivity<CategoryVideoViewMod
|
|||||||
} else {
|
} else {
|
||||||
mViewDataBinding.clNodata.setVisibility(View.GONE);
|
mViewDataBinding.clNodata.setVisibility(View.GONE);
|
||||||
mViewDataBinding.rvVideo.setVisibility(View.VISIBLE);
|
mViewDataBinding.rvVideo.setVisibility(View.VISIBLE);
|
||||||
|
mViewDataBinding.tvTotal.setText(String.format(getString(R.string.video_total), categoryVideoInfos.size()));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Toaster.show(baseResponse.msg);
|
Toaster.show(baseResponse.msg);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.hainaos.vc.activity.category.online;
|
package com.hainaos.vc.activity.category.online;
|
||||||
|
|
||||||
import android.os.Environment;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
@@ -45,7 +44,7 @@ public class CategoryVideoViewModel extends BaseViewModel<ActivityCategoryVideoB
|
|||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public void getViedoList(String dir) {
|
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);
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
String[] strings = file.list();
|
String[] strings = file.list();
|
||||||
Log.e(TAG, "getViedoList: " + Arrays.toString(strings));
|
Log.e(TAG, "getViedoList: " + Arrays.toString(strings));
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import com.hainaos.vc.base.BaseFragmentPagerAdapter;
|
|||||||
import com.hainaos.vc.base.mvvm.BaseMvvmActivity;
|
import com.hainaos.vc.base.mvvm.BaseMvvmActivity;
|
||||||
import com.hainaos.vc.bean.uiuios.AppUpdateInfo;
|
import com.hainaos.vc.bean.uiuios.AppUpdateInfo;
|
||||||
import com.hainaos.vc.config.CommonConfig;
|
import com.hainaos.vc.config.CommonConfig;
|
||||||
|
import com.hainaos.vc.config.Permissions;
|
||||||
import com.hainaos.vc.databinding.ActivityMainBinding;
|
import com.hainaos.vc.databinding.ActivityMainBinding;
|
||||||
import com.hainaos.vc.dialog.PermissionsDialog;
|
import com.hainaos.vc.dialog.PermissionsDialog;
|
||||||
import com.hainaos.vc.dialog.PrivacyPolicyDialog;
|
import com.hainaos.vc.dialog.PrivacyPolicyDialog;
|
||||||
@@ -61,11 +62,6 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
|||||||
|
|
||||||
private static final int REQUEST_PERMISSION_CODE = 200;
|
private static final int REQUEST_PERMISSION_CODE = 200;
|
||||||
|
|
||||||
String[] permissions = new String[]{
|
|
||||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
|
||||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
|
||||||
};
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean setNightMode() {
|
public boolean setNightMode() {
|
||||||
return true;
|
return true;
|
||||||
@@ -205,7 +201,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void checkSelfPermission() {
|
private void checkSelfPermission() {
|
||||||
if (XXPermissions.isGranted(MainActivity.this, permissions)) {
|
if (XXPermissions.isGranted(MainActivity.this, Permissions.STORAGE_PERMISSIONS)) {
|
||||||
initDatas();
|
initDatas();
|
||||||
} else {
|
} else {
|
||||||
showPermissionsDialog();
|
showPermissionsDialog();
|
||||||
@@ -226,7 +222,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
|||||||
public void onGranted() {
|
public void onGranted() {
|
||||||
mPermissionsDialog.dismiss();
|
mPermissionsDialog.dismiss();
|
||||||
XXPermissions.with(MainActivity.this)
|
XXPermissions.with(MainActivity.this)
|
||||||
.permission(permissions)
|
.permission(Permissions.STORAGE_PERMISSIONS)
|
||||||
.request(new OnPermissionCallback() {
|
.request(new OnPermissionCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onGranted(@androidx.annotation.NonNull List<String> permissions, boolean allGranted) {
|
public void onGranted(@androidx.annotation.NonNull List<String> permissions, boolean allGranted) {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.hainaos.vc.adapter;
|
package com.hainaos.vc.adapter;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.media.MediaMetadataRetriever;
|
import android.media.MediaMetadataRetriever;
|
||||||
@@ -11,6 +12,7 @@ import android.view.LayoutInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
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.R;
|
||||||
import com.hainaos.vc.activity.preview.VideoPreviewActivity;
|
import com.hainaos.vc.activity.preview.VideoPreviewActivity;
|
||||||
import com.hainaos.vc.bean.CategoryVideoInfo;
|
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.FileUtils;
|
||||||
import com.hainaos.vc.utils.GlideLoadUtils;
|
import com.hainaos.vc.utils.GlideLoadUtils;
|
||||||
import com.hainaos.vc.utils.TimeUtils;
|
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 com.shehuan.niv.NiceImageView;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -75,15 +84,31 @@ public class CategoryVideoAdapter extends RecyclerView.Adapter<CategoryVideoAdap
|
|||||||
String fileName = FileUtils.getFileNamefromURL(url);
|
String fileName = FileUtils.getFileNamefromURL(url);
|
||||||
File file = new File(FileUtils.getHainaVideoPath(mContext) + mDirName + File.separator + fileName);
|
File file = new File(FileUtils.getHainaVideoPath(mContext) + mDirName + File.separator + fileName);
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
holder.iv_status.setVisibility(View.GONE);
|
holder.tv_download.setText("删除");
|
||||||
|
holder.tv_download.setBackground(mContext.getDrawable(R.drawable.bg_delete_button));
|
||||||
} else {
|
} else {
|
||||||
holder.iv_status.setVisibility(View.VISIBLE);
|
holder.tv_download.setText("下载");
|
||||||
|
holder.tv_download.setBackground(mContext.getDrawable(R.drawable.bg_download_button));
|
||||||
}
|
}
|
||||||
String cover = categoryVideoInfo.getCover();
|
String cover = categoryVideoInfo.getCover();
|
||||||
GlideLoadUtils.getInstance().glideLoad(mContext, cover, holder.video_image);
|
GlideLoadUtils.getInstance().glideLoad(mContext, cover, holder.video_image);
|
||||||
|
|
||||||
holder.duration.setText(TimeUtils.TimeFormat(categoryVideoInfo.getDuration() * 1000));
|
holder.duration.setText(TimeUtils.TimeFormat(categoryVideoInfo.getDuration() * 1000));
|
||||||
|
|
||||||
|
holder.tv_download.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if (file.exists()) {
|
||||||
|
showDialog(file.getAbsolutePath(), position);
|
||||||
|
} else {
|
||||||
|
if (XXPermissions.isGranted(mContext, Permissions.STORAGE_PERMISSIONS)) {
|
||||||
|
FileUtils.ariaDownload(mContext, mDirName, url, md5);
|
||||||
|
} else {
|
||||||
|
showPermissionsDialog(mContext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
holder.video_image.setOnClickListener(new View.OnClickListener() {
|
holder.video_image.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
@@ -93,12 +118,86 @@ public class CategoryVideoAdapter extends RecyclerView.Adapter<CategoryVideoAdap
|
|||||||
intent.putExtra("url", file.getAbsolutePath());
|
intent.putExtra("url", file.getAbsolutePath());
|
||||||
mContext.startActivity(intent);
|
mContext.startActivity(intent);
|
||||||
} else {
|
} else {
|
||||||
FileUtils.ariaDownload(mContext, mDirName, url, md5);
|
Toaster.show("请先下载视频");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private PermissionsDialog mPermissionsDialog;
|
||||||
|
|
||||||
|
private void showPermissionsDialog(Context context) {
|
||||||
|
if (mPermissionsDialog != null) {
|
||||||
|
mPermissionsDialog.dismiss();
|
||||||
|
mPermissionsDialog = null;
|
||||||
|
}
|
||||||
|
mPermissionsDialog = new PermissionsDialog(context);
|
||||||
|
mPermissionsDialog.setPermissionsCallback(new PermissionsDialog.PermissionsCallback() {
|
||||||
|
@Override
|
||||||
|
public void onGranted() {
|
||||||
|
mPermissionsDialog.dismiss();
|
||||||
|
XXPermissions.with(context)
|
||||||
|
.permission(Permissions.STORAGE_PERMISSIONS)
|
||||||
|
.request(new OnPermissionCallback() {
|
||||||
|
@Override
|
||||||
|
public void onGranted(@androidx.annotation.NonNull List<String> 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<String> 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) {
|
public void removeItem(int position) {
|
||||||
if (null != mLocalVideoInfos.get(position)) {
|
if (null != mLocalVideoInfos.get(position)) {
|
||||||
@@ -123,16 +222,16 @@ public class CategoryVideoAdapter extends RecyclerView.Adapter<CategoryVideoAdap
|
|||||||
}
|
}
|
||||||
|
|
||||||
static class VideoHolder extends RecyclerView.ViewHolder {
|
static class VideoHolder extends RecyclerView.ViewHolder {
|
||||||
NiceImageView video_image, iv_status;
|
NiceImageView video_image;
|
||||||
TextView title, duration;
|
TextView title, duration, tv_download;
|
||||||
ConstraintLayout root;
|
ConstraintLayout root;
|
||||||
|
|
||||||
public VideoHolder(@NonNull View itemView) {
|
public VideoHolder(@NonNull View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
video_image = itemView.findViewById(R.id.video_image);
|
video_image = itemView.findViewById(R.id.video_image);
|
||||||
iv_status = itemView.findViewById(R.id.iv_status);
|
|
||||||
title = itemView.findViewById(R.id.title_text);
|
title = itemView.findViewById(R.id.title_text);
|
||||||
duration = itemView.findViewById(R.id.duration);
|
duration = itemView.findViewById(R.id.duration);
|
||||||
|
tv_download = itemView.findViewById(R.id.tv_download);
|
||||||
root = itemView.findViewById(R.id.root);
|
root = itemView.findViewById(R.id.root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,7 +279,7 @@ public class CategoryVideoAdapter extends RecyclerView.Adapter<CategoryVideoAdap
|
|||||||
try {
|
try {
|
||||||
Log.e(TAG, "taskFail: e " + e.getMessage());
|
Log.e(TAG, "taskFail: e " + e.getMessage());
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Log.e(TAG, "taskFail: ex " + e.getMessage());
|
Log.e(TAG, "taskFail: ex " + ex.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
|
|||||||
10
app/src/main/java/com/hainaos/vc/config/Permissions.java
Normal file
10
app/src/main/java/com/hainaos/vc/config/Permissions.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package com.hainaos.vc.config;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
|
|
||||||
|
public class Permissions {
|
||||||
|
public static final String[] STORAGE_PERMISSIONS = new String[]{
|
||||||
|
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||||
|
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -6,6 +6,8 @@ import android.os.Environment;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
import com.arialyy.aria.core.Aria;
|
import com.arialyy.aria.core.Aria;
|
||||||
import com.hainaos.vc.bean.AppInfo;
|
import com.hainaos.vc.bean.AppInfo;
|
||||||
import com.hainaos.vc.bean.uiuios.AppUpdateInfo;
|
import com.hainaos.vc.bean.uiuios.AppUpdateInfo;
|
||||||
@@ -76,7 +78,8 @@ public class FileUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getHainaVideoPath(Context context) {
|
public static String getHainaVideoPath(Context context) {
|
||||||
String path = Environment.getExternalStorageDirectory() + File.separator + "haina";
|
// String path = Environment.getExternalStorageDirectory() + File.separator + "haina";
|
||||||
|
String path = ContextCompat.getExternalFilesDirs(context, Environment.DIRECTORY_DOWNLOADS)[0].getAbsolutePath() + File.separator + "haina";
|
||||||
return path + File.separator;
|
return path + File.separator;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,7 +93,7 @@ public class FileUtils {
|
|||||||
String downLoadPath = getHainaVideoPath(context) + dirName + File.separator;
|
String downLoadPath = getHainaVideoPath(context) + dirName + File.separator;
|
||||||
File dirFile = new File(downLoadPath);
|
File dirFile = new File(downLoadPath);
|
||||||
if (!dirFile.exists()) {
|
if (!dirFile.exists()) {
|
||||||
dirFile.mkdirs();
|
Log.e(TAG, "ariaDownload: mkdirs = " + dirFile.mkdirs());
|
||||||
}
|
}
|
||||||
String fileName = getFileNamefromURL(url);
|
String fileName = getFileNamefromURL(url);
|
||||||
File file = new File(downLoadPath + fileName);
|
File file = new File(downLoadPath + fileName);
|
||||||
|
|||||||
@@ -79,9 +79,9 @@ public class LenovoCsdkUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getSerial() {
|
public String getSerial() {
|
||||||
if (BuildConfig.DEBUG) {
|
// if (BuildConfig.DEBUG) {
|
||||||
return "T98005H1024GB32GB";
|
// return "T98005H1024GB32GB";
|
||||||
}
|
// }
|
||||||
|
|
||||||
String sn = mCSDKManager.getDeviceInfo(2);
|
String sn = mCSDKManager.getDeviceInfo(2);
|
||||||
return sn;
|
return sn;
|
||||||
|
|||||||
15
app/src/main/res/drawable/bg_delete_button.xml
Normal file
15
app/src/main/res/drawable/bg_delete_button.xml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
|
||||||
|
<solid android:color="@color/red" />
|
||||||
|
|
||||||
|
<corners android:radius="16dp" />
|
||||||
|
|
||||||
|
<padding
|
||||||
|
android:bottom="4dp"
|
||||||
|
android:left="12dp"
|
||||||
|
android:right="12dp"
|
||||||
|
android:top="4dp" />
|
||||||
|
|
||||||
|
</shape>
|
||||||
15
app/src/main/res/drawable/bg_download_button.xml
Normal file
15
app/src/main/res/drawable/bg_download_button.xml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
|
||||||
|
<solid android:color="#0084FF" />
|
||||||
|
|
||||||
|
<corners android:radius="16dp" />
|
||||||
|
|
||||||
|
<padding
|
||||||
|
android:bottom="4dp"
|
||||||
|
android:left="12dp"
|
||||||
|
android:right="12dp"
|
||||||
|
android:top="4dp" />
|
||||||
|
|
||||||
|
</shape>
|
||||||
@@ -28,6 +28,7 @@
|
|||||||
app:layout_constraintTop_toTopOf="parent">
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/constraintLayout2"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:onClick="@{click::exit}"
|
android:onClick="@{click::exit}"
|
||||||
@@ -51,18 +52,34 @@
|
|||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_title"
|
android:id="@+id/tv_title"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
android:text="@{title}"
|
android:text="@{title}"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="18sp"
|
android:textSize="18sp"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toStartOf="@+id/tv_total"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toEndOf="@+id/constraintLayout2"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
tools:text="海纳美业学习机" />
|
tools:text="海纳美业学习机" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_total"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:text="视频:0个"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:text="@string/video_total" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
@@ -87,9 +104,9 @@
|
|||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/cl_nodata"
|
android:id="@+id/cl_nodata"
|
||||||
android:visibility="gone"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
|||||||
@@ -10,41 +10,50 @@
|
|||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/constraintLayout"
|
android:id="@+id/constraintLayout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="200dp"
|
android:layout_height="88dp"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
<com.shehuan.niv.NiceImageView
|
<com.shehuan.niv.NiceImageView
|
||||||
android:id="@+id/video_image"
|
android:id="@+id/video_image"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="80dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="80dp"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
android:adjustViewBounds="true"
|
android:adjustViewBounds="true"
|
||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
app:is_cover_src="true" />
|
app:is_cover_src="true"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<com.shehuan.niv.NiceImageView
|
<TextView
|
||||||
android:id="@+id/iv_status"
|
android:id="@+id/tv_download"
|
||||||
android:layout_width="32dp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="32dp"
|
android:layout_height="wrap_content"
|
||||||
android:src="@drawable/status_download"
|
android:layout_marginEnd="16dp"
|
||||||
|
android:background="@drawable/bg_download_button"
|
||||||
|
android:text="下载"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="10sp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/title_text"
|
android:id="@+id/title_text"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginHorizontal="4dp"
|
android:layout_marginHorizontal="8dp"
|
||||||
android:layout_marginTop="4dp"
|
|
||||||
android:maxLines="3"
|
android:maxLines="3"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="12sp"
|
android:textSize="15sp"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintEnd_toStartOf="@+id/tv_download"
|
||||||
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/video_image"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_bias="0.15"
|
||||||
tools:text="标题" />
|
tools:text="标题" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
|||||||
@@ -11,4 +11,5 @@
|
|||||||
<string name="privacy_agreement_content">\t\t\t\t请你务必审慎阅读、充分理解“用户协议”,包括但不限于:为了向你提供即时通讯,内容分享等服务,
|
<string name="privacy_agreement_content">\t\t\t\t请你务必审慎阅读、充分理解“用户协议”,包括但不限于:为了向你提供即时通讯,内容分享等服务,
|
||||||
我们需要收集你的设备信息、操作日志等个人信息。
|
我们需要收集你的设备信息、操作日志等个人信息。
|
||||||
\n\t\t\t\t你可阅读《用户协议》了解详细信息。如你同意,请点击“同意”开始接受我们的服务</string>
|
\n\t\t\t\t你可阅读《用户协议》了解详细信息。如你同意,请点击“同意”开始接受我们的服务</string>
|
||||||
|
<string name="video_total">视频:%d个</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user