深入剖析锤子onestep代码实现 - 上篇

OneStep的四大功能

  • 自身设置
    设置(添删图标,图标排序),onestep模式进入、退出
  • 应用切换
    启动、切换应用,包括联系人图标,直达联系人对话页面
  • 拖拽分享
    拖拽图片、文字到侧边栏图标,然后分享到侧边栏的应用或联系人,
    例如,包括最近文档中的图片、文件、剪贴板文字,其它应用只要能发起拖拽事件,类型符合也可以。
  • 最近文档
    操作最近的图片、文件、剪贴板

注: 区分下长按拖动与拖拽分享
长按拖动是指长按侧边栏图标时,拖动图标排序,拖拽分享,是在其它界面长按视图控件,如图片,产生系统级的拖拽事件,然后把其拖拽到侧边栏分享。

项目结构

初始一看以为,按MVC分层来放相关的类文件,其实不是,其实没有,就是简单归了下类。

\smartisan\packages_apps_OneStep
│ Android.mk
│ AndroidManifest.xml
├─assets
│ └─calendar
├─res
│ ├─drawable
│ ├─layout
│ ├─values
│ └─...
└─src
└─com
└─smartisanos
└─sidebar ------一些无家可归的孩子,有些未被归类
│ DingDingReceiver.java
│ PackagesMonitor.java
│ PendingDragEventTask.java
│ ReceiveShareData.java
│ SelectContactActivity.java
│ SelectMailContactActivity.java
│ SidebarApplication.java
│ SidebarController.java
│ SidebarMode.java
│ SidebarService.java
│ SidebarStatus.java
├─action
├─receiver
├─setting ---------- 设置界面相关的主要代码
├─util ---------- 数据层的类,都在此
│ │ AppItem.java
│ │ AppManager.java
│ │ BitmapCache.java
│ │ Constants.java
│ │ ContactItem.java
│ │ DataManager.java
│ │ FileInfo.java
│ │ IClear.java
│ │ ImageLoader.java
│ │ LOG.java
│ │ RecentFileManager.java
│ │ ResolveInfoGroup.java
│ │ ResolveInfoManager.java
│ │ SidebarItem.java
│ │ Utils.java
│ │ WechatContact.java
│ │ ...
│ ├─anim
│ └─net
├─view ------------------View层的视图类,基本都在此,但其实Adapter类也都丢在这了
│ ClipboardAdapter.java
│ ClipboardItemView.java
│ ClipboardViewGroup.java
│ ContentView.java
│ RecentPhotoAdapter.java
│ RecentPhotoViewGroup.java
│ SidebarAdapter.java
│ SidebarListView.java
│ SidebarRootView.java
│ SideView.java
│ TopItemView.java
│ TopView.java
└─ ...

视图框架及layout文件

还是比较容易找到入口类,SidebarController.init()函数里添加三个系统层级的窗口视图,很好理解,分别对应下图中的顶层栏(红),侧边栏(蓝),内容视图(橙)。

深入剖析锤子onestep代码实现 - 上篇_第1张图片
onestep_all.jpg

从layout文件来看,是这样的视图层级关系
层级关系靠自定义的视图容器构成。

  • 顶层栏,容纳三个按钮
    --> topbar_view.xml
    android:id="@+id/photo"/>
    android:id="@+id/file"/>
    android:id="@+id/clipboard"/>

  • 侧边栏,容纳应用、联系人、分享目标列表
    --> sidebar_view.xml

      
    
  • 内容视图,容纳最近图片、文件、剪贴板内容视图
    --> content_view.xml

        
    

layout文件

同上

视图树

暂留空

你可能感兴趣的:(深入剖析锤子onestep代码实现 - 上篇)