diff --git a/app/src/main/java/com/idormy/sms/forwarder/App.kt b/app/src/main/java/com/idormy/sms/forwarder/App.kt index 9c885896..76966de7 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/App.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/App.kt @@ -29,7 +29,6 @@ import com.idormy.sms.forwarder.utils.sdkinit.UMengInit import com.idormy.sms.forwarder.utils.sdkinit.XBasicLibInit import com.idormy.sms.forwarder.utils.sdkinit.XUpdateInit import com.idormy.sms.forwarder.utils.tinker.TinkerLoadLibrary -import com.xuexiang.xutil.app.AppUtils import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -49,6 +48,7 @@ class App : Application(), CactusCallback, Configuration.Provider by Core { val logsRepository by lazy { LogsRepository(database.logsDao()) } val ruleRepository by lazy { RuleRepository(database.ruleDao()) } val senderRepository by lazy { SenderRepository(database.senderDao()) } + val taskRepository by lazy { TaskRepository(database.taskDao()) } companion object { const val TAG: String = "SmsForwarder" @@ -61,8 +61,8 @@ class App : Application(), CactusCallback, Configuration.Provider by Core { //已安装App信息 var LoadingAppList = false - var UserAppList: MutableList = mutableListOf() - var SystemAppList: MutableList = mutableListOf() + var UserAppList: MutableList = mutableListOf() + var SystemAppList: MutableList = mutableListOf() /** * @return 当前app是否是调试开发模式 diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/AppListAdapter.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/AppListAdapter.kt index 8436bdfd..1a4fcb40 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/AppListAdapter.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/AppListAdapter.kt @@ -3,11 +3,11 @@ package com.idormy.sms.forwarder.adapter import android.widget.ImageView import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.adapter.base.broccoli.BroccoliRecyclerAdapter +import com.idormy.sms.forwarder.utils.AppInfo +import com.idormy.sms.forwarder.utils.AppUtils import com.idormy.sms.forwarder.utils.PlaceholderHelper import com.xuexiang.xui.adapter.recyclerview.RecyclerViewHolder import com.xuexiang.xui.widget.imageview.ImageLoader -import com.xuexiang.xutil.app.AppUtils -import com.xuexiang.xutil.app.AppUtils.AppInfo import me.samlss.broccoli.Broccoli class AppListAdapter( @@ -34,8 +34,9 @@ class AppListAdapter( ImageLoader.get().loadImage(ivAppIcon, model.icon) holder.text(R.id.tv_app_name, model.name) holder.text(R.id.tv_pkg_name, model.packageName) - holder.text(R.id.tv_ver_name, model.versionName) - //holder.text(R.id.tv_ver_code, model.versionCode) + holder.text(R.id.tv_ver_name, "VER. " + model.versionName) + //holder.text(R.id.tv_ver_code, model.versionCode.toString()) + holder.text(R.id.tv_uid, "UID. " + model.uid.toString()) } /** @@ -51,14 +52,16 @@ class AppListAdapter( .addPlaceholder(PlaceholderHelper.getParameter(holder.findView(R.id.tv_app_name))) .addPlaceholder(PlaceholderHelper.getParameter(holder.findView(R.id.tv_pkg_name))) .addPlaceholder(PlaceholderHelper.getParameter(holder.findView(R.id.tv_ver_name))) - //.addPlaceholder(PlaceholderHelper.getParameter(holder.findView(R.id.tv_ver_code))) + //.addPlaceholder(PlaceholderHelper.getParameter(holder.findView(R.id.tv_ver_code))) + .addPlaceholder(PlaceholderHelper.getParameter(holder.findView(R.id.tv_uid))) } else { broccoli.addPlaceholders( holder.findView(R.id.iv_app_icon), holder.findView(R.id.tv_app_name), holder.findView(R.id.tv_pkg_name), holder.findView(R.id.tv_ver_name), - //holder.findView(R.id.tv_ver_code) + //holder.findView(R.id.tv_ver_code), + holder.findView(R.id.tv_uid) ) } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/MsgInfo.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/MsgInfo.kt index 89df7296..43d6af63 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/MsgInfo.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/MsgInfo.kt @@ -27,7 +27,7 @@ data class MsgInfo( var simSlot: Int = -1, //卡槽id:-1=获取失败、0=卡槽1、1=卡槽2 var subId: Int = 0, //卡槽主键 var callType: Int = 0, //通话类型:1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出 - var uid: Int = 0, + var uid: Int = 0, //APP通知的UID ) : Serializable { val titleForSend: String @@ -54,6 +54,7 @@ data class MsgInfo( .replace(getString(R.string.tag_card_subid), subId.toString()) .replace(getString(R.string.tag_title), title) .replace(getString(R.string.tag_scheme), scheme) + .replace(getString(R.string.tag_uid), uid.toString()) .replace(getString(R.string.tag_receive_time), SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)) .replace(getString(R.string.tag_current_time), SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())) .replace(getString(R.string.tag_device_name), deviceMark) @@ -102,6 +103,7 @@ data class MsgInfo( .replace(getString(R.string.tag_card_subid), subId.toString()) .replace(getString(R.string.tag_title), title) .replace(getString(R.string.tag_scheme), scheme) + .replace(getString(R.string.tag_uid), uid.toString()) .replace(getString(R.string.tag_receive_time), SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)) .replace(getString(R.string.tag_current_time), SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())) .replace(getString(R.string.tag_device_name), deviceMark) diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/AppListFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/AppListFragment.kt index 95313e65..efa39c7f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/AppListFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/AppListFragment.kt @@ -15,6 +15,7 @@ import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.adapter.AppListAdapter import com.idormy.sms.forwarder.core.BaseFragment import com.idormy.sms.forwarder.databinding.FragmentAppListBinding +import com.idormy.sms.forwarder.utils.AppInfo import com.idormy.sms.forwarder.utils.EVENT_LOAD_APP_LIST import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.workers.LoadAppListWorker @@ -29,7 +30,6 @@ import com.xuexiang.xui.utils.ThemeUtils import com.xuexiang.xui.utils.WidgetUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xutil.XUtil -import com.xuexiang.xutil.app.AppUtils @Suppress("PrivatePropertyName") @Page(name = "应用列表") @@ -118,7 +118,7 @@ class AppListFragment : BaseFragment() { super.onDestroyView() } - private fun getAppsList(refresh: Boolean): MutableList { + private fun getAppsList(refresh: Boolean): MutableList { if (refresh || (currentType == "user" && App.UserAppList.isEmpty()) || (currentType == "system" && App.SystemAppList.isEmpty())) { XToastUtils.info(getString(R.string.loading_app_list)) val request = OneTimeWorkRequestBuilder().build() diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/AppUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/AppUtils.kt new file mode 100644 index 00000000..f8cf63e7 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/AppUtils.kt @@ -0,0 +1,80 @@ +package com.idormy.sms.forwarder.utils + +import android.annotation.SuppressLint +import android.content.Intent +import android.content.pm.ApplicationInfo +import android.content.pm.PackageInfo +import android.content.pm.PackageManager +import android.graphics.drawable.Drawable +import com.idormy.sms.forwarder.App + +data class AppInfo( + val name: String, + val icon: Drawable, + val packageName: String, + val packagePath: String, + val versionName: String, + val versionCode: Int, + val isSystem: Boolean, + val uid: Int +) + +@SuppressLint("StaticFieldLeak") +@Suppress("DEPRECATION") +object AppUtils { + + fun getAppsInfo(): List { + val packageManager = App.context.packageManager ?: return emptyList() + val appsInfo = mutableListOf() + + val apps = packageManager.getInstalledApplications(PackageManager.GET_META_DATA) + for (app in apps) { + try { + val packageInfo = packageManager.getPackageInfo(app.packageName, 0) + val appInfo = AppInfo( + app.loadLabel(packageManager).toString(), + app.loadIcon(packageManager), + app.packageName, + app.sourceDir, + packageInfo?.versionName ?: "Unknown", + packageInfo?.versionCode ?: 0, + (app.flags and ApplicationInfo.FLAG_SYSTEM) != 0, + app.uid + ) + appsInfo.add(appInfo) + } catch (e: PackageManager.NameNotFoundException) { + e.printStackTrace() + } + } + + return appsInfo + } + + fun getAppVersionName(): String? { + return getAppVersionName(App.context.packageName) + } + + fun getAppVersionName(packageName: String): String? { + if (packageName.isBlank()) { + return null + } + return try { + val pm: PackageManager = App.context.packageManager + val pi: PackageInfo = pm.getPackageInfo(packageName, 0) + pi.versionName + } catch (e: PackageManager.NameNotFoundException) { + e.printStackTrace() + null + } + } + + fun openApp(packageName: String) { + val packageManager = App.context.packageManager + val intent = packageManager.getLaunchIntentForPackage(packageName) + if (intent != null) { + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + App.context.startActivity(intent) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/workers/LoadAppListWorker.kt b/app/src/main/java/com/idormy/sms/forwarder/workers/LoadAppListWorker.kt index 6ad9dab1..32e479e1 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/workers/LoadAppListWorker.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/workers/LoadAppListWorker.kt @@ -5,9 +5,9 @@ import android.util.Log import androidx.work.CoroutineWorker import androidx.work.WorkerParameters import com.idormy.sms.forwarder.App +import com.idormy.sms.forwarder.utils.AppUtils import com.idormy.sms.forwarder.utils.EVENT_LOAD_APP_LIST import com.jeremyliao.liveeventbus.LiveEventBus -import com.xuexiang.xutil.app.AppUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext diff --git a/app/src/main/res/layout/adapter_app_list_item.xml b/app/src/main/res/layout/adapter_app_list_item.xml index 680a72d8..960599ca 100644 --- a/app/src/main/res/layout/adapter_app_list_item.xml +++ b/app/src/main/res/layout/adapter_app_list_item.xml @@ -29,7 +29,6 @@ android:layout_height="wrap_content" android:layout_marginStart="10dip" android:layout_weight="1" - android:orientation="vertical"> - + android:layout_marginTop="3dp" + android:orientation="horizontal"> - + + + + + + + diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index b73bc1d2..647c2958 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -10,6 +10,7 @@ Rules Settings + Task Server Client Frpc @@ -608,6 +609,7 @@ {{SCHEME}} {{CALL_TYPE}} {{LOCATION}} + {{UID}} SMS CALL APP @@ -1073,4 +1075,6 @@ Enable {{LOCATION}} Tag Insert location info into forwarded msg. UID + + Please select task type diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 57626d8e..d975b302 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,6 +10,7 @@ 转发规则 通用设置 + 自动任务·快捷指令 主动控制·服务端 主动控制·客户端 内网穿透·Frpc @@ -609,6 +610,7 @@ {{通知Scheme}} {{通话类型}} {{定位信息}} + {{UID}} 短信 来电 应用 @@ -1074,4 +1076,6 @@ 启用 {{定位信息}} 标签 在转发信息中插入手机的当前定位信息 UID + + 请选择自动任务类型