From 25f6fdc3c4b07c978c2a3b359f94f59e6db6a37b Mon Sep 17 00:00:00 2001 From: liuyang Date: Sun, 7 Oct 2018 22:21:26 +0800 Subject: [PATCH] =?UTF-8?q?APK=E5=9B=BE=E7=89=87=E6=8A=93=E5=8F=96?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E5=8F=8A=E8=BD=AE=E6=92=AD=E6=B5=81=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E6=8A=93=E5=8F=96=EF=BC=8C=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=20#BYLSERVER-1438?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/duolebo/blyrobot/MainActivity.kt | 100 +++++++++++++++++- .../java/com/duolebo/blyrobot/data/Task.kt | 31 ++++-- .../com/duolebo/blyrobot/tools/TaskManager.kt | 2 +- 3 files changed, 125 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt b/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt index a80c50e..81cceaf 100644 --- a/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt +++ b/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt @@ -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() + + fun setData(dataList: ArrayList) { + 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 + } + + } } diff --git a/app/src/main/java/com/duolebo/blyrobot/data/Task.kt b/app/src/main/java/com/duolebo/blyrobot/data/Task.kt index 4ded089..3014197 100644 --- a/app/src/main/java/com/duolebo/blyrobot/data/Task.kt +++ b/app/src/main/java/com/duolebo/blyrobot/data/Task.kt @@ -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() 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) } diff --git a/app/src/main/java/com/duolebo/blyrobot/tools/TaskManager.kt b/app/src/main/java/com/duolebo/blyrobot/tools/TaskManager.kt index 2387816..5d531be 100644 --- a/app/src/main/java/com/duolebo/blyrobot/tools/TaskManager.kt +++ b/app/src/main/java/com/duolebo/blyrobot/tools/TaskManager.kt @@ -6,7 +6,7 @@ import kotlin.collections.ArrayList class TaskManager { private val TAG = "TaskManager" - private val tasks = ArrayList() + val tasks = ArrayList() private var isRunning = false private var currentTask: Task ?= null -- 2.21.0