SnapdragonGallery重命名功能详解
来源:互联网 发布:淘宝分享有礼的红包 编辑:程序博客网 时间:2024/06/14 07:45
SnapdragonGallery重命名功能详解
1. 3590项目中骁龙图库,需要实现相册的重命名功能,要求选中系统相册是不显示重命名菜单,选中新建相册及存储卡内部新建相册时显示重命名菜单,具体实现如下。
Toobar中分为照片和相册两部分。
相册对应了AlbumPage.java
照片对应了TimeLinePage.java
长按相册之后的界面对应了AlbumSetPage.java
2. operation.xml中新增重命名菜单
AlbumSetPage.java中onScrollPositionChanged方法中新增renameDialog case分支:
其中name参数为长按选中相册的名称
如何得到选中相册的名称呢?
在onlLongTap方法中新增如下代码:
If条件为是否单选相册,如果是单选,那么就从选中相册的path中获取选中相册的tab值(tab值为新建相册是赋予的一个值,从0累加),通过tab值获取MediaSet对象,然后通过getName方法拿到选中相册的名称。
长按相册之后,就进入了选择模式(此模式对应了AlbumSetPage.java类):
那么,怎么让单选相册的时候正确的传出选中相册的名称呢,
在onSingleTapUp方法中新增如下代码即可:
长按相册是不会调用此方法的,长按之后再次点击相册会调用此方法,每次抬起动作发生时都会去判断是否单选相册,如果不符合if条件,则不走此分支,这段代码的作用主要是用来更新name。例如:长按相册1,此时name为相册1的名称,再点击相册2,此时选中相册为1,2,再点击相册1,此时选中的相册为相册2,此时name的名称为相册2的名称。
3. 重命名相册
单击重命名选项之后:
可以看到editText中text值为选中相册的名称。
重命名dialog调用了RenameDialog.java类,路径如下:
单击确定按钮之后执行代码:
首先判断重命名名称是否符合规定,符合规定之后会根据mrename建立一个File文件,之后根据mrename获取mNewBucketId,最后进行更新数据库操作。
这就完成了内部新建相册重命名的操作。
至于为什么要先新建文件,在更新数据库,最后重命名文件,这涉及到了新建相册的时候,会新建一个文件,然后将相册数据存储在数据库中,之后再每次更近界面的时候都会去查数据库,如果文件不存在的时候会把文件删掉,如下代码在MenuExecutor.java类中的execute(DataManagermanager,JobContext jc,int cmd,Path path)方法中:
4. 外部存储卡新建相册重命名失败
如果相册是从存储卡中新建的,那么重名会失败,我们可以添加如下代码来完善重命名的操作:
首先获取外部sd卡路径,之后new一个file对象,判断以moldname命名的相册文件是否存在,如果存在,更新文件名。最重要的一步是发送广播,这个广播会让sd中的文件刷新。
5. 重命名菜单的显示
根据需求,重命名菜单只有单选相册和单选非系统相册的时候才能出现,所以有了如下代码流程:
在AlbumSetPage.java类中的onLongTap方法中:
mActionModeHandler.updateSupportedOperation(name)方法,此方法只为传递name值,ActionModeHandler.java类中updateSupportedOperation()方法中有如下代码(updateSupportedOperation方法用来更新选中相册之后的操作菜单):
ComputeMenuOptions具体实现如下:
会根据mname值来判断选中相册是否为系统相册,然后赋值给operation。
MediaObject.SUPPORT_RENAME在MediaObject.java类中,它的值如下:
骁龙相册中用二进制的值来规定可进行的操作,因为0~18已经被占用,所以我们新增19。
1<<19的意思是二进制的1左移19位,此时第19位是1,前18位都为0(从0开始计算)。
比如:
1<3,此时得出的值为1000;1000>2,得出的值为0010。
根据上述代码可以看到。如果是系统相册那么执行:
~MediaObject.SUPPORT_RENAME的值为第19位是0前18位都是1,然后和operation与一下,那么第19位一定是0其他位置的operation将保持不变,这就完成了系统相册下重命名菜单不显示,其他菜单照常显示。
如果是选中非系统相册:
Operation或上MediaObject.SUPPORT_RENAME。
此时第19位是1,所以重命名菜单显示,其他位置根据operation来定。
6. 根据operation更新操作菜单
ActionModeHandler.java类中updateSupportedOperation()方法内:
Operation作为参数传入updateMenu方法,方法体如下:
新增
这就完成了重命名菜单的显示与否问题。
- SnapdragonGallery重命名功能详解
- .net 项目重命名 详解
- File 重命名和删除功能
- 录音分享以及重命名功能小结
- IO流_File类的重命名功能
- 重命名
- 重命名
- iOS开发- 项目重命名(图文详解)
- java中ftp上传、下载、重命名、删除功能实现
- Python批量重命名文件示例(带演示功能)
- Java_基础—File类的重命名和删除功能
- Linux下批量重命名文件bash命令详解
- Git查看、删除、重命名远程分支和tag 详解
- bat 脚本完成文件重命名及配置文件读取,字符串截取功能
- 22-IO流-35-IO流(File对象-常见功能-重命名)
- Minifilter过滤,功能实现对驱动目录的监控,包括创建,重命名,删除并实现hips
- 实现Android apk 版本号自动生成和打包批量重命名功能
- python批处理实现爬取网页静态图片文件重命名图片统一修改大小等功能
- 【计网】HTTP2.0新特性
- 深入浅出ES6(一):ES6是什么
- Java经典五十道题31-40
- 关于毫米波技术的描述
- C++11 中std::function和std::bind的用法
- SnapdragonGallery重命名功能详解
- 电脑设置定时播放任务
- LabVIEW中利用事件结构演示用鼠标单击前面板窗口时,发生鼠标按下事件并处理鼠标按下事件
- Ubuntu14.04环境下配置TFTP服务器
- HTML基本
- 友盟第三方登录QQ,点击登录无响应
- angular
- 图像边缘检测--OpenCV之cvCanny函数
- HDU 1808 Halloween treats(抽屉原理)