Commit 8a60c675 authored by wanglei's avatar wanglei

...地震

parent 35de8dba
...@@ -43,5 +43,6 @@ class NotificationSendBean( ...@@ -43,5 +43,6 @@ class NotificationSendBean(
const val ACTION_ID_SCREEN_SHORT = "action_id_screen_short" const val ACTION_ID_SCREEN_SHORT = "action_id_screen_short"
const val ACTION_ID_SIMILAR = "action_id_similar" const val ACTION_ID_SIMILAR = "action_id_similar"
const val ACTION_ID_CONSTELLATION = "action_id_constellation" const val ACTION_ID_CONSTELLATION = "action_id_constellation"
const val ACTION_ID_EARTHQUAKE = "action_id_earthquake"
} }
} }
\ No newline at end of file
...@@ -3,10 +3,12 @@ package com.base.scanqrclear.fcm.notification ...@@ -3,10 +3,12 @@ package com.base.scanqrclear.fcm.notification
import android.content.Context import android.content.Context
import com.base.scanqrclear.BuildConfig import com.base.scanqrclear.BuildConfig
import com.base.scanqrclear.MyApplication import com.base.scanqrclear.MyApplication
import com.base.scanqrclear.bean.EarthquakeData
import com.base.scanqrclear.bean.NotificationSendBean import com.base.scanqrclear.bean.NotificationSendBean
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_APP_PROCESS import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_APP_PROCESS
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_CLEAN_JUNK import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_CLEAN_JUNK
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_CONSTELLATION import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_CONSTELLATION
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_EARTHQUAKE
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_EMAIL import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_EMAIL
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCAN import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCAN
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCREEN_SHORT import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCREEN_SHORT
...@@ -26,6 +28,7 @@ import com.base.scanqrclear.bean.NotificationSendBean.Companion.POPUP_WHERE_TIME ...@@ -26,6 +28,7 @@ import com.base.scanqrclear.bean.NotificationSendBean.Companion.POPUP_WHERE_TIME
import com.base.scanqrclear.bean.NotificationSendBean.Companion.POPUP_WHERE_WORK_MANAGER import com.base.scanqrclear.bean.NotificationSendBean.Companion.POPUP_WHERE_WORK_MANAGER
import com.base.scanqrclear.bean.config.PopupConfigBean.Companion.popupConfigBean import com.base.scanqrclear.bean.config.PopupConfigBean.Companion.popupConfigBean
import com.base.scanqrclear.helper.EventUtils import com.base.scanqrclear.helper.EventUtils
import com.base.scanqrclear.ui.earthquake.EarthquakeActivity.Companion.fetchEarthquakeData
import com.base.scanqrclear.utils.AppPreferences import com.base.scanqrclear.utils.AppPreferences
import com.base.scanqrclear.utils.KotlinExt.currentDate import com.base.scanqrclear.utils.KotlinExt.currentDate
import com.base.scanqrclear.utils.LogEx import com.base.scanqrclear.utils.LogEx
...@@ -61,6 +64,7 @@ object MyNotificationManager { ...@@ -61,6 +64,7 @@ object MyNotificationManager {
ACTION_ID_SCREEN_SHORT, ACTION_ID_SCREEN_SHORT,
ACTION_ID_SIMILAR, ACTION_ID_SIMILAR,
ACTION_ID_CONSTELLATION, ACTION_ID_CONSTELLATION,
ACTION_ID_EARTHQUAKE,
) )
private var actionIdList = arrayListOf<String>() private var actionIdList = arrayListOf<String>()
...@@ -71,7 +75,7 @@ object MyNotificationManager { ...@@ -71,7 +75,7 @@ object MyNotificationManager {
val next = actionIdList[0] val next = actionIdList[0]
actionIdList.removeAt(0) actionIdList.removeAt(0)
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
return ACTION_ID_SIMILAR return ACTION_ID_EARTHQUAKE
} }
return next return next
} }
...@@ -124,6 +128,12 @@ object MyNotificationManager { ...@@ -124,6 +128,12 @@ object MyNotificationManager {
if (!bean.canSend.invoke()) continue if (!bean.canSend.invoke()) continue
} }
//提前获取数据
if (bean.actionId == ACTION_ID_EARTHQUAKE) {
val data = fetchEarthquakeData()?.features?.maxBy { it.properties.sig }
bean.valueMap["data"] = data as Any
}
async(Dispatchers.Main) { async(Dispatchers.Main) {
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
MyApplication.appContext.toast(bean.where) MyApplication.appContext.toast(bean.where)
...@@ -222,12 +232,12 @@ object MyNotificationManager { ...@@ -222,12 +232,12 @@ object MyNotificationManager {
*/ */
private var testWhere = listOf( private var testWhere = listOf(
POPUP_WHERE_LOCK, POPUP_WHERE_LOCK,
POPUP_WHERE_BATTERY, // POPUP_WHERE_BATTERY,
POPUP_WHERE_PACKAGE, // POPUP_WHERE_PACKAGE,
POPUP_WHERE_WORK_MANAGER, // POPUP_WHERE_WORK_MANAGER,
POPUP_WHERE_ALARM, // POPUP_WHERE_ALARM,
POPUP_WHERE_TIMER, // POPUP_WHERE_TIMER,
POPUP_WHERE_FILE_JOB, // POPUP_WHERE_FILE_JOB,
POPUP_WHERE_FCM // POPUP_WHERE_FCM
) )
} }
\ No newline at end of file
...@@ -12,10 +12,14 @@ import androidx.core.app.NotificationCompat ...@@ -12,10 +12,14 @@ import androidx.core.app.NotificationCompat
import androidx.core.graphics.drawable.IconCompat import androidx.core.graphics.drawable.IconCompat
import com.base.scanqrclear.MyApplication import com.base.scanqrclear.MyApplication
import com.base.scanqrclear.R import com.base.scanqrclear.R
import com.base.scanqrclear.bean.EarthquakeBean
import com.base.scanqrclear.bean.EarthquakeData
import com.base.scanqrclear.bean.EarthquakeProperties
import com.base.scanqrclear.bean.NotificationSendBean import com.base.scanqrclear.bean.NotificationSendBean
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_APP_PROCESS import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_APP_PROCESS
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_CLEAN_JUNK import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_CLEAN_JUNK
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_CONSTELLATION import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_CONSTELLATION
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_EARTHQUAKE
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_EMAIL import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_EMAIL
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCAN import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCAN
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCREEN_SHORT import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCREEN_SHORT
...@@ -235,6 +239,31 @@ object NotificationUiUtil { ...@@ -235,6 +239,31 @@ object NotificationUiUtil {
sendBean.smallRemoteViews = smallRemoteViews sendBean.smallRemoteViews = smallRemoteViews
} }
ACTION_ID_EARTHQUAKE -> {
val data = sendBean.valueMap["data"] as EarthquakeBean?
data ?: return
val smallRemoteViews = RemoteViews(MyApplication.appContext.packageName, R.layout.stay_notification_small_function)
val bigRemoteViews = RemoteViews(MyApplication.appContext.packageName, R.layout.notification_style_new)
smallRemoteViews.setImageViewResource(R.id.ivIcon, R.mipmap.h_earthquake)
smallRemoteViews.setTextViewText(R.id.tvTitle, "Earthquake")
smallRemoteViews.setTextViewText(
R.id.tvDesc,
" A tremor has been detected in ${data.properties.place}. Please stay safe and click here for more details."
)
bigRemoteViews.setImageViewResource(R.id.iv, R.mipmap.h_earthquake)
bigRemoteViews.setTextViewText(R.id.tvTitle, "Earthquake")
bigRemoteViews.setTextViewText(
R.id.tvDesc,
"A tremor has been detected in ${data.properties.place}. Please stay safe and click here for more details."
)
sendBean.smallRemoteViews = smallRemoteViews
sendBean.bigRemoteViews = bigRemoteViews
}
} }
......
...@@ -102,7 +102,21 @@ class EarthquakeActivity : BaseActivity<ActivityEarthquakeBinding>(ActivityEarth ...@@ -102,7 +102,21 @@ class EarthquakeActivity : BaseActivity<ActivityEarthquakeBinding>(ActivityEarth
} }
} }
private fun fetchEarthquakeData(): EarthquakeData? {
private fun haversineDistance(lat1: Double, lon1: Double, lat2: Double, lon2: Double): Double {
val R = 6371 // 地球半径,单位:千米
val latDistance = Math.toRadians(lat2 - lat1)
val lonDistance = Math.toRadians(lon2 - lon1)
val a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2)
val c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
return R * c // 返回距离,单位:千米
}
companion object {
fun fetchEarthquakeData(): EarthquakeData? {
try { try {
val client = OkHttpClient() val client = OkHttpClient()
val request = Request.Builder() val request = Request.Builder()
...@@ -114,7 +128,7 @@ class EarthquakeActivity : BaseActivity<ActivityEarthquakeBinding>(ActivityEarth ...@@ -114,7 +128,7 @@ class EarthquakeActivity : BaseActivity<ActivityEarthquakeBinding>(ActivityEarth
val responseBody = response.body?.string() val responseBody = response.body?.string()
if (responseBody == null) { if (responseBody == null) {
LogEx.logDebug(TAG, "responseBody=null") // LogEx.logDebug(TAG, "responseBody=null")
return null return null
} else { } else {
val gson = Gson() val gson = Gson()
...@@ -126,15 +140,5 @@ class EarthquakeActivity : BaseActivity<ActivityEarthquakeBinding>(ActivityEarth ...@@ -126,15 +140,5 @@ class EarthquakeActivity : BaseActivity<ActivityEarthquakeBinding>(ActivityEarth
} }
return null return null
} }
private fun haversineDistance(lat1: Double, lon1: Double, lat2: Double, lon2: Double): Double {
val R = 6371 // 地球半径,单位:千米
val latDistance = Math.toRadians(lat2 - lat1)
val lonDistance = Math.toRadians(lon2 - lon1)
val a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2)
val c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
return R * c // 返回距离,单位:千米
} }
} }
\ No newline at end of file
...@@ -13,6 +13,7 @@ import com.base.scanqrclear.bean.ConstObject.isFirstLauncher ...@@ -13,6 +13,7 @@ import com.base.scanqrclear.bean.ConstObject.isFirstLauncher
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_APP_PROCESS import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_APP_PROCESS
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_CLEAN_JUNK import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_CLEAN_JUNK
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_CONSTELLATION import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_CONSTELLATION
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_EARTHQUAKE
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_EMAIL import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_EMAIL
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCAN import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCAN
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCREEN_SHORT import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCREEN_SHORT
...@@ -32,6 +33,7 @@ import com.base.scanqrclear.luma.SimilarPhotosActivity ...@@ -32,6 +33,7 @@ import com.base.scanqrclear.luma.SimilarPhotosActivity
import com.base.scanqrclear.luma.WeatherInterface import com.base.scanqrclear.luma.WeatherInterface
import com.base.scanqrclear.luma.WhatsappCleanActivity import com.base.scanqrclear.luma.WhatsappCleanActivity
import com.base.scanqrclear.service.StayJobService.Companion.startJob import com.base.scanqrclear.service.StayJobService.Companion.startJob
import com.base.scanqrclear.ui.earthquake.EarthquakeActivity
import com.base.scanqrclear.ui.email.EmailActivity import com.base.scanqrclear.ui.email.EmailActivity
import com.base.scanqrclear.ui.language.LanguageActivity import com.base.scanqrclear.ui.language.LanguageActivity
import com.base.scanqrclear.ui.main.MainActivity import com.base.scanqrclear.ui.main.MainActivity
...@@ -259,6 +261,10 @@ class StartActivity : BaseActivity<ActivityStartBinding>(ActivityStartBinding::i ...@@ -259,6 +261,10 @@ class StartActivity : BaseActivity<ActivityStartBinding>(ActivityStartBinding::i
}) })
} }
ACTION_ID_EARTHQUAKE -> {
startActivity(Intent(this, EarthquakeActivity::class.java))
}
else -> { else -> {
startActivity(Intent(this, MainActivity::class.java).apply { startActivity(Intent(this, MainActivity::class.java).apply {
putExtra("actionId", actionId) putExtra("actionId", actionId)
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:padding="12dp">
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginTop="8dp"
android:src="@mipmap/h_weather"
tools:ignore="ContentDescription" />
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@id/iv"
android:layout_alignParentEnd="true"
android:layout_marginHorizontal="10dp"
android:layout_toEndOf="@id/iv"
android:orientation="vertical">
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:textSize="15sp"
tools:text="Rain or snow forecast fore some" />
<TextView
android:id="@+id/tvDesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#666666"
android:textSize="13sp"
tools:text="but sunshine for many. What’s [City Name] like? Tap to find out!" />
</LinearLayout>
<TextView
android:id="@+id/tvBtn"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_below="@id/ll"
android:layout_marginTop="24dp"
android:background="@drawable/bg_8559ea_6672f7"
android:gravity="center"
android:text="Check"
android:textColor="#ffffff"
android:textSize="18sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:orientation="vertical" android:padding="10dp"
tools:ignore="DisableBaselineAlignment"> tools:ignore="DisableBaselineAlignment">
<ImageView
android:id="@+id/iv"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:src="@mipmap/logo"
tools:ignore="ContentDescription" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/iv"
android:layout_alignBottom="@id/iv"
android:layout_marginStart="8dp"
android:layout_toEndOf="@id/iv"
android:orientation="vertical">
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -25,4 +42,6 @@ ...@@ -25,4 +42,6 @@
android:textColor="#666666" android:textColor="#666666"
android:textSize="12sp" /> android:textSize="12sp" />
</LinearLayout> </LinearLayout>
\ No newline at end of file
</RelativeLayout>
\ 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