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()函数里添加三个系统层级的窗口视图,很好理解,分别对应下图中的顶层栏(红),侧边栏(蓝),内容视图(橙)。
从layout文件来看,是这样的视图层级关系
层级关系靠自定义的视图容器构成。
顶层栏,容纳三个按钮
--> topbar_view.xml
<com.smartisanos.sidebar.view.TopView
<include layout="@layout/top_item_view"
android:id="@+id/photo"/>
<include layout="@layout/top_item_view"
android:id="@+id/file"/>
<include layout="@layout/top_item_view"
android:id="@+id/clipboard"/>
</com.smartisanos.sidebar.view.TopView>-
侧边栏,容纳应用、联系人、分享目标列表
--> sidebar_view.xml
<com.smartisanos.sidebar.view.SidebarRootView //侧边栏根视图<com.smartisanos.sidebar.view.SideView //侧边栏视图容器,容纳了以下两个子视图,分别用于正常时显示,拖拽分享状态时的显示和操作 <com.smartisanos.sidebar.view.DragScrollView //侧边栏视图容器控件,支持滚动和拖动子控件 android:id="@+id/side_view_dragged" //侧边栏处于拖拽分享时显示 <com.smartisanos.sidebar.view.SidebarListView android:id="@+id/ongoinglist_fake" <com.smartisanos.sidebar.view.SidebarListView android:id="@+id/contactlist_fake" <com.smartisanos.sidebar.view.SidebarListView android:id="@+id/sharelist" <com.smartisanos.sidebar.view.DragScrollView //侧边栏视图容器控件,支持滚动和拖动子控件 android:id="@+id/sideview_scroll_list_normal" //侧边栏正常状态下显示 <com.smartisanos.sidebar.view.SidebarListView android:id="@+id/ongoinglist" <com.smartisanos.sidebar.view.SidebarListView android:id="@+id/contactlist" <com.smartisanos.sidebar.view.SidebarListView android:id="@+id/applist" </com.smartisanos.sidebar.view.SidebarRootView>
-
内容视图,容纳最近图片、文件、剪贴板内容视图
--> content_view.xml
<com.smartisanos.sidebar.view.ContentView
<include layout="@layout/photo_view_group"
<com.smartisanos.sidebar.view.RecentPhotoViewGroup<include layout="@layout/file_view_group" <com.smartisanos.sidebar.view.RecentFileViewGroup <include layout="@layout/clipboard_view_group" <com.smartisanos.sidebar.view.ClipboardViewGroup <include layout="@layout/bookmark_view_group" //这个暂时没用到 <com.smartisanos.sidebar.view.BookmarkViewGroup </com.smartisanos.sidebar.view.ContentView>
layout文件
同上
视图树
暂留空