diff --git a/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt b/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt index a80c50e47d96690bfe6c590a479d1c3048021f92..81cceafda3da3ac31ea11bdc0760ebdfa08eb0b9 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 4ded089fb6989c1bf3fd06caaded5e8d131e4d97..301419711ca9056f63a2c9bc4af6e0860bcb0827 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 2387816c7a164a40ee2ff2352ab9a6a191b73bbd..5d531be71cb4f6f823cba216734c18f74c080607 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