Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
帮助文档
  • Loading branch information
hongui committed Jan 5, 2019
1 parent de0e0e1 commit 3fa8567
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 131 deletions.
15 changes: 15 additions & 0 deletions app/src/main/assets/about.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1>关于快传</h1>
<p>快传是利用WIFI直连进行数据共享的小工具,可以快速,轻量,无干扰地完成一些数据转移工作.</p>
<p>目前快传已作为开源项目开源到<a href="https://github.com/hongui/FastAir">Github</a>,欢迎大家Star,Fork。</p>
<h1>关于作者</h1>
<p>毕业于云南大学-电子信息工程,目前是一名Android工程师,欢迎骚扰!</p>
<p>QQ:<a>632518410</a></p>
<p>邮箱:<a href="mailto:honguilee@163.com">honguilee@163.com</a></p>
<p>Github:<a href="https://github.com/hongui/">https://github.com/hongui/</a></p>
</body>
</html>
69 changes: 69 additions & 0 deletions app/src/main/assets/help.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<!DOCTYPE html>
<html>
<head>
<style>
.question{
color:#FF0000
}

</style>
</head>
<body>
<h1>快传帮助文档</h1>
<p>快传的主要功能是无网络条件下的文件分享和文本数据传输(当然有网也能用)。数据只在两台设备间流动,
不会也没有条件上传个人数据到其它任何地方,您可以放心使用。</p>
<h2>一些解释</h2>
<h3>网络连接原理</h3>
<p>快传使用WIFI直连技术实现的网络连接。简单来说,它和网线一样,仅仅起到一个通道建立的功能,
而且建立的通道只存在两台连接成功的设备间,所以这个功能是安全,并且高速的。
同时因为这个通道没有占用真正的网络通道,所以在使用快传的过程中,您还可以愉快地使用WIFI
上网。同时相比蓝牙,有距离更远,速度更快的优点。</p>
<h3></h3>
<h2>设备连接相关</h2>
<h3>连接设备</h3>
<h4>前提</h4>
<ul>
<li>手机设备需支持WIFI直连技术</li>
<li>WIFI开关处于开启状态,有没有接入热点都可</li>
</ul>
<h4>连接步骤</h4>
<ol>
<li>打开应用,如果直接跳转到主页(即有文件列表的页面),则说明已经连接成功,无需进行后续操作</li>
<li>提醒对方打开应用</li>
<li>稍等片刻,直到看到页面出现带有名字的手机图标</li>
<li>确定您想连接的设备,点击对应的那个手机图标</li>
<li>如果连接成功,页面会跳转到主页,否则请关闭WIFI开关,再重新开启重连</li>
</ol>
<h3>断开连接</h3>
<ol>
<li>进入主页</li>
<li>点击屏幕左上角的菜单,或者在屏幕左侧边沿向右滑动打开抽屉菜单</li>
<li>选择断开连接选项</li>
<li>在弹出的弹框中选择停止并退出按钮</li>
</ol>
<h2>发送文件相关</h2>
<h3>发送文件的方式</h3>
<ul>
<li>在主页直接点击选择</li>
<li>分享的时候选择快传发送</li>
</ul>
<h3>发送文件的步骤</h3>
<ol>
<li>进入主页</li>
<li>在主页的顶部切换文件的类型</li>
<li>上下滑动文件列表,找到并点选您想发送的文件</li>
<li>选择完成点击屏幕底部中间位置,那个大大的黄黄的按钮</li>
<li>提醒对方同样点击那个按钮,完成</li>
</ol>
<h2>接收文件相关</h2>
<h3>接收文件的步骤</h3>
<ol>
<li>进入主页</li>
<li>点击屏幕底部中间位置那个大大的,黄黄的按钮</li>
<li>提醒对方发送文件,完成</li>
</ol>
<h2>Q&A</h2>
<p style="question"><strong>在接收文件的过程中,我发现还有一些文件遗漏了,该怎么办</strong></p>
<p>不要慌,勇敢地返回,继续选择遗漏的文件,发送就行,这时候对方不需要做任何操作</p>
</body>
</html>
95 changes: 5 additions & 90 deletions app/src/main/java/com/mob/lee/fastair/fragment/TextFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,6 @@ package com.mob.lee.fastair.fragment

import com.mob.lee.fastair.R
import com.mob.lee.fastair.base.AppFragment
import android.text.Spanned
import android.graphics.Typeface
import android.text.style.StyleSpan
import android.text.style.ForegroundColorSpan
import android.text.SpannableStringBuilder
import android.text.style.RelativeSizeSpan
import androidx.core.content.ContextCompat
import kotlinx.android.synthetic.main.fragment_text.*


Expand All @@ -23,92 +16,14 @@ class TextFragment : AppFragment() {
override fun setting() {
val type = arguments?.getInt("type") ?: 0

val content = if (0 == type) {
val name = if (0 == type) {
toolbar("使用帮助")
help()
"help.html"
} else {
toolbar("关于")
about()
"about.html"
}
textContent.text = content
}

private fun help(): CharSequence {
var start = 0
val span = SpannableStringBuilder("快传使用帮助")
setTitle(span, start)
start = span.length
span.append("发送文件")
setTitle(span, start)
span.append("\t1. 点击主页中想要发送的文件分类项,进入详情页;\n"
+ "\t2. 选择想要发送的文件,点击右下方的“咻”按钮,进入设备查找页;\n"
+ "\t3. 选择发送方设备,进行连接;\n"
+ "\t4. 列表项的右边显示为绿色的完成后,表示文件发送成功。\n")
start = span.length
span.append("接收文件")
setTitle(span, start)
span.append(
"\t1. 点击主页右下方的下载图标,进入设备查找页;\n" + "\t2. 参照“发送文件”的第3,4步。\n"
)
start = span.length
span.append("修改文件保存路径")
setTitle(span, start)
span.append(
"\t1. 点击主页左上方的菜单项,打开左侧抽屉菜单;\n"
+ "\t2. 点击保存路径菜单,进入文件夹选择页;\n"
+ "\t3. 点击想要保存的路径,进入子目录,也可点击上方的导航条回退;\n"
+ "\t4. 点击右上方的选择,下一次的文件传输文件将保存在选定的文件夹中。\n"
)
start = span.length
span.append("其他说明")
setTitle(span, start)
span.append(
("\t1. 传输文件前需打开WI-FI开关,但可不连接热点;\n"
+ "\t2. 文件默认保存在SD卡中的Download目录下;\n"
+ "\t3. 文件详情页可长按呼出菜单,对选定文件进行查看内容,详情,删除操作;\n"
+ "\t4. 聊天页长按聊天项可复制文字内容,可在其他应用中粘贴;\n"
+ "\t5. 使用前离电磁干扰越远,设备查找速度越快,文件传输速度越快;\n")
)
start = span.length
span.append("\t6. 注意,v1.0版本与v1.1版本之间的聊天功能无效,请升级至v1.1;\n")
span.append("\t7. 传输结束后,出现点击无效的情况,请退出程序即可恢复,无需杀死程序。\n")
span.setSpan(ForegroundColorSpan(ContextCompat.getColor(context!!, R.color.color_red)), start, span.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
return span
}

private fun about(): CharSequence {
var start = 0
val span = SpannableStringBuilder("关于快传")
setTitle(span, start)
span.append("\t快传是无需借助任何现有网络就可进行文件传输及聊天的应用,传输距离根据硬件差异大约小于等于23米左右,传输速度均值为6.8MB/s。\n")
start = span.length
span.append("关于作者")
setTitle(span, start)
span.append("毕业于云南大学-电子信息工程,目前是一名Android工程师,欢迎骚扰!\n")
span.append("\tQ Q:")
start = span.length
span.append("632518410\n")
setContact(span, start)
span.append("\t邮箱:")
start = span.length
span.append("andytab@163.com\n")
setContact(span, start)
span.append("\t博客:")
start = span.length
span.append("www.andytab.xyz\n")
setContact(span, start)
return span
}

private fun setTitle(span: SpannableStringBuilder, start: Int) {
span.setSpan(ForegroundColorSpan(ContextCompat.getColor(context!!, R.color.colorPrimaryText)), start, span.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
span.setSpan(StyleSpan(Typeface.BOLD), start, span.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
span.setSpan(RelativeSizeSpan(1.2f), start, span.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
span.append("\n")
}

private fun setContact(span: SpannableStringBuilder, start: Int) {
span.setSpan(ForegroundColorSpan(ContextCompat.getColor(context!!, R.color.colorPrimaryText)), start, span.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
span.setSpan(StyleSpan(Typeface.BOLD), start, span.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
val url = "file:///android_asset/$name"
webView.loadUrl(url)
}
}
46 changes: 22 additions & 24 deletions app/src/main/java/com/mob/lee/fastair/repository/RecordRep.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import com.mob.lee.fastair.model.Category
import com.mob.lee.fastair.model.ExcelCategory
import com.mob.lee.fastair.model.ImageCategory
import com.mob.lee.fastair.model.MusicCategory
import com.mob.lee.fastair.model.OtherCategory
import com.mob.lee.fastair.model.PDFCategory
import com.mob.lee.fastair.model.PowerPointCategory
import com.mob.lee.fastair.model.Record
Expand All @@ -29,23 +28,23 @@ import java.io.File
object RecordRep {
val records = SparseArray<List<Record>>()
/**
* HashSet在移除的时候会重新计算hash,导致移除失败,所以只能使用ArrayList
* */
* HashSet在移除的时候会重新计算hash,导致移除失败,所以只能使用ArrayList
* */
val selectRecords = ArrayList<Record>()
val states = SparseArray<Boolean>()
var total = 0

const val DELAY = 8L

var order:String="DESC"
set(value) {
field=when(field){
"ASC"->"DESC"
else->"DESC"
var order : String = "DESC"
set(value) {
field = when (field) {
"ASC" -> "DESC"
else -> "DESC"
}
}
}

fun load(context: Context?, position: Int): Channel<Record> {
fun load(context : Context?, position : Int) : Channel<Record> {
val list = records.get(position)

//有缓存,不查库
Expand Down Expand Up @@ -90,21 +89,21 @@ object RecordRep {
return channel
}

fun sortBy(position: Int, selector: (Record) -> Comparable<*>): Channel<Record>? {
fun sortBy(position : Int, selector : (Record) -> Comparable<*>) : Channel<Record>? {
return operator(position, {
it.sortedWith(compareByDescending(selector))
})
}

fun reverse(position: Int): Channel<Record>? {
order=""
fun reverse(position : Int) : Channel<Record>? {
order = ""
return operator(position, { it.reversed() })
}

fun states(position: Int, state: Int, start: Int, count: Int): Channel<Pair<Int, Record?>>? {
fun states(position : Int, state : Int, start : Int, count : Int) : Channel<Pair<Int, Record?>>? {
var temp = 0
return update(position, { index, record, iter ->
if (0 == index - start - temp && (temp < count || -1 == count)) {
if (0 == index - start - temp && (temp < count || - 1 == count)) {
record.state = state
temp += 1
true
Expand All @@ -114,7 +113,7 @@ object RecordRep {
})
}

fun toggleState(position: Int): Channel<Record>? {
fun toggleState(position : Int) : Channel<Record>? {
val isChecked = states.get(position, false)
val state = if (isChecked) {
states.remove(position)
Expand All @@ -136,7 +135,7 @@ object RecordRep {
})
}

fun delete(context: Context, position: Int): Channel<Pair<Int, Record?>>? {
fun delete(context : Context, position : Int) : Channel<Pair<Int, Record?>>? {
return update(position, { index, record, iter ->
if (STATE_CHECK == record.state) {
val file = File(record.path)
Expand All @@ -153,7 +152,7 @@ object RecordRep {
})
}

fun operator(position: Int, op: (List<Record>) -> List<Record>): Channel<Record>? {
fun operator(position : Int, op : (List<Record>) -> List<Record>) : Channel<Record>? {
val datas = records.get(position)
datas?.let {
val target = op(it)
Expand All @@ -163,7 +162,7 @@ object RecordRep {
return null
}

fun update(position: Int, action: (index: Int, data: Record, MutableIterator<Record>) -> Boolean): Channel<Pair<Int, Record?>>? {
fun update(position : Int, action : (index : Int, data : Record, MutableIterator<Record>) -> Boolean) : Channel<Pair<Int, Record?>>? {
val datas = records.get(position)
datas?.let {
if (it.isEmpty()) {
Expand All @@ -182,7 +181,7 @@ object RecordRep {
//如果操作更新了记录,则对应需要更新
val result = if (size == it.size) {
if (record.state == STATE_CHECK) {
if (!selectRecords.contains(record)) {
if (! selectRecords.contains(record)) {
selectRecords.add(record)
}
} else {
Expand All @@ -207,7 +206,7 @@ object RecordRep {
return null
}

fun send(datas: List<Record?>?): Channel<Record> {
fun send(datas : List<Record?>?) : Channel<Record> {
val channel = Channel<Record>()
GlobalScope.launch(Dispatchers.IO) {
datas?.let {
Expand All @@ -223,7 +222,7 @@ object RecordRep {
return channel
}

fun categories(): Array<Category> {
fun categories() : Array<Category> {
return arrayOf(ImageCategory(),
MusicCategory(),
VideoCategory(),
Expand All @@ -233,7 +232,6 @@ object RecordRep {
TextCategory(),
PDFCategory(),
ApplicationCategory(),
ZipCategory(),
OtherCategory())
ZipCategory())
}
}
20 changes: 3 additions & 17 deletions app/src/main/res/layout/fragment_text.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,8 @@
<include
layout="@layout/toolbar" />

<ScrollView
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:id="@+id/textContent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp8"
android:layout_marginLeft="@dimen/dp16"
android:layout_marginRight="@dimen/dp16"
android:layout_marginBottom="@dimen/dp8"
android:textSize="@dimen/sp16"
android:textColor="@color/colorSecondaryText"
android:textIsSelectable="true"
android:lineSpacingMultiplier="1.5"/>

</ScrollView>
android:layout_height="wrap_content"/>
</LinearLayout>
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,6 @@
<string name="later">稍后再发</string>

<string name="dropbehavior">com.mob.lee.fastair.view.TranslationBehavior</string>

<string name="help_content"><b>Q:怎么发送文件?\n</b></string>
</resources>

0 comments on commit 3fa8567

Please sign in to comment.