chore(ntfy): split NTFY server and topic; update NotificationSender and resources

This commit is contained in:
rakha 2025-11-27 13:24:17 +07:00
parent 961ebfd757
commit b0531c0412
14 changed files with 210 additions and 23 deletions

123
.idea/codeStyles/Project.xml generated Normal file
View File

@ -0,0 +1,123 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
<codeStyleSettings language="XML">
<option name="FORCE_REARRANGE_MODE" value="1" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</codeStyleSettings>
</code_scheme>
</component>

5
.idea/codeStyles/codeStyleConfig.xml generated Normal file
View File

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

View File

@ -3,10 +3,30 @@
<component name="AgentMigrationStateService">
<option name="migrationStatus" value="IN_PROGRESS" />
<option name="pendingSessionIds">
<option value="05f02dcc-4a62-4a3b-a6bb-d4764cbd1bab" />
<option value="1e2fee64-523c-4038-ad08-03d8f8196cb1" />
<option value="46f36349-a2e4-46bf-b85e-8ee46252660a" />
<option value="63e1cd83-39a1-4de9-83e4-a7d978cb9048" />
<option value="82cd9415-28a8-49b5-841d-6178af5419de" />
<option value="a1f1bc1b-b1d4-4655-9677-4653b213cc14" />
<option value="ad5bcc95-675a-45d4-8896-b1645cb788b9" />
<option value="bf5061b4-a1e9-4600-a273-ea8e51b2ce89" />
<option value="d23e68d4-6558-4c12-a57e-d937ea639547" />
<option value="e6a32dc0-5413-49cf-ad92-9fb87982ed75" />
</option>
<option name="pendingTurns">
<map>
<entry key="63e1cd83-39a1-4de9-83e4-a7d978cb9048">
<value>
<set>
<option value="f099f72f-0866-4d16-85e4-8323be39e45f" />
<option value="44c8c4f4-3bbe-4fb8-88e4-58bdb184dad0" />
<option value="a20448f7-57cd-4a40-89b1-460451412588" />
<option value="484561a1-1c08-44cd-bcd3-a53895fc3851" />
<option value="17ec376a-38fd-48ac-a4e1-52e9f7df3100" />
</set>
</value>
</entry>
<entry key="bf5061b4-a1e9-4600-a273-ea8e51b2ce89">
<value>
<set>
@ -57,18 +77,16 @@
</map>
</option>
<pendingWorkingSetItems>
<entry key="bf5061b4-a1e9-4600-a273-ea8e51b2ce89">
<entry key="63e1cd83-39a1-4de9-83e4-a7d978cb9048">
<set>
<option value="file://$PROJECT_DIR$/app/src/main/java/id/ac/ubharajaya/panicbutton/PanicButton.kt" />
<option value="file://$PROJECT_DIR$/app/src/main/java/id/ac/ubharajaya/panicbutton/MainScreen.kt" />
<option value="file://$PROJECT_DIR$/app/src/main/res/mipmap-anydpi/ic_launcher.xml" />
<option value="file://$PROJECT_DIR$/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml" />
<option value="file://$PROJECT_DIR$/app/build.gradle.kts" />
<option value="file://$PROJECT_DIR$/app/src/main/java/id/ac/ubharajaya/panicbutton/MainActivity.kt" />
<option value="file://$PROJECT_DIR$/app/src/main/java/id/ac/ubharajaya/panicbutton/EvacuationMaps.kt" />
<option value="file://$PROJECT_DIR$/app/src/main/java/id/ac/ubharajaya/panicbutton/EvacuationMapsActivity.kt" />
<option value="file://$PROJECT_DIR$/app/src/main/java/id/ac/ubharajaya/panicbutton/EvacuationMapDetailActivity.kt" />
<option value="file://$PROJECT_DIR$/app/src/main/AndroidManifest.xml" />
<option value="file://$PROJECT_DIR$/app/src/main/java/id/ac/ubharajaya/panicbutton/NotificationSender.kt" />
</set>
</entry>
<entry key="bf5061b4-a1e9-4600-a273-ea8e51b2ce89" />
</pendingWorkingSetItems>
</component>
</project>

2
.idea/vcs.xml generated
View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@ -66,4 +66,7 @@ dependencies {
// Navigation for Compose
implementation("androidx.navigation:navigation-compose:2.6.0")
// AndroidX SplashScreen (required for installSplashScreen API)
implementation("androidx.core:core-splashscreen:1.0.1")
}

View File

@ -6,19 +6,18 @@
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:icon="@drawable/logo"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:roundIcon="@drawable/logo"
android:supportsRtl="true"
android:theme="@style/Theme.PanicButton">
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/Theme.PanicButton">
android:theme="@style/Theme.App.Starting">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

View File

@ -13,7 +13,6 @@ class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
val openEvacMaps = {
startActivity(Intent(this, EvacuationMapsActivity::class.java))
}
@ -23,4 +22,4 @@ class MainActivity : ComponentActivity() {
}
}
}
}
}

View File

@ -12,11 +12,10 @@ import java.io.IOException
object NotificationSender {
private val client = OkHttpClient.Builder()
.build()
private const val url = "https://ntfy.ubharajaya.ac.id/panic-button"
private const val server = "https://ntfy.ubharajaya.ac.id"
private const val topic = "panic-button"
private const val TAG = "NotificationSender"
// Header MUST be ASCII only
private fun sanitizeHeaderValue(value: String): String {
val sb = StringBuilder()
for (ch in value) {
@ -29,6 +28,7 @@ object NotificationSender {
suspend fun sendNotification(message: String): String = withContext(Dispatchers.IO) {
try {
val url = "$server/$topic"
Log.d(TAG, "Preparing notification to $url")
// Title ONLY has emoji

View File

@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="800dp"
android:height="800dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:pathData="M507.49,426.07L282.86,53.54c-5.68,-9.41 -15.87,-15.17 -26.86,-15.17c-10.99,0 -21.19,5.76 -26.86,15.17L4.51,426.07c-5.84,9.69 -6.01,21.77 -0.45,31.63c5.56,9.85 16,15.94 27.32,15.94h449.26c11.31,0 21.75,-6.09 27.32,-15.94C513.51,447.84 513.34,435.76 507.49,426.07z"
android:fillColor="#FF9900"/>
<path
android:pathData="M256,38.37c-10.99,0 -21.19,5.76 -26.86,15.17L4.51,426.07c-5.84,9.69 -6.01,21.77 -0.45,31.63c5.56,9.85 16,15.94 27.32,15.94h224.63L256,38.37L256,38.37z"
android:fillColor="#FFDC35"/>
<path
android:pathData="M445.33,432.79H67.11c-3.59,0 -6.91,-1.91 -8.72,-5.01c-1.81,-3.1 -1.83,-6.93 -0.05,-10.06L247.23,85.03c1.79,-3.15 5.14,-5.11 8.77,-5.11c0,0 0,0 0,0c3.63,0 6.97,1.95 8.77,5.1l189.32,332.69c1.78,3.12 1.76,6.95 -0.05,10.06S448.92,432.79 445.33,432.79zM84.44,412.62h343.54L256.01,110.42L84.44,412.62z"
android:fillColor="#F20013"/>
<path
android:pathData="M256.33,412.62H84.44l171.58,-302.19l-0.01,-30.5h-0c-3.63,0 -6.98,1.95 -8.77,5.11L58.34,417.72c-1.77,3.12 -1.75,6.95 0.05,10.06c1.81,3.1 5.13,5.01 8.72,5.01h189.22v-20.17H256.33z"
android:fillColor="#FF4B00"/>
<path
android:pathData="M279.36,376.88c0,12.34 -10.54,23.18 -22.88,23.18c-13.25,0 -23.18,-10.84 -23.18,-23.18c0,-12.64 9.94,-23.18 23.18,-23.18C268.83,353.7 279.36,364.24 279.36,376.88zM273.64,319.68c0,9.33 -10.24,13.25 -17.46,13.25c-9.63,0 -17.76,-3.91 -17.76,-13.25c0,-35.83 -4.21,-87.31 -4.21,-123.13c0,-11.74 9.63,-18.36 21.98,-18.36c11.74,0 21.68,6.62 21.68,18.36C277.86,232.37 273.64,283.86 273.64,319.68z"
android:fillColor="#533F29"/>
</vector>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/ubhara"
android:top="30dp"
android:bottom="30dp"
android:left="30dp"
android:right="30dp"/>
</layer-list>

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 KiB

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
<background android:drawable="@android:color/transparent" />
<foreground android:drawable="@drawable/logo" />
<monochrome android:drawable="@drawable/logo" />
</adaptive-icon>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
<background android:drawable="@android:color/transparent" />
<foreground android:drawable="@drawable/logo" />
<monochrome android:drawable="@drawable/logo" />
</adaptive-icon>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.App.Starting" parent="Theme.SplashScreen">
<item name="postSplashScreenTheme">@style/Theme.PanicButton</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/splash_icon_padded</item>
<item name="windowSplashScreenAnimationDuration">500</item>
</style>
</resources>