修复:未授权访问应用列表时进入应用列表异常提示 #577

This commit is contained in:
pppscn 2025-02-02 22:01:39 +08:00
parent f49310027e
commit 8b37862121
8 changed files with 50 additions and 44 deletions

View File

@ -342,7 +342,7 @@ dependencies {
testImplementation "androidx.paging:paging-common-ktx:$paging_version" testImplementation "androidx.paging:paging-common-ktx:$paging_version"
//https://github.com/getActivity/XXPermissions //https://github.com/getActivity/XXPermissions
implementation 'com.github.getActivity:XXPermissions:18.62' implementation 'com.github.getActivity:XXPermissions:20.0'
//https://github.com/getActivity/MultiLanguages //https://github.com/getActivity/MultiLanguages
implementation 'com.github.getActivity:MultiLanguages:b47f7be' //9.3 implementation 'com.github.getActivity:MultiLanguages:b47f7be' //9.3

View File

@ -7,6 +7,7 @@
android:name="android.hardware.telephony" android:name="android.hardware.telephony"
android:required="false" /> android:required="false" />
<uses-permission android:name="com.android.permission.GET_INSTALLED_APPS" />
<uses-permission <uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES" android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" /> tools:ignore="QueryAllPackagesPermission" />
@ -157,10 +158,6 @@
<data android:scheme="https" /> <data android:scheme="https" />
<data android:scheme="about" /> <data android:scheme="about" />
<data android:scheme="javascript" /> <data android:scheme="javascript" />
<!-- 设置自己的deeplink -->
<!-- <data-->
<!-- android:host="xxx.com"-->
<!-- android:scheme="xui"/>-->
</intent-filter> </intent-filter>
<!-- AppLink --> <!-- AppLink -->
<intent-filter <intent-filter

View File

@ -51,6 +51,7 @@ import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.callback.DownloadProgressCallBack import com.xuexiang.xhttp2.callback.DownloadProgressCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xui.XUI.getContext
import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.utils.ResUtils
import com.xuexiang.xui.utils.ThemeUtils import com.xuexiang.xui.utils.ThemeUtils
import com.xuexiang.xui.utils.ViewUtils import com.xuexiang.xui.utils.ViewUtils
@ -207,10 +208,6 @@ class MainActivity : BaseActivity<ActivityMainBinding?>(), DrawerAdapter.OnItemS
private fun initSlidingMenu(savedInstanceState: Bundle?) { private fun initSlidingMenu(savedInstanceState: Bundle?) {
mSlidingRootNav = SlidingRootNavBuilder(this).withGravity(if (ResUtils.isRtl(this)) SlideGravity.RIGHT else SlideGravity.LEFT).withMenuOpened(false).withContentClickableWhenMenuOpened(false).withSavedState(savedInstanceState).withMenuLayout(R.layout.menu_left_drawer).inject() mSlidingRootNav = SlidingRootNavBuilder(this).withGravity(if (ResUtils.isRtl(this)) SlideGravity.RIGHT else SlideGravity.LEFT).withMenuOpened(false).withContentClickableWhenMenuOpened(false).withSavedState(savedInstanceState).withMenuLayout(R.layout.menu_left_drawer).inject()
mLLMenu = mSlidingRootNav.layout.findViewById(R.id.ll_menu) mLLMenu = mSlidingRootNav.layout.findViewById(R.id.ll_menu)
//val ivQrcode = mSlidingRootNav.layout.findViewById<AppCompatImageView>(R.id.iv_qrcode)
//ivQrcode.setOnClickListener { openNewPage(SettingsFragment::class.java) }
//val ivSetting = mSlidingRootNav.layout.findViewById<AppCompatImageView>(R.id.iv_setting)
//ivSetting.setOnClickListener { openNewPage(SettingsFragment::class.java) }
ViewUtils.setVisibility(mLLMenu, false) ViewUtils.setVisibility(mLLMenu, false)
mAdapter = DrawerAdapter( mAdapter = DrawerAdapter(
mutableListOf( mutableListOf(
@ -243,25 +240,6 @@ class MainActivity : BaseActivity<ActivityMainBinding?>(), DrawerAdapter.OnItemS
override fun onDragEnd(isMenuOpened: Boolean) { override fun onDragEnd(isMenuOpened: Boolean) {
ViewUtils.setVisibility(mLLMenu, isMenuOpened) ViewUtils.setVisibility(mLLMenu, isMenuOpened)
/*if (isMenuOpened) {
if (!GuideCaseView.isShowOnce(this@MainActivity, getString(R.string.guide_key_sliding_root_navigation))) {
val guideStep1 = GuideCaseView.Builder(this@MainActivity)
.title("点击进入,可切换主题样式哦~~")
.titleSize(18, TypedValue.COMPLEX_UNIT_SP)
.focusOn(ivSetting)
.build()
val guideStep2 = GuideCaseView.Builder(this@MainActivity)
.title("点击进入,扫码关注哦~~")
.titleSize(18, TypedValue.COMPLEX_UNIT_SP)
.focusOn(ivQrcode)
.build()
GuideCaseQueue()
.add(guideStep1)
.add(guideStep2)
.show()
GuideCaseView.setShowOnce(this@MainActivity, getString(R.string.guide_key_sliding_root_navigation))
}
}*/
} }
}) })
} }
@ -302,14 +280,26 @@ class MainActivity : BaseActivity<ActivityMainBinding?>(), DrawerAdapter.OnItemS
} }
POS_APPS -> { POS_APPS -> {
if (App.UserAppList.isEmpty() && App.SystemAppList.isEmpty()) { //检查读取应用列表权限是否获取
XToastUtils.info(getString(R.string.loading_app_list)) XXPermissions.with(this).permission(Permission.GET_INSTALLED_APPS).request(object : OnPermissionCallback {
val request = OneTimeWorkRequestBuilder<LoadAppListWorker>().build() override fun onGranted(permissions: MutableList<String>, allGranted: Boolean) {
WorkManager.getInstance(this).enqueue(request) if (App.UserAppList.isEmpty() && App.SystemAppList.isEmpty()) {
needToAppListFragment = true XToastUtils.info(getString(R.string.loading_app_list))
return val request = OneTimeWorkRequestBuilder<LoadAppListWorker>().build()
} WorkManager.getInstance(getContext()).enqueue(request)
openNewPage(AppListFragment::class.java) needToAppListFragment = true
return
}
openNewPage(AppListFragment::class.java)
}
override fun onDenied(permissions: MutableList<String>, doNotAskAgain: Boolean) {
XToastUtils.error(R.string.tips_get_installed_apps)
if (doNotAskAgain) {
XXPermissions.startPermissionActivity(getContext(), permissions)
}
}
})
} }
POS_HELP -> AgentWebActivity.goWeb(this, getString(R.string.url_help)) POS_HELP -> AgentWebActivity.goWeb(this, getString(R.string.url_help))
@ -389,4 +379,4 @@ class MainActivity : BaseActivity<ActivityMainBinding?>(), DrawerAdapter.OnItemS
} }
} }

View File

@ -9,6 +9,9 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.work.OneTimeWorkRequestBuilder import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager import androidx.work.WorkManager
import com.hjq.permissions.OnPermissionCallback
import com.hjq.permissions.Permission
import com.hjq.permissions.XXPermissions
import com.idormy.sms.forwarder.App import com.idormy.sms.forwarder.App
import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.adapter.AppListAdapter import com.idormy.sms.forwarder.adapter.AppListAdapter
@ -24,11 +27,11 @@ import com.scwang.smartrefresh.layout.api.RefreshLayout
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
import com.xuexiang.xui.XUI
import com.xuexiang.xui.utils.DensityUtils import com.xuexiang.xui.utils.DensityUtils
import com.xuexiang.xui.utils.ThemeUtils import com.xuexiang.xui.utils.ThemeUtils
import com.xuexiang.xui.utils.WidgetUtils import com.xuexiang.xui.utils.WidgetUtils
import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.actionbar.TitleBar
import com.xuexiang.xutil.XUtil
import com.xuexiang.xutil.resource.ResUtils.getStringArray import com.xuexiang.xutil.resource.ResUtils.getStringArray
@Suppress("PrivatePropertyName", "DEPRECATION") @Suppress("PrivatePropertyName", "DEPRECATION")
@ -91,10 +94,10 @@ class AppListFragment : BaseFragment<FragmentAppListBinding?>() {
} }
override fun onRefresh(refreshLayout: RefreshLayout) { override fun onRefresh(refreshLayout: RefreshLayout) {
appListAdapter?.refresh(getAppsList(true))
refreshLayout.layout.postDelayed({ refreshLayout.layout.postDelayed({
appListAdapter?.refresh(getAppsList(true))
refreshLayout.finishRefresh() refreshLayout.finishRefresh()
}, 3000) }, 1000)
} }
}) })
appListAdapter?.setOnItemClickListener { _, item, _ -> appListAdapter?.setOnItemClickListener { _, item, _ ->
@ -120,12 +123,24 @@ class AppListFragment : BaseFragment<FragmentAppListBinding?>() {
private fun getAppsList(refresh: Boolean): MutableList<AppInfo> { private fun getAppsList(refresh: Boolean): MutableList<AppInfo> {
if (refresh || (currentType == "user" && App.UserAppList.isEmpty()) || (currentType == "system" && App.SystemAppList.isEmpty())) { if (refresh || (currentType == "user" && App.UserAppList.isEmpty()) || (currentType == "system" && App.SystemAppList.isEmpty())) {
XToastUtils.info(getString(R.string.loading_app_list)) //检查读取应用列表权限是否获取
val request = OneTimeWorkRequestBuilder<LoadAppListWorker>().build() XXPermissions.with(this).permission(Permission.GET_INSTALLED_APPS).request(object : OnPermissionCallback {
WorkManager.getInstance(XUtil.getContext()).enqueue(request) override fun onGranted(permissions: MutableList<String>, allGranted: Boolean) {
XToastUtils.info(getString(R.string.loading_app_list))
val request = OneTimeWorkRequestBuilder<LoadAppListWorker>().build()
WorkManager.getInstance(XUI.getContext()).enqueue(request)
}
override fun onDenied(permissions: MutableList<String>, doNotAskAgain: Boolean) {
XToastUtils.error(R.string.tips_get_installed_apps)
if (doNotAskAgain) {
XXPermissions.startPermissionActivity(XUI.getContext(), permissions)
}
}
})
} }
return if (currentType == "system") App.SystemAppList else App.UserAppList return if (currentType == "system") App.SystemAppList else App.UserAppList
} }
} }

View File

@ -385,6 +385,7 @@
<string name="appicon">App Icon</string> <string name="appicon">App Icon</string>
<string name="user_app">User App</string> <string name="user_app">User App</string>
<string name="system_app">System App</string> <string name="system_app">System App</string>
<string name="tips_get_installed_apps">Please grant GET_INSTALLED_APPS permission</string>
<string name="tips_notification">Please grant Notification permission, in order to keep the App alive!</string> <string name="tips_notification">Please grant Notification permission, in order to keep the App alive!</string>
<string name="tips_notification_listener">Please grant Notification reading permission to SmsForwarder, before other Apps\'s notification could be forwarded. Forwarding automatically canceled!</string> <string name="tips_notification_listener">Please grant Notification reading permission to SmsForwarder, before other Apps\'s notification could be forwarded. Forwarding automatically canceled!</string>
<string name="pushplus_website">Official website</string> <string name="pushplus_website">Official website</string>

View File

@ -386,6 +386,7 @@
<string name="appicon">应用图标</string> <string name="appicon">应用图标</string>
<string name="user_app">用户应用</string> <string name="user_app">用户应用</string>
<string name="system_app">系统应用</string> <string name="system_app">系统应用</string>
<string name="tips_get_installed_apps">请先授予获取应用列表权限</string>
<string name="tips_notification">请先授予发送通知权限,有利于《短信转发器》保活!</string> <string name="tips_notification">请先授予发送通知权限,有利于《短信转发器》保活!</string>
<string name="tips_notification_listener">请先授予《短信转发器》通知使用权否则无法转发APP通知已经自动关闭转发!</string> <string name="tips_notification_listener">请先授予《短信转发器》通知使用权否则无法转发APP通知已经自动关闭转发!</string>
<string name="pushplus_website">官网地址</string> <string name="pushplus_website">官网地址</string>

View File

@ -380,6 +380,7 @@
<string name="appicon">應用圖標</string> <string name="appicon">應用圖標</string>
<string name="user_app">用戶應用</string> <string name="user_app">用戶應用</string>
<string name="system_app">系統應用</string> <string name="system_app">系統應用</string>
<string name="tips_get_installed_apps">請先授予獲取應用列表權限</string>
<string name="tips_notification">請先授予發送通知權限,有利於《簡訊轉發器》保活!</string> <string name="tips_notification">請先授予發送通知權限,有利於《簡訊轉發器》保活!</string>
<string name="tips_notification_listener">請先授予《簡訊轉發器》通知使用權,否則無法轉發應用程式通知,已經自動關閉轉發!</string> <string name="tips_notification_listener">請先授予《簡訊轉發器》通知使用權,否則無法轉發應用程式通知,已經自動關閉轉發!</string>
<string name="pushplus_website">官網地址</string> <string name="pushplus_website">官網地址</string>

View File

@ -413,6 +413,7 @@
<string name="appicon">应用图标</string> <string name="appicon">应用图标</string>
<string name="user_app">用户应用</string> <string name="user_app">用户应用</string>
<string name="system_app">系统应用</string> <string name="system_app">系统应用</string>
<string name="tips_get_installed_apps">请先授予获取应用列表权限</string>
<string name="tips_notification">请先授予发送通知权限,有利于《短信转发器》保活!</string> <string name="tips_notification">请先授予发送通知权限,有利于《短信转发器》保活!</string>
<string name="tips_notification_listener">请先授予《短信转发器》通知使用权否则无法转发APP通知已经自动关闭转发!</string> <string name="tips_notification_listener">请先授予《短信转发器》通知使用权否则无法转发APP通知已经自动关闭转发!</string>
<string name="pushplus_website">官网地址</string> <string name="pushplus_website">官网地址</string>