【无标题】

1. 说明

在文件夹管理这个模块中,我们可以新增文件夹、编辑文件夹和删除文件夹。

我们在新增文件夹时需要选择时私人文件夹还是共享文件夹

  • 如果我们选择的时私人文件夹,那么我们选哟选择是否需要加密且可访问成员我们只能选择一位;
  • 如果我们选择的时共享文件夹,则不需要选择是否加密且可访问成员可以选择多个。

我们在编辑文件夹时,如果把存储分区修改,则会提示需要一些处理时间,所以文件夹会有修改中的状态,而修改文件夹存储不一定成功,所以存在修改失败的状态。

同样,删除文件夹也需要一定时间且不一定成功,因此文件夹也存在删除中和删除失败的状态。

当然,如果时加密文件夹,我们可以修改文件夹的密码,在文件夹管理的文件列表点击要修改文件项的三个点就可以了。

除此之外,我们还可以在设置中设置有新成员加入时,系统自动为该成员创建私人文件夹的位置和设置成员退出或被移除时是否自动删除该成员的私人文件。

其中,修改失败后,点击确定(相当于取消修改)之后可以进入文件夹详情;

删除失败之后只能重试,不能做其它操作。

当然,我们也可以在新增/编辑文件夹时设置文件夹访问成员的权限。

我们编辑文件夹时:

  • 如果在创建文件的时候文件夹类型为共享文件夹,则文件类型可更改;
  • 如果在创建文件的时候文件夹类型为私人文件夹的情况,则要判断文件夹是否加密,未加密的话,文件夹类型可更改,否则不可更改。

2. 主要代码实现

3. 文件夹实体类

ublic class FolderBean implements Serializable {

    private long id;
    private String name;  //文件夹名称
    private int is_encrypt; // 是否需要加密1需要0步需要
    private int mode; // 类型:1个人文件夹2分享文件夹
    private String persons; // 可访问成员,字符串输出
    private String pool_name; // 存储分区名称
    private String task_id; // 异步任务ID

    // 枚举: 为空则代表没有异步状态,TaskMovingFolder_1 修改中,TaskMovingFolder_0 修改失败,TaskDelFolder_1 删除中,TaskDelFolder_0 删除失败
    private String status;
    ...
}

4.文件夹列表

/**
 * 文件夹
 */
public class FolderActivity extends BaseMVPDBActivity<ActivityFolderBinding, FolderContract.View, FolderPresenter> implements FolderContract.View {
   ...
    /**
     * 初始化列表
     */
    private void initRv(){
        ...
        mineFolderAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                FolderBean folderBean = mineFolderAdapter.getItem(position);
                if (TextUtils.isEmpty(folderBean.getStatus())) {   // 没有任务状态时,才能进入文件夹详情
                    Bundle bundle = new Bundle();
                    bundle.putSerializable("folder", folderBean);
                    switchToActivityForResult(CreateFolderActivity.class, bundle, 100);
                }
            }
        });

        mineFolderAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
            @Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                int viewId = view.getId();
                FolderBean folderBean = mineFolderAdapter.getItem(position);
                folderId = folderBean.getId();
                if (viewId == R.id.ivThreeDot){  // 三个点(修改密码弹窗)
                    if (folderBean.getIs_encrypt() == 1) {  // 加密情况下才弹窗
                        settingPopupWindow.showAsDropDown(view, -settingPopupWindow.getWidth() + view.getWidth() * 2 - UiUtil.getDimens(R.dimen.dp_10), 0);
                    }
                }else if (viewId == R.id.tvOperate){ // 重试/确定
                    String status = folderBean.getStatus();
                    if (status!=null) {
                        if (status.equals(Constant.FOLDER_UPDATE_FAIL)) {  // 修改失败时确定
                            mPresenter.removeTask(Constant.scope_token, folderBean.getTask_id());
                        } else if (status.equals(Constant.FOLDER_DELETE_FAIL)) {  // 删除失败时重试
                            mPresenter.restartTask(Constant.scope_token, folderBean.getTask_id());
                        }
                    }
                }
            }
        });
    }
    ...
       
}
/**
 * 文件夹列表适配器
 */
public class MineFolderAdapter extends BaseQuickAdapter<FolderBean, BaseViewHolder> {

    public MineFolderAdapter() {
        super(R.layout.item_folder);
    }

    @Override
    protected void convert(BaseViewHolder helper, FolderBean item) {
        helper.addOnClickListener(R.id.ivThreeDot);
        helper.addOnClickListener(R.id.tvOperate);
        helper.setText(R.id.tvName, item.getName())
                .setText(R.id.tvDistrict, item.getPool_name())
                .setText(R.id.tvMember, item.getPersons());
        LinearLayout llResult = helper.getView(R.id.llResult);
        ImageView ivEncrypt = helper.getView(R.id.ivEncrypt);
        ImageView ivStatus = helper.getView(R.id.ivStatus);
        ImageView ivThreeDot = helper.getView(R.id.ivThreeDot);
        TextView tvTips = helper.getView(R.id.tvTips);
        TextView tvOperate = helper.getView(R.id.tvOperate);
        int is_encrypt = item.getIs_encrypt();
        ivEncrypt.setVisibility(is_encrypt == 1 ? View.VISIBLE : View.GONE);
        ivThreeDot.setSelected(is_encrypt == 1);
        llResult.setVisibility(View.GONE);
        ivStatus.setVisibility(View.GONE);
        ivThreeDot.setVisibility(View.GONE);
        String status = item.getStatus();
        if (TextUtils.isEmpty(status)){  // 空则代表没有异步状态
            ivThreeDot.setVisibility(View.VISIBLE);
        }else {
            String name = item.getName();
            name = name.length()<4 ? name : (name.substring(0, 2)+"...");
            switch (status){
                case Constant
                        .FOLDER_UPDATING:  // 修改中
                    ivStatus.setVisibility(View.VISIBLE);
                    ivStatus.setImageResource(R.drawable.icon_folder_updating);
                    break;

                case Constant
                        .FOLDER_UPDATE_FAIL:  // 修改失败
                    llResult.setVisibility(View.VISIBLE);
                    tvTips.setText(StringUtil.getStringFormat(UiUtil.getString(R.string.mine_update_fail), name));
                    tvOperate.setText(UiUtil.getString(R.string.common_confirm));
                    break;


                case Constant
                        .FOLDER_DELETING:  //  删除中
                    ivStatus.setVisibility(View.VISIBLE);
                    ivStatus.setImageResource(R.drawable.icon_folder_deleting);
                    break;

                case Constant
                        .FOLDER_DELETE_FAIL:  // 删除失败
                    llResult.setVisibility(View.VISIBLE);
                    tvTips.setText(StringUtil.getStringFormat(UiUtil.getString(R.string.mine_del_fail), name));
                    tvOperate.setText(UiUtil.getString(R.string.mine_retry));
                    break;
            }
        }
    }
}

 5. 新增、编辑和删除文件夹

/**
 * 新增/修改文件夹
 */
public class CreateFolderActivity extends BaseMVPDBActivity<ActivityCreateFolderBinding, CreateFolderContract.View, CreateFolderPresenter> implements CreateFolderContract.View {
    
    ...
        
    /**
     * 编辑成员弹窗
     */
    private void initOperatePermissionDialog(){
        operatePermissionDialog = OperatePermissionDialog.getInstance();
        operatePermissionDialog.setConfirmListener(new OperatePermissionDialog.OnConfirmListener() {
            @Override
            public void onConfirm(int read, int write, int del) {
                AccessibleMemberBean accessibleMemberBean = folderMemberAdapter.getItem(memberPos);
                accessibleMemberBean.setRead(read);
                accessibleMemberBean.setWrite(write);
                accessibleMemberBean.setDeleted(del);
                folderMemberAdapter.notifyItemChanged(memberPos);
                operatePermissionDialog.dismiss();
            }
        });
    }
    ...
        
    /**
     * 初始化成员列表
     */
    private void initRv(){
        binding.rvMember.setLayoutManager(new LinearLayoutManager(this));
        folderMemberAdapter = new FolderMemberAdapter();
        binding.rvMember.setAdapter(folderMemberAdapter);
        folderMemberAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
            @Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                memberPos = position;
                AccessibleMemberBean accessibleMemberBean = folderMemberAdapter.getItem(position);
                int viewId = view.getId();
                if (viewId == R.id.ivEdit){ // 编辑
                    Bundle bundle  = new Bundle();
                    bundle.putInt("read", accessibleMemberBean.getRead());
                    bundle.putInt("write", accessibleMemberBean.getWrite());
                    bundle.putInt("del", accessibleMemberBean.getDeleted());
                    PermissionUserBean permissionUserBean = new PermissionUserBean(accessibleMemberBean.getNickname(), accessibleMemberBean.getFace());
                    List<PermissionUserBean> users = new ArrayList<>();
                    users.add(permissionUserBean);
                    bundle.putSerializable("users", (Serializable) users);
                    bundle.putBoolean("originalWrite", true);
                    bundle.putBoolean("originalDel", true);
                    operatePermissionDialog.setArguments(bundle);
                    operatePermissionDialog.show(CreateFolderActivity.this);
                }else if (viewId == R.id.ivDel){ // 删除
                    members.remove(position);
                    folderMemberAdapter.notifyItemRemoved(position);
                    if (CollectionUtil.isNotEmpty(members)){
                        binding.tvMember.setText(StringUtil.getStringFormat(UiUtil.getString(R.string.mine_accessible_member_count),  members.size()));
                        binding.tvPrivate.setEnabled(members.size()<2);
                    }else {
                        setNoAvailableMember();
                    }
                    checkSaveEnabled();
                }
            }
        });
    }
    
    
    ...
        
     /**
     * 是否加密
     */
    private void whetherEncrypt(boolean encrypt){
        binding.tvYes.setSelected(encrypt);
        binding.tvNo.setSelected(!encrypt);
        binding.viewLineEncrypt.setVisibility(encrypt ? View.VISIBLE : View.INVISIBLE);
        binding.clPwd.setVisibility(encrypt ? View.VISIBLE : View.GONE);
        binding.clConfirmPwd.setVisibility(encrypt ? View.VISIBLE : View.GONE);
    }
    ...
     /**
     * 设置文件类型和是否加密状态
     */
    private void setTypeStatus(){
        binding.tvPrivate.setSelected(mode == 1);
        binding.tvShare.setSelected(mode == 2);
        binding.clEncrypt.setVisibility(View.VISIBLE);
        binding.tvYes.setSelected(is_encrypt == 1);
        binding.tvNo.setSelected(is_encrypt == 0);
        if (mode == 1){  // 私人文件夹
            if (is_encrypt == 1){  // 是加密
                setPrivateDisabled();
            }

        }
        setEncryptDisabled();

    }
    
    /**
     * 设置私人文件夹不可操作
     */
    private void setPrivateDisabled(){
        binding.tvPrivate.setEnabled(false);
        binding.tvPrivate.setAlpha(0.5f);
        binding.tvShare.setVisibility(View.GONE);
    }

    /**
     * 设置加密类型不可操作
     */
    private void setEncryptDisabled(){
        binding.tvYes.setEnabled(false);
        binding.tvYes.setAlpha(0.5f);
        binding.tvNo.setEnabled(false);
        binding.tvNo.setAlpha(0.5f);
        binding.tvYes.setVisibility(is_encrypt == 1 ? View.VISIBLE : View.GONE);
        binding.tvNo.setVisibility(is_encrypt == 0 ? View.VISIBLE : View.GONE);
    }
    ...
        
    /**
     * 文件夹详情成功
     * @param folderDetailBean
     */
    @Override
    public void getFolderDetailSuccess(FolderDetailBean folderDetailBean) {
        if (folderDetailBean!=null){
            folderDetail = folderDetailBean;
            binding.tvDel.setVisibility(View.VISIBLE);
            originalPoolName = folderDetailBean.getPool_name();
            mPoolName = folderDetailBean.getPool_name();
            originalPartitionName = folderDetailBean.getPartition_name();
            mPartitionName = folderDetailBean.getPartition_name();
            binding.etName.setText(folderDetailBean.getName() );
            setPoolName();
            is_encrypt = folderDetailBean.getIs_encrypt();
            mode = folderDetailBean.getMode();
            setTypeStatus();
            members = folderDetailBean.getAuth();
            if (CollectionUtil.isEmpty(members)){
                setNoAvailableMember();
            }else {
                setHasMulMember();
            }
            folderMemberAdapter.setNewData(members);
            binding.nsv.setVisibility(View.VISIBLE);
            setSaveEnabled(true);
        }
    }
    ...
        
    /**
     * 保存
     */
    private void save(){
        String folderName = binding.etName.getText().toString().trim();
        if (TextUtils.isEmpty(folderName)){
            ToastUtil.show(UiUtil.getString(R.string.mine_please_input_folder_name));
            return;
        }
        if (TextUtils.isEmpty(binding.tvSelPartition.getText().toString().trim())){
            ToastUtil.show(UiUtil.getString(R.string.mine_please_choose_save_partition));
            return;
        }
        //  如果是添加文件
        String pwd = binding.etPwd.getText().toString().trim();
        String confirmPwd = binding.etConfirmPwd.getText().toString().trim();
        if (folderBean == null){

            // 如果没有选择文件类型
            if (mode == 0){
                ToastUtil.show(UiUtil.getString(R.string.mine_please_choose_type));
                return;
            }

            // 如果是加密文件
            if (is_encrypt == 1){
                // 判断密码是为空
                if (TextUtils.isEmpty(pwd)){
                    ToastUtil.show(UiUtil.getString(R.string.mine_please_input_pwd));
                    return;
                }
                // 判断确认密码是为空
                if (TextUtils.isEmpty(confirmPwd)){
                    ToastUtil.show(UiUtil.getString(R.string.mine_please_input_confirm_pwd));
                    return;
                }

                // 密码是否一致
                if (!pwd.equals(confirmPwd)){
                    ToastUtil.show(UiUtil.getString(R.string.mine_pwd_is_inconsistent_with));
                    return;
                }
            }
        }
        if (CollectionUtil.isEmpty(members)){
            ToastUtil.show(UiUtil.getString(R.string.mine_at_least_choose_one_member));
            return;
        }
        if (folderBean == null){  // 如果是添加文件夹
            FolderDetailBean folderPost = new FolderDetailBean();
            folderPost.setName(folderName);
            folderPost.setPool_name(mPoolName);
            folderPost.setPartition_name(mPartitionName);
            folderPost.setMode(mode);
            folderPost.setIs_encrypt(mode == 1 ? is_encrypt : 0);
            folderPost.setAuth(members);
            // 如果是加密文件
            if (is_encrypt == 1) {
                // 设置密码
                folderPost.setPwd(pwd);
                folderPost.setConfirm_pwd(confirmPwd);
            }
            mPresenter.addFolder(Constant.scope_token, folderPost);
        }else {  // 编辑文件夹
            if (poolPartitionChanged()) {  // 存储池更改
                Bundle bundle = new Bundle();
                bundle.putString("title", UiUtil.getString(R.string.mine_partition_transfer));
                bundle.putString("content", StringUtil.getStringFormat(UiUtil.getString(R.string.mine_partition_change), folderDetail.getName(),
                        originalPoolName + "-" + originalPartitionName, mPoolName + "-" + mPartitionName));
                bundle.putString("tips", UiUtil.getString(R.string.mine_partition_change_time));
                bundle.putString("leftText", UiUtil.getString(R.string.common_cancel));
                bundle.putString("rightText", UiUtil.getString(R.string.common_confirm));
                bundle.putInt("tipsTextColor", R.color.color_ff0000);
                partitionChangeTipsDialog.setArguments(bundle);
                partitionChangeTipsDialog.show(CreateFolderActivity.this);
            }else {  // 存储池没更改
                updateFolder();
            }
        }
    }

    ...
    
    /**
     * 点击事件
     */
    public class OnClickHandler {
        public void onClick(View view) {
            int viewId = view.getId();
            if (viewId == R.id.ivBack) { // 返回
                finish();
            }else if (viewId == R.id.tvPrivate){ // 私有文件
                if (CollectionUtil.isNotEmpty(members)){
                    if (members.size()>1){
                        ToastUtil.show(UiUtil.getString(R.string.mine_only_one));
                        return;
                    }
                }
                mode = 1;
               privateFolder(true);
                checkSaveEnabled();
            }else if (viewId == R.id.tvShare){ // 共享文件
                mode = 2;
                privateFolder(false);
                checkSaveEnabled();
            }else if (viewId == R.id.tvSelPartition){ // 选择分区
                if (choosePoolPartitionDialog == null){ // 如果选择存储池-存储分区弹窗为空
                    mPresenter.getStoragePools(Constant.scope_token);
                }else {
                    if (!choosePoolPartitionDialog.isShowing())
                    choosePoolPartitionDialog.show(CreateFolderActivity.this);
                }

            }else if (viewId == R.id.ivAdd || viewId == R.id.tvAdd){  // 添加成员
                if (mode == 1 && CollectionUtil.isNotEmpty(members)){  // 如果时私人文件夹且已有成员
                    ToastUtil.show(UiUtil.getString(R.string.mine_only_one));
                    return;
                }
                Bundle bundle = new Bundle();
                bundle.putInt("mode", mode);
                bundle.putSerializable("members", (Serializable) members);
                switchToActivityForResult(AddMemberActivity.class, bundle, 100);
            }else if (viewId == R.id.tvYes){  // 是加密
                is_encrypt = 1;
                whetherEncrypt(true);
                checkSaveEnabled();
            }else if (viewId == R.id.tvNo){  // 否加密
                is_encrypt = 0;
                whetherEncrypt(false);
                checkSaveEnabled();
            }else if (viewId == R.id.tvSave){  // 保存
                save();
            }else if (viewId == R.id.tvDel){  // 删除
                if (removeAlertDialog!=null && !removeAlertDialog.isShowing()){
                    removeAlertDialog.show(CreateFolderActivity.this);
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值