1. 阐明

存储池是存储池分区及文件操作的根基,只有存储池存在,能力操作存储池分区和文件夹,是数据存储的中央。

只有有闲置的存储池(硬盘),咱们就能够把它增加到现有的存储池或者是新的存储池,而后回到存储池列表就能够看到刷新的数据。

除了增加和查看存储池之外,咱们还能够批改存储池的名称、删除存储和增加存储池分区、查看存储池分区、辑存储池分区及删除存储池分区(存储池分区的操作将会在下一章节进行阐明)。

因为删除存储池须要肯定的工夫,所以存在存储池删除中的状态;删除存储池不肯定能删除胜利,所以存在删除存储池失败的状态。

注:只有家庭的拥有者能力操作存储池

1.1次要代码实现

1.2存储池列表和存储详情的model类

/** * 存储池列表 */public class StoragePoolListBean {    private List<StoragePoolDetailBean> list;  // tem为object,存储池    private PagerBean pager;  // 分页数据    ...}
/** * 存储池详情 */public class StoragePoolDetailBean implements MultiItemEntity, Serializable {    public static final int POOL = 1;  // 本人定义字段增加存储池时是存储    public static final int ADD = 2;  // 本人定义字段增加存储池时是最初的加号图片    private int itemType; // 本人定义字段,用于辨别增加存储池时是存储还是最初的加号图片    private boolean selected; // 本人定义字段,用于示意存储增加存储池时是否抉择    private String id;    private String name; // 名称    private double capacity; // 容量    private double use_capacity; //已用容量    /**     * // 异步工作状态, 为空则没有异步工作,     * TaskDelPool_0删除存储池失败,TaskDelPool_1删除存储池中,     * TaskAddPool_0增加存储池失败,TaskAddPool_1增加存储池中,     * TaskUpdatePool_0批改存储池失败,TaskUpdatePool_1批改存储池中,     */    private String status;    private String task_id; //异步工作ID    private List<DiskBean> pv;  // 物理分区:就是所谓硬盘    private List<DiskBean> lv;  //逻辑分区:理论存储池分区    ...}
/** *  硬盘和存储池分区 */public class DiskBean implements Serializable {    /**     * id : 4255     * name : 安但风张义     * capacity : 91.2     */    private String id;    private String name;    private long capacity;    private long use_capacity; // 已用容量    private boolean selected;    /**     * 为空则没有工作状态,     * TaskAddPartition_1增加存储池分区中,TaskAddPartition_0增加存储池分区失败,     * TaskUpdatePartition_1批改存储池分区中,TaskUpdatePartition_0批改存储池分区失败,     * TaskDelPartition_1删除存储池分区中,TaskDelPartition_0删除存储池分区失败     */    private String status;    private String task_id;  // 异步工作id    ...}

2.2 存储池列表及闲置硬盘

/** * 存储管理(存储池列表) */public class StoragePoolListActivity extends BaseMVPDBActivity<ActivityStoragePoolListBinding, StoragePoolListContract.View, StoragePoolListPresenter> implements StoragePoolListContract.View {        ...        /**     * 闲置硬盘     */    private void initRvDisk(){        LinearLayoutManager layoutManager = new LinearLayoutManager(this);        layoutManager.setOrientation(RecyclerView.HORIZONTAL);        binding.rvDisk.setLayoutManager(layoutManager);        diskAdapter = new DiskAdapter();        binding.rvDisk.setAdapter(diskAdapter);        diskAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {            @Override            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {                DiskBean diskBean = diskAdapter.getItem(position);                if (view.getId() == R.id.tvAdd){                    Bundle bundle = new Bundle();                    bundle.putString("diskName", diskBean.getName());                    bundle.putLong("capacity", diskBean.getCapacity());                    switchToActivity(AddToStoragePoolActivity.class, bundle);                }            }        });    }    /**     * 存储池     */    private void initRvPool(){                ...                    storagePoolAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {            @Override            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {                StoragePoolDetailBean storagePoolDetailBean = storagePoolAdapter.getItem(position);                if (TextUtils.isEmpty(storagePoolDetailBean.getStatus())) {  // 没有异步状态才可跳转                    Bundle bundle = new Bundle();                    bundle.putString("name", storagePoolDetailBean.getName());                    switchToActivity(StoragePoolDetailActivity.class, bundle);                }            }        });        storagePoolAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {            @Override            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {                StoragePoolDetailBean storagePoolDetailBean = storagePoolAdapter.getItem(position);                int viewId = view.getId();                if (viewId == R.id.ivDot){  // 显示物理硬盘个数                    showHardDiskDialog(storagePoolAdapter.getItem(position).getPv());                }else if (viewId == R.id.tvRetry){  // 重试                    String status = storagePoolDetailBean.getStatus();                    if (status!=null){                        if (status.equals(Constant.STORAGE_POOL_DELETE_FAIL)){ // 删除失败                            mPresenter.restartTask(Constant.scope_token, storagePoolDetailBean.getTask_id());                        }                    }                }            }        });    }        ...}
public class StoragePoolListPresenter extends BasePresenter<StoragePoolListModel, StoragePoolListContract.View> implements StoragePoolListContract.Presenter {    ...    /**     * 获取存储池列表     * @param scopeToken     * @param map     * @param showLoading     */    @Override    public void getStoragePools(String scopeToken, Map<String, String> map, boolean showLoading) {        executeObservable(mModel.getStoragePools(scopeToken, map), new RequestDataCallback<StoragePoolListBean>(showLoading) {            @Override            public void onSuccess(StoragePoolListBean response) {                super.onSuccess(response);                if (mView!=null){                    mView.getStoragePoolsSuccess(response);                }            }            @Override            public void onFailed(int errorCode, String errorMessage) {                super.onFailed(errorCode, errorMessage);                if (mView!=null){                    mView.getStoragePoolsFail(errorCode, errorMessage);                }            }        });    }    /**     * 闲置硬盘列表     * @param scopeToken     */    @Override    public void getDisks(String scopeToken) {        executeObservable(mModel.getDisks(scopeToken), new RequestDataCallback<DiskListBean>(false) {            @Override            public void onSuccess(DiskListBean response) {                super.onSuccess(response);                if (mView!=null){                    mView.getDisksSuccess(response);                }            }            @Override            public void onFailed(int errorCode, String errorMessage) {                super.onFailed(errorCode, errorMessage);                if (mView!=null){                    mView.getDisksFail(errorCode, errorMessage);                }            }        });    }        ...}

2.4 增加到存储池

.../** * 创立存储池 * @param scopeToken * @param createStoragePoolRequest */@Overridepublic void createStoragePool(String scopeToken, CreateStoragePoolRequest createStoragePoolRequest) {    executeObservable(mModel.createStoragePool(scopeToken, createStoragePoolRequest), new RequestDataCallback<Object>() {        @Override        public void onSuccess(Object response) {            super.onSuccess(response);            if (mView!=null){                mView.createStoragePoolSuccess();            }        }        @Override        public void onFailed(int errorCode, String errorMessage) {            super.onFailed(errorCode, errorMessage);            if (mView!=null){                mView.createStoragePoolFail(errorCode, errorMessage);            }        }    });}/** * 增加硬盘到存储池 * @param scopeToken * @param addStoragePoolRequest */@Overridepublic void addToStoragePool(String scopeToken, AddStoragePoolRequest addStoragePoolRequest) {    executeObservable(mModel.addToStoragePool(scopeToken, addStoragePoolRequest), new RequestDataCallback<Object>() {        @Override        public void onSuccess(Object response) {            super.onSuccess(response);            if (mView!=null){                mView.addToStoragePoolSuccess();            }        }        @Override        public void onFailed(int errorCode, String errorMessage) {            super.onFailed(errorCode, errorMessage);            if (mView!=null){                mView.addToStoragePoolFail(errorCode, errorMessage);            }        }    });}

}

public class AddToStoragePoolPresenter extends BasePresenter<AddToStoragePoolModel, AddToStoragePoolContract.View> implements AddToStoragePoolContract.Presenter {    ...    /**     * 创立存储池     * @param scopeToken     * @param createStoragePoolRequest     */    @Override    public void createStoragePool(String scopeToken, CreateStoragePoolRequest createStoragePoolRequest) {        executeObservable(mModel.createStoragePool(scopeToken, createStoragePoolRequest), new RequestDataCallback<Object>() {            @Override            public void onSuccess(Object response) {                super.onSuccess(response);                if (mView!=null){                    mView.createStoragePoolSuccess();                }            }            @Override            public void onFailed(int errorCode, String errorMessage) {                super.onFailed(errorCode, errorMessage);                if (mView!=null){                    mView.createStoragePoolFail(errorCode, errorMessage);                }            }        });    }    /**     * 增加硬盘到存储池     * @param scopeToken     * @param addStoragePoolRequest     */    @Override    public void addToStoragePool(String scopeToken, AddStoragePoolRequest addStoragePoolRequest) {        executeObservable(mModel.addToStoragePool(scopeToken, addStoragePoolRequest), new RequestDataCallback<Object>() {            @Override            public void onSuccess(Object response) {                super.onSuccess(response);                if (mView!=null){                    mView.addToStoragePoolSuccess();                }            }            @Override            public void onFailed(int errorCode, String errorMessage) {                super.onFailed(errorCode, errorMessage);                if (mView!=null){                    mView.addToStoragePoolFail(errorCode, errorMessage);                }            }        });    }}

2.5 存储池详情

/** * 存储池详情 */public class StoragePoolDetailActivity extends BaseMVPDBActivity<ActivityStoragePoolDetailBinding, StoragePoolDetailContract.View, StoragePoolDetailPresenter> implements StoragePoolDetailContract.View {    ...     /**     * 获取存储池详情胜利     * @param storagePoolDetailBean     */    @Override    public void getStoragePoolDetailSuccess(StoragePoolDetailBean storagePoolDetailBean) {        binding.refreshLayout.finishRefresh();        if (storagePoolDetailBean!=null){            mStoragePoolDetailBean = storagePoolDetailBean;            poolId = storagePoolDetailBean.getId();            binding.tvName.setText(storagePoolDetailBean.getName());            double usedCapacity = storagePoolDetailBean.getUse_capacity();            double allCapacity = storagePoolDetailBean.getCapacity();            double availableCapacity = allCapacity - usedCapacity;            binding.tvSeparable.setText(FileUtil.getReadableFileSize(availableCapacity)+UiUtil.getString(R.string.mine_separable_capacity));            binding.tvAll.setText(FileUtil.getReadableFileSize(allCapacity)+UiUtil.getString(R.string.mine_all_capacity));            List<DiskBean> hardDisk = storagePoolDetailBean.getPv(); // 硬盘列表            int hardDiskCount = CollectionUtil.isNotEmpty(hardDisk) ? hardDisk.size() : 0; // 硬盘个数            binding.tvCount.setText(StringUtil.getStringFormat(UiUtil.getString(R.string.mine_hard_disk_count), hardDiskCount));            int progress = (int) ((usedCapacity/allCapacity)*100); // 容量进度百分比            isSystemPool = storagePoolDetailBean.getName().equals(Constant.SYSTEM_POOL);  // 是否是零碎存储池            binding.tvDel.setVisibility(isSystemPool ? View.GONE : View.VISIBLE);  // 是零碎存储池可删除            binding.tvName.setCompoundDrawablesWithIntrinsicBounds(0, 0, isSystemPool ? 0 : R.drawable.icon_white_edit, 0);  // 是零碎存储池不可编辑            binding.tvCount.setCompoundDrawablesWithIntrinsicBounds(0, 0, isSystemPool ? 0 : R.drawable.icon_white_right_arrow, 0);  // 是零碎存储池查看磁盘不可操作            binding.tvCount.setEnabled(!isSystemPool);// 是零碎存储池查看磁盘不可操作            binding.ivAdd.setVisibility(isSystemPool ? View.GONE : View.VISIBLE); // 是零碎存储池不可增加存储分区            binding.rb.setProgress(progress);            storagePoolDetailAdapter.setNewData(storagePoolDetailBean.getLv());            setNullView(CollectionUtil.isEmpty(storagePoolDetailBean.getLv()));            binding.coordinatorLayout.setVisibility(View.VISIBLE);        }    }    ...}