diff --git a/app/src/main/java/luyao/box/Ext.kt b/app/src/main/java/luyao/box/Ext.kt index 0306435..d3ad025 100644 --- a/app/src/main/java/luyao/box/Ext.kt +++ b/app/src/main/java/luyao/box/Ext.kt @@ -1,8 +1,11 @@ package luyao.box import android.content.Context +import android.view.View import android.widget.Toast +import luyao.box.common.util.AppUtils import luyao.box.common.util.FileUtils.deleteFile +import luyao.box.common.util.HashUtils import java.io.File fun Context.toast(text: String) { @@ -32,4 +35,13 @@ fun File.deleteAll() { deleteFile(this) } +fun ByteArray.md5() = AppUtils.byte2HexStr(HashUtils.hash(this, HashUtils.Hash.MD5)) +fun ByteArray.sha1() = AppUtils.byte2HexStr(HashUtils.hash(this, HashUtils.Hash.SHA1)) +fun ByteArray.sha256() = AppUtils.byte2HexStr(HashUtils.hash(this, HashUtils.Hash.SHA256)) + +fun View.click(){ + +} + + diff --git a/app/src/main/java/luyao/box/ext/LogExt.kt b/app/src/main/java/luyao/box/ext/LogExt.kt new file mode 100644 index 0000000..6173922 --- /dev/null +++ b/app/src/main/java/luyao/box/ext/LogExt.kt @@ -0,0 +1,44 @@ +package luyao.box.ext + +import android.util.Log +import luyao.box.BuildConfig + +/** + * Description: log相关,日志的开关和默认tag通过AndroidKtxConfig来配置 + * Create by lxj, at 2018/12/5 + */ + +const val BOX="box" + +private enum class LogLevel{ + Verbose, Debug, Info, Warn, Error +} + +fun String.v(tag: String = BOX){ + intervalLog(LogLevel.Verbose, tag, this ) +} + +fun String.d(tag: String = BOX){ + intervalLog(LogLevel.Debug, tag, this ) +} +fun String.i(tag: String = BOX){ + intervalLog(LogLevel.Info, tag, this ) +} +fun String.w(tag: String = BOX){ + intervalLog(LogLevel.Warn, tag, this ) +} +fun String.e(tag: String = BOX){ + intervalLog(LogLevel.Error, tag, this ) +} + +private fun intervalLog(level: LogLevel, tag: String, msg: String){ + if(BuildConfig.DEBUG){ + when (level) { + LogLevel.Verbose -> Log.v(tag, msg) + LogLevel.Debug -> Log.d(tag, msg) + LogLevel.Info -> Log.i(tag, msg) + LogLevel.Warn -> Log.w(tag, msg) + LogLevel.Error -> Log.e(tag, msg) + } + } +} diff --git a/app/src/main/java/luyao/box/ui/appManager/AppDetailActivity.kt b/app/src/main/java/luyao/box/ui/appManager/AppDetailActivity.kt index 663bc80..83a4a18 100644 --- a/app/src/main/java/luyao/box/ui/appManager/AppDetailActivity.kt +++ b/app/src/main/java/luyao/box/ui/appManager/AppDetailActivity.kt @@ -6,12 +6,9 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.launch -import luyao.box.APK_PATH -import luyao.box.R +import luyao.box.* import luyao.box.common.base.BaseActivity import luyao.box.common.util.AppUtils -import luyao.box.common.util.HashUtils -import luyao.box.ui.editor.TextEditorActivity import luyao.box.ui.editor.TextViewerActivity import luyao.box.util.Utils import luyao.parser.xml.XmlParser @@ -46,7 +43,6 @@ class AppDetailActivity : BaseActivity() { private fun initListener() { detailRefresh.setOnRefreshListener { refresh() } detailManifest.setOnClickListener { -// startActivity(TextEditorActivity::class.java, "sourceDir", sourceDir) startActivity(TextViewerActivity::class.java,"filePath",filePath) } li_sigMD5.setOnClickListener { Utils.copy(this, sigMD5.text.toString()) } @@ -56,9 +52,9 @@ class AppDetailActivity : BaseActivity() { private fun refresh() { val sig = AppUtils.getAppSignature(this, mPackageName) - sigMD5.text = AppUtils.byte2HexStr(HashUtils.hash(sig, HashUtils.Hash.MD5)) - sigSHA1.text = AppUtils.byte2HexStr(HashUtils.hash(sig, HashUtils.Hash.SHA1)) - sig256.text = AppUtils.byte2HexStr(HashUtils.hash(sig, HashUtils.Hash.SHA256)) + sigMD5.text = sig.md5() + sigSHA1.text = sig.sha1() + sig256.text =sig.sha256() CoroutineScope(Dispatchers.Main).launch { val xmlAsync = async(Dispatchers.IO) { diff --git a/app/src/main/java/luyao/box/ui/device/DeviceInfoActivity.kt b/app/src/main/java/luyao/box/ui/device/DeviceInfoActivity.kt index 691de61..62fced7 100644 --- a/app/src/main/java/luyao/box/ui/device/DeviceInfoActivity.kt +++ b/app/src/main/java/luyao/box/ui/device/DeviceInfoActivity.kt @@ -4,6 +4,7 @@ import android.Manifest import android.annotation.SuppressLint import android.content.pm.PackageManager import android.os.Build +import android.os.Environment import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import kotlinx.android.synthetic.main.activity_device_info.* @@ -50,6 +51,12 @@ class DeviceInfoActivity : BaseActivity() { version.text = DeviceUtils.getVersion() os.text = DeviceUtils.getKernelVersion() macAddress.text = DeviceUtils.getMacAddress() + + screen.text=String.format("%s * %s", DeviceUtils.getDeviceWidth(this), DeviceUtils.getDeviceHeight(this)) + ram.text=DeviceUtils.getRamInfo(this) + rom.text=DeviceUtils.getRomInfo(this) + + } private fun checkPermissions() { diff --git a/app/src/main/java/luyao/box/ui/editor/TextEditorActivity.kt b/app/src/main/java/luyao/box/ui/editor/TextEditorActivity.kt index 4b32196..c63ba1f 100644 --- a/app/src/main/java/luyao/box/ui/editor/TextEditorActivity.kt +++ b/app/src/main/java/luyao/box/ui/editor/TextEditorActivity.kt @@ -37,7 +37,7 @@ class TextEditorActivity : BaseActivity() { return@async xmlParser.parse() } } - textEdit.setText(xml.await()?.xmlContent) + textEdit.setText(xml.await()?.xmlContent ?: "") } } } \ No newline at end of file diff --git a/app/src/main/java/luyao/box/ui/editor/TextViewerActivity.kt b/app/src/main/java/luyao/box/ui/editor/TextViewerActivity.kt index 819c03b..a407b20 100644 --- a/app/src/main/java/luyao/box/ui/editor/TextViewerActivity.kt +++ b/app/src/main/java/luyao/box/ui/editor/TextViewerActivity.kt @@ -24,11 +24,12 @@ class TextViewerActivity : BaseActivity() { mToolbar.title = File(filePath).name mToolbar.inflateMenu(R.menu.toolbar_search) - val webSettings = webView.settings - webSettings.javaScriptEnabled = true - webSettings.setAppCacheEnabled(true) - webSettings.setSupportZoom(true) - webSettings.defaultTextEncodingName = "utf-8" + webView.settings.run { + javaScriptEnabled=true + setAppCacheEnabled(true) + setSupportZoom(true) + defaultTextEncodingName="utf-8" + } webView.webChromeClient = object : WebChromeClient() { override fun onProgressChanged(view: WebView?, newProgress: Int) { if (newProgress == 100) { @@ -44,8 +45,6 @@ class TextViewerActivity : BaseActivity() { } override fun initData() { - -// webView.loadData(File(filePath).readText(),"text/xml","utf-8") webView.loadUrl("file:///$filePath") } diff --git a/app/src/main/java/luyao/box/ui/setting/SettingFragment.kt b/app/src/main/java/luyao/box/ui/setting/SettingFragment.kt index 5e4edb7..d8189d6 100644 --- a/app/src/main/java/luyao/box/ui/setting/SettingFragment.kt +++ b/app/src/main/java/luyao/box/ui/setting/SettingFragment.kt @@ -9,7 +9,6 @@ import kotlinx.coroutines.launch import luyao.box.BASE_PATH import luyao.box.R import luyao.box.common.util.FileUtils -import luyao.box.deleteAll import java.io.File /** @@ -63,7 +62,6 @@ class SettingFragment : PreferenceFragmentCompat() { FileUtils.deleteFile(file) } } - } private val fileList = arrayListOf() @@ -74,7 +72,7 @@ class SettingFragment : PreferenceFragmentCompat() { if (file.name.endsWith(".apk")) fileList.add(file) } else if (file.listFiles().isNotEmpty()) { for (subFile in file.listFiles()) { - subFile.deleteAll() + filter(subFile) } } diff --git a/app/src/main/java/luyao/box/util/AccessibilityUtils.kt b/app/src/main/java/luyao/box/util/AccessibilityUtils.kt index 4a1ee92..14e6f0a 100644 --- a/app/src/main/java/luyao/box/util/AccessibilityUtils.kt +++ b/app/src/main/java/luyao/box/util/AccessibilityUtils.kt @@ -18,7 +18,7 @@ object AccessibilityUtils { /* * 不可用,高版本直接返回 Collections.emptyList() */ - fun checkAccessibilityEnabled(serviceName: String, context: Context): Boolean { + private fun checkAccessibilityEnabled(serviceName: String, context: Context): Boolean { val manager: AccessibilityManager = context.getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager val enabledAccessibilityServiceList = diff --git a/app/src/main/res/layout/activity_device_info.xml b/app/src/main/res/layout/activity_device_info.xml index d49f7ca..8d01ff4 100644 --- a/app/src/main/res/layout/activity_device_info.xml +++ b/app/src/main/res/layout/activity_device_info.xml @@ -109,6 +109,19 @@ + + + + + + + + + android:text="@string/screen"/> + + + + + + + + + + + + + + + + @@ -178,6 +217,32 @@ + + + + + + + + + + + + + + + + @@ -264,19 +329,6 @@ - - - - - - - - @@ -291,21 +343,6 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4333169..3747ba2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -51,25 +51,28 @@ Sdk Version : App Version : 设备信息 - Brand - Display - Product - Device - Board + 品牌 + 版本号 + 型号 + 设备名称 + 主板 Model - Manufacturer + 制造商 Bootloader Hardware - Supported ABIs - Radio Version + ABIs + Radio Api - Android Version - SDK + Android 版本 + SDK 版本 Base Os Kernel IMEI MEID SN - Mac Adress + Mac Address + 屏幕 + 内存 + 存储 diff --git a/build.gradle b/build.gradle index 74f9f84..1b7102e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.10' + ext.kotlin_version = '1.3.20' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.2.1' + classpath 'com.android.tools.build:gradle:3.3.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/common/src/main/java/luyao/box/common/util/DeviceUtils.java b/common/src/main/java/luyao/box/common/util/DeviceUtils.java index 365d45d..b6e6dc5 100644 --- a/common/src/main/java/luyao/box/common/util/DeviceUtils.java +++ b/common/src/main/java/luyao/box/common/util/DeviceUtils.java @@ -1,9 +1,12 @@ package luyao.box.common.util; import android.annotation.SuppressLint; +import android.app.ActivityManager; import android.content.Context; import android.os.Build; +import android.os.Environment; import android.telephony.TelephonyManager; +import android.text.format.Formatter; import androidx.annotation.RequiresApi; import androidx.annotation.RequiresPermission; @@ -120,4 +123,35 @@ public static String getMacAddress() throws SocketException { } return ""; } + + public static int getDeviceWidth(Context context){ + return context.getResources().getDisplayMetrics().widthPixels; + } + + public static int getDeviceHeight(Context context){ + return context.getResources().getDisplayMetrics().heightPixels; + } + + public static String getRamInfo(Context context){ + long totalSize; + long availableSize; + + ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + ActivityManager.MemoryInfo memoryInfo=new ActivityManager.MemoryInfo(); + activityManager.getMemoryInfo(memoryInfo); + + totalSize=memoryInfo.totalMem; + availableSize=memoryInfo.availMem; + + return String.format("%s / %s", Formatter.formatFileSize(context,availableSize),Formatter.formatFileSize(context,totalSize)); + } + + public static String getRomInfo(Context context){ + long totalSize= Environment.getExternalStorageDirectory().getTotalSpace(); + long availableSize=Environment.getExternalStorageDirectory().getFreeSpace(); + + return String.format("%s / %s", Formatter.formatFileSize(context,availableSize),Formatter.formatFileSize(context,totalSize)); + } + + } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9a4163a..9f59c32 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Tue Mar 12 15:51:39 CST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip