Commit bf517a8e authored by wanglei's avatar wanglei

...

parent b541748d
package com.base.pdfreaderallpdfreader.ui.main package com.base.pdfreaderallpdfreader.ui.main
import android.Manifest
import android.content.Intent import android.content.Intent
import android.graphics.Color import android.graphics.Color
import android.net.Uri import android.net.Uri
import android.text.Spannable import android.text.Spannable
import android.text.SpannableString import android.text.SpannableString
import android.text.style.ForegroundColorSpan import android.text.style.ForegroundColorSpan
import android.util.Log
import androidx.activity.addCallback import androidx.activity.addCallback
import androidx.core.view.GravityCompat import androidx.core.view.GravityCompat
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
...@@ -25,6 +27,7 @@ import com.base.pdfreaderallpdfreader.ui.language.LanguageActivity ...@@ -25,6 +27,7 @@ import com.base.pdfreaderallpdfreader.ui.language.LanguageActivity
import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity
import com.base.pdfreaderallpdfreader.ui.search.SearchActivity import com.base.pdfreaderallpdfreader.ui.search.SearchActivity
import com.base.pdfreaderallpdfreader.ui.view.MainDialog.showAppExitDialog import com.base.pdfreaderallpdfreader.ui.view.MainDialog.showAppExitDialog
import com.base.pdfreaderallpdfreader.ui.view.MainDialog.showNotificationDialog
import com.base.pdfreaderallpdfreader.ui.view.MainDialog.showStoragePermission import com.base.pdfreaderallpdfreader.ui.view.MainDialog.showStoragePermission
import com.base.pdfreaderallpdfreader.ui.view.NameDialog.showDocumentRenameDialog import com.base.pdfreaderallpdfreader.ui.view.NameDialog.showDocumentRenameDialog
import com.base.pdfreaderallpdfreader.ui.view.PwdDialog.showPdfPwdDialog import com.base.pdfreaderallpdfreader.ui.view.PwdDialog.showPdfPwdDialog
...@@ -32,6 +35,7 @@ import com.base.pdfreaderallpdfreader.ui.view.RateDialog.showRateDialog ...@@ -32,6 +35,7 @@ import com.base.pdfreaderallpdfreader.ui.view.RateDialog.showRateDialog
import com.base.pdfreaderallpdfreader.utils.BarUtils import com.base.pdfreaderallpdfreader.utils.BarUtils
import com.base.pdfreaderallpdfreader.utils.LogEx import com.base.pdfreaderallpdfreader.utils.LogEx
import com.base.pdfreaderallpdfreader.utils.PdfBoxUtils.checkPdfEncryption import com.base.pdfreaderallpdfreader.utils.PdfBoxUtils.checkPdfEncryption
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkNotificationPermission
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkStorePermission import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkStorePermission
import com.base.pdfreaderallpdfreader.utils.ShortcutUtils.addDeskShortCut import com.base.pdfreaderallpdfreader.utils.ShortcutUtils.addDeskShortCut
import com.base.pdfreaderallpdfreader.utils.updateMediaStore import com.base.pdfreaderallpdfreader.utils.updateMediaStore
...@@ -90,6 +94,14 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -90,6 +94,14 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
if (!checkStorePermission()) { if (!checkStorePermission()) {
showStoragePermission(launcher) showStoragePermission(launcher)
} else {
val flag = checkNotificationPermission()
LogEx.logDebug(TAG, "checkNotificationPermission flag=$flag")
if (!flag) {
showNotificationDialog(launcher)
} else {
launcher.launch(arrayOf(Manifest.permission.POST_NOTIFICATIONS)) {}
}
} }
addDeskShortCut() addDeskShortCut()
......
...@@ -19,7 +19,6 @@ import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity ...@@ -19,7 +19,6 @@ import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity
import com.base.pdfreaderallpdfreader.ui.pdf.PdfSelectActivity import com.base.pdfreaderallpdfreader.ui.pdf.PdfSelectActivity
import com.base.pdfreaderallpdfreader.ui.view.MainDialog.showStoragePermission import com.base.pdfreaderallpdfreader.ui.view.MainDialog.showStoragePermission
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkStorePermission import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkStorePermission
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.requestStoragePermission
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
...@@ -52,83 +51,46 @@ class HomeFragment : Fragment() { ...@@ -52,83 +51,46 @@ class HomeFragment : Fragment() {
val launcher = (requireActivity() as MainActivity).launcher val launcher = (requireActivity() as MainActivity).launcher
binding.clPdfReader.setOnClickListener { binding.clPdfReader.setOnClickListener {
if (!requireContext().checkStorePermission()) { startActivity(Intent(requireContext(), DocumentActivity::class.java))
requireContext().showStoragePermission(launcher)
} else {
startActivity(Intent(requireContext(), DocumentActivity::class.java))
}
} }
binding.llEditPdf.setOnClickListener { binding.llEditPdf.setOnClickListener {
if (!requireContext().checkStorePermission()) { startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
requireContext().showStoragePermission(launcher) putExtra("initTab", 1)
} else { })
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 1)
})
}
} }
binding.llMergePdf.setOnClickListener { binding.llMergePdf.setOnClickListener {
if (!requireContext().checkStorePermission()) { PdfActivity.jumpMerge(requireActivity())
requireContext().showStoragePermission(launcher)
} else {
PdfActivity.jumpMerge(requireActivity())
}
} }
binding.llSplitPdf.setOnClickListener { binding.llSplitPdf.setOnClickListener {
if (!requireContext().checkStorePermission()) { startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply {
requireContext().showStoragePermission(launcher) putExtra("doWhat", DO_SPLIT_PDF)
} else { })
startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply {
putExtra("doWhat", DO_SPLIT_PDF)
})
}
} }
binding.llLockPdf.setOnClickListener { binding.llLockPdf.setOnClickListener {
if (!requireContext().checkStorePermission()) { startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply {
requireContext().showStoragePermission(launcher) putExtra("doWhat", DO_LOCK_PDF)
} else { })
startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply {
putExtra("doWhat", DO_LOCK_PDF)
})
}
} }
binding.llWord.setOnClickListener { binding.llWord.setOnClickListener {
if (!requireContext().checkStorePermission()) { startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
requireContext().showStoragePermission(launcher) putExtra("initTab", 2)
} else { })
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 2)
})
}
} }
binding.llExcel.setOnClickListener { binding.llExcel.setOnClickListener {
if (!requireContext().checkStorePermission()) { startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
requireContext().showStoragePermission(launcher) putExtra("initTab", 3)
} else { })
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 3)
})
}
} }
binding.llPpt.setOnClickListener { binding.llPpt.setOnClickListener {
if (!requireContext().checkStorePermission()) { startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
requireContext().showStoragePermission(launcher) putExtra("initTab", 4)
} else { })
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 4)
})
}
} }
binding.llOther.setOnClickListener { binding.llOther.setOnClickListener {
if (!requireContext().checkStorePermission()) { startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
requireContext().showStoragePermission(launcher) putExtra("initTab", 0)
} else { })
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 0)
})
}
} }
......
...@@ -641,7 +641,7 @@ class PdfActivity : BaseActivity<ActivityPdfBinding>() { ...@@ -641,7 +641,7 @@ class PdfActivity : BaseActivity<ActivityPdfBinding>() {
if (item.state == 0) { if (item.state == 0) {
activity.startActivity(Intent(activity, PdfActivity::class.java).apply { activity.startActivity(Intent(activity, PdfActivity::class.java).apply {
putExtra("path", item.path) putExtra("path", item.path)
putExtra("uri", item.uri) putExtra("uri", item.uri.toString())
}) })
} }
if (item.state == 1) { if (item.state == 1) {
......
...@@ -7,6 +7,7 @@ import com.base.pdfreaderallpdfreader.ads.AdmobHelper.open_ad_loading ...@@ -7,6 +7,7 @@ import com.base.pdfreaderallpdfreader.ads.AdmobHelper.open_ad_loading
import com.base.pdfreaderallpdfreader.bean.ConstObject import com.base.pdfreaderallpdfreader.bean.ConstObject
import com.base.pdfreaderallpdfreader.utils.AppPreferences import com.base.pdfreaderallpdfreader.utils.AppPreferences
import com.base.pdfreaderallpdfreader.utils.LogEx import com.base.pdfreaderallpdfreader.utils.LogEx
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
...@@ -25,12 +26,12 @@ class SplashViewModel : ViewModel() { ...@@ -25,12 +26,12 @@ class SplashViewModel : ViewModel() {
if (ConstObject.ifAgreePrivacy && startJumpJob) { if (ConstObject.ifAgreePrivacy && startJumpJob) {
if (jumpJob == null) { if (jumpJob == null) {
val startTime = System.currentTimeMillis() val startTime = System.currentTimeMillis()
jumpJob = viewModelScope.launch { jumpJob = viewModelScope.launch(Dispatchers.IO) {
LogEx.logDebug(TAG, "open_ad_loading=$loadingTime") LogEx.logDebug(TAG, "open_ad_loading=$loadingTime")
delay(loadingTime * 1000L) delay(loadingTime * 1000L)
val endTime = System.currentTimeMillis() val endTime = System.currentTimeMillis()
LogEx.logDebug(TAG, "超时跳转 time=${endTime - startTime}") LogEx.logDebug(TAG, "超时跳转 time=${endTime - startTime}")
splashActivity.jumpNext() launch(Dispatchers.Main) { splashActivity.jumpNext() }
} }
} }
} }
......
package com.base.pdfreaderallpdfreader.ui.view package com.base.pdfreaderallpdfreader.ui.view
import android.Manifest
import android.app.Activity import android.app.Activity
import android.app.AlertDialog
import android.content.Context import android.content.Context
import android.content.Intent
import android.graphics.Color import android.graphics.Color
import android.os.Build
import android.provider.Settings
import android.text.SpannableString import android.text.SpannableString
import android.text.Spanned import android.text.Spanned
import android.text.style.ForegroundColorSpan import android.text.style.ForegroundColorSpan
import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.LinearLayout
import com.base.pdfreaderallpdfreader.R import com.base.pdfreaderallpdfreader.R
import com.base.pdfreaderallpdfreader.ads.admob.AdmobNativeUtils import com.base.pdfreaderallpdfreader.ads.admob.AdmobNativeUtils
import com.base.pdfreaderallpdfreader.databinding.DialogAppExitBinding import com.base.pdfreaderallpdfreader.databinding.DialogAppExitBinding
import com.base.pdfreaderallpdfreader.databinding.DialogNotificationEnableBinding
import com.base.pdfreaderallpdfreader.databinding.DialogStoragePermissionBinding import com.base.pdfreaderallpdfreader.databinding.DialogStoragePermissionBinding
import com.base.pdfreaderallpdfreader.utils.ActivityLauncher import com.base.pdfreaderallpdfreader.utils.ActivityLauncher
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.requestStoragePermission import com.base.pdfreaderallpdfreader.utils.PermissionUtils.requestStoragePermission
...@@ -88,4 +96,35 @@ object MainDialog { ...@@ -88,4 +96,35 @@ object MainDialog {
dialog.dismiss() dialog.dismiss()
} }
} }
fun Activity.showNotificationDialog(launcher: ActivityLauncher) {
val dialog = AlertDialog.Builder(this).create()
val binding = DialogNotificationEnableBinding.inflate(LayoutInflater.from(this))
dialog.setView(binding.root)
dialog.setCanceledOnTouchOutside(true)
dialog.show()
val params = dialog.window?.attributes
params?.width = resources.getDimensionPixelOffset(R.dimen.dp_345)
params?.height = LinearLayout.LayoutParams.WRAP_CONTENT
params?.gravity = Gravity.CENTER
dialog.window?.attributes = params
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
binding.tvOk.setOnClickListener {
dialog.dismiss()
val intent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS).apply {
putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
}
launcher.launch(intent)
}
binding.tvNo.setOnClickListener {
dialog.dismiss()
}
binding.flClose.setOnClickListener {
dialog.dismiss()
}
}
} }
\ No newline at end of file
package com.base.pdfreaderallpdfreader.utils package com.base.pdfreaderallpdfreader.utils
import android.Manifest import android.Manifest
import android.app.NotificationManager
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
...@@ -24,12 +25,15 @@ object PermissionUtils { ...@@ -24,12 +25,15 @@ object PermissionUtils {
fun Context.checkNotificationPermission(): Boolean { fun Context.checkNotificationPermission(): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
ActivityCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val areNotificationsEnabled = notificationManager.areNotificationsEnabled()
areNotificationsEnabled
} else { } else {
return true ActivityCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED
} }
} }
fun Context.requestStoragePermission( fun Context.requestStoragePermission(
launcher: ActivityLauncher, launcher: ActivityLauncher,
jumpAction: (() -> Unit)? = null, jumpAction: (() -> Unit)? = null,
......
...@@ -45,7 +45,7 @@ object ShortcutUtils { ...@@ -45,7 +45,7 @@ object ShortcutUtils {
.build() .build()
//setDynamicShortcuts()方法来设置快捷方式 //setDynamicShortcuts()方法来设置快捷方式
shortcutManager.setDynamicShortcuts(listOf(shortcut1, shortcut2, shortcut3)) shortcutManager.setDynamicShortcuts(listOf(shortcut2, shortcut3))
} }
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:topLeftRadius="15dp"
android:topRightRadius="15dp" />
<solid android:color="#FD0030" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FF0030" />
<corners android:radius="10dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:bottomLeftRadius="15dp"
android:bottomRightRadius="15dp" />
<solid android:color="@color/white" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="1dp"
android:color="#000000" />
<corners android:radius="10dp" />
</shape>
\ No newline at end of file
...@@ -94,6 +94,7 @@ ...@@ -94,6 +94,7 @@
tools:text="AII PDF Reader" /> tools:text="AII PDF Reader" />
<TextView <TextView
android:id="@+id/tv_tip"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="15dp" android:layout_marginTop="15dp"
...@@ -105,4 +106,16 @@ ...@@ -105,4 +106,16 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_spanner" /> app:layout_constraintTop_toBottomOf="@id/tv_spanner" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="25dp"
android:text="@string/loading_may_contain_ads"
android:textColor="#8A8A8A"
android:textSize="12sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_tip" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -55,13 +55,13 @@ ...@@ -55,13 +55,13 @@
android:background="?android:selectableItemBackground" android:background="?android:selectableItemBackground"
android:orientation="horizontal"> android:orientation="horizontal">
<!-- android:src="@mipmap/jump"-->
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginStart="13dp" android:layout_marginStart="13dp"
android:src="@mipmap/pdf_jump"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<TextView <TextView
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="345dp"
android:layout_height="wrap_content"
android:background="@color/transparent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="115dp"
android:background="@drawable/bg_fd0030_tl15_tr15">
<LinearLayout
android:layout_width="291dp"
android:layout_height="54dp"
android:layout_gravity="center"
android:background="@mipmap/pdf_k"
android:orientation="horizontal">
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="8dp"
android:layout_marginBottom="3dp"
app:cardCornerRadius="7.5dp"
app:cardElevation="0dp">
<ImageView
android:layout_width="32dp"
android:layout_height="32dp"
android:src="@mipmap/logo"
tools:ignore="ContentDescription" />
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginBottom="3dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/unfinished_documents_to_read"
android:textColor="@color/black"
android:textSize="10sp"
android:textStyle="bold"
tools:ignore="SmallSp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@string/click_to_view_details"
android:textColor="#999999"
android:textSize="10sp"
tools:ignore="SmallSp" />
</LinearLayout>
</LinearLayout>
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_ffffff_bl15_br15">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:ignore="UselessParent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="28dp"
android:text="@string/please_grant_notification_permissions"
android:textColor="@color/black"
android:textSize="20sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="18dp"
android:text="@string/notification_enable_tips"
android:textColor="#666666"
android:textSize="13sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_ok"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="20dp"
android:background="@drawable/bg_ff0030_10"
android:gravity="center"
android:text="@string/enable_notifications"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_no"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_gravity="center_horizontal"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="20dp"
android:background="@drawable/bg_stroke_a0a0a0_10"
android:gravity="center"
android:text="@string/not_open"
android:textSize="18sp" />
</LinearLayout>
</FrameLayout>
<FrameLayout
android:id="@+id/fl_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:padding="8dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/guanbi_8"
tools:ignore="ContentDescription" />
</FrameLayout>
</LinearLayout>
\ No newline at end of file
...@@ -8,4 +8,5 @@ ...@@ -8,4 +8,5 @@
<dimen name="dp_200">200dp</dimen> <dimen name="dp_200">200dp</dimen>
<dimen name="dp_146">146dp</dimen> <dimen name="dp_146">146dp</dimen>
<dimen name="dp_50">50dp</dimen> <dimen name="dp_50">50dp</dimen>
<dimen name="dp_345">345dp</dimen>
</resources> </resources>
\ No newline at end of file
...@@ -101,5 +101,13 @@ ...@@ -101,5 +101,13 @@
<string name="unlock_pdf">Unlock Pdf</string> <string name="unlock_pdf">Unlock Pdf</string>
<string name="no_bookmark_file">No Bookmark File</string> <string name="no_bookmark_file">No Bookmark File</string>
<string name="exit">Exit</string> <string name="exit">Exit</string>
<string name="loading_may_contain_ads">Loading may contain ads</string>
<string name="unfinished_documents_to_read">You still have some unfinished documents to read.</string>
<string name="click_to_view_details">Click to view details.</string>
<string name="please_grant_notification_permissions">Please grant notification permissions</string>
<string name="notification_enable_tips">Enabling notification permissions will allow you to receive future notification promptly and display unique message banners</string>
<string name="enable_notifications">Enable notifications</string>
<string name="not_open">Not open</string>
</resources> </resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment