mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-02 17:07:41 +08:00
修复:未授权访问应用列表时进入应用列表异常提示 #577
This commit is contained in:
parent
f49310027e
commit
8b37862121
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user