Commit 8a60c675 authored by wanglei's avatar wanglei

...地震

parent 35de8dba
......@@ -43,5 +43,6 @@ class NotificationSendBean(
const val ACTION_ID_SCREEN_SHORT = "action_id_screen_short"
const val ACTION_ID_SIMILAR = "action_id_similar"
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
import android.content.Context
import com.base.scanqrclear.BuildConfig
import com.base.scanqrclear.MyApplication
import com.base.scanqrclear.bean.EarthquakeData
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_CLEAN_JUNK
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_SCAN
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
import com.base.scanqrclear.bean.NotificationSendBean.Companion.POPUP_WHERE_WORK_MANAGER
import com.base.scanqrclear.bean.config.PopupConfigBean.Companion.popupConfigBean
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.KotlinExt.currentDate
import com.base.scanqrclear.utils.LogEx
......@@ -61,6 +64,7 @@ object MyNotificationManager {
ACTION_ID_SCREEN_SHORT,
ACTION_ID_SIMILAR,
ACTION_ID_CONSTELLATION,
ACTION_ID_EARTHQUAKE,
)
private var actionIdList = arrayListOf<String>()
......@@ -71,7 +75,7 @@ object MyNotificationManager {
val next = actionIdList[0]
actionIdList.removeAt(0)
if (BuildConfig.DEBUG) {
return ACTION_ID_SIMILAR
return ACTION_ID_EARTHQUAKE
}
return next
}
......@@ -124,6 +128,12 @@ object MyNotificationManager {
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) {
if (BuildConfig.DEBUG) {
MyApplication.appContext.toast(bean.where)
......@@ -222,12 +232,12 @@ object MyNotificationManager {
*/
private var testWhere = listOf(
POPUP_WHERE_LOCK,
POPUP_WHERE_BATTERY,
POPUP_WHERE_PACKAGE,
POPUP_WHERE_WORK_MANAGER,
POPUP_WHERE_ALARM,
POPUP_WHERE_TIMER,
POPUP_WHERE_FILE_JOB,
POPUP_WHERE_FCM
// POPUP_WHERE_BATTERY,
// POPUP_WHERE_PACKAGE,
// POPUP_WHERE_WORK_MANAGER,
// POPUP_WHERE_ALARM,
// POPUP_WHERE_TIMER,
// POPUP_WHERE_FILE_JOB,
// POPUP_WHERE_FCM
)
}
\ No newline at end of file
......@@ -12,10 +12,14 @@ import androidx.core.app.NotificationCompat
import androidx.core.graphics.drawable.IconCompat
import com.base.scanqrclear.MyApplication
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.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_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_SCAN
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCREEN_SHORT
......@@ -235,6 +239,31 @@ object NotificationUiUtil {
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
}
}
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 {
val client = OkHttpClient()
val request = Request.Builder()
......@@ -114,7 +128,7 @@ class EarthquakeActivity : BaseActivity<ActivityEarthquakeBinding>(ActivityEarth
val responseBody = response.body?.string()
if (responseBody == null) {
LogEx.logDebug(TAG, "responseBody=null")
// LogEx.logDebug(TAG, "responseBody=null")
return null
} else {
val gson = Gson()
......@@ -126,15 +140,5 @@ class EarthquakeActivity : BaseActivity<ActivityEarthquakeBinding>(ActivityEarth
}
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
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_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_SCAN
import com.base.scanqrclear.bean.NotificationSendBean.Companion.ACTION_ID_SCREEN_SHORT
......@@ -32,6 +33,7 @@ import com.base.scanqrclear.luma.SimilarPhotosActivity
import com.base.scanqrclear.luma.WeatherInterface
import com.base.scanqrclear.luma.WhatsappCleanActivity
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.language.LanguageActivity
import com.base.scanqrclear.ui.main.MainActivity
......@@ -259,6 +261,10 @@ class StartActivity : BaseActivity<ActivityStartBinding>(ActivityStartBinding::i
})
}
ACTION_ID_EARTHQUAKE -> {
startActivity(Intent(this, EarthquakeActivity::class.java))
}
else -> {
startActivity(Intent(this, MainActivity::class.java).apply {
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"?>
<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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:padding="10dp"
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
android:layout_width="match_parent"
......@@ -25,4 +42,6 @@
android:textColor="#666666"
android:textSize="12sp" />
</LinearLayout>
\ No newline at end of file
</LinearLayout>
</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