首页 / 文件夹管理的方法及终端设备

文件夹管理的方法及终端设备有效专利 发明

技术领域

[0001] 本申请涉及安卓系统技术领域,尤其涉及一种文件夹管理的方法及终端设备。

相关背景技术

[0002] 随着终端技术的发展,越来越多的功能被提供给用户,大大提高了用户生活工作的便利性。以手机中的备忘录功能为例,用户可以通过在备忘录中创建文件夹,且在文件夹中编辑内容来替代传统的用纸笔备忘的方式。比如,当用户需要备忘的事项类型比较多时,可以在备忘录中创建不同标题的文件夹,也可以在某个标题的文件夹下创建不同标题的子文件夹,这样用户就可以按照标题层级查看不同类型的备忘内容。
[0003] 然而,由于目前针对手机列表中的文件夹的管理还存在诸多限制,比如无法随意更改文件夹的位置或者文件夹的层级顺序等,因而在文件夹类型较多的场景下,用户无法通过便捷的操作获取适合自身查看习惯的文件夹布局。

具体实施方式

[0076] 需要说明的是,本申请实施例的实施方式部分使用的术语仅用于对本申请的具体实施例进行解释,而非旨在限定本申请。在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联障碍物的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,在本申请实施例的描述中,除非另有说明,“多个”是指两个或多于两个,“至少一个”、“一个或多个”是指一个、两个或两个以上。
[0077] 以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”特征可以明示或者隐含地包括一个或者更多个该特征。
[0078] 在本说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其它一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其它方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其它方式另外特别强调。
[0079] 结合背景技术中的介绍,目前一种移动或合并文件夹的方式为:对被选中的文件夹进行复制或者剪切,然后将文件夹粘贴至目标位置,或者打开目标文件夹,将待移动文件夹粘贴至到目标文件夹内。该方式需要用户执行多个操作步骤,过程较为繁琐。随着终端技术的发展,使用 操作系统的终端设备也得到了广泛的应用,在触控面板几乎成为便携终端设备标配的形势下,如果能够针对具有触控面板的 终端设备设计一种灵
活且简便的文件夹移动方法,就会给用户更好地便捷体验。
[0080] 有鉴于此,本申请实施例提供一种文件夹管理的方法及终端设备,该方法可以应用于具有触控面板且使用 操作系统的终端设备中,当用户需要对文件夹列表中的文件夹进行管理(尤其是位置管理)时,只需将被选中的文件夹拖拽至特定位置,即可实现文件夹的移动和合并,提高了用户在 终端设备中进行文件夹管理的灵活性和便捷
性。
[0081] 示例性的,如图1所示,为本申请实施例提供的一种终端设备100的结构示意图。该终端设备100可以对应于上述所说的具有触控面板且使用 操作系统的终端设备。
[0082] 终端设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器
170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头
193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
[0083] 可以理解的是,本发明实施例示意的结构并不构成对终端设备100的具体限定。在本申请另一些实施例中,终端设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
[0084] 处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processing unit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural‑network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
[0085] 其中,控制器可以是终端设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
[0086] 处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
[0087] 在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter‑integrated circuit,I2C)接口,集成电路内置音频(inter‑integrated circuit sound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general‑purpose input/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
[0088] I2C接口是一种双向同步串行总线,包括一根串行数据线(serial data line,SDA)和一根串行时钟线(derail clock line,SCL)。在一些实施例中,处理器110可以包含多组I2C总线。处理器110可以通过不同的I2C总线接口分别耦合触摸传感器180K,充电器,闪光灯,摄像头193等。例如:处理器110可以通过I2C接口耦合触摸传感器180K,使处理器110与触摸传感器180K通过I2C总线接口通信,实现终端设备100的触摸功能。
[0089] I2S接口可以用于音频通信。在一些实施例中,处理器110可以包含多组I2S总线。处理器110可以通过I2S总线与音频模块170耦合,实现处理器110与音频模块170之间的通信。在一些实施例中,音频模块170可以通过I2S接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。
[0090] PCM接口也可以用于音频通信,将模拟信号抽样,量化和编码。在一些实施例中,音频模块170与无线通信模块160可以通过PCM总线接口耦合。在一些实施例中,音频模块170也可以通过PCM接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。所述I2S接口和所述PCM接口都可以用于音频通信。
[0091] UART接口是一种通用串行数据总线,用于异步通信。该总线可以为双向通信总线。它将要传输的数据在串行通信与并行通信之间转换。在一些实施例中,UART接口通常被用于连接处理器110与无线通信模块160。例如:处理器110通过UART接口与无线通信模块160中的蓝牙模块通信,实现蓝牙功能。在一些实施例中,音频模块170可以通过UART接口向无线通信模块160传递音频信号,实现通过蓝牙耳机播放音乐的功能。
[0092] MIPI接口可以被用于连接处理器110与显示屏194,摄像头193等外围器件。MIPI接口包括摄像头串行接口(camera serial interface,CSI),显示屏串行接口(display serial interface,DSI)等。在一些实施例中,处理器110和摄像头193通过CSI接口通信,实现终端设备100的拍摄功能。处理器110和显示屏194通过DSI接口通信,实现终端设备100的显示功能。
[0093] GPIO接口可以通过软件配置。GPIO接口可以被配置为控制信号,也可被配置为数据信号。在一些实施例中,GPIO接口可以用于连接处理器110与摄像头193,显示屏194,无线通信模块160,音频模块170,传感器模块180等。GPIO接口还可以被配置为I2C接口,I2S接口,UART接口,MIPI接口等。
[0094] USB接口130是符合USB标准规范的接口,具体可以是Mini USB接口,Micro USB接口,USB Type C接口等。USB接口130可以用于连接充电器为终端设备100充电,也可以用于终端设备100与外围设备之间传输数据。也可以用于连接耳机,通过耳机播放音频。该接口还可以用于连接其他终端,例如AR设备等。
[0095] 可以理解的是,本发明实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对终端设备100的结构限定。在本申请另一些实施例中,终端设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
[0096] 充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过USB接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过终端设备100的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为终端供电。
[0097] 电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,外部存储器,显示屏194,摄像头193,和无线通信模块160等供电。电源管理模块141还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
[0098] 终端设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
[0099] 天线1和天线2用于发射和接收电磁波信号。终端设备100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
[0100] 移动通信模块150可以提供应用在终端设备100上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。在一些实施例中,移动通信模块150的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。
[0101] 调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器170A,受话器170B等)输出声音信号,或通过显示屏194显示图像或视频。在一些实施例中,调制解调处理器可以是独立的器件。在另一些实施例中,调制解调处理器可以独立于处理器110,与移动通信模块150或其他功能模块设置在同一个器件中。
[0102] 无线通信模块160可以提供应用在终端设备100上的包括无线局域网(wireless local area networks,WLAN)(如无线保真(wireless fidelity,Wi‑Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
[0103] 在一些实施例中,终端设备100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得终端设备100可以通过无线通信技术与网络以及其他设备通信。所述无线通信技术可以包括全球移动通讯系统(global system for mobile communications,GSM),通用分组无线服务(general packet radio service,GPRS),码分多址接入(code division multiple access,CDMA),宽带码分多址(wideband code division multiple access,WCDMA),时分码分多址(time‑division code division multiple access,TD‑SCDMA),长期演进(long term evolution,LTE),BT,GNSS,WLAN,NFC,FM,和/或IR技术等。所述GNSS可以包括全球卫星定位系统(global positioning system,GPS),全球导航卫星系统(global navigation satellite system,GLONASS),北斗卫星导航系统(beidou navigation satellite system,BDS),准天顶卫星系统(quasi‑zenith satellite system,QZSS)和/或星基增强系统(satellite based augmentation systems,SBAS)。
[0104] 终端设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。显示屏194用于显示图像,视频等。
[0105] 终端设备100可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
[0106] 数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当终端设备100在频点选择时,数字信号处理器用于对频点能量进行傅里叶变换等。视频编解码器用于对数字视频压缩或解压缩。NPU为神经网络(neural‑network,NN)计算处理器,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。
[0107] 外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展终端设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。
[0108] 终端设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
[0109] 压力传感器180A用于感受压力信号,可以将压力信号转换成电信号。陀螺仪传感器180B可以用于确定终端设备100的运动姿态。磁传感器180D包括霍尔传感器。终端设备100可以利用磁传感器180D检测翻盖皮套的开合。加速度传感器180E可检测终端设备100在各个方向上(一般为三轴)加速度的大小。当终端设备100静止时可检测出重力的大小及方向。还可以用于识别终端姿态,应用于横竖屏切换,计步器等应用。接近光传感器180G可以包括例如发光二极管(LED)和光检测器,例如光电二极管。发光二极管可以是红外发光二极管。终端设备100通过发光二极管向外发射红外光。环境光传感器180L用于感知环境光亮度。终端设备100可以根据感知的环境光亮度自适应调节显示屏194亮度。指纹传感器180H用于采集指纹。温度传感器180J用于检测温度。触摸传感器180K,也称“触控面板”。触摸传感器180K可以设置于显示屏194,由触摸传感器180K与显示屏194组成触摸屏,也称“触控屏”。触摸传感器180K用于检测作用于其上或附近的触摸操作。骨传导传感器180M可以获取振动信号。
[0110] 此外,终端设备100还包括气压传感器180C和距离传感器180F。其中,气压传感器180C用于测量气压。在一些实施例中,终端设备100通过气压传感器180C测得的气压值计算海拔高度,辅助定位和导航。
[0111] 距离传感器180F,用于测量距离。终端设备100可以通过红外或激光测量距离。在一些实施例中,拍摄场景,终端设备100可以利用距离传感器180F测距以实现快速对焦。
[0112] 示例性的,终端设备100的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本发明实施例以分层架构的Android系统为例,示例性说明终端设备100的软件结构。图2是本申请实施例的终端设备100的软件结构框图。
[0113] 分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为四层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime)和系统库,以及内核层。
[0114] 应用程序层可以包括一系列应用程序包。如图2所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,WLAN,音乐,视频,短信息,RecyclerView显示控件、拖拽动画回调模块(ItemTouchHelper.Callback)等应用程序。
[0115] 应用程序框架层为应用程序层的应用程序提供应用编程接口(application programming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。如图2所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器,ItemTouchHelper模块等。
[0116] 窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。
[0117] 内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。
[0118] 视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
[0119] 电话管理器用于提供终端设备100的通信功能。例如通话状态的管理(包括接通,挂断等)。
[0120] 资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。
[0121] 通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,终端振动,指示灯闪烁等。
[0122] Android Runtime包括核心库和虚拟机。Android runtime负责安卓系统的调度和管理。
[0123] 核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
[0124] 应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行障碍物生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
[0125] 系统库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(Media Libraries),三维图形处理库(例如:OpenGL ES),2D图形引擎(例如:SGL)等。
[0126] 表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。
[0127] 媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。
[0128] 三维图形处理库用于实现三维图形绘图,图像渲染,合成,和图层处理等。
[0129] 2D图形引擎是2D绘图的绘图引擎。
[0130] 内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。
[0131] 为了更好地理解本申请实施例提供的文件夹管理的方法,以下结合附图所示的图形用户界面(graphical user interface,GUI)对该文件夹管理的方法实现过程进行介绍。
[0132] 示例性的,如图3A至图3D所示,为本申请实施例提供的一些文件夹管理的方法实现过程中可能涉及的GUI示意图。示例性的,这里以终端设备是手机,且以针对手机中备忘录应用程序(application,App)的文件夹列表中的文件夹进行移动为例进行介绍,但在实际应用中所涉及的场景并不仅限于此。
[0133] 如图3A所示,为手机备忘录App中的编辑界面,该编辑界面可以包括文件夹列表,文件夹列表包括多个文件夹。为了便于理解,本申请可以按照文件夹之间的位置关系将其分为不同层级。示例性的,第一层级的文件夹例如可以指根目录中的文件夹,其不存在对应的父文件夹,但可以包括至少一个子文件夹;第二层级的文件夹可以指文件列表中第一层级的文件夹所包括的下一级子文件夹;第三层级的文件夹(图3A未示出)可以指文件夹列表中第二层级的文件夹包括的下一级子文件夹。如图3A所示,不同层级的文件夹相对于编辑界面左侧边缘缩进的距离可以不同,第三层级的文件夹(图3A未示出)相对于左侧边缘的缩进距离可以大于第二层级的文件夹相对于左侧边缘的缩进距离;而第二层级的文件夹相对于左侧边缘的缩进距离可以大于第一层级的文件夹相对于左侧边缘的缩进距离。
[0134] 结合图3A所示,第一层级的文件夹例如包括标题分别为“我的笔记”文件夹、“我的摘录”文件夹;第二层级的文件夹列表例如包括标题分别为“个人”文件夹、“工作”文件夹、“生活”文件夹、“旅游”文件夹、“展览”文件夹、“阅读”文件夹以及其他以第三方APP名称作为标题的文件夹,如“知乎”文件夹、“今日头条”文件夹、“微博”文件夹。其中,“个人”文件夹、“工作”文件夹、“生活”文件夹、“旅游”文件夹、“展览”文件夹、“阅读”文件夹可以作为第一层级中“我的笔记”文件夹中的子文件夹,此时“我的笔记”作为这些子文件夹的父文件夹。“知乎”文件夹、“今日头条”文件夹、“微博”文件夹可以作为第一层级中“我的摘录”文件夹中的子文件夹,此时“我的摘录”作为这些子文件夹的父文件夹。此外,该编辑界面还可以包括每个文件夹对应的新建控件,当用户点击某一文件夹对应的新建控件时,可以触发手机创建该文件夹的新的子文件夹,比如,当手机检测到用户点击如图3A所示的“我的笔记”文件夹中的新建控件时,可以响应于该点击操作在“我的笔记”文件夹中创建一个子文件夹。
[0135] 在一些实施例中,当用户需要移动文件夹列表中的某一文件夹时,可以通过手指长按待移动的文件夹图标,并通过拖拽动作将该文件夹移动至目标位置。
[0136] 示例性的,假设用户需要将“阅读”文件夹移动至“生活”文件夹之中,实现两个文件夹合并,那么用户可以针对编辑界面中的“阅读”文件夹输入预设操作301(如长按“阅读”文件夹图标的操作);当手机检测到用户针对“阅读”文件夹图标输入预设操作301之后,可以将“阅读”文件夹图标设置为突出显示,该突出显示意味着”阅读”文件夹已经被成功选中。之后,如图3B所示,用户针对“阅读”文件夹图标输入预设操作302(如按照图3B中箭头所示方向拖拽”阅读”文件夹的操作);当手机检测到用于针对“阅读”文件夹图标输入预设操作302之后,可以显示“阅读”文件夹图标跟随箭头所示方向被拖拽的过程,该过程可以包括“阅读”文件夹图标位置随用户手指(如图3B所示的用户的食指)拖拽的实时变化。
[0137] 在一些实施例中,如图3C所示,当“阅读”文件夹图标被拖拽到“生活”文件夹图标上方,且两者重叠部分大于对应的预设阈值时,用户可以执行预设操作303(如松开“阅读”文件夹图标的操作);当手机检测到用户松开“阅读”文件夹图标之后,可以显示如图3D所示的合并完成界面,该合并完成界面可以展示将“阅读”文件夹拖拽到“生活”文件夹中,两者完成合并之后呈现的效果,具体来说,此时“阅读”文件夹可以变更为第三层级的文件夹,也即“阅读”文件夹此时变更为“生活”文件夹的子文件夹。
[0138] 需要说明的是,上述图3A至图3D所示的文件夹移动过程仅以将”阅读”文件夹在同一层级的文件夹之间进行移动,且与同一层级中的文件夹进行合并作为示例进行介绍,但本申请实施例并不仅限于此。在实际应用中,文件夹的移动范围并不受限于仅在同一层级内部,也就是说,文件夹也可以跨层级进行移动,也可以移动至上一层级的其它文件夹中,比如在本申请实施例提供的文件夹管理的方法中,也可以将”阅读”文件夹从“我的笔记”文件夹中移动到“我的摘录”文件夹中,然后将”阅读”文件夹与“知乎”子文件夹进行合并。
[0139] 还需要说明的是,上述图3A至图3D所示的界面内容仅为示例,在实际应用中,文件夹列表还可以包括更多或更少其他类型的文件夹,本申请实施例对此不作限定。
[0140] 根据本申请实施例提供的文件夹管理的方法,通过针对 系统终端设备呈现的待移动文件夹输入拖拽操作,将被选中的文件夹拖拽至目标位置,即可实现对文件夹的移动效果,此外,当需要合并文件夹时,通过将被选中的文件夹拖拽至需要合并的目标文件夹上方,且使被选中文件夹和目标文件夹的重叠关系满足预设条件,就可以实现两个文件夹的自动合并,该方法无需用户输入繁琐的操作即可实现基于 系统对文件夹进
行便捷高效的管理,能够有效提升用户的使用体验。
[0141] 示例性的,如图4A至图4D所示,为本申请实施例提供的另一些文件夹管理的方法实现过程中可能涉及的GUI示意图。示例性的,这里继续以终端设备是手机,且针对手机中备忘录应用程序(application,App)文件夹列表中的文件夹进行移动为例进行介绍,但在实际应用并不仅限于此。
[0142] 如图4A所示,为手机备忘录中的编辑界面,该编辑界面可以包括文件夹列表,文件夹列表可以包括多个不同层级的文件夹,比如该文件夹列表中第一层级的文件夹可以包括标题分别为“我的笔记”文件夹、“我的摘录”文件夹;文件夹列表中第二层级的文件夹可以包括标题分别为“个人”文件夹、“工作”文件夹、“生活”文件夹、“旅游”文件夹、“展览”文件夹、“阅读”文件夹以及其他以第三方APP名称作为标题的文件夹,如“知乎”文件夹、“今日头条”文件夹、“微博”文件夹。其中,“个人”文件夹、“工作”文件夹、“生活”文件夹、“旅游”文件夹、“展览”文件夹、“阅读”文件夹可以作为第一层级中“我的笔记”文件夹中的子文件夹,此时“我的笔记”作为这些子文件夹的父文件夹。“知乎”文件夹、“今日头条”文件夹、“微博”文件夹可以作为第一层级中“我的摘录”文件夹中的子文件夹,此时“我的摘录”作为这些子文件夹的父文件夹。此外,该编辑界面还可以包括每个文件夹对应的新建控件,当用户点击某一文件夹对应的新建控件时,可以触发手机创建该文件夹的新的子文件夹,比如,当手机检测到用户点击如图4A所示的“我的笔记”文件夹中的新建控件时,可以响应于该点击操作在“我的笔记”文件夹中创建一个子文件夹。
[0143] 在一些实施例中,假设用户需要将”阅读”文件夹的位置移动至”生活”文件夹和”工作”文件夹之间,那么用户可以针对编辑界面中的”阅读”文件夹输入预设操作401(如长按”阅读”文件夹图标的操作);当手机检测到用户针对”阅读”文件夹输入预设操作401之后,可以将”阅读”文件夹图标设置为突出显示,该突出显示意味着”阅读”文件夹已经被选中。
[0144] 示例性的,如图4B所示,用户针对”阅读”文件夹输入预设操作402(如按照图4B中箭头所示方向拖拽”阅读”文件夹的操作);当手机检测到用于针对”阅读”文件夹输入预设操作402之后,可以显示”阅读”文件夹跟随箭头所示方向被拖拽过程中的位置动态变化;或者说,可以显示”阅读”文件夹跟随用户输入长按操作的手指(如图4B所示的用户的食指)被拖拽的位置动态变化过程。其中,该拖拽操作的目标位置位于”生活”文件夹和”工作”文件夹之间(如”生活”文件夹图标和”工作”文件夹图标交界线位置)。
[0145] 在一些实施例中,如图4C所示,当”阅读”文件夹图标被拖拽到”生活”文件夹图标和”工作”文件夹图标的交界线位置时,用户可以执行预设操作403(如松开”阅读”文件夹图标的操作);当手机检测到用户停止按压“阅读”文件夹图标之后,可以显示如图4D所示的移动完成界面,该移动完成界面可以展示将”阅读”文件夹拖拽到”生活”文件夹和”工作”文件夹之间的目标位置之后的界面效果,具体来说,此时”阅读”文件夹仍然为第二层级的子文件夹,也即“阅读”文件夹仍然作为“我的笔记”文件夹中的子文件夹,但是其位置发生了变化,“我的笔记”文件夹中所有子文件夹在文件夹列表中的呈现的顺序也随之发生了变化。
[0146] 需要说明的是,上述图4A至图4D所示的文件夹移动过程仅以将”阅读”文件夹在其对应的父文件夹(也即“我的笔记”文件夹)内部进行移动作为示例进行介绍,但本申请实施例并不仅限于此。在实际应用中,文件夹的移动范围并不受限于其对应的同一层级的范围限制,也就是说,文件夹也可以在其父文件夹和其它上一层级的文件夹之间进行移动,比如在本申请实施例提供的文件夹管理的方法中,也可以将”阅读”文件夹从“我的笔记”文件夹中移动到“我的摘录”文件夹中。
[0147] 还需要说明的是,上述图4A至图4D所示的界面内容仅为示例,在实际应用中,文件夹列表还可以包括更多或更少其他类型的文件夹,本申请实施例对此不作限定。
[0148] 根据本申请实施例提供的文件夹管理的方法,通过针对 系统终端设备呈现的待移动文件夹输入拖拽操作,将被选中的文件夹拖拽至目标位置,即可实现对文件夹的移动效果,此外,当需要合并文件夹时,通过将被选中的文件夹拖拽至需要合并的目标文件夹上方,且使被选中文件夹和目标文件夹的重叠关系满足预设条件,就可以实现两个文件夹的自动合并,该方法无需用户输入繁琐的操作即可实现基于 系统对文件夹
进行便捷高效的管理,能够有效提升用户的使用体验。
[0149] 在一些场景下,待移动文件夹(或称被选中的文件夹)可能还会包括至少一个子文件夹,针对该情形,仍可以按照上述图3A至图3D实施例所示的过程或者按照图4A至图4D实施例所示的过程对该待移动文件夹进行移动和/或合并。但相比于上述图3A至图3D实施例或者图4A至图4D实施例介绍的过程,待移动文件夹包括子文件夹的情形的主要变化在于:如果待移动文件夹呈打开状态,也即该待移动文件夹包括的子文件夹均处于显示状态,那么当终端设备检测到用户针对该待移动文件夹的图标输入预设操作(如长按待移动文件夹的图标的操作)时,可以自动将该待移动文件夹中的子文件夹删除,也即终端设备的界面仍显示待移动文件夹但不再显示该待移动文件夹下的子文件夹,如待移动文件夹变化为折叠状态;之后,按照与图3A至图3D中类似的拖拽方式将待移动文件夹移动至目标位置;当终端设备检测到用户针对目标位置的待移动文件夹输入预设操作(如抬手操作)时,可选地,终端设备可以在待移动文件下显示其未移动之前包括的子文件夹图标;或者,当终端设备检测到用户针对目标位置的待移动文件夹输入预设操作(如抬手操作)时,终端设备显示目标位置的待移动文件夹,而不显示其未移动之前包括的子文件夹图标,而是当终端设备检测到用户再次针对该待移动文件夹输入展开操作时,才会显示该待移动文件夹下的子文件夹图标。
[0150] 以下结合附图对待移动文件夹包括至少一个子文件夹时,对本申请实施例提供的文件夹管理的方法的实现过程进行介绍。为便于描述,以下实施例将以对手机备忘录列表中的”阅读”文件夹和”生活”文件夹合并为例进行介绍。
[0151] 示例性的,如图5A至图5D所示,为本申请实施例提供的又一些文件夹管理的方法实现过程中可能涉及的GUI示意图。
[0152] 示例性的,如图5A所示,备忘录编辑页面包括多个层级的文件夹图标,比如第一层级文件夹包括标题分别为“我的笔记”、“我的摘录”文件夹图标;第二层级文件夹包括标题分别为“个人”、“工作”、“生活”、“阅读”的文件夹图标,以及第三方应用名称为标题的文件夹图标,如“知乎”、“今日头条”、“微博”文件夹图标,其中,“个人”文件夹、“工作”文件夹、“生活”文件夹、“阅读”文件夹均为第一层级中“我的笔记”文件夹中的子文件夹;“知乎”文件夹、“今日头条”文件夹、“阅读”文件夹均为第一层级中“我的摘录”文件夹中的子文件夹。
[0153] 值得注意的是,在图5A所示的编辑界面还包括第三层级的文件夹,也即“阅读”文件夹包括的“文学”子文件夹、“社科”子文件夹,并且该“文学”子文件夹和“社科”子文件夹均处于显示状态。
[0154] 在一些实施例中,如图5B所示,假设用户需要将“阅读”文件夹移动至“生活”文件夹中,实现两个文件夹合并,那么用户可以针对编辑界面中的”阅读”文件夹输入预设操作501(如长按”阅读”文件夹图标的操作)。当手机检测到用户针对”阅读”文件夹输入预设操作501之后,可以将“阅读”文件夹图标突出显示,该突出显示意味着”阅读”文件夹已经被选中。同时,响应于该预设操作501,手机可以将该“阅读”文件夹中包括的子文件夹(“文学”文件夹、“社科”文件夹)删除,此时会显示待移动的“阅读”文件夹,但不再显示该文件夹中的子文件夹。
[0155] 之后,如图5C至图5D所示,用户可以继续长按“阅读”文件夹图标,并按照图5C所示的箭头方向拖拽该文件夹图标。其中,该拖拽动作可以一直持续到“阅读”文件夹图标移动到目标位置,如图5D所示,该目标位置可以是与“生活”文件夹图标重叠,且重叠部分大于预设阈值的位置。
[0156] 之后,继续如图5D所示,当”阅读”文件夹图标被拖拽到目标位置之后,用户可以执行预设操作503(如松开”阅读”文件夹图标的操作)。当手机检测到用户停止按压“阅读”文件夹图标之后,可以显示如图5E所示的合并完成界面,该合并完成界面可以展示将”阅读”文件夹拖拽到”生活”文件夹中,两者完成合并之后呈现的效果。具体来说,此时”阅读”文件夹可以变更为第三层级的子文件夹,也即“阅读”文件夹此时变更为“生活”文件夹的子文件夹。
[0157] 在一些实施例中,当用户针对移动后的“阅读”文件夹图标输入展开操作(如点击“阅读”文件夹图标的操作)时,“阅读”文件夹可以展开,并显示其包括的子文件夹。
[0158] 可选地,如图5F所示,当手机检测到用户停止按压“阅读”文件夹图标之后,也可以响应于该操作,直接在“阅读”文件下显示其未移动之前包括的子文件夹图标,以便与未移动之前“阅读”文件夹中的子文件夹所呈现的显示状态保持一致。
[0159] 根据本申请实施例提供的文件夹管理的方法,通过针对 系统终端设备呈现的待移动文件夹输入拖拽操作,将待移动文件夹拖拽至需要合并的目标文件夹上方,当待移动文件夹和目标文件夹的重叠关系满足预设条件时,可以实现两个文件夹的自动合并,该方法无需用户输入繁琐的操作即可实现基于 系统对文件夹进行便捷高效的
管理,能够有效提升用户的使用体验。
[0160] 以下结合终端设备的具体结构,对本申请实施例提供的文件夹管理的方法的底层实现过程进行具体介绍。
[0161] 示例性的,如图6所示,为本申请实施例提供的一种终端设备的结构示意图。该终端设备可以对应于上述图1和图2中的终端设备100,可以包括显示屏、RecyclerView显示控件、拖拽动画移动模块(ItemTouchHelper.Callback)、拖拽动画的回调模块(ItemTouchHelper.Callback)、数据适配器(adapter)。
[0162] 其中,显示屏用于与用户进行交互,例如用于向用户呈现待管理的文件夹列表或者更新后的文件夹列表等;或者,用于接收用户输入的预设操作,例如长按操作、拖拽操作和抬手操作等。
[0163] RecyclerView显示控件用于接收显示屏传输的事件,如长按事件、拖拽事件、抬手事件等。RecyclerView显示控件还可以用于获取不同事件下手指在显示屏上按压的坐标,并将该坐标传递给ItemTouchHelper。此外,RecyclerView显示控件还可以通过ItemTouchHelper实现拖拽动画,并通过显示屏呈现该拖拽动画,该过程可以参见现有流程,本申请实施例对此不再详述。
[0164] ItemTouchHelper.Callback是一个抽象类,其中包括一些用户开发者定制的抽象方法,包括设置文件夹可以在特定方向被拖拽等。ItemTouchHelper可以通过调用ItemTouchHelper.Callback中的回调方法实现不同的功能。例如,当用户长按某一文件夹图标时,ItemTouchHelper可以调用onSelectedChanged,向应用层传递被长按或拖拽的view。再例如,当文件夹发生移动时,ItemTouchHelper可以调用onMove,交换文件夹列表中两个文件夹的顺序。ItemTouchHelper.Callback模块接收到被选中或拖拽的view之后,可以获取view对应的viewholder。然后基于viewholder的位置向DataManager发送更新数组值通知。
[0165] DataManager用于进行文件夹相关的数据管理,其可以生成文件夹列表对应的文件夹列表结构信息,并对该文件夹列表结构信息进行管理。其中,本申请中的文件夹列表结构信息用于表征文件夹列表的结构,具体可以用于表征各个文件夹之间的父子文件夹关系(或可理解为层级关系)、文件夹位置等。该文件夹列表结构信息可以作为如何显示文件夹列表的依据,也即显示的文件夹列表中各个文件夹之间的父子文件夹关系、文件夹位置均需要满足文件夹列表结构信息中的规定。DataManage可以预先存储文件夹对应的文件夹列表结构信息,并且在父子文件夹关系(或层级关系)发生改变时对该文件夹列表结构信息进行实时更新。此外,DataManager还可以包括数据库,该数据库包括各个文件夹对应的唯一标识(identification,ID)值(uuid),文件夹名称(display_name),父文件夹的ID值(parent_uuid),文件夹所在层级(level),相对于显示屏左侧的缩进距离,文件夹的排列顺序(user_order)等等。可选地,数据库还可以包括每个文件夹的内容数据,数据库还可以包括文件夹下包括的子文件夹等等。
[0166] 需要说明的是,这里的文件夹的排列顺序(user_order)具体指文件夹在其所处的层级中的排列顺序。比如,假设第一层级的文件夹有3个,由于这3个文件夹在文件夹列表中是有排列顺序的,故通过user_order来表征哪个文件夹排在第一层级的第一个位置,哪个文件夹排在第一层级的第二个位置,以及哪个文件夹排在第一层级的第三个位置。
[0167] 应理解,这里的排列顺序仅为文件夹在其所处层级中的排列顺序,并不表示在整个文件夹列表中的排列顺序。
[0168] 在一些实施例中,示例性的,文件夹列表结构信息的形式可以具体为数组值。其中,有数组值为例,DataManager获文件夹列表结构信息的方式可以参见图7所示,包括:(1)可以基于数据库存储的文件夹ID获取所有的第一层级文件夹(层级记为level(1)),然后根据文件夹的排列顺序(user_order值)对第一层级文件夹进行排序;(2)查询每一个第一层级文件夹所包含的子文件夹,比如某一第一层级的父文件夹包括子文件夹ID1、子文件夹ID2和子文件夹ID3,并确定这些子文件夹对应的层级为:level(2)=level(1)+1,以及对这些子文件夹的user_order值进行排序;(3)按照类似的方式,递归查询每一子文件夹的孩子(子文件夹包含的子文件夹),这些子文件夹的孩子所在层级为level(3)=level(2)+1,直至查询到的文件夹不再包括子文件夹;(5)根据子文件夹和父文件夹之间的父子文件夹关系和文件夹的排列顺序生成数值组。
[0169] 举例来说,以图3A中所示的文件夹作为示例,在获取数组值时,首先根据文件夹对应的层级(level)找出第一层级的文件夹,也即“我的笔记”文件夹和“我的摘录”文件夹,然后按照“我的笔记”文件夹和我的摘录”文件夹分别对应的排列顺序(user_order)对这两个文件夹进行排序,那么此时数组值可以记为:
[0170] {name:我的笔记,level:0,UUID:aaa,user_order:0,parent UUID:bbb},[0171] {name:我的摘要,level:0,UUID:aaa,user_order:1,parent UUID:bbb}
[0172] 之后,根据数据库中存储的层级和文件夹父子关系,获取“我的笔记”文件夹和“我的摘录”文件夹分别包括的所有子文件夹,例如根据文件夹父子关系可以首先在数据库中查询到“我的笔记”文件夹包括的子文件夹分别是标题为:“个人”、“工作”、“生活”、“旅游”、“展览”、“阅读”的文件夹,然后根据这些子文件夹分别对应的user_order值,可以对“我的笔记”文件夹下的子文件夹进行排序,然后根据文件夹之间的父子关系,此时数组值可以记为:
[0173] {name:我的笔记,level:0,UUID:aaa,user_order:0,parent UUID:bbb}
[0174] {name:个人,level:1,UUID:xxx,user_order:0,parent UUID:aaa}
[0175] {name:工作,level:1,UUID:xxx,user_order:1,parent UUID:aaa}
[0176] {name:生活,level:1,UUID:xxx,user_order:2,parent UUID:aaa}
[0177] {name:旅游,level:1,UUID:xxx,user_order:3,parent UUID:aaa}
[0178] {name:展览,level:1,UUID:xxx,user_order:4,parent UUID:aaa}
[0179] {name:阅读,level:1,UUID:xxx,user_order:5,parent UUID:aaa}
[0180] 类似地,对于第一层级的另外一个“我的摘录”文件夹,根据文件夹父子关系可以首先在数据库中查询到“我的摘录”文件夹包括的子文件夹分别是标题为:“知乎”、“今日头条”、“微博”的文件夹,然后然后根据这些子文件夹分别对应的user_order值,可以对“我的摘录”文件夹下的子文件夹进行排序,然后根据文件夹之间的父子关系,此时数组值可以记为:
[0181] {name:我的摘要,level:0,UUID:aaa,user_order:1,parent UUID:bbb}
[0182] {name:知乎,level:1,UUID:xxx,user_order:0,parent UUID:aaa}
[0183] {name:今日头条,level:1,UUID:xxx,user_order:1,parent UUID:aaa}
[0184] {name:微博,level:1,UUID:xxx,user_order:2,parent UUID:aaa}
[0185] 应理解,这里给出的数组值的形式仅为示例,在实际应用中,数组值的形式还可以表示为:{我的笔记[个人,工作,生活,旅游,展览,阅读],我的摘录[知乎,今日头条,微博]}或者,{我的笔记:个人,工作,生活,旅游,展览,阅读;我的摘录:知乎,今日头条,微博}等,本申请实施例对此不作限定。其中,在上述示例{我的笔记:个人,工作,生活,旅游,展览,阅读;我的摘录:知乎,今日头条,微博}中,分号隔开的且位于冒号之前的文件夹为第一层级的文件夹;备分号隔开的各个文件夹中,冒号之后的文件夹为冒号之前文件夹中的子文件夹,逗号隔开的各个文件夹为同一层级的文件夹。
[0186] 在一些实施例中,DataManager可以响应于更新数组值通知,根据viewholder的位置确定被选中的文件夹,并在数组值中更新该文件夹对应的父子文件夹关系以及文件夹位置的变化。之后,DataManager可以将更新后的数组值以及对应的文件夹数据内容发送给adapter。
[0187] Adapter接收到更新的数据之后,可以基于数组值更新文件夹列表,该更新例如可以包括:按照数组值指示的父子文件夹关系和各文件夹位置,对被选中的文件夹的位置进行调整,并填充文件夹的内容等。之后,adapter可以指示RecyclerView显示控件对显示内容进行刷新,更新显示控件的显示内容,RecyclerView显示控件可以通过显示屏展示更新后的文件夹列表。
[0188] 示例性的,如图8所示,为本申请实施例提供的一种文件夹管理的方法的示意性流程图。该流程包括以下步骤:
[0189] S801,显示屏接收用户输入的长按操作。
[0190] 在一些实施例中,当用户需要对条目(item)列表中的某一item进行移动,改变其位置时,可以通过手指针对该待移动item输入长按操作。具体来说,这里的长按操作可以是用户针对显示于显示屏上的item列表中需要移动的item图标输入的操作。该长按操作例如对应于图3A中的操作301,或者对应于图4A中的操作401,或者对应于图5A中的操作501。应理解,本申请实施例中的item可以为习惯叫法,一个item可以视为一个view,具体地,本申请中的item可以是上文介绍的文件夹,但也可以是其它类型的条目,本申请实施例对此不作限定。为了便于理解,下文以item是文件夹为例进行介绍。
[0191] 应理解,本申请上文介绍的通过用户的手指执行长按操作仅为一种用于选中待移动文件夹的示例性操作,在实际应用中,长按操作例如还可以通过触控笔、鼠标等其它方式来执行,本申请实施例对此不作限定。
[0192] S802,显示屏向循环视图显示控件(RecyclerView)传递长按事件。
[0193] 在一些实施例中,显示屏接收到用户输入的针对待移动文件夹的长按操作之后,可以响应于该长按操作向RecyclerView传递对应的长按事件。
[0194] 应理解,RecyclerView是一个容器,用于提供一个固定的view让有限的窗口显示一个数据集,RecyclerView可以显示列表形式(list)或者网格形式(grid)的数据,比如文本或者照片。在本申请实施例提供的文件夹管理的方法中,主要通过RecyclerView实现灵活地显示文件夹列表数据。在一些实施例中,RecyclerView可以用于提供默认的表项动画以及自定义动画的入口,例如可以借助RecyclerView的ItemTouchHelper实现文件夹拖拽动画。在RecyclerView的使用过程中需要加载数据适配器,RecyclerView可以通过数据适配器获知数据变化,从而执行刷新文件夹列表的操作。
[0195] S803,RecyclerView接收长按事件,并确定长按事件对应的坐标(X0,Y0)。
[0196] 其中,坐标(X0,Y0)可以指长按事件中用户手指按压位置对应的坐标,该坐标位置可以对应于待移动文件夹的图标位置。坐标(X0,Y0)所在坐标系可以根据需要预先设置,其中,坐标系中的X轴的方向可以与终端设备顶端或底端边缘方向平行,坐标系中的Y轴方向可以与终端设备左侧或者右侧边缘方向平行。示例性的,本步骤中的坐标(X0,Y0)例如可以对应图3A所示的操作301所按压的位置对应的坐标,或者可以对应图4A所示的操作401所按压的位置对应的坐标,或者可以对应图5B所示的操作501所按压的位置对应的坐标。
[0197] S804,RecyclerView显示控件向ItemTouchHelper模块传递长按事件对应的坐标(X0,Y0)。
[0198] 其中,本申请实施例所说的ItemTouchHelper模块是被划分的用于执行ItemTouchHelper的抽象模块,ItemTouchHelper是一个工具类,主要用于对RecyclerView显示控件内的文件夹的长按事件进行扩展,还可以用于向RecyclerView显示控件提供添加拖拽排序与滑动删除等操作。
[0199] S805,ItemTouchHelper模块获取被按压的view。
[0200] 在一些实施例中,ItemTouchHelper模块可以通过监听系统的touch时间,获取motionEvent的坐标(X0,Y0),该motionEvent的坐标也即手指按压坐标;然后,通过motionEvent,根据手指按压坐标(X0,Y0),找到对应的view。其中,不同view对应不同的viewHolder,不同viewHolder对应不同位置(position)。
[0201] S806,ItemTouchHelper模块调用onSelectedChange,向拖拽动画回调模块(ItemTouchHelper.Callback)传递被按压的view对应的viewholder。
[0202] 应理解,OnSelectedChange为应用框架(framework)层的ItemTouchHelper.Callback注册在ItemTouchHelper的回调方法。在一些实施例中,ItemTouchHelper模块获取viewholder之后,可以通过调用ItemTouchHelper.Callback的onSelectedChange方法向应用层的ItemTouchHelper.Callback回传该被按压的view对应的viewholder。
[0203] S807,拖拽动画回调模块(ItemTouchHelper.Callback)向数据管理模块(DataManager)传递viewholder。
[0204] 在一些实施例中,ItemTouchHelper.Callback通过onSelectChange接收被选中的文件夹对应的viewholder。ItemTouchHelper.Callback获取viewholder之后,可以通过调用getposition获取该viewholder对应的位置。
[0205] 在一些实施例中,ItemTouchHelper.Callback可以将viewholder对应的位置传递至应用层的DataManager,以便DataManager根据viewholder的位置确定被选中的文件夹。此外,ItemTouchHelper.Callback还可以通知DataManager将被选中的文件夹所包括的子文件夹删除。
[0206] S808,DataManager根据viewholder的位置,在表征文件夹父子关系的数组值中删除被选中文件夹的子文件夹。
[0207] 在一些实施例中,DataManager接收到viewholder之后,可以根据viewholder的位置确定被选中的文件夹,并判断被选中的文件夹是否包括子文件夹。具体地,DataManager确定被选中的文件夹过程可以包括:ItemTouchHelper.Callback获取viewholder的位置后,通过RecyclerView调用getAdapterPosition方法从adapter查询该viewholder的位置对应的文件夹,从而获取被选中的文件夹。其中,adapter包括不同文件夹分别对应的位置信息。这里被选中的文件夹也即待移动文件夹或者被拖拽的文件夹。
[0208] 在一些实施例中,DataManger获取到被选中的文件夹之后,可以根据该DataManager存储的文件夹列表结构信息获取该文件夹的父子文件夹关系,判断被选中的文件夹是否包括子文件夹。如果被选中的文件夹包括子文件夹,那么DataManager可以在文件夹列表结构信息中将该文件夹下的子文件夹删除,并获取更新后的数组值。该更新后的文件夹列表结构信息仍然包括被选中的文件夹,但不再包括其包括的子文件夹。
[0209] 需要说明的是,本申请中的文件夹列表结构信息可以用于表征文件夹列表的结构,具体可以用于表征各个文件夹之间的父子文件夹关系(或可理解为层级关系)、文件夹所在层级、文件夹位置和文件夹排列顺序等。DataManage可以预先存储文件夹对应的文件夹列表结构信息,并且在父子文件夹关系(或层级关系)发生改变时对该文件夹列表结构信息进行实时更新。在一些实现方式中,文件夹列表结构信息可以具体体现为数组值形式,但也可以表现为其他任何能够表征文件夹列表结构的形式,如树形形式等,本申请实施例对此不作限定。
[0210] 还需要理解的是,文件夹结构信息可以仅包括用于表征文件夹列表结构的信息,而无需包括每个文件夹中的具体内容数据。当需要文件夹中的具体内容数据时,可以从DataManager的数据库中获取。
[0211] 在一些实施例中,以文件夹结构信息是数组值为例,DataManager获取数组值的方式可以包括:首先获取第一层级的所有文件夹,并且按照文件夹的用户顺序(user_order)进行排序;然后采用递归方式获取每个第一层级的文件夹下的子文件夹,并在每个第一层级的父文件夹下按照user_order对其包括的子文件夹进行排序。示例性的,数组值可以包括每个文件夹的多项信息,比如:文件件名称、层级(level)、UUID、文件夹的排列顺序(user_order)和父文件夹ID(parent UUID)等。例如,以第一层级的“我的笔记”文件夹为例,其对应的数组值数据可以表示为{name:我的笔记,level:0,UUID:aaa,user_order:0,parent UUID:bbb},其中,name表示文件夹名称;level为0表示“我的笔记文件夹”为第一层级;UUID为“我的笔记”文件夹的Key唯一ID;user_order为0为“我的笔记”文件夹在第一层级中的排列顺序为第一位;parent UUID表示“我的笔记”文件夹对应的父文件夹标识,由于“我的笔记”为第一层级,没有对应的父文件夹,因而这里的bbb可以表示不存在父文件夹标识。
[0212] 需说明的是,根据数组值包括的文件夹名称、文件夹的user_order以及文件夹所属的父文件夹ID可以确定文件夹列表中各个文件夹的显示顺序。根据数组值包括的文件夹层级可以确定文件夹对应的缩进值。其中,不同层级(level)对应不同的缩进值,这里的缩进值可以是文件夹图标的左侧边缘距离显示屏左侧边缘的距离。示例性的,随着层级增高,缩进值可以随之增大。
[0213] 值得注意的是,以文件夹列表结构信息是数组值为例,在本申请实施例提供的文件夹管理的方法中,文件夹的数组值可以作为如何显示文件夹列表的依据。具体来说,在显示文件夹列表内容时,adapter是根据数组值包括的文件夹名称、层级、UUID、文件夹的排列顺序、父文件夹ID等来确定文件夹列表中各个文件夹的排列顺序的。并且,adapter可以通过递归调用算法的level值确定文件夹对应的缩进值。比如,在显示文件夹列表时,adapter可以首先遍历数组值中第一层级的文件夹,也即遍历level为0的文件夹,由于level为0因而可以被识别为根目录下的父文件夹,并根据level为0对应的缩进值对父文件夹进行显示;之后,adapter可以遍历数组值中的第二层级的文件夹,也即遍历level为1的文件夹,由于level为1,因而可以被识别为子文件夹,根据level为1对应的缩进距离,可以对这些子文件夹进行缩进显示。
[0214] 当用户拖拽被选中的文件夹,使其位置发生移动时,DataManager会对数组值进行更新,使得DataManager存储的数组值中与该被选中的文件夹相关的信息也发生相应的变化,具体来说,数组值中该被选中的文件夹对应的数值所在的位置也会发生相应变化;之后,更新后的数组值会作为指导如何显示文件夹列表的新的依据,使得向用户呈现的文件夹列表也随之更新。
[0215] 以图9A所示的文件夹列表为例,在未对文件夹进行拖拽之前,数组值可以如下所示:
[0216] {name:我的笔记,level:0,UUID:aaa1,user_order:0,parent UUID:bbb},[0217] {name:生活,level:1,UUID:xxx1,user_order:0,parent UUID:aaa1}
[0218] {name:旅游,level:1,UUID:xxx2,user_order:1,parent UUID:aaa1}
[0219] 之后,假设用户将“旅游”文件夹拖拽到“生活”文件夹上方,也即“旅游”文件夹和“生活”文件夹交换位置,那么数组值也随之进行更新,更新后的数组值可以如下所示:
[0220] {name:我的笔记,level:0,UUID:aaa1,user_order:0,parent UUID:bbb},[0221] {name:旅游,level:1,UUID:xxx2,user_order:0,parent UUID:aaa1}
[0222] {name:生活,level:1,UUID:xxx1,user_order:1,parent UUID:aaa1}
[0223] 当对拖拽后的文件夹列表进行显示时,可以依据更新后的数组值显示各个文件夹。
[0224] 以图9B所示的文件夹列表为例,在未对文件夹进行拖拽之前,数组值可以如下所示:
[0225] {name:我的笔记,level:0,UUID:aaa1,user_order:0,parent UUID:bbb},[0226] {name:旅游,level:1,UUID:xxx2,user_order:0,parent UUID:aaa1}
[0227] {name:生活,level:1,UUID:xxx1,user_order:1,parent UUID:aaa1}
[0228] {name:我的摘录,level:0,UUID:aaa2,user_order:1,parent UUID:bbb}[0229] 之后,假设用户将“旅游”文件夹拖拽到“我的摘录”文件夹上方,也即将“旅游”文件夹拖拽到和“我的笔记”文件夹同一层级,那么数组值也随之进行更新,更新后的数组值可以如下所示:
[0230] {name:我的笔记,level:0,UUID:aaa1,user_order:0,parent UUID:bbb},[0231] {name:生活,level:1,UUID:xxx1,user_order:0,parent UUID:aaa1}
[0232] {name:旅游,level:0,UUID:xxx2,user_order:1,parent UUID:bbb}
[0233] {name:我的摘录,level:0,UUID:aaa2,user_order:2,parent UUID:bbb}[0234] 此时,“旅游”文件夹的level变更为0,表示其变更为第一层级;user_order变更为1,表示其在第一层级中排列顺序为第二位;parent UUID变更为bbb,表示其不存在所属的父文件夹。相应地,原来排在第一层级第二位的“我的摘录”文件夹,其对应的user_order变更为2,表示其在第一层级中的排列顺序变更为第三位。
[0235] 当对拖拽后的文件夹列表进行显示时,可以依据更新后的数组值显示各个文件夹。
[0236] 应理解,通过引入数组值作为文件夹列表显示的依据,能够在文件夹发生改变(如父子文件夹关系发生变化或者文件夹位置变化)时,可以仅根据实时更新后的数组值实现对界面显示的文件夹列表进行相应的实时调整,而无需从数据库的大量数据中查找被选中文件夹的相关信息,再对显示的文件夹列表进行更新,从而提高了文件夹管理的时效性以及灵活性。
[0237] 在一些实施例中,DataManger还可以包括存储有文件夹数据的数据库,该数据库可以包括文件夹的通用唯一识别码(Universally Unique Identifier,UUID)、文件夹名称(display_name)、文件夹对应的父文件夹的ID值(parent_name)、文件夹层级(level)、文件夹的排列顺序(user_order)等。示例性的,存储于数据库中的一种示例性的文件夹数据例如可以如下表1所示:
[0238] 表1
[0239]
[0240] 每一个文件夹数据均可以包括如上信息,因此在确定选中的文件夹之后,尤其获取选中的文件夹的名称之后,可以根据数据库中记录的数据,找到该文件夹的父文件夹的ID值,然后找到该父文件夹的名称,以此找到对应关系。
[0241] 在一些实施例中,DataManager可以根据数据库中的信息获取用于表征各文件夹父子关系的数组值。
[0242] S809,数据管理模块(DataManger)向数据适配模块(adapter)传递更新后的数组值。
[0243] 在一些实施例中,DataManger可以将删除子文件夹之后对应的数组值发送至数据适配模块(adapter)。
[0244] 在一些实施例中,adapter获取更新后的数组值之后,可以根据该更新后数组值获取更新后的文件夹父子关系、文件夹位置等,并对列表中的文件夹进行相应的调整,将符合更新后数组值的文件夹数据内容填充至文件夹列表对应的位置中。
[0245] S810,数据适配模块(adapter)通知RecyclerView显示控件更新列表显示。
[0246] 应理解,当文件夹数据发生改变时,adapter可以向RecyclerView显示控件通知数据改变,使得RecyclerView显示控件根据改变后的数据进行文件夹列表刷新操作,进而实现在显示屏上显示更新后的文件夹列表。
[0247] S811,显示屏接收用户输入的拖拽操作。
[0248] 其中,该拖拽操作可以是用户通过手指输入的针对待移动文件夹图标的拖拽操作。该拖拽操作例如可以对应图3C所示的操作303,或者可以对应图4B所示的操作403,或者可以对应图5D所示的操作503。
[0249] S812,显示屏向RecyclerView显示控件传递拖拽事件。
[0250] 在一些实施例中,显示屏接收到用户输入的针对待移动文件夹的拖拽操作之后,可以响应于该拖拽操作向RecyclerView显示控件传递对应的拖拽事件。
[0251] S813,RecyclerView显示控件接收拖拽时间,并确定拖拽事件对应的坐标(x,y)。
[0252] 在一些实施例中,坐标(x,y)可以指拖拽过程中,用户手指按压位置对应的坐标。由于拖拽事件一般是连续过程,所以该坐标(x,y)可以有多个。
[0253] S814,RecyclerView显示控件向ItemTouchHelper模块传递拖拽事件对应的坐标(x,y)。
[0254] S815,ItemTouchHelper模块根据坐标(x,y)移动被拖拽的view的位置。
[0255] 在一些实施例中,ItemTouchHelper模块可以根据坐标(x,y)确定当前显示屏中被拖拽的view的位置。
[0256] 在一些实施例中,ItemTouchHelper模块还可以根据坐标(x,y)确定拖拽过程中被交换的目标view。
[0257] S816,ItemTouchHelper模块调用onMove传递被移动的view对应的viewholder,以及被交换的view对应的viewholder。
[0258] 应理解,显示屏中显示的不同view可以分别对应不同的viewholder。在一些实施例中,当ItemTouchHelper模块接收到被拖拽的view的位置之后,可以调用onMove向应用层的ItemTouchHelper.Callback传递被拖拽view对应的viewholder。
[0259] 在一些实施例中,ItemTouchHelper模块还可以根据被交换的目标view确定被交换的目标viewholder,可以通过调用onMove向应用层的ItemTouchHelper.Callback传递被交换的目标viewholder。
[0260] 需要说明的是,这里被交换的view可以对应于被交换的文件夹。具体来说,在待移动文件夹被拖拽的过程中,待移动文件夹需要从其初始位置越过中间至少一个文件夹以到达目标位置,而每当移动文件夹的位置被拖拽到某一个中间文件夹的上方,且与该中间文件夹的重叠部分大于预设值时,可以将该待移动文件夹的位置与该中间文件夹的位置进行交换,使待移动文件夹的位置距离目标位置更近,此时该中间文件夹即为被交换的文件夹。
[0261] S817,ItemTouchHelper.Callback模块获取被拖拽的viewholder和被交换的viewholder在文件夹列表中的位置。
[0262] 在一些实施例中,ItemTouchHelper.Callback模块可以调用getposition获取被拖拽的viewholder的位置,以及获取被交换的viewholder的位置。
[0263] S818,ItemTouchHelper.Callback模块向DataManger模块发送被拖拽viewholderder的位置和被交换的viewholder的位置。
[0264] S819,DataManger模块根据被拖拽viewholder的位置和被交换viewholder的位置,在数组值中交换被拖拽的文件夹和被交换的文件夹。
[0265] 在一些实施例中,DataManager接收到被拖拽的viewholder之后,可以根据该被拖拽的viewholder的位置确定被拖拽的文件夹,并且在DataManger接收到被交换的viewholder之后,可以根据该被交换的viewholder的位置确定被交换的文件夹。具体地,DataManager根据viewholder的位置确定对应文件夹过程可以包括:
ItemTouchHelper.Callback获取被拖拽的viewholder的位置后,通过RecyclerView调用getAdapterPosition方法从adapter查询该位置对应的文件夹,如果该viewholder的位置与某一个中间文件夹位置重叠,且重叠部分大于预设值,那么确定该中间文件夹为被交换文件夹。
[0266] 之后,DataManager模块可以在数组值中将被拖拽文件夹的位置和被交换文件夹的位置进行交换。
[0267] S820,DataManager模块向数据适配模块(adapter)传递更新后的数组值。
[0268] 其中,更新后的数组值是指被拖拽文件夹与被交换文件夹交换位置后的数组值。
[0269] 在一些实施例中,adapter接收到更新后的数组值之后,可以根据数组值指示的父子文件夹关系,生成更新的文件夹列表内容,在该更新的文件夹列表中,被拖拽的文件夹的位置与被交换文件夹的位置进行了交换。
[0270] S821,Aadapter通知RecyclerView显示控件更新列表显示。
[0271] 在一些实施例中,当adapter生成更新后的文件夹列表内容之后,指示RecyclerView显示控件进行刷新,显示被拖拽文件夹和被交换文件夹交换位置之后的新的文件夹列表。
[0272] S822,显示屏接收用户输入的抬手操作。
[0273] 在一些实施例中,当用户将被拖拽文件夹移动至目标位置之后,可以停止对该文件夹图标的长按操作,用户此时可以执行抬手操作。
[0274] S823,显示屏向RecyclerView显示控件传递抬手事件。
[0275] 在一些实施例中,显示屏接收到用户输入的针对待移动文件夹的抬手操作之后,可以响应于该抬手操作向RecyclerView显示控件传递对应的抬手事件。
[0276] 在一些实施例中,抬手事件可以触发RecyclerView显示控件调用onChildDraw系统方法,根据被拖拽文件夹相对于目标位置文件夹的位置确定是否进行文件夹合并。示例性的,RecyclerView显示控件可以调用onChildDraw系统方法获取当前拖拽的文件夹的高度和相对于与其相邻的上一个文件夹或下一个文件夹的偏移量。应理解,该偏移量可以用于指示文件夹被拖拽之后的位置,以及可以用于获取文件夹被拖拽后与上一个文件夹或下一个文件夹的重合部分,其中,如果重合部分大于第一比例时,那么可以对当前拖拽文件夹和对应的文件夹进行合并,如果重合部分小于第一比例,那么可以对当前拖拽文件夹和目标位置的文件夹进行位置交换。
[0277] S824,RecyclerView显示控件接收抬手事件,并确定抬手事件对应的坐标(X’,Y’)。
[0278] 其中,坐标(X’,Y’)可以指用户执行抬手操作时所对应的坐标,该坐标位置可以对应于目标位置,也即需要将文件夹移动到的目的位置。
[0279] S825,RecyclerView显示控件向ItemTouchHelper模块传递抬手事件对应的坐标(X’,Y’)。
[0280] S826,ItemTouchHelper模块根据坐标(X’,Y’)确定目标view。
[0281] 这里目标view是指用户抬手时被拖拽文件夹所在位置对应的view,也即拖拽过程结束时待移动文件夹对应的view。
[0282] S827,ItemTouchHelper模块向ItemTouchHelper.Callback模块传递目标viewholder。
[0283] 在一些实施例中,ItemTouchHelper模块响应于抬手事件,可以调用ItemTouchHelper.callback中的clearView回调方法,以确定将被拖拽的文件夹移动到哪个父文件夹中,也即确定被拖拽文件夹的目标位置。示例性的,确定被拖拽文件夹的位置的方式可以包括:根据当前被拖拽文件夹的移动位置,以及文件夹列表中与该被拖拽文件夹相邻的上一个文件夹(记为文件夹A)和下一个文件夹(记为文件夹B)所在层级,确定将被拖拽文件夹移动到哪一父文件夹中。具体来说,可以分为以下几种情形:
[0284] 1.如果与被拖拽文件夹相邻的下一个文件夹B是上一个文件夹A的子文件夹,那么将被拖拽的文件夹移动到文件夹A内,也即设置文件夹A是被拖拽文件夹的父文件夹。
[0285] 2.如果与被拖拽文件夹相邻的上一个文件夹A所在的层级,比下一个文件夹B所在的层级大,那么:
[0286] (1)如果被拖拽的文件夹所在层级比上一个文件夹A所在层级大,那么将被拖拽的文件夹放置在与上一文件夹A同一级目录下,也即移动后的文件夹与文件夹A属于同一层级;
[0287] (2)如果被拖拽的文件夹所在层级与下一个文件夹B所在的层级相同或者小于文件夹B所在的层级,那么将被拖拽的文件夹放置在与下一文件夹B同一级目录下,也即移动后的文件夹与文件夹B属于同一层级。
[0288] 3.如果上一个文件夹A与下一个文件夹B所在的层级相同,那么将被拖拽的文件夹放置在上一个文件夹的同一级目录下,也即移动后的文件夹与文件夹A和文件夹B属于同一层级。
[0289] 4.如果被拖拽文件夹移动到目标位置后,其下方为空白区域(也即不存在其他文件夹),那么将被拖拽的文件夹放置在根目录下,也即被拖拽的文件夹属于第一层级。
[0290] 在一些实施例中,当用户抬手时,ItemTouchHelper响应于抬手事件还可以调用ItemTouchHelper.Callback中的onChildDraw回调方法,确定是否对文件夹进行合并。示例性的,确定是否对文件夹进行合并的方式可以包括:当用户拖拽完毕抬手时,根据回调的被拖拽文件夹在Y轴方向上的偏移量(dy值)判断被拖拽之后文件夹相对于与其相邻的上一个或下一个文件夹高度的偏移量,根据该偏移量可以获取被拖拽文件夹与上一个或下一个文件夹的重合部分,当被拖拽的文件夹与上一个或下一个文件夹的重合部分大于第一比例(如重合大于75%)时,可以确定对文件夹进行合并操作。可选地,还可以根据当前文件夹所在的位置以及拖拽手势滑动的方向,获取要合并的目标文件夹是上一个文件夹还是下一个文件夹。确定父文件夹之后,可以将被拖拽文件夹的父文件夹指向为目标文件夹,便于后续将其放置与目标文件夹下。
[0291] 需要说明的是,这里的Y轴方向可以指与手机左侧或右侧边缘平行的方向。
[0292] S828,ItemTouchHelper.Callback模块获取目标viewholder在文件夹列表中的位置。
[0293] S829,ItemTouchHelper.Callback模块向DataManager发送目标viewholder的位置。
[0294] S830,DataManager根据目标viewholder的位置,计算对应文件夹归属的父文件夹,并更新数组值。
[0295] 在一些实施例中,DataManager接收到目标viewholder的位置之后,可以根据该viewholder的位置查询被拖拽的文件夹对应的文件夹列表的位置,然后将当前拖拽的文件夹的父文件夹ID值更新目标位置的文件夹ID,并根据拖拽后的目标位置重新设置文件夹列表的user_order,并更新文件夹数据库。
[0296] 之后,DataManager可以通过递归调用从文件夹数据库中重新获取文件夹列表数据内容,并将该文件夹列表数据内容传递给adapter,由adapter生成需要显示的文件夹列表的内容。
[0297] S831,DataManger向adapter传递更新后的数组值。
[0298] 其中,本步骤中更新后的数组值可以指待移动文件夹被拖拽至目标位置之后对应的数组值,该更新后的数组值可以用于表征文件夹被拖拽完毕之后新的父子文件夹关系、各个文件夹的位置等。
[0299] 在本步骤中,DataManager还可以向adapter传递更新后的文件夹列表数据内容。
[0300] 在一些实施例中,adapter获取更新后的数组值之后,可以根据该更新后数组值获取更新后的文件夹列表结构,如文件夹父子关系、文件夹位置、文件夹标题等。Adapter还可以根据接收到的文件夹列表数据内容,从中选择待显示文件夹对应的数据内容,并将这些内容填充至文件夹列表对应的位置中。
[0301] 在一些实施例中,DataManager还可以向adapter传递被拖拽文件夹的子文件夹对应的数据内容。Adapter可以基于这些子文件夹对应的数据内容,生成被拖拽文件夹对应的子文件夹内容,以便在目标位置显示被拖拽文件夹所包括的子文件夹。
[0302] S832,数据适配模块(adapter)通知RecyclerView显示控件更新列表显示。
[0303] 在一些实施例中,RecyclerView显示控件更新列表显示之后,可以向用户显示待移动文件夹被拖拽完毕之后,到达目标位置的文件夹列表。
[0304] 根据本申请实施例提供的文件夹管理的方法,通过针对 系统终端设备呈现的待移动文件夹输入拖拽操作,将被选中的文件夹拖拽至目标位置,即可实现对文件夹的移动效果,此外,当需要合并文件夹时,通过将被选中的文件夹拖拽至需要合并的目标文件夹上方,且使被选中文件夹和目标文件夹的重叠关系满足预设条件,就可以实现两个文件夹的自动合并,该方法无需用户输入繁琐的操作即可实现基于 系统对文件夹进
行便捷高效的管理,能够有效提升用户的使用体验。
[0305] 示例性的,如图10所示,为本申请实施例提供的另一种文件夹管理的方法的示意性流程图。该方法可以由终端设备作为主体来执行,具体可以包括以下步骤:
[0306] S1001,接收长按操作。
[0307] 其中,该长按操作为针对文件夹列表中的待移动文件夹图标输入的操作,被长按的文件夹可以被描述为待移动文件夹或者被选中的文件夹。
[0308] S1002,判断被选中的文件夹是否支持移动。
[0309] 当被选中的文件夹支持移动时,执行步骤S1003。
[0310] 当被选中的文件夹不支持移动时,可以显示提示信息,指示当前被选中的文件夹不支持移动。
[0311] S1003,判断被选中的文件夹是否有子文件夹。
[0312] 其中,当被选中的文件夹有子文件夹,也即判断结果为“是”时,执行步骤S1004;当被选中的文件夹没有子文件夹,也即判断结果为“否”时,执行步骤S1005。
[0313] S1004,移除子文件夹。
[0314] 本步骤中移除子文件夹是指在文件件列表结构信息中删除被选中文件夹的子文件夹。之后,可以根据更新后的文件夹列表结构信息显示更新后的文件夹列表,该更新后的文件夹列表不包括被删除子文件夹。
[0315] S1005,对被选中的文件夹进行拖拽。
[0316] 其中,拖拽文件夹的方式可以参见上图3B和图3C所示,或者图4B和图4C所示,或者图5C和图5D所示。
[0317] S1006,两两文件夹交换位置,记录拖拽操作对应的位置。
[0318] 在一些实施例中,在拖拽过程中,可以根据拖拽位置对被选中的文件夹和中间文件夹进行两两交换。
[0319] S1007,检测到抬手操作。
[0320] 其中,当检测到抬手操作时,也即意味着文件夹拖拽结束。
[0321] S1008,根据拖拽高度和相对偏移量,确定合并文件夹或者移动文件夹。
[0322] 在一些实施例中,当检测到抬手操作时,可以获取被选中文件夹的拖拽高度,根据拖拽高度可以获取当前被选中文件夹的目标位置。根据目标位置相对于相邻文件夹的偏移量,确定合并文件夹或者移动文件夹,其中,如果根据偏移量确定被选中文件夹与相邻文件夹的重合部分大于或等于第一比例(如75%)时,则表示应当将被选中的文件夹与文件夹进行合并;如果根据偏移量确定被选中文件夹与相邻文件夹的重合部分小于一比例时,则表示应当将被选中的文件夹移动到与相邻文件夹相邻的位置,两者处于同一层级,而不会进行合并。此外,还可以根据拖拽方向确定将被选中文件夹与上一个文件夹进行合并,或者将被选中文件夹与下一个文件夹进行合并,或者将被选中文件夹仅进行移动而不进行合并。比如,当拖拽方向向上,且被拖拽后,被选中文件夹和与其相邻的上一个文件夹重合部分大于或等于第一比例时,可以确定将被选中文件夹与上一个文件夹进行合并。
[0323] S1009,计算目标文件夹。
[0324] 在一些实施例中,当需要合并被拖拽的文件夹和其相邻的文件夹时,计算与被选中文件夹进行合并的目标文件夹的位置,基于该目标文件夹的位置可以进一步获取目标文件夹ID等信息。
[0325] S1010,判断目标文件夹下是否已存在同名文件夹。
[0326] 在一些实施例中,可以根据目标文件夹ID从文件夹列表结构信息或者数据库中查找是否包括与被选中文件夹同名称的子文件夹。
[0327] 其中,当目标文件夹下包括与被选中文件夹同名的文件夹时,可以执行下文中的步骤S1014。当目标文件夹下不包括与被选中文件夹同名的文件夹时,可以执行下文中的步骤S1011。
[0328] S1011,更新被选中文件夹的父文件夹为目标文件夹。
[0329] 在一些实施例中,当目标文件夹下不包括与被选中文件夹同名的文件夹时,也即被选中文件夹可以成功与目标文文件夹合并,此时,可以将文件夹列表结构信息中该被选中文件夹对应的父文件夹修改为目标文件夹。同时,还可以修改文件夹列表结构信息中该被选中文件夹对应的位置。
[0330] S1012,更新user_order及数据库。
[0331] 在一些实施例中,当被选中文件夹被成功移动到目标位置或者与目标文件夹合并之后,可以更新文件夹列表结构信息中该被选中文件夹对应的user_order,以及更新数据库中该被选中文件夹的信息,使该文件夹信息与更新后的文件夹列表一致。在一种可能的实现方式中,文件夹的排列顺组可以对应于文件夹的user_order,具体可以是文件夹在其所处的层级中的排列顺序。比如,假设第一层级的文件夹有3个,由于这3个文件夹在文件夹列表中是有排列顺序的,故通过user_order来表征哪个排在第一层级的第一个位置,哪个排在第一层级的第二个位置,以及哪个排在第一层级的第三个位置。
[0332] 应理解,这里的排列顺序仅为文件夹在其所处层级中的排列顺序,并不表示在整个文件夹列表中的排列顺序。
[0333] S1013,刷新文件夹列表显示。
[0334] S1014,移动失败,刷新文件夹列表恢复为原界面样式。
[0335] 根据本申请实施例提供的文件夹管理的方法,通过针对 系统终端设备呈现的待移动文件夹输入拖拽操作,将被选中的文件夹拖拽至目标位置,即可实现对文件夹的移动效果,此外,当需要合并文件夹时,通过将被选中的文件夹拖拽至需要合并的目标文件夹上方,且使被选中文件夹和目标文件夹的重叠关系满足预设条件,就可以实现两个文件夹的自动合并,该方法无需用户输入繁琐的操作即可实现基于 系统对文件夹进
行便捷高效的管理,能够有效提升用户的使用体验。
[0336] 示例性的,如图11所示,为本申请实施例提供的又一种文件夹管理的方法的示意性流程图。该方法可以由终端设备作为主体来执行,具体可以包括以下步骤:
[0337] S1101,响应于用户针对第一文件夹列表中第一文件夹图标输入的长按操作,显示第一界面,该第一界面包括处于选中状态的第一文件夹图标。
[0338] 在一些实施例中,所述响应于用户针对第一文件夹列表中第一文件夹图标输入的长按操作,显示第一界面,具体包括:响应于用户针对第一文件夹列表中第一文件夹图标输入的长按操作,确定所述长按操作对应的第一坐标;根据所述第一坐标确定第一文件夹,所述第一文件夹的位置对应于所述第一坐标;将所述第一文件夹图标设置为选中状态,并显示所述第一界面。
[0339] 在一些实施例中,当所述第一文件夹包括子文件夹时,所述响应于用户针对第一文件夹列表中第一文件夹图标输入的长按操作,显示第一界面,还包括:响应于用户针对第一文件夹列表中第一文件夹图标输入的长按操作,在所述预设的文件夹列表结构信息中删除所述第一文件夹的子文件夹对应的信息,并获取第二文件夹列表结构信息;根据所述第二文件夹结构信息,显示第一界面,所述第一界面包括被选中状态的所述第一文件夹图标,并且不显示所述第一文件夹包括的所述子文件夹。
[0340] S1102,接收用户针对第一文件夹图标输入的拖拽操作,并响应于拖拽操作显示第二界面,该第二界面包括第一文件夹图标被拖拽过程中的位置变化。
[0341] 在一些实施例中,所述接收用户针对所述第一文件夹图标输入的拖拽操作,并响应于所述拖拽操作确定所述第一文件夹图标在移动过程中的位置,可以具体包括:接收用户针对所述第一文件夹图标输入的拖拽操作;确定所述拖拽操作对应的至少一个第二坐标;根据所述至少一个第二坐标确定当前所述第一文件夹在移动过程中所处的至少一个位置。
[0342] 在一些实施例中,所述方法还包括:根据所述第一文件夹在移动过程中所处的至少一个位置显示所述第一文件夹图标被拖拽过程中的位置变化。
[0343] S1103,当拖拽结束时,响应于用户输入的抬手操作,根据拖拽高度和第一文件夹被拖拽后相对于目标文件夹的偏移量确定第一文件夹的目标位置,目标位置在所述目标文件夹内部或者与目标文件夹相邻。
[0344] 在一些实施例中,所述目标文件夹包括第二目标文件夹和/或第三文件夹,所述方法还包括:当拖拽结束时,响应于用户输入的抬手操作,根据拖拽高度确定与所述第一文件夹图标相邻的所述第二文件夹和/或所述第三文件夹,其中,所述第二文件夹为位于所述第一文件夹图标上方的相邻文件夹,所述第三文件夹为位于所述第一文件夹图标下方的相邻文件夹;根据所述第一文件夹被拖拽后相对于所述目标文件夹的偏移量确定是否合并文件夹;其中,当根据所述偏移量确定所述第一文件夹与所述第二文件夹的重合部分大于或等于第一比例时,将所述第一文件夹和所述第二文件夹合并;当根据所述偏移量确定所述第一文件夹与所述第二文件夹的重合部分小于第一比例时,不将所述第一文件夹和所述第二文件夹合并;当根据所述偏移量确定所述第一文件夹与所述第三文件夹的重合部分大于或等于第一比例时,将所述第一文件夹和所述第三文件夹合并;当根据所述偏移量确定所述第一文件夹与所述第三文件夹的重合部分小于第一比例时,不将所述第一文件夹和所述第三文件夹合并;当根据所述偏移量确定所述第一文件夹与所述第二文件夹和所述第三文件夹的重合部分均小于第一比例时,将所述第一文件夹移动图标至所述第二文件夹图标和所述第三文件夹图标之间。
[0345] 在一些实施例中,所述根据所述第一文件夹被拖拽后相对于所述目标文件夹的偏移量确定是否合并文件夹,具体包括:根据所述第一文件夹被拖拽后相对于所述目标文件夹的偏移量以及拖拽方向确定是否合并文件夹。
[0346] 在一些实施例中,所述根据所述第一文件夹被拖拽后相对于所述目标文件夹的偏移量以及拖拽方向确定是否合并文件夹,具体包括:当根据所述偏移量确定所述第一文件夹与所述第二文件夹的重合部分大于或等于第一比例时,且所述拖拽操作的方向为向上时,将所述第一文件夹和所述第二文件夹合并;当根据所述偏移量确定所述第一文件夹与所述第二文件夹的重合部分大于或等于第一比例时,且所述拖拽操作的方向为向下时,将所述第一文件夹图标移动至第二文件夹图标的下方;当根据所述偏移量确定所述第一文件夹与所述第三文件夹的重合部分大于或等于第一比例时,且所述拖拽操作的方向为向下时,将所述第一文件夹和所述第三文件夹合并;当根据所述偏移量确定所述第一文件夹与所述第三文件夹的重合部分大于或等于第一比例时,且所述拖拽操作的方向为向上时,将所述第一文件夹图标移动至第二文件夹图标的上方。
[0347] S1104,根据第一文件夹的目标位置更新预设的文件夹列表结构信息,获取第一文件夹列表结构信息,第一文件夹列表结构信息用于指示拖拽完毕之后第一文件夹列表中各个文件夹的ID、所在的层级、所属的父文件夹的ID以及文件夹排列顺序。
[0348] 在一些实施例中,所述文件夹列表结构信息为数组值,所述数组值包括所述文件夹列表包括的各个文件夹分别对应的文件夹的ID、所在的层级、所属的父文件夹的ID、文件夹的排列顺序,所述更新预设的文件夹列表结构信息,可以包括:根据所述第一文件夹被拖拽之后的目标位置,在所述数组值中修改所述第一文件夹对应的位置,使得所述第一文件夹在所述数组值中的位置与所述第一文件夹被拖拽后在所述文件夹列表中的位置一致;以及,在所述数组值中修改所述第一文件夹对应的所述文件夹的排列顺序,使得所述第一文件夹对应的所述文件夹排列顺序与所述第一文件夹被拖拽后在所述文件夹列表中的所述排列顺序一致;以及,在所述数组值中修改所述第一文件夹对应的所述层级,使得所述第一文件夹对应的所述层级与所述第一文件夹被拖拽后在所述文件夹列表中的所述层级一致;以及,在所述数组值中修改所述第一文件夹对应的所述父文件夹的ID,使得所述第一文件夹对应的所述父文件夹的ID与所述第一文件夹被拖拽后在所述文件夹列表中的所述父文件夹的ID一致。
[0349] 需要说明的是,文件夹的排列顺组可以对应于文件夹的user_order,具体可以指文件夹在其所处的层级中的排列顺序。比如,假设第一层级的文件夹有3个,由于这3个文件夹在文件夹列表中是有排列顺序的,故通过user_order来表征哪个排在第一层级的第一个位置,哪个排在第一层级的第二个位置,以及哪个排在第一层级的第三个位置。
[0350] 应理解,这里的排列顺序仅为文件夹在其所处层级中的排列顺序,并不表示在整个文件夹列表中的排列顺序。
[0351] 在一些实施例中,获取文件夹结构信息的方式可以包括:根据数据库中记录的所述第一文件夹列表中各个文件夹的信息,生成所述文件夹结构信息,所述各个文件夹的信息包括文件夹的ID、所在的层级、文件夹父子关系以及排列顺序。其中,所述根据数据库中记录的所述第一文件夹列表中各个文件夹的信息,生成所述文件夹结构信息,可以具体包括:根据文件夹所在的层级,获取所述第一文件夹列表中处于第一层级的文件夹;遍历查询每一个所述第一层级的文件夹包括的子文件夹,获取对应的第二层级的文件夹;递归查询所述第二层级的文件夹包括的子文件夹,获取对应的第三层级的文件夹;重复上述递归查询子文件夹的操作,直至查询到的某一层级的文件夹不再包括子文件夹;根据各个文件夹所在的层级、文件夹父子关系和排列顺序,生成文件夹列表结构信息。
[0352] 在一些实施例中,所述根据所述第一文件夹的目标位置更新预设的文件夹列表结构信息,具体包括:当所述第一文件夹与所述第二文件夹合并时,在所述文件夹列表结构信息中将所述第一文件夹修改为所述第二文件夹的子文件夹,且根据所述第一文件夹在所述第二文件夹中的位置确定所述第一文件夹的排列顺序;当所述第一文件夹与所述第三文件夹合并时,在所述文件夹列表结构信息中将所述第一文件夹修改为所述第三文件夹的子文件夹,且根据所述第一文件夹在所述第三文件夹中的位置确定所述第一文件夹的排列顺序;当所述第一文件夹图标移动至第二文件夹图标和第三文件夹图标之间时,在所述文件夹列表结构信息中将所述第一文件夹的位置修改至所述第二文件夹的子文件夹和所述第三文件夹之间。
[0353] S1105,根据更新后的文件夹列表结构信息,显示第三界面,该第三界面包括第二文件夹列表,该第二文件夹列表为第一文件夹图标被拖拽至目标位置后对应的文件夹列表。
[0354] 在一些实施例中,根据更新后的文件夹列表结构信息对数据库中文件夹信息进行调整,使得所述数据库中各个文件夹对应的文件夹所在层级和文件夹排列顺序与所述更新后文件夹结构信息中的一致。
[0355] 根据本申请实施例提供的文件夹管理的方法,通过针对 系统终端设备呈现的待移动文件夹输入拖拽操作,将被选中的文件夹拖拽至目标位置,即可实现对文件夹的移动效果,此外,当需要合并文件夹时,通过将被选中的文件夹拖拽至需要合并的目标文件夹上方,且使被选中文件夹和目标文件夹的重叠关系满足预设条件,就可以实现两个文件夹的自动合并,该方法无需用户输入繁琐的操作即可实现基于 系统对文件夹
进行便捷高效的管理,能够有效提升用户的使用体验。
[0356] 基于同样的技术构思,本申请实施例还提供了一种终端设备,包括一个或多个处理器;一个或多个存储器;所述一个或多个存储器存储有一个或多个计算机程序,所述一个或多个计算机程序包括指令,当所述指令被所述一个或多个处理器执行时,使得计算机或处理器执行上述任一个方法中的一个或多个步骤。
[0357] 基于同样的技术构思,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机可执行程序指令,所述计算机可执行程序指令在被计算机上运行时,使得计算机或处理器执行上述任一个方法中的一个或多个步骤。
[0358] 基于同样的技术构思,本申请实施例还提供了一种包含指令的计算机程序产品,所述计算机程序产品包括计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机或处理器执行上述任一个方法中的一个或多个步骤。
[0359] 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其它可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者通过所述计算机可读存储介质进行传输。所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如,固态硬盘(solid state disk,SSD))等。
[0360] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:ROM或随机存储记忆体RAM、磁碟或者光盘等各种可存储程序代码的介质。
[0361] 以上所述,仅为本申请实施例的具体实施方式,但本申请实施例的保护范围并不局限于此,任何在本申请实施例揭露的技术范围内的变化或替换,都应涵盖在本申请实施例的保护范围之内。因此,本申请实施例的保护范围应以所述权利要求的保护范围为准。

当前第1页 第1页 第2页 第3页