Commit 25f6fdc3 authored by liuyang's avatar liuyang

APK图片抓取识别及轮播流地址抓取,客户端展示

#BYLSERVER-1438
parent 1b98a75e
......@@ -5,20 +5,47 @@ import android.os.Bundle
import android.support.v4.content.LocalBroadcastManager
import android.support.v7.app.AppCompatActivity
import android.util.Log
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.Toast
import com.duolebo.appbase.AppBaseHandler
import com.duolebo.appbase.IAppBaseCallback
import com.duolebo.appbase.IProtocol
import com.duolebo.blyrobot.data.ApkInfo
import com.duolebo.blyrobot.data.AppInfoData
import com.duolebo.blyrobot.data.Task
import com.duolebo.blyrobot.protocol.GetAppInfoProtocol
import com.duolebo.blyrobot.service.BylRobotService
import com.duolebo.blyrobot.tools.TaskManager
import com.duolebo.blyrobot.ui.AppConfigListItem
import com.duolebo.blyrobot.util.AdbUtil
import com.duolebo.blyrobot.util.Config
import com.duolebo.blyrobot.util.Constants
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*
class MainActivity : AppCompatActivity() {
class MainActivity : AppCompatActivity(), IAppBaseCallback {
private val TAG = "MainActivity"
private lateinit var apkInfoProtocol: GetAppInfoProtocol
private lateinit var dataHandler: AppBaseHandler
private lateinit var appInfoAdapter: AppConfigAdapter
private lateinit var refreshTimer: Timer
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.i(TAG, "onCreate....")
setContentView(R.layout.activity_main)
apkInfoProtocol = GetAppInfoProtocol(this, Config.instance)
this.dataHandler = AppBaseHandler(this)
this.appInfoAdapter = AppConfigAdapter()
listView.adapter = this.appInfoAdapter
initRefreshTimer()
val hasRoot = AdbUtil.checkRootPermission()
if (hasRoot) {
Log.i(TAG, "rooted...")
......@@ -40,6 +67,22 @@ class MainActivity : AppCompatActivity() {
startBtn.requestFocus()
}
private fun initRefreshTimer() {
refreshTimer = Timer()
refreshTimer.schedule(object: TimerTask() {
override fun run() {
runOnUiThread {
updateListStatus()
}
}
},2000, 2*60*1000)
}
private fun updateListStatus() {
}
private fun startRobotService() {
startService(Intent(this, BylRobotService::class.java))
}
......@@ -57,4 +100,59 @@ class MainActivity : AppCompatActivity() {
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
}
override fun onProtocolFailed(protocol: IProtocol?) {
Toast.makeText(this, "获取应用列表信息出错", Toast.LENGTH_SHORT).show()
}
override fun onHttpFailed(protocol: IProtocol?) {
Toast.makeText(this, "网络错误", Toast.LENGTH_SHORT).show()
}
override fun onProtocolSucceed(protocol: IProtocol?) {
if (protocol is GetAppInfoProtocol) {
val appInfoData = protocol.data as AppInfoData
this.appInfoAdapter.setData(appInfoData.apkInfos)
this.appInfoAdapter.notifyDataSetChanged()
for (apkInfo in appInfoData.apkInfos) {
val task = Task(this.applicationContext)
task.from(apkInfo)
TaskManager.instance.add(task)
}
}
}
class AppConfigAdapter: BaseAdapter() {
private val dataList = ArrayList<ApkInfo>()
fun setData(dataList: ArrayList<ApkInfo>) {
this.dataList.clear()
this.dataList.addAll(dataList)
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
var itemView = convertView as AppConfigListItem
if (convertView == null) {
itemView = AppConfigListItem(parent.context)
}
itemView.setData(dataList[position])
return itemView
}
override fun getItem(position: Int): Any {
return dataList[position]
}
override fun getItemId(position: Int): Long {
return 0
}
override fun getCount(): Int {
return dataList.size
}
}
}
......@@ -27,6 +27,14 @@ class Task : IAppBaseCallback {
private val TAG = "Task"
val STATUS_MAP = mapOf(
"0" to "未处理",
"1" to "进行中",
"2" to "中断",
"3" to "图片上传中",
"4" to "上报失败",
"5" to "处理完成")
lateinit var apkInfo: ApkInfo
// 截图存放路径
private lateinit var imagePath: String
......@@ -37,6 +45,7 @@ class Task : IAppBaseCallback {
private var uploadImages = ArrayList<String>()
private var channelIndex = 0
private var status = "0"
private var reportProtocol: ApkReportProtocol
private var dataHandler:AppBaseHandler
......@@ -63,19 +72,26 @@ class Task : IAppBaseCallback {
}
fun start() {
this.status = "1"
this.reportJson = JSONObject()
// 启动应用
this.launchApp()
// 频道轮询处理
this.processChannels()
// 上传图片
this.uploadImage()
// 上报服务器
this.report()
try {
this.processChannels()
// 上传图片
this.uploadImage()
this.status = "3"
} catch (e: java.lang.Exception) {
this.status = "2"
e.printStackTrace()
}
// 退出应用
AdbUtil.stopApp(this.apkInfo.packageName)
}
private fun finish(result: Boolean) {
AdbUtil.stopApp(this.apkInfo.packageName)
this.taskListener?.run {
onComplete(result)
}
......@@ -286,14 +302,17 @@ class Task : IAppBaseCallback {
}
override fun onProtocolFailed(p0: IProtocol?) {
this.status = "4"
finish(false)
}
override fun onHttpFailed(p0: IProtocol?) {
this.status = "4"
finish(false)
}
override fun onProtocolSucceed(p0: IProtocol?) {
this.status = "5"
finish(true)
}
......
......@@ -6,7 +6,7 @@ import kotlin.collections.ArrayList
class TaskManager {
private val TAG = "TaskManager"
private val tasks = ArrayList<Task>()
val tasks = ArrayList<Task>()
private var isRunning = false
private var currentTask: Task ?= null
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment