Commit 9bbeca04 authored by wanglei's avatar wanglei

初始化

parent 7d86163d
...@@ -107,4 +107,7 @@ dependencies { ...@@ -107,4 +107,7 @@ dependencies {
//mintegral //mintegral
implementation("com.reyun.solar.engine.oversea:solar-engine-core:1.2.8.3") implementation("com.reyun.solar.engine.oversea:solar-engine-core:1.2.8.3")
//mlkit
implementation("com.google.android.gms:play-services-mlkit-document-scanner:16.0.0-beta1")
} }
\ No newline at end of file
...@@ -132,6 +132,25 @@ ...@@ -132,6 +132,25 @@
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.set.SetActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.weather.WeatherInterface"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.set.FeedbackActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<service <service
android:name=".fcm.MessagingService" android:name=".fcm.MessagingService"
......
package com.base.pdfreader2.bean package com.base.pdfreader2.bean
import com.base.pdfreader2.utils.AppPreferences import com.base.pdfreader2.utils.AppPreferences
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale import java.util.Locale
object ConstObject { object ConstObject {
...@@ -45,6 +47,9 @@ object ConstObject { ...@@ -45,6 +47,9 @@ object ConstObject {
const val DO_MERGE_PDF = "do_merge_pdf" const val DO_MERGE_PDF = "do_merge_pdf"
const val DO_LOCK_PDF = "do_lock_pdf" const val DO_LOCK_PDF = "do_lock_pdf"
const val DO_UNLOCK_PDF = "do_unlock_pdf" const val DO_UNLOCK_PDF = "do_unlock_pdf"
const val SHORTCUT_SCAN_PDF = "shortcut_scan_pdf"
const val SHORTCUT_SPLIT_PDF = "shortcut_split_pdf"
const val SHORTCUT_MERGE_PDF = "shortcut_merge_pdf"
var ifAgreePrivacy = false var ifAgreePrivacy = false
...@@ -130,4 +135,37 @@ object ConstObject { ...@@ -130,4 +135,37 @@ object ConstObject {
field = value field = value
AppPreferences.getInstance().put("haveGuideGesture", value, true) AppPreferences.getInstance().put("haveGuideGesture", value, true)
} }
//主页启动次数
var mainStartTimes = 0
get() {
return AppPreferences.getInstance().getInt("mainStartTimes", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("mainStartTimes", value, true)
}
var todayShowNotificationDialog = false
get() {
return AppPreferences.getInstance().getBoolean("todayShowNotificationDialog_${currentDate()}", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("todayShowNotificationDialog_${currentDate()}", value, true)
}
var setDefault = false
get() {
return AppPreferences.getInstance().getBoolean("setDefault", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("setDefault", value, true)
}
private fun currentDate(): String {
val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
val currentDate = Calendar.getInstance().time
return dateFormat.format(currentDate)
}
} }
\ No newline at end of file
...@@ -25,7 +25,7 @@ abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() { ...@@ -25,7 +25,7 @@ abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() {
launcher = ActivityLauncher(this) launcher = ActivityLauncher(this)
setContentView(binding.root) setContentView(binding.root)
// EventUtils.event("page_${javaClass.simpleName}") EventUtils.event("page_${javaClass.simpleName}")
initView() initView()
initListener() initListener()
} }
......
...@@ -6,11 +6,12 @@ object ConfigHelper { ...@@ -6,11 +6,12 @@ object ConfigHelper {
const val termService: String = "https://sites.google.com/view/term-of-service-s/term-of-service" const val termService: String = "https://sites.google.com/view/term-of-service-s/term-of-service"
// 正式包名 // 正式包名
const val packageName = "com.base.pdfreader2" const val packageName = "com.lol.pdfscanner.libstdc.chovey"
// 域名 // 域名
const val eventUrl = "https://" const val eventUrl = "https://rp.gamexzonerk.xyz"
const val apiUrl = "https://" const val apiUrl = "https://api.gamexzonerk.xyz"
//admob test id //admob test id
const val openAdmobIdTest = "ca-app-pub-3940256099942544/9257395921" const val openAdmobIdTest = "ca-app-pub-3940256099942544/9257395921"
......
...@@ -35,7 +35,7 @@ import java.util.Locale ...@@ -35,7 +35,7 @@ import java.util.Locale
class DocumentFragment() : BaseFragment<FragmentDocumentBinding>() { class DocumentFragment() : BaseFragment<FragmentDocumentBinding>() {
private val TAG = "DocumentFragment" private val TAG = "DocumentFragment"
private var type = TYPE_PDF var type = TYPE_PDF
private lateinit var adapter: DocumentAdapter private lateinit var adapter: DocumentAdapter
private lateinit var documentPresenter: DocumentPresenter private lateinit var documentPresenter: DocumentPresenter
...@@ -195,6 +195,16 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>() { ...@@ -195,6 +195,16 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>() {
adapter.notifyDataSetChanged() adapter.notifyDataSetChanged()
} }
fun getSelectItems(): List<DocumentBean> {
return adapter.items.filter { it.isSelect }
}
fun removeList(list: List<DocumentBean>) {
list.forEach {
adapter.remove(it)
}
}
companion object { companion object {
fun Activity.jumpDocument(item: DocumentBean) { fun Activity.jumpDocument(item: DocumentBean) {
if (item.type == DocumentBean.TYPE_PDF) { if (item.type == DocumentBean.TYPE_PDF) {
...@@ -225,8 +235,8 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>() { ...@@ -225,8 +235,8 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>() {
ExcelActivity.launchDocViewer(this, 3, item.path, -1, 100) ExcelActivity.launchDocViewer(this, 3, item.path, -1, 100)
} }
if (item.type == DocumentBean.TYPE_PPT) { if (item.type == DocumentBean.TYPE_PPT) {
PptActivity.pptDocumentBean = item PptActivity.pptDocumentBean = item
PptActivity.launchDocViewer(this, 3, item.path, -1, 100) PptActivity.launchDocViewer(this, 3, item.path, -1, 100)
} }
} }
} }
......
package com.base.pdfreader2.ui.main
import android.app.Activity
import android.content.Context
import android.content.IntentSender
import android.net.Uri
import android.os.Environment
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.IntentSenderRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.LifecycleCoroutineScope
import com.base.pdfreader2.ads.AdmobHelper
import com.base.pdfreader2.ads.AdmobHelper.lastScanShowAd
import com.base.pdfreader2.ads.admob.AdmobInterstitialUtils
import com.base.pdfreader2.bean.DocumentBean
import com.base.pdfreader2.utils.updateMediaStore
import com.google.mlkit.vision.documentscanner.GmsDocumentScannerOptions
import com.google.mlkit.vision.documentscanner.GmsDocumentScanning
import com.google.mlkit.vision.documentscanner.GmsDocumentScanningResult
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import java.io.File
class MainPresenter(
val context: Context,
val mainView: MainView,
val lifecycleScope: LifecycleCoroutineScope
) {
private val TAG = "MainPresenter"
fun getDocumentAppDir(): File {
val appDir = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), context.packageName)
if (!appDir.exists())
appDir.exists()
return appDir
}
private var scannerLauncher: ActivityResultLauncher<IntentSenderRequest>? = null
private var scannerLauncherRegister: Boolean = false
fun initScannerLauncher(appCompatActivity: AppCompatActivity) {
scannerLauncher =
appCompatActivity.registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { activityResult ->
val resultCode = activityResult.resultCode
val result = GmsDocumentScanningResult.fromActivityResultIntent(activityResult.data)
// appCompatActivity.toast("回调1")
if (resultCode == Activity.RESULT_OK && result != null) {
val pages = result.pages
// appCompatActivity.toast("回调2 ${pages?.size}")
var imageUri = Uri.EMPTY
if (!pages.isNullOrEmpty()) {
// appCompatActivity.toast("回调3")
imageUri = pages[0].imageUri
}
val pdfUri = result.pdf?.uri ?: Uri.EMPTY
mainView.handleActivityGmsScanResult(imageUri, pdfUri)
} else {
mainView.handleActivityGmsScanResult(null, null)
}
}
scannerLauncherRegister = true
}
fun starAdGmsScan(activity: Activity) {
if (AdmobHelper.isShowScanInter() && AdmobHelper.canCommonShowAd()) {
AdmobInterstitialUtils.showInterstitialAd(activity) {
if (it) {
lastScanShowAd = System.currentTimeMillis()
}
starGmsScan(activity)
}
} else {
starGmsScan(activity)
}
}
fun starGmsScan(activity: Activity) {
runCatching {
if (scannerLauncher == null && !scannerLauncherRegister) return
val options =
GmsDocumentScannerOptions.Builder()
.setScannerMode(GmsDocumentScannerOptions.SCANNER_MODE_BASE)
.setResultFormats(GmsDocumentScannerOptions.RESULT_FORMAT_PDF)
.setGalleryImportAllowed(true)
options.setScannerMode(GmsDocumentScannerOptions.SCANNER_MODE_FULL)
val pageLimit = 1
options.setPageLimit(pageLimit)
GmsDocumentScanning.getClient(options.build())
.getStartScanIntent(activity)
.addOnSuccessListener { intentSender: IntentSender ->
scannerLauncher?.launch(IntentSenderRequest.Builder(intentSender).build())
}
.addOnFailureListener { e: Exception ->
}
}
}
fun deleteList(list: List<DocumentBean>) {
MainScope().launch(Dispatchers.IO) {
list.forEach {
runCatching {
val file = File(it.path)
file.delete()
}
}
context.updateMediaStore()
}
}
fun copyFile(file: File, newFile: File) {
runCatching {
file.copyTo(newFile, true)
}
}
}
\ No newline at end of file
package com.base.pdfreader2.ui.main
import android.net.Uri
interface MainView {
fun handleActivityGmsScanResult(imageUri: Uri?, pdfUri: Uri?)
}
\ No newline at end of file
package com.base.pdfreader2.ui.set
import androidx.activity.addCallback
import androidx.core.widget.addTextChangedListener
import com.base.pdfreader2.databinding.ActivityFeedbackBinding
import com.base.pdfreader2.helper.BaseActivity
import com.base.pdfreader2.helper.MyApplication
import com.base.pdfreader2.utils.ToastUtils.toast
class FeedbackActivity : BaseActivity<ActivityFeedbackBinding>() {
override val binding: ActivityFeedbackBinding by lazy {
ActivityFeedbackBinding.inflate(layoutInflater)
}
override fun initView() {
}
override fun onResume() {
super.onResume()
updateAppLanguage(MyApplication.feedbackLanguage) {
MyApplication.feedbackLanguage = it
}
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
finish()
}
binding.flFanhui.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.edit.addTextChangedListener {
binding.tvBtn.isEnabled = it?.isNotEmpty() == true
}
binding.tvBtn.setOnClickListener {
toast("Feedback success")
onBackPressedDispatcher.onBackPressed()
}
}
}
\ No newline at end of file
package com.base.pdfreader2.ui.set
import android.content.Intent
import android.net.Uri
import androidx.activity.addCallback
import com.base.pdfreader2.R
import com.base.pdfreader2.databinding.ActivitySetBinding
import com.base.pdfreader2.helper.BaseActivity
import com.base.pdfreader2.helper.ConfigHelper
import com.base.pdfreader2.helper.MyApplication
import com.base.pdfreader2.ui.view.RateDialog.showRateDialog
import com.base.pdfreader2.utils.LogEx
class SetActivity : BaseActivity<ActivitySetBinding>() {
private val TAG = "SetActivity"
override val binding: ActivitySetBinding by lazy {
LogEx.logDebug(TAG, "binding")
ActivitySetBinding.inflate(layoutInflater)
}
override fun initView() {
val ss = getString(R.string.language)
LogEx.logDebug(TAG, "ss=$ss")
binding.tvLanguage.text = ss
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
finishToMain()
}
binding.flFanhui.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.llRate.setOnClickListener {
showRateDialog(true)
}
binding.llFeedback.setOnClickListener {
startActivity(Intent(this, FeedbackActivity::class.java))
}
binding.llPrivacy.setOnClickListener {
val intent = Intent(
Intent.ACTION_VIEW,
Uri.parse(ConfigHelper.privacyPolicy)
)
startActivity(intent)
}
binding.llTerm.setOnClickListener {
val intent = Intent(
Intent.ACTION_VIEW,
Uri.parse(ConfigHelper.termService)
)
startActivity(intent)
}
binding.llLanguage.setOnClickListener {
startActivity(Intent(this, SetLanguageActivity::class.java).apply {
putExtra("from", "Set")
})
}
}
override fun onResume() {
super.onResume()
updateAppLanguage(MyApplication.setLanguage, TAG) {
MyApplication.setLanguage = it
}
}
}
\ No newline at end of file
package com.base.pdfreader2.ui.view
import android.animation.Animator
import android.animation.ValueAnimator
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.RectF
import android.util.AttributeSet
import android.view.View
import android.view.animation.LinearInterpolator
import com.base.pdfreader2.R
class ColorProgress : View {
private lateinit var ringPaint: Paint//圆环笔
private var centerX = 0f
private var centerY = 0f
private var radius = 0f
private var strokeWidth = 0f // 圆环的宽度
private var margin = 5f
private lateinit var ringRectF: RectF
private lateinit var progressRectF: RectF
private lateinit var progressPaint: Paint
private var listProgressBean: List<ProgressBean> = listOf()
private var currentAngle = 0f
constructor(context: Context) : super(context) {
initPaint(context)
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
initPaint(context)
}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
initPaint(context)
}
var finishAnimation: (() -> Unit)? = null
private fun initPaint(context: Context) {
strokeWidth = context.resources.getDimension(R.dimen.dp_9)
ringPaint = Paint()
ringPaint.isAntiAlias = true
ringPaint.style = Paint.Style.STROKE
ringPaint.setColor(Color.parseColor("#E6E7EC"))
ringPaint.strokeWidth = strokeWidth
progressPaint = Paint()
progressPaint.isAntiAlias = true
progressPaint.style = Paint.Style.STROKE
progressPaint.strokeWidth = strokeWidth
progressPaint.strokeCap = Paint.Cap.ROUND
// 初始化圆的中心点和半径
centerX = width / 2.0f
centerY = height / 2.0f
radius = (centerX.coerceAtMost(centerY) - strokeWidth / 2) - margin
}
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
super.onSizeChanged(w, h, oldw, oldh)
centerX = w / 2.0f
centerY = h / 2.0f
radius = (centerX.coerceAtMost(centerY) - strokeWidth / 2) - margin
ringRectF = RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius)
progressRectF = RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius)
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
// 绘制圆环
canvas.drawOval(ringRectF, ringPaint)
listProgressBean.forEachIndexed { index, progressBean ->
progressPaint.setColor(Color.parseColor(progressBean.color))
if (index != 0) {
val lastProgressBean: ProgressBean = listProgressBean[index - 1]
if (currentAngle <= progressBean.sweepAngle) {
canvas.drawArc(progressRectF, -90f, currentAngle, false, progressPaint)
progressBean.draw = true
} else if (lastProgressBean.draw) {
canvas.drawArc(progressRectF, -90f, progressBean.sweepAngle, false, progressPaint)
progressBean.draw = true
}
} else {
if (currentAngle >= progressBean.startAngle) {
canvas.drawArc(progressRectF, -90f, currentAngle, false, progressPaint)
progressBean.draw = true
}
}
}
}
private fun setProgress(angle: Float) {
currentAngle = angle
invalidate()
}
fun animateProgress(list: List<ProgressBean>) {
listProgressBean = list
val totalAngle = list.maxOf { it.sweepAngle }
val progressAnimator = ValueAnimator.ofFloat(0f, totalAngle)
progressAnimator.interpolator = LinearInterpolator() // 平滑插值器
progressAnimator.setDuration(1500) // 动画持续时间1000毫秒
progressAnimator.addUpdateListener { animation ->
val animatedValue = animation.getAnimatedValue() as Float
setProgress(animatedValue)
}
progressAnimator.addListener(object : Animator.AnimatorListener {
override fun onAnimationStart(animation: Animator) {
}
override fun onAnimationEnd(animation: Animator) {
finishAnimation?.invoke()
}
override fun onAnimationCancel(animation: Animator) {
}
override fun onAnimationRepeat(animation: Animator) {
}
})
progressAnimator.start()
}
}
data class ProgressBean(
val startAngle: Float = 0f,
val sweepAngle: Float = 0f,
var color: String = ""
) {
var draw = false
}
\ No newline at end of file
...@@ -11,11 +11,15 @@ import com.base.pdfreader2.bean.ConstObject.UI_SORT_NAME_A_Z ...@@ -11,11 +11,15 @@ import com.base.pdfreader2.bean.ConstObject.UI_SORT_NAME_A_Z
import com.base.pdfreader2.bean.ConstObject.UI_SORT_NAME_Z_A import com.base.pdfreader2.bean.ConstObject.UI_SORT_NAME_Z_A
import com.base.pdfreader2.databinding.DialogDeleteBinding import com.base.pdfreader2.databinding.DialogDeleteBinding
import com.base.pdfreader2.databinding.DialogSortBinding import com.base.pdfreader2.databinding.DialogSortBinding
import com.base.pdfreader2.databinding.DialogStoragePermissionBinding
import com.base.pdfreader2.utils.ActivityLauncher
import com.base.pdfreader2.utils.PermissionUtils.requestStoragePermission
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
object DialogView { object DialogView {
var SortMode = UI_SORT_LAST_MODIFIED var SortMode = UI_SORT_LAST_MODIFIED
fun Context.showSortDialog(okAction: () -> Unit) { fun Context.showSortDialog(okAction: () -> Unit) {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog) val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
......
package com.base.pdfreader2.ui.view
import android.Manifest
import android.annotation.SuppressLint
import android.app.Activity
import android.app.AlertDialog
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.text.SpannableString
import android.text.SpannableStringBuilder
import android.text.style.ForegroundColorSpan
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.WindowManager
import android.widget.LinearLayout
import androidx.core.content.ContextCompat
import com.base.pdfreader2.R
import com.base.pdfreader2.bean.ConstObject.setDefault
import com.base.pdfreader2.databinding.DialogDefaultBottomBinding
import com.base.pdfreader2.databinding.DialogDefaultUpBinding
import com.base.pdfreader2.databinding.DialogNotificationEnableBinding
import com.base.pdfreader2.databinding.DialogStoragePermissionBinding
import com.base.pdfreader2.utils.ActivityLauncher
import com.base.pdfreader2.utils.PermissionUtils.checkNotificationPermission
import com.base.pdfreader2.utils.PermissionUtils.checkStorePermission
import com.base.pdfreader2.utils.PermissionUtils.requestStoragePermission
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
object MainDialog {
fun Context.showStoragePermission(
launcher: ActivityLauncher,
launcherAction: ((flag: Boolean) -> Unit)? = null,
noLauncherAction: (() -> Unit)? = null,
dismissAction: (() -> Unit)? = null,
): BottomSheetDialog {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogStoragePermissionBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(false)
dialog.show()
val parentView = binding.root.parent as View
val behavior = BottomSheetBehavior.from(parentView)
//展开
behavior.state = BottomSheetBehavior.STATE_EXPANDED
binding.tvSet.setOnClickListener {
dialog.dismiss()
requestStoragePermission(launcher) {
launcherAction?.invoke(it)
}
}
binding.tvContinue.setOnClickListener {
dialog.dismiss()
noLauncherAction?.invoke()
}
dialog.setOnDismissListener {
dismissAction?.invoke()
}
return dialog
}
fun Activity.showNotificationDialog(launcher: ActivityLauncher) {
if (checkNotificationPermission()) return
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()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
launcher.launch(arrayOf(Manifest.permission.POST_NOTIFICATIONS)) {
}
}
}
binding.tvNo.setOnClickListener {
dialog.dismiss()
}
binding.flClose.setOnClickListener {
dialog.dismiss()
}
}
@SuppressLint("SetTextI18n")
fun Activity.showDefaultBottomDialog() {
if (!checkStorePermission()) return
if (setDefault) return
setDefault = true
val dialog = AlertDialog.Builder(this).create()
val binding = DialogDefaultBottomBinding.inflate(LayoutInflater.from(this))
dialog.setView(binding.root)
dialog.setCanceledOnTouchOutside(true)
val window = dialog.window
window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
dialog.show()
val params = dialog.window?.attributes
params?.gravity = Gravity.BOTTOM
dialog.window?.attributes = params
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
val appName = resources.getString(R.string.app_name)
binding.tvTittle.text = getString(R.string.set_as_default) + " " + appName
binding.tvDesc.text =
getString(R.string.set_this_app_as_your_default) + " " + appName + " " + getString(R.string.for_a_better_reading_experience)
binding.tvConfirm.setOnClickListener {
dialog.dismiss()
showDefaultTopDialog()
}
}
fun Activity.showDefaultTopDialog() {
val dialog = AlertDialog.Builder(this).create()
val binding = DialogDefaultUpBinding.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.TOP
dialog.window?.attributes = params
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
val select = getString(R.string.select)
val spannableStringBuilder = SpannableStringBuilder()
spannableStringBuilder.append(select)
spannableStringBuilder.append(" ")
val app = getString(R.string.app_name)
val appString = SpannableString(app)
appString.setSpan(
ForegroundColorSpan(ContextCompat.getColor(this, R.color.colo_00b8de)),
0,
appString.length,
SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE
)
spannableStringBuilder.append(appString)
val andClick = getString(R.string._and_click)
spannableStringBuilder.append(andClick)
spannableStringBuilder.append(" ")
val always = getString(R.string.always)
val alwaysString = SpannableString(always)
alwaysString.setSpan(
ForegroundColorSpan(ContextCompat.getColor(this, R.color.colo_00b8de)),
0,
always.length,
SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE
)
spannableStringBuilder.append(alwaysString)
spannableStringBuilder.append(" ")
val ss = getString(R.string.as_the_default_reader)
spannableStringBuilder.append(ss)
binding.tvTittle.text = spannableStringBuilder
binding.tvOk.setOnClickListener {
dialog.dismiss()
val intent = Intent(Intent.ACTION_VIEW)
intent.setDataAndType(Uri.parse(""), "application/pdf")
intent.addCategory(Intent.CATEGORY_DEFAULT)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
val chooser: Intent = Intent.createChooser(intent, null)
if (intent.resolveActivity(packageManager) != null) {
startActivityForResult(chooser, 111)
}
}
}
}
\ No newline at end of file
package com.base.pdfreader2.ui.view
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.view.LayoutInflater
import android.view.View
import com.base.pdfreader2.R
import com.base.pdfreader2.databinding.DialogRateStarBinding
import com.base.pdfreader2.utils.AppPreferences
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
object RateDialog {
fun Context.showRateDialog(mustShow: Boolean = false) {
if (!mustShow) {
if (AppPreferences.getInstance().getBoolean("isRated", false)) {
return
}
}
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogRateStarBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(false)
dialog.show()
val parentView = binding.root.parent as View
val behavior = BottomSheetBehavior.from(parentView)
//展开
behavior.state = BottomSheetBehavior.STATE_EXPANDED
listOf(
binding.iv1,
binding.iv2,
binding.iv3,
binding.iv4,
binding.iv5
).forEachIndexed { index, it ->
it.setOnClickListener {
setStar(binding, index)
}
}
binding.ivClose.setOnClickListener {
dialog.dismiss()
}
binding.tvSubmit.setOnClickListener {
if (star >= 5) {
AppPreferences.getInstance().put("isRated", true)
try {
val uri =
Uri.parse("https://play.google.com/store/apps/details?id=" + this.packageName)
val intent = Intent(Intent.ACTION_VIEW, uri)
this.startActivity(intent)
} catch (_: Exception) {
}
}
dialog.dismiss()
}
dialog.setOnDismissListener {
AppPreferences.getInstance().put("isRated", true)
}
}
private var star = 5
private fun setStar(binding: DialogRateStarBinding, star: Int) {
this.star = star + 1
// if (this.star < 3) {
// binding.ivFace.setImageResource(R.mipmap.pingfeniconk)
// } else {
// binding.ivFace.setImageResource(R.mipmap.pingfenicon)
// }
listOf(
binding.iv1,
binding.iv2,
binding.iv3,
binding.iv4,
binding.iv5
).forEachIndexed { index, it ->
it.setImageResource(
if (index <= star) {
R.mipmap.xing_s
} else {
R.mipmap.xing_n
}
)
}
}
}
\ No newline at end of file
package com.base.pdfreader2.ui.weather
import android.annotation.SuppressLint
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.activity.OnBackPressedCallback
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.recyclerview.widget.RecyclerView
import com.base.pdfreader2.R
import com.base.pdfreader2.ads.AdmobHelper
import com.base.pdfreader2.ads.admob.AdmobInterstitialUtils
import com.base.pdfreader2.ads.admob.AdmobNativeUtils
import com.base.pdfreader2.bean.ListBean
import com.base.pdfreader2.bean.WeatherBean
import com.base.pdfreader2.databinding.ActivityWeatherBinding
import com.base.pdfreader2.helper.BaseActivity
import com.base.pdfreader2.helper.WeatherUtils
import com.base.pdfreader2.utils.BarUtils
import kotlin.random.Random
@SuppressLint("SimpleDateFormat")
class WeatherInterface : BaseActivity<ActivityWeatherBinding>() {
override val binding: ActivityWeatherBinding by lazy {
ActivityWeatherBinding.inflate(layoutInflater)
}
var wBean: WeatherBean? = null
override fun initView() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
getData()
AdmobNativeUtils.showNativeAd(this, binding.idFlAd)
}
override fun initListener() {
binding.idBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (AdmobHelper.isBackShowAd()) {
AdmobInterstitialUtils.showInterstitialAd(this@WeatherInterface) {
finishToMain()
}
} else {
finishToMain()
}
}
})
}
private fun getData() {
wBean = WeatherUtils.getWeatherEntity()
if (wBean != null) {
setViews()
} else {
WeatherUtils.requestWeatherData()
}
binding.root.postDelayed({
AdmobInterstitialUtils.showInterstitialAd(this, false) {
binding.idFlLoading.isVisible = false
}
}, Random.nextLong(800, 2000))
}
@SuppressLint("SetTextI18n")
private var wertherList = mutableListOf<ListBean>()
@SuppressLint("SetTextI18n")
private fun setViews() {
binding.idTvCity.text = wBean?.city
binding.idTvDate.text = wBean?.list?.get(0)?.fxDate
binding.idTvTmp.text = "${wBean?.list?.get(0)?.tempMax}°"
binding.idTvHumidity.text = "${wBean?.list?.get(0)?.humidity}%"
binding.idTvWind.text = "${wBean?.list?.get(0)?.windScaleDay}"
binding.idTvPressure.text = "${wBean?.list?.get(0)?.pressure}hPa"
when ((wBean?.list?.get(0)?.iconDay)?.toInt()?.let { WeatherUtils.getWeatherType(it) }) {
"Sunny day" -> {
binding.idImgW.setImageResource(R.mipmap.d_qing)
}
"Cloudy day" -> {
binding.idImgW.setImageResource(R.mipmap.d_yin)
}
"Rainy day" -> {
binding.idImgW.setImageResource(R.mipmap.d_dayu)
}
"Snowy day" -> {
binding.idImgW.setImageResource(R.mipmap.d_xiaxue)
}
"Greasy day" -> {
binding.idImgW.setImageResource(R.mipmap.d_wumaishachengbao)
}
"Unknown" -> {
binding.idImgW.setImageResource(R.mipmap.d_qing)
}
}
wertherList.clear()
wBean?.list?.let { wertherList.addAll(it) }
binding.idRlWeather.run {
adapter = object : RecyclerView.Adapter<ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(this@WeatherInterface)
.inflate(R.layout.item_layout_weather, parent, false)
return ViewHolder(view)
}
override fun getItemCount(): Int {
return wertherList.size
}
@SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = wertherList[position]
when (WeatherUtils.getWeatherType(item.iconDay.toInt())) {
"Sunny day" -> {
holder.ivIcon.setImageResource(R.mipmap.x_qing)
}
"Cloudy day" -> {
holder.ivIcon.setImageResource(R.mipmap.x_yin)
}
"Rainy day" -> {
holder.ivIcon.setImageResource(R.mipmap.x_dayu)
}
"Snowy day" -> {
holder.ivIcon.setImageResource(R.mipmap.x_xiaxue)
}
"Greasy day" -> {
holder.ivIcon.setImageResource(R.mipmap.x_wumaishachengbao)
}
"Unknown" -> {
holder.ivIcon.setImageResource(R.mipmap.x_qing)
}
}
holder.tvTime.text = item.fxDate
holder.tvMaxTmp.text = "${item.tempMax}°/"
holder.tvMinTmp.text = "${item.tempMin}°"
}
}
}
}
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val ivIcon: ImageView
val tvTime: TextView
val tvMaxTmp: TextView
val tvMinTmp: TextView
init {
ivIcon = view.findViewById(R.id.id_img_icon)
tvTime = view.findViewById(R.id.id_tv_time)
tvMaxTmp = view.findViewById(R.id.id_tv_max_tmp)
tvMinTmp = view.findViewById(R.id.id_tv_min_tmp)
}
}
}
package com.base.pdfreader2.utils
import android.content.Context
import android.content.Intent
import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager
import android.graphics.drawable.Icon
import android.os.Build
import com.base.pdfreader2.R
import com.base.pdfreader2.bean.ConstObject
import com.base.pdfreader2.ui.splash.SplashActivity
object ShortcutUtils {
fun Context.addDeskShortCut() {
//获取ShortcutManager对象
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
val shortcutManager: ShortcutManager = getSystemService(ShortcutManager::class.java) as ShortcutManager
val shortcut1 = ShortcutInfo.Builder(this, "11111")
.setShortLabel("Scan Pdf")
.setIcon(Icon.createWithResource(this, R.mipmap.saomiao_shortcut))
.setIntent(Intent(Intent.ACTION_MAIN, null, this, SplashActivity::class.java).apply {
putExtra("actionId", ConstObject.SHORTCUT_SCAN_PDF)
})
.build()
val shortcut2 = ShortcutInfo.Builder(this, "22222")
.setShortLabel("Split Pdf")
.setIcon(Icon.createWithResource(this, R.mipmap.chaifen_shortcut))
.setIntent(Intent(Intent.ACTION_MAIN, null, this, SplashActivity::class.java).apply {
putExtra("actionId", ConstObject.SHORTCUT_MERGE_PDF)
})
.build()
val shortcut3 = ShortcutInfo.Builder(this, "33333")
.setShortLabel("Merge Pdf")
.setIcon(Icon.createWithResource(this, R.mipmap.hebing_shortcut))
.setIntent(Intent(Intent.ACTION_MAIN, null, this, SplashActivity::class.java).apply {
putExtra("actionId", ConstObject.SHORTCUT_MERGE_PDF)
})
.build()
//setDynamicShortcuts()方法来设置快捷方式
shortcutManager.setDynamicShortcuts(listOf(shortcut1, shortcut2, shortcut3))
}
}
}
\ 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:radius="8dp" />
<solid android:color="#00BF79" />
</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="#26000000" />
<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">
<solid android:color="#8338FF" />
<corners android:radius="8dp" />
</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="#D3D1D4"/>
<corners android:radius="3dp"/>
</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="#DE202A" />
<corners
android:topLeftRadius="10dp"
android:topRightRadius="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">
<solid android:color="#DE202A" />
<corners
android:topLeftRadius="15dp"
android:topRightRadius="15dp" />
</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:radius="18dp" />
<solid android:color="#E7EEF6" />
</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="#F95242" />
<corners android:radius="17dp" />
</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="#FAFCFB" />
<corners android:radius="15dp" />
</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="#FBFBFB" />
<corners android:radius="15dp" />
</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:radius="8dp" />
<solid android:color="#FF412F" />
</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="#FFC834" />
<corners android:radius="8dp" />
</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="@color/white" />
<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">
<solid android:color="@color/white" />
<corners
android:bottomLeftRadius="15dp"
android:bottomRightRadius="15dp" />
</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="@color/white" />
<corners
android:bottomLeftRadius="25dp"
android:bottomRightRadius="25dp" />
</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
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.set.FeedbackActivity">
<FrameLayout
android:id="@+id/fl_fanhui"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/fanhui_b"
tools:ignore="ContentDescription" />
</FrameLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/feedback"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/fl_fanhui"
app:layout_constraintStart_toEndOf="@id/fl_fanhui"
app:layout_constraintTop_toTopOf="@id/fl_fanhui"
tools:ignore="HardcodedText" />
<EditText
android:layout_marginTop="30dp"
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="485dp"
android:layout_marginHorizontal="15dp"
android:background="@drawable/bg_fafcfb_15"
android:gravity="top|start"
android:hint="Please enter your feedback or thoughts"
android:inputType="text"
android:paddingHorizontal="20dp"
android:paddingVertical="25dp"
android:textColor="@color/black"
android:textColorHint="#BFBFBF"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/fl_fanhui"
tools:ignore="Autofill,HardcodedText,TextFields" />
<TextView
android:id="@+id/tv_btn"
android:layout_width="338dp"
android:layout_height="48dp"
android:layout_marginBottom="25dp"
android:background="@drawable/bg_selector_btn"
android:enabled="false"
android:gravity="center"
android:text="@string/send"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -430,6 +430,99 @@ ...@@ -430,6 +430,99 @@
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:id="@+id/fl_scan_guide"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintBottom_toTopOf="@id/fl_banner"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_gravity="bottom"
android:background="@drawable/bg_de202a_tlr15"
app:layout_constraintBottom_toBottomOf="parent">
<TextView
android:id="@+id/tv_scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="54dp"
android:text="Scan to PDF"
android:textColor="@color/white"
android:textSize="20sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_scan_tip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="@string/click_this_button_to_use_the_scanning_feature"
android:textColor="@color/white"
android:textSize="15sp"
app:layout_constraintStart_toStartOf="@id/tv_scan"
app:layout_constraintTop_toBottomOf="@id/tv_scan" />
<TextView
android:id="@+id/tv_try_scan"
android:layout_width="160dp"
android:layout_height="48dp"
android:background="@drawable/bg_ffffff_10"
android:gravity="center"
android:text="@string/try_using_it"
android:textColor="#00B8DE"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/tv_scan"
app:layout_constraintTop_toBottomOf="@id/tv_scan_tip" />
<ImageView
android:id="@+id/iv_scan_guide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="18dp"
android:src="@mipmap/yindaotu"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
<LinearLayout
android:id="@+id/fl_banner"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/white"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll_bottom">
<View
android:layout_width="wrap_content"
android:layout_height="1.5dp"
android:background="#D2D2D2" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="2dp"
android:src="@mipmap/zhanweitu2"
android:tag="zhanweitu"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/ll_search" android:id="@+id/ll_search"
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
tools:context=".ui.set.SetActivity">
<FrameLayout
android:id="@+id/fl_fanhui"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/fanhui_b"
tools:ignore="ContentDescription" />
</FrameLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/set"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/fl_fanhui"
app:layout_constraintStart_toEndOf="@id/fl_fanhui"
app:layout_constraintTop_toTopOf="@id/fl_fanhui" />
<LinearLayout
android:id="@+id/ll_language"
android:layout_width="match_parent"
android:layout_height="61dp"
android:layout_marginHorizontal="15dp"
android:layout_marginVertical="15dp"
android:layout_marginTop="15dp"
android:background="@drawable/bg_fbfbfb_15"
app:layout_constraintTop_toBottomOf="@id/fl_fanhui">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="18dp"
android:src="@mipmap/pingjia"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv_language"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:includeFontPadding="false"
android:text="@string/language"
android:textColor="#333333"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_rate"
android:layout_width="match_parent"
android:layout_height="61dp"
android:layout_marginHorizontal="15dp"
android:layout_marginVertical="15dp"
android:layout_marginTop="15dp"
android:background="@drawable/bg_fbfbfb_15"
app:layout_constraintTop_toBottomOf="@id/ll_language">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="18dp"
android:src="@mipmap/pingjia"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:includeFontPadding="false"
android:text="@string/evaluate_us"
android:textColor="#333333"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_feedback"
android:layout_width="match_parent"
android:layout_height="61dp"
android:layout_marginHorizontal="15dp"
android:layout_marginVertical="15dp"
android:background="@drawable/bg_fbfbfb_15"
app:layout_constraintTop_toBottomOf="@id/ll_rate">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="18dp"
android:src="@mipmap/fankui"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:includeFontPadding="false"
android:text="@string/feedback"
android:textColor="#333333"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_privacy"
android:layout_width="match_parent"
android:layout_height="61dp"
android:layout_marginHorizontal="15dp"
android:layout_marginVertical="15dp"
android:background="@drawable/bg_fbfbfb_15"
app:layout_constraintTop_toBottomOf="@id/ll_feedback">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="18dp"
android:src="@mipmap/yinsi"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:includeFontPadding="false"
android:text="@string/privacy_policy"
android:textColor="#333333"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_term"
android:layout_width="match_parent"
android:layout_height="61dp"
android:layout_marginHorizontal="15dp"
android:layout_marginVertical="15dp"
android:background="@drawable/bg_fbfbfb_15"
app:layout_constraintTop_toBottomOf="@id/ll_privacy">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="18dp"
android:src="@mipmap/tiaokuan"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:includeFontPadding="false"
android:text="@string/term_of_service"
android:textColor="#333333"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_ffffff_tlr25"
android:orientation="vertical">
<View
android:layout_width="72dp"
android:layout_height="6dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="12dp"
android:background="@drawable/bg_d3d1d4_3" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="40dp"
android:src="@mipmap/moren_logo"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv_tittle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="24dp"
android:textColor="#333333"
android:textSize="17sp"
android:textStyle="bold"
tools:ignore="HardcodedText"
tools:text="@string/app_name" />
<TextView
android:id="@+id/tv_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginHorizontal="20dp"
android:layout_marginTop="16dp"
android:gravity="center"
android:textColor="#666666"
android:textSize="15sp"
tools:ignore="HardcodedText"
tools:text="aaaaaaa" />
<TextView
android:id="@+id/tv_confirm"
android:layout_width="338dp"
android:layout_height="48dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:background="@drawable/bg_00b8de_10"
android:gravity="center"
android:text="@string/confirm"
android:textColor="@color/white"
android:textSize="18sp"
tools:ignore="HardcodedText" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_ffffff_blr25"
android:orientation="vertical">
<TextView
android:id="@+id/tv_tittle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="30dp"
android:textColor="#333333"
android:textSize="17sp"
android:textStyle="bold"
tools:ignore="HardcodedText"
tools:text="@string/app_name" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:src="@mipmap/morentu"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv_ok"
android:layout_width="338dp"
android:layout_height="48dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:background="@drawable/bg_de202a_tlr10"
android:gravity="center"
android:text="ok"
android:textColor="@color/white"
android:textSize="18sp"
tools:ignore="HardcodedText" />
</LinearLayout>
\ No newline at end of file
<?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_de202a_tlr15">
<LinearLayout
android:layout_width="291dp"
android:layout_height="54dp"
android:layout_gravity="center"
android:background="@mipmap/bg_message_8"
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_blr15">
<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_de202a_tlr15"
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
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent">
<FrameLayout
android:id="@+id/fl"
android:layout_width="match_parent"
android:layout_height="65dp"
android:layout_marginTop="38dp"
android:background="@drawable/bg_f3f3f3_tlr25"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="26dp"
android:src="@mipmap/guanbi_dialog"
tools:ignore="ContentDescription" />
</FrameLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
app:layout_constraintTop_toBottomOf="@id/fl">
<TextView
android:id="@+id/tv_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="22dp"
android:text="@string/thank_you_for_your_support"
android:textColor="#333333"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="@string/your_five_star_rating_will_inspire_us_to_keep_moving_forward"
android:textColor="#333333"
android:textSize="15sp"
app:layout_constraintStart_toStartOf="@id/tv_1"
app:layout_constraintTop_toBottomOf="@id/tv_1"
tools:ignore="HardcodedText" />
<LinearLayout
android:id="@+id/ll_star"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_2">
<ImageView
android:id="@+id/iv_1"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_margin="10dp"
android:src="@mipmap/xing_s"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_2"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_margin="10dp"
android:src="@mipmap/xing_s"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_3"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_margin="10dp"
android:src="@mipmap/xing_s"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_4"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_margin="10dp"
android:src="@mipmap/xing_s"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_5"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_margin="10dp"
android:src="@mipmap/xing_s"
tools:ignore="ContentDescription" />
</LinearLayout>
<TextView
android:id="@+id/tv_submit"
android:layout_width="338dp"
android:layout_height="48dp"
android:layout_marginTop="24dp"
android:layout_marginBottom="16dp"
android:background="@drawable/bg_00b8de_10"
android:gravity="center"
android:text="@string/evaluate"
android:textColor="@color/white"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll_star"
tools:ignore="HardcodedText" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="26dp"
android:src="@mipmap/pingjiatu"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_ffffff_tlr25"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:src="@mipmap/tu_permission"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="24dp"
android:text="@string/authorization_request"
android:textColor="#333333"
android:textSize="17sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:gravity="center"
android:text="@string/to_read_and_edit_pdf_files_we_need_your_permission_to_obtain_file_management_privileges"
android:textColor="#666666"
android:textSize="15sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_set"
android:layout_width="338dp"
android:layout_height="48dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:background="@drawable/bg_00b8de_10"
android:gravity="center"
android:text="@string/set"
android:textColor="@color/white"
android:textSize="18sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_continue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="10dp"
android:padding="10dp"
android:text="@string/_continue"
android:textColor="#999999"
android:textSize="18sp"
tools:ignore="HardcodedText" />
</LinearLayout>
\ No newline at end of file
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="16dp">
<TextView
android:id="@+id/id_tv_time"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="11dp"
android:layout_weight="1"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="Today, 25 Jun" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/id_img_icon"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_marginEnd="22dp"
android:src="@mipmap/x_qing" />
<TextView
android:id="@+id/id_tv_max_tmp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="17sp"
tools:text="32°/" />
<TextView
android:id="@+id/id_tv_min_tmp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="14dp"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="12°" />
</LinearLayout>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -6,7 +6,12 @@ ...@@ -6,7 +6,12 @@
<color name="color_de202a">#DE202A</color> <color name="color_de202a">#DE202A</color>
<color name="color_1ea362">#1EA362</color> <color name="color_1ea362">#1EA362</color>
<color name="color_f6b911">#F6B911</color> <color name="color_f6b911">#F6B911</color>
<color name="color_80ffffff" >#80FFFFFF</color> <color name="color_80ffffff">#80FFFFFF</color>
<color name="transparent">#00000000</color> <color name="transparent">#00000000</color>
<color name="color_f02f2b">#F02F2B</color>
<color name="color_0592ee">#0592EE</color>
<color name="color_149b55">#149B55</color>
<color name="color_ffa127">#FFA127</color>
<color name="color_f92b39">#F92B39</color> <color name="color_f92b39">#F92B39</color>
<color name="colo_00b8de">#00B8DE</color>
</resources> </resources>
\ No newline at end of file
...@@ -3,4 +3,6 @@ ...@@ -3,4 +3,6 @@
<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_9">9dp</dimen>
<dimen name="dp_345">345dp</dimen>
</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