Download模块 (二十)

Download模块 (二十)


RemoteDownloadProvider 和 之前的localDownloadProvider一样,实现了同样的接口,负责提供网盘转存模式下的UI提供与展示以及对交互逻辑的封装。
和local一样,网盘当前已经转存的资源和正在转存的任务 都对应着一个内存中的Download对象<虽然两者不同,但是从Download层面看,只是状态不一样>
下面主要列的是不同点。


<1>监听了大量的网盘转存相关event:
(1)新的网盘转存请求; 如果是在Edit模式下,那么退出。
(2)网盘login<success/fail>: 更新UI
(3)网盘信息刷新: 先呈现一个刷新等待的View, 然后在其他的线程更新配额和资源信息以后再回调设置UI.
(4)网盘资源被清空: 展示为没有内容准备的view
(5)网盘logout: 更新UI.
(6)长按代表网盘资源的View: 进入Edit模式.


<2>同样定义了一个内部类SectionContentView extends NightModeLinearLayout, 不过因为只有一类,要比local的简单一些
这个View也会在create的view对应的xml中被使用<不好,形成了耦合>,监听的主要是网盘处理相关的event:
(1)取消某个网盘转存任务<success/fail>: 成功的话,将整个Download对应的View和M数据彻底移除。
   失败的话,恢复对应View的状态,并且toast告知.
(2)网盘某个资源被删除event<success/fail>: 成功的话,将整个Download对应的View和M数据彻底移除。否则,恢复对应View。toast告知
(3)新的网盘转存任务
(4)删除网盘所有已有资源<不包括正在转存的>
(5)删除网盘所有已有资源结束<success/fail>,成功则clear所有已经COMPLETE<就是已经转存的>的Download,都则恢复所有COMPLETE的View.
(6)删除网盘所有已有资源结束<success/fail>,和上面基本一致,除了影响所有的Download
(7)Edit模式变化<is/not>
同样出于性能考虑,也会有延迟分批加载已经存在的Download的view到SectionContentView中。


<3>SectionContentView同样的会维护一个LongSparseArray保存ItemView.


<4>SectionContentView中Download恢复的信息来源不是本地持久化而是通过网盘API来获取当前网盘的所有信息,
会通过RemoteDownloadManager来触发,这边定制一个callback传过去.
在成功获取以后,清除当前所有childView,将新view加入到PendingList中,由分批加载机制负责addView<这个task会随后被post到主线程>.
注意这个操作只改变了V,没有改变M,这符合角色的定位.


SectionContentView还包含了一系列和内部的itemView有关的方法,都是比较直白的方法,比如选中全部等。


<5>ItemView也基本和local一致,监听的event来了之后,如果Download匹配,就更新自己的状态<V>。


<6>在没有login时,content显示的是spannable的text<setMovementMethod(LinkMovementMethod.getInstance()) 和 
SpannableStringBuilder>,可以被点击,会触发manager的login,显示出loginFragment.
发布了426 篇原创文章 · 获赞 52 · 访问量 66万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览