Merge branch 'main' into fdroid
|
@ -12,8 +12,8 @@ android {
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 30
|
targetSdkVersion 30
|
||||||
|
|
||||||
versionCode 6
|
versionCode 7
|
||||||
versionName "1.1.3"
|
versionName "1.2.0"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
@ -23,7 +23,6 @@ android {
|
||||||
arguments += ["room.schemaLocation": "$projectDir/schemas".toString()]
|
arguments += ["room.schemaLocation": "$projectDir/schemas".toString()]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
|
|
118
app/schemas/io.heckel.ntfy.data.Database/3.json
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
{
|
||||||
|
"formatVersion": 1,
|
||||||
|
"database": {
|
||||||
|
"version": 3,
|
||||||
|
"identityHash": "7b0ef556331f6d2dd3515425837c3d3a",
|
||||||
|
"entities": [
|
||||||
|
{
|
||||||
|
"tableName": "Subscription",
|
||||||
|
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `baseUrl` TEXT NOT NULL, `topic` TEXT NOT NULL, `instant` INTEGER NOT NULL, `mutedUntil` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldPath": "id",
|
||||||
|
"columnName": "id",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "baseUrl",
|
||||||
|
"columnName": "baseUrl",
|
||||||
|
"affinity": "TEXT",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "topic",
|
||||||
|
"columnName": "topic",
|
||||||
|
"affinity": "TEXT",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "instant",
|
||||||
|
"columnName": "instant",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "mutedUntil",
|
||||||
|
"columnName": "mutedUntil",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"primaryKey": {
|
||||||
|
"columnNames": [
|
||||||
|
"id"
|
||||||
|
],
|
||||||
|
"autoGenerate": false
|
||||||
|
},
|
||||||
|
"indices": [
|
||||||
|
{
|
||||||
|
"name": "index_Subscription_baseUrl_topic",
|
||||||
|
"unique": true,
|
||||||
|
"columnNames": [
|
||||||
|
"baseUrl",
|
||||||
|
"topic"
|
||||||
|
],
|
||||||
|
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_Subscription_baseUrl_topic` ON `${TABLE_NAME}` (`baseUrl`, `topic`)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"foreignKeys": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tableName": "Notification",
|
||||||
|
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `subscriptionId` INTEGER NOT NULL, `timestamp` INTEGER NOT NULL, `message` TEXT NOT NULL, `notificationId` INTEGER NOT NULL, `deleted` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldPath": "id",
|
||||||
|
"columnName": "id",
|
||||||
|
"affinity": "TEXT",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "subscriptionId",
|
||||||
|
"columnName": "subscriptionId",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "timestamp",
|
||||||
|
"columnName": "timestamp",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "message",
|
||||||
|
"columnName": "message",
|
||||||
|
"affinity": "TEXT",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "notificationId",
|
||||||
|
"columnName": "notificationId",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "deleted",
|
||||||
|
"columnName": "deleted",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"primaryKey": {
|
||||||
|
"columnNames": [
|
||||||
|
"id"
|
||||||
|
],
|
||||||
|
"autoGenerate": false
|
||||||
|
},
|
||||||
|
"indices": [],
|
||||||
|
"foreignKeys": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"views": [],
|
||||||
|
"setupQueries": [
|
||||||
|
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||||
|
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '7b0ef556331f6d2dd3515425837c3d3a')"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,15 +7,11 @@
|
||||||
- WAKE_LOCK & RECEIVE_BOOT_COMPLETED are required to restart the foreground service
|
- WAKE_LOCK & RECEIVE_BOOT_COMPLETED are required to restart the foreground service
|
||||||
if it is stopped; see https://robertohuertas.com/2019/06/29/android_foreground_services/
|
if it is stopped; see https://robertohuertas.com/2019/06/29/android_foreground_services/
|
||||||
-->
|
-->
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||||
|
|
||||||
<!--
|
|
||||||
Application
|
|
||||||
- usesCleartextTraffic is required to support "use another server" feature
|
|
||||||
-->
|
|
||||||
<application
|
<application
|
||||||
android:name=".app.Application"
|
android:name=".app.Application"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
@ -25,7 +21,6 @@
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme"
|
android:theme="@style/AppTheme"
|
||||||
android:usesCleartextTraffic="true">
|
android:usesCleartextTraffic="true">
|
||||||
|
|
||||||
<!-- Main activity -->
|
<!-- Main activity -->
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.MainActivity"
|
android:name=".ui.MainActivity"
|
||||||
|
@ -43,14 +38,16 @@
|
||||||
android:parentActivityName=".ui.MainActivity">
|
android:parentActivityName=".ui.MainActivity">
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="android.support.PARENT_ACTIVITY"
|
android:name="android.support.PARENT_ACTIVITY"
|
||||||
android:value=".ui.MainActivity" />
|
android:value=".ui.MainActivity"/>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<!-- Subscriber foreground service for hosts other than ntfy.sh -->
|
<!-- Subscriber foreground service for hosts other than ntfy.sh -->
|
||||||
<service android:name=".msg.SubscriberService" />
|
<service android:name=".msg.SubscriberService"/>
|
||||||
|
|
||||||
<!-- Subscriber service restart on reboot -->
|
<!-- Subscriber service restart on reboot -->
|
||||||
<receiver android:enabled="true" android:name=".msg.SubscriberService$StartReceiver">
|
<receiver
|
||||||
|
android:name=".msg.SubscriberService$StartReceiver"
|
||||||
|
android:enabled="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.BOOT_COMPLETED"/>
|
<action android:name="android.intent.action.BOOT_COMPLETED"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
@ -70,7 +67,7 @@
|
||||||
android:value="false"/>
|
android:value="false"/>
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="com.google.firebase.messaging.default_notification_icon"
|
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||||
android:resource="@drawable/ic_notification_icon"/>
|
android:resource="@drawable/ic_notification"/>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 49 KiB |
|
@ -1,6 +1,7 @@
|
||||||
package io.heckel.ntfy.app
|
package io.heckel.ntfy.app
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
|
import android.content.Context
|
||||||
import com.google.firebase.messaging.FirebaseMessagingService
|
import com.google.firebase.messaging.FirebaseMessagingService
|
||||||
import io.heckel.ntfy.data.Database
|
import io.heckel.ntfy.data.Database
|
||||||
import io.heckel.ntfy.data.Repository
|
import io.heckel.ntfy.data.Repository
|
||||||
|
@ -8,5 +9,8 @@ import io.heckel.ntfy.msg.ApiService
|
||||||
|
|
||||||
class Application : Application() {
|
class Application : Application() {
|
||||||
private val database by lazy { Database.getInstance(this) }
|
private val database by lazy { Database.getInstance(this) }
|
||||||
val repository by lazy { Repository.getInstance(database.subscriptionDao(), database.notificationDao()) }
|
val repository by lazy {
|
||||||
|
val sharedPrefs = applicationContext.getSharedPreferences(Repository.SHARED_PREFS_ID, Context.MODE_PRIVATE)
|
||||||
|
Repository.getInstance(sharedPrefs, database.subscriptionDao(), database.notificationDao())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import androidx.room.*
|
||||||
import androidx.room.migration.Migration
|
import androidx.room.migration.Migration
|
||||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
@Entity(indices = [Index(value = ["baseUrl", "topic"], unique = true)])
|
@Entity(indices = [Index(value = ["baseUrl", "topic"], unique = true)])
|
||||||
data class Subscription(
|
data class Subscription(
|
||||||
|
@ -12,12 +13,14 @@ data class Subscription(
|
||||||
@ColumnInfo(name = "baseUrl") val baseUrl: String,
|
@ColumnInfo(name = "baseUrl") val baseUrl: String,
|
||||||
@ColumnInfo(name = "topic") val topic: String,
|
@ColumnInfo(name = "topic") val topic: String,
|
||||||
@ColumnInfo(name = "instant") val instant: Boolean,
|
@ColumnInfo(name = "instant") val instant: Boolean,
|
||||||
|
@ColumnInfo(name = "mutedUntil") val mutedUntil: Long, // TODO notificationSound, notificationSchedule
|
||||||
@Ignore val totalCount: Int = 0, // Total notifications
|
@Ignore val totalCount: Int = 0, // Total notifications
|
||||||
@Ignore val newCount: Int = 0, // New notifications
|
@Ignore val newCount: Int = 0, // New notifications
|
||||||
@Ignore val lastActive: Long = 0, // Unix timestamp
|
@Ignore val lastActive: Long = 0, // Unix timestamp
|
||||||
@Ignore val state: ConnectionState = ConnectionState.NOT_APPLICABLE
|
@Ignore val state: ConnectionState = ConnectionState.NOT_APPLICABLE
|
||||||
) {
|
) {
|
||||||
constructor(id: Long, baseUrl: String, topic: String, instant: Boolean) : this(id, baseUrl, topic, instant, 0, 0, 0, ConnectionState.NOT_APPLICABLE)
|
constructor(id: Long, baseUrl: String, topic: String, instant: Boolean, mutedUntil: Long) :
|
||||||
|
this(id, baseUrl, topic, instant, mutedUntil, 0, 0, 0, ConnectionState.NOT_APPLICABLE)
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class ConnectionState {
|
enum class ConnectionState {
|
||||||
|
@ -29,6 +32,7 @@ data class SubscriptionWithMetadata(
|
||||||
val baseUrl: String,
|
val baseUrl: String,
|
||||||
val topic: String,
|
val topic: String,
|
||||||
val instant: Boolean,
|
val instant: Boolean,
|
||||||
|
val mutedUntil: Long,
|
||||||
val totalCount: Int,
|
val totalCount: Int,
|
||||||
val newCount: Int,
|
val newCount: Int,
|
||||||
val lastActive: Long
|
val lastActive: Long
|
||||||
|
@ -44,7 +48,7 @@ data class Notification(
|
||||||
@ColumnInfo(name = "deleted") val deleted: Boolean,
|
@ColumnInfo(name = "deleted") val deleted: Boolean,
|
||||||
)
|
)
|
||||||
|
|
||||||
@androidx.room.Database(entities = [Subscription::class, Notification::class], version = 2)
|
@androidx.room.Database(entities = [Subscription::class, Notification::class], version = 3)
|
||||||
abstract class Database : RoomDatabase() {
|
abstract class Database : RoomDatabase() {
|
||||||
abstract fun subscriptionDao(): SubscriptionDao
|
abstract fun subscriptionDao(): SubscriptionDao
|
||||||
abstract fun notificationDao(): NotificationDao
|
abstract fun notificationDao(): NotificationDao
|
||||||
|
@ -58,6 +62,7 @@ abstract class Database : RoomDatabase() {
|
||||||
val instance = Room
|
val instance = Room
|
||||||
.databaseBuilder(context.applicationContext, Database::class.java,"AppDatabase")
|
.databaseBuilder(context.applicationContext, Database::class.java,"AppDatabase")
|
||||||
.addMigrations(MIGRATION_1_2)
|
.addMigrations(MIGRATION_1_2)
|
||||||
|
.addMigrations(MIGRATION_2_3)
|
||||||
.fallbackToDestructiveMigration()
|
.fallbackToDestructiveMigration()
|
||||||
.build()
|
.build()
|
||||||
this.instance = instance
|
this.instance = instance
|
||||||
|
@ -79,6 +84,12 @@ abstract class Database : RoomDatabase() {
|
||||||
db.execSQL("ALTER TABLE Notification ADD COLUMN deleted INTEGER NOT NULL DEFAULT('0')")
|
db.execSQL("ALTER TABLE Notification ADD COLUMN deleted INTEGER NOT NULL DEFAULT('0')")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val MIGRATION_2_3 = object : Migration(2, 3) {
|
||||||
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
|
db.execSQL("ALTER TABLE Subscription ADD COLUMN mutedUntil INTEGER NOT NULL DEFAULT('0')")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +97,7 @@ abstract class Database : RoomDatabase() {
|
||||||
interface SubscriptionDao {
|
interface SubscriptionDao {
|
||||||
@Query("""
|
@Query("""
|
||||||
SELECT
|
SELECT
|
||||||
s.id, s.baseUrl, s.topic, s.instant,
|
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil,
|
||||||
COUNT(n.id) totalCount,
|
COUNT(n.id) totalCount,
|
||||||
COUNT(CASE n.notificationId WHEN 0 THEN NULL ELSE n.id END) newCount,
|
COUNT(CASE n.notificationId WHEN 0 THEN NULL ELSE n.id END) newCount,
|
||||||
IFNULL(MAX(n.timestamp),0) AS lastActive
|
IFNULL(MAX(n.timestamp),0) AS lastActive
|
||||||
|
@ -99,7 +110,7 @@ interface SubscriptionDao {
|
||||||
|
|
||||||
@Query("""
|
@Query("""
|
||||||
SELECT
|
SELECT
|
||||||
s.id, s.baseUrl, s.topic, s.instant,
|
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil,
|
||||||
COUNT(n.id) totalCount,
|
COUNT(n.id) totalCount,
|
||||||
COUNT(CASE n.notificationId WHEN 0 THEN NULL ELSE n.id END) newCount,
|
COUNT(CASE n.notificationId WHEN 0 THEN NULL ELSE n.id END) newCount,
|
||||||
IFNULL(MAX(n.timestamp),0) AS lastActive
|
IFNULL(MAX(n.timestamp),0) AS lastActive
|
||||||
|
@ -112,7 +123,7 @@ interface SubscriptionDao {
|
||||||
|
|
||||||
@Query("""
|
@Query("""
|
||||||
SELECT
|
SELECT
|
||||||
s.id, s.baseUrl, s.topic, s.instant,
|
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil,
|
||||||
COUNT(n.id) totalCount,
|
COUNT(n.id) totalCount,
|
||||||
COUNT(CASE n.notificationId WHEN 0 THEN NULL ELSE n.id END) newCount,
|
COUNT(CASE n.notificationId WHEN 0 THEN NULL ELSE n.id END) newCount,
|
||||||
IFNULL(MAX(n.timestamp),0) AS lastActive
|
IFNULL(MAX(n.timestamp),0) AS lastActive
|
||||||
|
@ -125,7 +136,7 @@ interface SubscriptionDao {
|
||||||
|
|
||||||
@Query("""
|
@Query("""
|
||||||
SELECT
|
SELECT
|
||||||
s.id, s.baseUrl, s.topic, s.instant,
|
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil,
|
||||||
COUNT(n.id) totalCount,
|
COUNT(n.id) totalCount,
|
||||||
COUNT(CASE n.notificationId WHEN 0 THEN NULL ELSE n.id END) newCount,
|
COUNT(CASE n.notificationId WHEN 0 THEN NULL ELSE n.id END) newCount,
|
||||||
IFNULL(MAX(n.timestamp),0) AS lastActive
|
IFNULL(MAX(n.timestamp),0) AS lastActive
|
||||||
|
@ -149,7 +160,7 @@ interface SubscriptionDao {
|
||||||
@Dao
|
@Dao
|
||||||
interface NotificationDao {
|
interface NotificationDao {
|
||||||
@Query("SELECT * FROM notification WHERE subscriptionId = :subscriptionId AND deleted != 1 ORDER BY timestamp DESC")
|
@Query("SELECT * FROM notification WHERE subscriptionId = :subscriptionId AND deleted != 1 ORDER BY timestamp DESC")
|
||||||
fun list(subscriptionId: Long): Flow<List<Notification>>
|
fun listFlow(subscriptionId: Long): Flow<List<Notification>>
|
||||||
|
|
||||||
@Query("SELECT id FROM notification WHERE subscriptionId = :subscriptionId") // Includes deleted
|
@Query("SELECT id FROM notification WHERE subscriptionId = :subscriptionId") // Includes deleted
|
||||||
fun listIds(subscriptionId: Long): List<String>
|
fun listIds(subscriptionId: Long): List<String>
|
||||||
|
@ -160,6 +171,9 @@ interface NotificationDao {
|
||||||
@Query("SELECT * FROM notification WHERE id = :notificationId")
|
@Query("SELECT * FROM notification WHERE id = :notificationId")
|
||||||
fun get(notificationId: String): Notification?
|
fun get(notificationId: String): Notification?
|
||||||
|
|
||||||
|
@Query("UPDATE notification SET notificationId = 0 WHERE subscriptionId = :subscriptionId")
|
||||||
|
fun clearAllNotificationIds(subscriptionId: Long)
|
||||||
|
|
||||||
@Update
|
@Update
|
||||||
fun update(notification: Notification)
|
fun update(notification: Notification)
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
package io.heckel.ntfy.data
|
package io.heckel.ntfy.data
|
||||||
|
|
||||||
|
import android.content.SharedPreferences
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.annotation.WorkerThread
|
import androidx.annotation.WorkerThread
|
||||||
import androidx.lifecycle.*
|
import androidx.lifecycle.*
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
import java.util.concurrent.atomic.AtomicLong
|
import java.util.concurrent.atomic.AtomicLong
|
||||||
|
|
||||||
class Repository(private val subscriptionDao: SubscriptionDao, private val notificationDao: NotificationDao) {
|
class Repository(private val sharedPrefs: SharedPreferences, private val subscriptionDao: SubscriptionDao, private val notificationDao: NotificationDao) {
|
||||||
private val connectionStates = ConcurrentHashMap<Long, ConnectionState>()
|
private val connectionStates = ConcurrentHashMap<Long, ConnectionState>()
|
||||||
private val connectionStatesLiveData = MutableLiveData(connectionStates)
|
private val connectionStatesLiveData = MutableLiveData(connectionStates)
|
||||||
val detailViewSubscriptionId = AtomicLong(0L) // Omg, what a hack ...
|
val detailViewSubscriptionId = AtomicLong(0L) // Omg, what a hack ...
|
||||||
|
@ -66,7 +67,11 @@ class Repository(private val subscriptionDao: SubscriptionDao, private val notif
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getNotificationsLiveData(subscriptionId: Long): LiveData<List<Notification>> {
|
fun getNotificationsLiveData(subscriptionId: Long): LiveData<List<Notification>> {
|
||||||
return notificationDao.list(subscriptionId).asLiveData()
|
return notificationDao.listFlow(subscriptionId).asLiveData()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun clearAllNotificationIds(subscriptionId: Long) {
|
||||||
|
return notificationDao.clearAllNotificationIds(subscriptionId)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getNotification(notificationId: String): Notification? {
|
fun getNotification(notificationId: String): Notification? {
|
||||||
|
@ -84,11 +89,17 @@ class Repository(private val subscriptionDao: SubscriptionDao, private val notif
|
||||||
val maybeExistingNotification = notificationDao.get(notification.id)
|
val maybeExistingNotification = notificationDao.get(notification.id)
|
||||||
if (maybeExistingNotification == null) {
|
if (maybeExistingNotification == null) {
|
||||||
notificationDao.add(notification)
|
notificationDao.add(notification)
|
||||||
return true
|
return shouldNotify(notification)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private suspend fun shouldNotify(notification: Notification): Boolean {
|
||||||
|
val detailViewOpen = detailViewSubscriptionId.get() == notification.subscriptionId
|
||||||
|
val muted = isMuted(notification.subscriptionId)
|
||||||
|
return !detailViewOpen && !muted
|
||||||
|
}
|
||||||
|
|
||||||
fun updateNotification(notification: Notification) {
|
fun updateNotification(notification: Notification) {
|
||||||
notificationDao.update(notification)
|
notificationDao.update(notification)
|
||||||
}
|
}
|
||||||
|
@ -105,6 +116,51 @@ class Repository(private val subscriptionDao: SubscriptionDao, private val notif
|
||||||
notificationDao.removeAll(subscriptionId)
|
notificationDao.removeAll(subscriptionId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getPollWorkerVersion(): Int {
|
||||||
|
return sharedPrefs.getInt(SHARED_PREFS_POLL_WORKER_VERSION, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setPollWorkerVersion(version: Int) {
|
||||||
|
sharedPrefs.edit()
|
||||||
|
.putInt(SHARED_PREFS_POLL_WORKER_VERSION, version)
|
||||||
|
.apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun isMuted(subscriptionId: Long): Boolean {
|
||||||
|
if (isGlobalMuted()) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
val s = getSubscription(subscriptionId) ?: return true
|
||||||
|
return s.mutedUntil == 1L || (s.mutedUntil > 1L && s.mutedUntil > System.currentTimeMillis()/1000)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun isGlobalMuted(): Boolean {
|
||||||
|
val mutedUntil = getGlobalMutedUntil()
|
||||||
|
return mutedUntil == 1L || (mutedUntil > 1L && mutedUntil > System.currentTimeMillis()/1000)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getGlobalMutedUntil(): Long {
|
||||||
|
return sharedPrefs.getLong(SHARED_PREFS_MUTED_UNTIL_TIMESTAMP, 0L)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setGlobalMutedUntil(mutedUntilTimestamp: Long) {
|
||||||
|
sharedPrefs.edit()
|
||||||
|
.putLong(SHARED_PREFS_MUTED_UNTIL_TIMESTAMP, mutedUntilTimestamp)
|
||||||
|
.apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun checkGlobalMutedUntil(): Boolean {
|
||||||
|
val mutedUntil = sharedPrefs.getLong(SHARED_PREFS_MUTED_UNTIL_TIMESTAMP, 0L)
|
||||||
|
val expired = mutedUntil > 1L && System.currentTimeMillis()/1000 > mutedUntil
|
||||||
|
if (expired) {
|
||||||
|
sharedPrefs.edit()
|
||||||
|
.putLong(SHARED_PREFS_MUTED_UNTIL_TIMESTAMP, 0L)
|
||||||
|
.apply()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
private fun toSubscriptionList(list: List<SubscriptionWithMetadata>): List<Subscription> {
|
private fun toSubscriptionList(list: List<SubscriptionWithMetadata>): List<Subscription> {
|
||||||
return list.map { s ->
|
return list.map { s ->
|
||||||
val connectionState = connectionStates.getOrElse(s.id) { ConnectionState.NOT_APPLICABLE }
|
val connectionState = connectionStates.getOrElse(s.id) { ConnectionState.NOT_APPLICABLE }
|
||||||
|
@ -113,6 +169,7 @@ class Repository(private val subscriptionDao: SubscriptionDao, private val notif
|
||||||
baseUrl = s.baseUrl,
|
baseUrl = s.baseUrl,
|
||||||
topic = s.topic,
|
topic = s.topic,
|
||||||
instant = s.instant,
|
instant = s.instant,
|
||||||
|
mutedUntil = s.mutedUntil,
|
||||||
totalCount = s.totalCount,
|
totalCount = s.totalCount,
|
||||||
newCount = s.newCount,
|
newCount = s.newCount,
|
||||||
lastActive = s.lastActive,
|
lastActive = s.lastActive,
|
||||||
|
@ -130,6 +187,7 @@ class Repository(private val subscriptionDao: SubscriptionDao, private val notif
|
||||||
baseUrl = s.baseUrl,
|
baseUrl = s.baseUrl,
|
||||||
topic = s.topic,
|
topic = s.topic,
|
||||||
instant = s.instant,
|
instant = s.instant,
|
||||||
|
mutedUntil = s.mutedUntil,
|
||||||
totalCount = s.totalCount,
|
totalCount = s.totalCount,
|
||||||
newCount = s.newCount,
|
newCount = s.newCount,
|
||||||
lastActive = s.lastActive,
|
lastActive = s.lastActive,
|
||||||
|
@ -160,12 +218,16 @@ class Repository(private val subscriptionDao: SubscriptionDao, private val notif
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
const val SHARED_PREFS_ID = "MainPreferences"
|
||||||
|
const val SHARED_PREFS_POLL_WORKER_VERSION = "PollWorkerVersion"
|
||||||
|
const val SHARED_PREFS_MUTED_UNTIL_TIMESTAMP = "MutedUntil"
|
||||||
|
|
||||||
private const val TAG = "NtfyRepository"
|
private const val TAG = "NtfyRepository"
|
||||||
private var instance: Repository? = null
|
private var instance: Repository? = null
|
||||||
|
|
||||||
fun getInstance(subscriptionDao: SubscriptionDao, notificationDao: NotificationDao): Repository {
|
fun getInstance(sharedPrefs: SharedPreferences, subscriptionDao: SubscriptionDao, notificationDao: NotificationDao): Repository {
|
||||||
return synchronized(Repository::class) {
|
return synchronized(Repository::class) {
|
||||||
val newInstance = instance ?: Repository(subscriptionDao, notificationDao)
|
val newInstance = instance ?: Repository(sharedPrefs, subscriptionDao, notificationDao)
|
||||||
instance = newInstance
|
instance = newInstance
|
||||||
newInstance
|
newInstance
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,3 +7,4 @@ fun topicShortUrl(baseUrl: String, topic: String) =
|
||||||
topicUrl(baseUrl, topic)
|
topicUrl(baseUrl, topic)
|
||||||
.replace("http://", "")
|
.replace("http://", "")
|
||||||
.replace("https://", "")
|
.replace("https://", "")
|
||||||
|
|
||||||
|
|
|
@ -48,11 +48,10 @@ class FirebaseService : FirebaseMessagingService() {
|
||||||
notificationId = Random.nextInt(),
|
notificationId = Random.nextInt(),
|
||||||
deleted = false
|
deleted = false
|
||||||
)
|
)
|
||||||
val added = repository.addNotification(notification)
|
val shouldNotify = repository.addNotification(notification)
|
||||||
val detailViewOpen = repository.detailViewSubscriptionId.get() == subscription.id
|
|
||||||
|
|
||||||
// Send notification (only if it's not already known)
|
// Send notification (only if it's not already known)
|
||||||
if (added && !detailViewOpen) {
|
if (shouldNotify) {
|
||||||
Log.d(TAG, "Sending notification for message: from=${remoteMessage.from}, data=${data}")
|
Log.d(TAG, "Sending notification for message: from=${remoteMessage.from}, data=${data}")
|
||||||
notifier.send(subscription, notification)
|
notifier.send(subscription, notification)
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import android.media.RingtoneManager
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import io.heckel.ntfy.R
|
import io.heckel.ntfy.R
|
||||||
import io.heckel.ntfy.data.Notification
|
import io.heckel.ntfy.data.Notification
|
||||||
import io.heckel.ntfy.data.Subscription
|
import io.heckel.ntfy.data.Subscription
|
||||||
|
@ -29,6 +30,7 @@ class NotificationService(val context: Context) {
|
||||||
intent.putExtra(MainActivity.EXTRA_SUBSCRIPTION_BASE_URL, subscription.baseUrl)
|
intent.putExtra(MainActivity.EXTRA_SUBSCRIPTION_BASE_URL, subscription.baseUrl)
|
||||||
intent.putExtra(MainActivity.EXTRA_SUBSCRIPTION_TOPIC, subscription.topic)
|
intent.putExtra(MainActivity.EXTRA_SUBSCRIPTION_TOPIC, subscription.topic)
|
||||||
intent.putExtra(MainActivity.EXTRA_SUBSCRIPTION_INSTANT, subscription.instant)
|
intent.putExtra(MainActivity.EXTRA_SUBSCRIPTION_INSTANT, subscription.instant)
|
||||||
|
intent.putExtra(MainActivity.EXTRA_SUBSCRIPTION_MUTED_UNTIL, subscription.mutedUntil)
|
||||||
val pendingIntent: PendingIntent? = TaskStackBuilder.create(context).run {
|
val pendingIntent: PendingIntent? = TaskStackBuilder.create(context).run {
|
||||||
addNextIntentWithParentStack(intent) // Add the intent, which inflates the back stack
|
addNextIntentWithParentStack(intent) // Add the intent, which inflates the back stack
|
||||||
getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT) // Get the PendingIntent containing the entire back stack
|
getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT) // Get the PendingIntent containing the entire back stack
|
||||||
|
@ -36,9 +38,11 @@ class NotificationService(val context: Context) {
|
||||||
|
|
||||||
val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
|
val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
|
||||||
val notificationBuilder = NotificationCompat.Builder(context, CHANNEL_ID)
|
val notificationBuilder = NotificationCompat.Builder(context, CHANNEL_ID)
|
||||||
.setSmallIcon(R.drawable.ic_notification_icon)
|
.setSmallIcon(R.drawable.ic_notification)
|
||||||
|
.setColor(ContextCompat.getColor(context, R.color.primaryColor))
|
||||||
.setContentTitle(title)
|
.setContentTitle(title)
|
||||||
.setContentText(notification.message)
|
.setContentText(notification.message)
|
||||||
|
.setStyle(NotificationCompat.BigTextStyle().bigText(notification.message))
|
||||||
.setSound(defaultSoundUri)
|
.setSound(defaultSoundUri)
|
||||||
.setContentIntent(pendingIntent) // Click target for notification
|
.setContentIntent(pendingIntent) // Click target for notification
|
||||||
.setAutoCancel(true) // Cancel when notification is clicked
|
.setAutoCancel(true) // Cancel when notification is clicked
|
||||||
|
|
|
@ -10,6 +10,7 @@ import android.os.PowerManager
|
||||||
import android.os.SystemClock
|
import android.os.SystemClock
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import io.heckel.ntfy.R
|
import io.heckel.ntfy.R
|
||||||
import io.heckel.ntfy.app.Application
|
import io.heckel.ntfy.app.Application
|
||||||
import io.heckel.ntfy.data.ConnectionState
|
import io.heckel.ntfy.data.ConnectionState
|
||||||
|
@ -174,10 +175,8 @@ class SubscriberService : Service() {
|
||||||
val url = topicUrl(subscription.baseUrl, subscription.topic)
|
val url = topicUrl(subscription.baseUrl, subscription.topic)
|
||||||
Log.d(TAG, "[$url] Received notification: $n")
|
Log.d(TAG, "[$url] Received notification: $n")
|
||||||
GlobalScope.launch(Dispatchers.IO) {
|
GlobalScope.launch(Dispatchers.IO) {
|
||||||
val added = repository.addNotification(n)
|
val shouldNotify = repository.addNotification(n)
|
||||||
val detailViewOpen = repository.detailViewSubscriptionId.get() == subscription.id
|
if (shouldNotify) {
|
||||||
|
|
||||||
if (added && !detailViewOpen) {
|
|
||||||
Log.d(TAG, "[$url] Showing notification: $n")
|
Log.d(TAG, "[$url] Showing notification: $n")
|
||||||
notifier.send(subscription, n)
|
notifier.send(subscription, n)
|
||||||
}
|
}
|
||||||
|
@ -204,6 +203,7 @@ class SubscriberService : Service() {
|
||||||
}
|
}
|
||||||
return NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
|
return NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
|
||||||
.setSmallIcon(R.drawable.ic_notification_instant)
|
.setSmallIcon(R.drawable.ic_notification_instant)
|
||||||
|
.setColor(ContextCompat.getColor(this, R.color.primaryColor))
|
||||||
.setContentTitle(title)
|
.setContentTitle(title)
|
||||||
.setContentText(text)
|
.setContentText(text)
|
||||||
.setContentIntent(pendingIntent)
|
.setContentIntent(pendingIntent)
|
||||||
|
|
|
@ -6,7 +6,6 @@ import android.content.Context
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.text.Editable
|
import android.text.Editable
|
||||||
import android.text.TextWatcher
|
import android.text.TextWatcher
|
||||||
import android.util.Log
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import android.widget.CheckBox
|
import android.widget.CheckBox
|
||||||
|
@ -47,11 +46,12 @@ class AddFragment : DialogFragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dependencies
|
// Dependencies
|
||||||
val database = Database.getInstance(activity!!.applicationContext)
|
val database = Database.getInstance(requireActivity().applicationContext)
|
||||||
repository = Repository.getInstance(database.subscriptionDao(), database.notificationDao())
|
val sharedPrefs = requireActivity().getSharedPreferences(Repository.SHARED_PREFS_ID, Context.MODE_PRIVATE)
|
||||||
|
repository = Repository.getInstance(sharedPrefs, database.subscriptionDao(), database.notificationDao())
|
||||||
|
|
||||||
// Build root view
|
// Build root view
|
||||||
val view = requireActivity().layoutInflater.inflate(R.layout.add_dialog_fragment, null)
|
val view = requireActivity().layoutInflater.inflate(R.layout.fragment_add_dialog, null)
|
||||||
topicNameText = view.findViewById(R.id.add_dialog_topic_text) as TextInputEditText
|
topicNameText = view.findViewById(R.id.add_dialog_topic_text) as TextInputEditText
|
||||||
baseUrlText = view.findViewById(R.id.add_dialog_base_url_text) as TextInputEditText
|
baseUrlText = view.findViewById(R.id.add_dialog_base_url_text) as TextInputEditText
|
||||||
instantDeliveryBox = view.findViewById(R.id.add_dialog_instant_delivery_box)
|
instantDeliveryBox = view.findViewById(R.id.add_dialog_instant_delivery_box)
|
||||||
|
|
|
@ -27,13 +27,11 @@ import io.heckel.ntfy.data.topicShortUrl
|
||||||
import io.heckel.ntfy.data.topicUrl
|
import io.heckel.ntfy.data.topicUrl
|
||||||
import io.heckel.ntfy.msg.ApiService
|
import io.heckel.ntfy.msg.ApiService
|
||||||
import io.heckel.ntfy.msg.NotificationService
|
import io.heckel.ntfy.msg.NotificationService
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.delay
|
import java.text.DateFormat
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.atomic.AtomicLong
|
|
||||||
|
|
||||||
class DetailActivity : AppCompatActivity(), ActionMode.Callback {
|
class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFragment.NotificationSettingsListener {
|
||||||
private val viewModel by viewModels<DetailViewModel> {
|
private val viewModel by viewModels<DetailViewModel> {
|
||||||
DetailViewModelFactory((application as Application).repository)
|
DetailViewModelFactory((application as Application).repository)
|
||||||
}
|
}
|
||||||
|
@ -47,6 +45,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback {
|
||||||
private var subscriptionBaseUrl: String = "" // Set in onCreate()
|
private var subscriptionBaseUrl: String = "" // Set in onCreate()
|
||||||
private var subscriptionTopic: String = "" // Set in onCreate()
|
private var subscriptionTopic: String = "" // Set in onCreate()
|
||||||
private var subscriptionInstant: Boolean = false // Set in onCreate() & updated by options menu!
|
private var subscriptionInstant: Boolean = false // Set in onCreate() & updated by options menu!
|
||||||
|
private var subscriptionMutedUntil: Long = 0L // Set in onCreate() & updated by options menu!
|
||||||
|
|
||||||
// UI elements
|
// UI elements
|
||||||
private lateinit var adapter: DetailAdapter
|
private lateinit var adapter: DetailAdapter
|
||||||
|
@ -59,7 +58,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback {
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.detail_activity)
|
setContentView(R.layout.activity_detail)
|
||||||
|
|
||||||
Log.d(MainActivity.TAG, "Create $this")
|
Log.d(MainActivity.TAG, "Create $this")
|
||||||
|
|
||||||
|
@ -75,6 +74,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback {
|
||||||
subscriptionBaseUrl = intent.getStringExtra(MainActivity.EXTRA_SUBSCRIPTION_BASE_URL) ?: return
|
subscriptionBaseUrl = intent.getStringExtra(MainActivity.EXTRA_SUBSCRIPTION_BASE_URL) ?: return
|
||||||
subscriptionTopic = intent.getStringExtra(MainActivity.EXTRA_SUBSCRIPTION_TOPIC) ?: return
|
subscriptionTopic = intent.getStringExtra(MainActivity.EXTRA_SUBSCRIPTION_TOPIC) ?: return
|
||||||
subscriptionInstant = intent.getBooleanExtra(MainActivity.EXTRA_SUBSCRIPTION_INSTANT, false)
|
subscriptionInstant = intent.getBooleanExtra(MainActivity.EXTRA_SUBSCRIPTION_INSTANT, false)
|
||||||
|
subscriptionMutedUntil = intent.getLongExtra(MainActivity.EXTRA_SUBSCRIPTION_MUTED_UNTIL, 0L)
|
||||||
|
|
||||||
// Set title
|
// Set title
|
||||||
val subscriptionBaseUrl = intent.getStringExtra(MainActivity.EXTRA_SUBSCRIPTION_BASE_URL) ?: return
|
val subscriptionBaseUrl = intent.getStringExtra(MainActivity.EXTRA_SUBSCRIPTION_BASE_URL) ?: return
|
||||||
|
@ -152,41 +152,78 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback {
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
Log.d(TAG, "onResume hook: Marking subscription $subscriptionId as 'not open'")
|
Log.d(TAG, "onPause hook: Removing 'notificationId' from all notifications for $subscriptionId")
|
||||||
|
GlobalScope.launch(Dispatchers.IO) {
|
||||||
|
// Note: This is here and not in onDestroy/onStop, because we want to clear notifications as early
|
||||||
|
// as possible, so that we don't see the "new" bubble in the main list anymore.
|
||||||
|
repository.clearAllNotificationIds(subscriptionId)
|
||||||
|
}
|
||||||
|
Log.d(TAG, "onPause hook: Marking subscription $subscriptionId as 'not open'")
|
||||||
repository.detailViewSubscriptionId.set(0) // Mark as closed
|
repository.detailViewSubscriptionId.set(0) // Mark as closed
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
|
||||||
repository.detailViewSubscriptionId.set(0) // Mark as closed
|
|
||||||
Log.d(TAG, "onDestroy hook: Marking subscription $subscriptionId as 'not open'")
|
|
||||||
super.onDestroy()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun maybeCancelNotificationPopups(notifications: List<Notification>) {
|
private fun maybeCancelNotificationPopups(notifications: List<Notification>) {
|
||||||
val notificationsWithPopups = notifications.filter { notification -> notification.notificationId != 0 }
|
val notificationsWithPopups = notifications.filter { notification -> notification.notificationId != 0 }
|
||||||
if (notificationsWithPopups.isNotEmpty()) {
|
if (notificationsWithPopups.isNotEmpty()) {
|
||||||
lifecycleScope.launch(Dispatchers.IO) {
|
lifecycleScope.launch(Dispatchers.IO) {
|
||||||
notificationsWithPopups.forEach { notification ->
|
notificationsWithPopups.forEach { notification ->
|
||||||
notifier?.cancel(notification)
|
notifier?.cancel(notification)
|
||||||
repository.updateNotification(notification.copy(notificationId = 0))
|
// Do NOT remove the notificationId here, we need that for the UI indicators; we'll remove it in onPause()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
menuInflater.inflate(R.menu.detail_action_bar_menu, menu)
|
menuInflater.inflate(R.menu.menu_detail_action_bar, menu)
|
||||||
this.menu = menu
|
this.menu = menu
|
||||||
|
|
||||||
|
// Show and hide buttons
|
||||||
showHideInstantMenuItems(subscriptionInstant)
|
showHideInstantMenuItems(subscriptionInstant)
|
||||||
|
showHideNotificationMenuItems(subscriptionMutedUntil)
|
||||||
|
|
||||||
|
// Regularly check if "notification muted" time has passed
|
||||||
|
// NOTE: This is done here, because then we know that we've initialized the menu items.
|
||||||
|
startNotificationMutedChecker()
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun startNotificationMutedChecker() {
|
||||||
|
lifecycleScope.launch(Dispatchers.IO) {
|
||||||
|
delay(1000) // Just to be sure we've initialized all the things, we wait a bit ...
|
||||||
|
while (isActive) {
|
||||||
|
Log.d(TAG, "Checking 'muted until' timestamp for subscription $subscriptionId")
|
||||||
|
val subscription = repository.getSubscription(subscriptionId) ?: return@launch
|
||||||
|
val mutedUntilExpired = subscription.mutedUntil > 1L && System.currentTimeMillis()/1000 > subscription.mutedUntil
|
||||||
|
if (mutedUntilExpired) {
|
||||||
|
val newSubscription = subscription.copy(mutedUntil = 0L)
|
||||||
|
repository.updateSubscription(newSubscription)
|
||||||
|
showHideNotificationMenuItems(0L)
|
||||||
|
}
|
||||||
|
delay(60_000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
return when (item.itemId) {
|
return when (item.itemId) {
|
||||||
R.id.detail_menu_test -> {
|
R.id.detail_menu_test -> {
|
||||||
onTestClick()
|
onTestClick()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
R.id.detail_menu_notifications_enabled -> {
|
||||||
|
onNotificationSettingsClick(enable = false)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.detail_menu_notifications_disabled_until -> {
|
||||||
|
onNotificationSettingsClick(enable = true)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.detail_menu_notifications_disabled_forever -> {
|
||||||
|
onNotificationSettingsClick(enable = true)
|
||||||
|
true
|
||||||
|
}
|
||||||
R.id.detail_menu_enable_instant -> {
|
R.id.detail_menu_enable_instant -> {
|
||||||
onInstantEnableClick(enable = true)
|
onInstantEnableClick(enable = true)
|
||||||
true
|
true
|
||||||
|
@ -228,6 +265,37 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun onNotificationSettingsClick(enable: Boolean) {
|
||||||
|
if (!enable) {
|
||||||
|
Log.d(TAG, "Showing notification settings dialog for ${topicShortUrl(subscriptionBaseUrl, subscriptionTopic)}")
|
||||||
|
val notificationFragment = NotificationFragment()
|
||||||
|
notificationFragment.show(supportFragmentManager, NotificationFragment.TAG)
|
||||||
|
} else {
|
||||||
|
Log.d(TAG, "Re-enabling notifications ${topicShortUrl(subscriptionBaseUrl, subscriptionTopic)}")
|
||||||
|
onNotificationMutedUntilChanged(0L)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onNotificationMutedUntilChanged(mutedUntilTimestamp: Long) {
|
||||||
|
lifecycleScope.launch(Dispatchers.IO) {
|
||||||
|
val subscription = repository.getSubscription(subscriptionId)
|
||||||
|
val newSubscription = subscription?.copy(mutedUntil = mutedUntilTimestamp)
|
||||||
|
newSubscription?.let { repository.updateSubscription(newSubscription) }
|
||||||
|
subscriptionMutedUntil = mutedUntilTimestamp
|
||||||
|
showHideNotificationMenuItems(mutedUntilTimestamp)
|
||||||
|
runOnUiThread {
|
||||||
|
when (mutedUntilTimestamp) {
|
||||||
|
0L -> Toast.makeText(this@DetailActivity, getString(R.string.notification_dialog_enabled_toast_message), Toast.LENGTH_LONG).show()
|
||||||
|
1L -> Toast.makeText(this@DetailActivity, getString(R.string.notification_dialog_muted_forever_toast_message), Toast.LENGTH_LONG).show()
|
||||||
|
else -> {
|
||||||
|
val formattedDate = formatDateShort(mutedUntilTimestamp)
|
||||||
|
Toast.makeText(this@DetailActivity, getString(R.string.notification_dialog_muted_until_toast_message, formattedDate), Toast.LENGTH_LONG).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun onCopyUrlClick() {
|
private fun onCopyUrlClick() {
|
||||||
val url = topicUrl(subscriptionBaseUrl, subscriptionTopic)
|
val url = topicUrl(subscriptionBaseUrl, subscriptionTopic)
|
||||||
Log.d(TAG, "Copying topic URL $url to clipboard ")
|
Log.d(TAG, "Copying topic URL $url to clipboard ")
|
||||||
|
@ -316,6 +384,23 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun showHideNotificationMenuItems(mutedUntilTimestamp: Long) {
|
||||||
|
subscriptionMutedUntil = mutedUntilTimestamp
|
||||||
|
runOnUiThread {
|
||||||
|
val notificationsEnabledItem = menu.findItem(R.id.detail_menu_notifications_enabled)
|
||||||
|
val notificationsDisabledUntilItem = menu.findItem(R.id.detail_menu_notifications_disabled_until)
|
||||||
|
val notificationsDisabledForeverItem = menu.findItem(R.id.detail_menu_notifications_disabled_forever)
|
||||||
|
notificationsEnabledItem?.isVisible = subscriptionMutedUntil == 0L
|
||||||
|
notificationsDisabledForeverItem?.isVisible = subscriptionMutedUntil == 1L
|
||||||
|
notificationsDisabledUntilItem?.isVisible = subscriptionMutedUntil > 1L
|
||||||
|
if (subscriptionMutedUntil > 1L) {
|
||||||
|
val formattedDate = formatDateShort(subscriptionMutedUntil)
|
||||||
|
notificationsDisabledUntilItem?.title = getString(R.string.detail_menu_notifications_disabled_until, formattedDate)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun onDeleteClick() {
|
private fun onDeleteClick() {
|
||||||
Log.d(TAG, "Deleting subscription ${topicShortUrl(subscriptionBaseUrl, subscriptionTopic)}")
|
Log.d(TAG, "Deleting subscription ${topicShortUrl(subscriptionBaseUrl, subscriptionTopic)}")
|
||||||
|
|
||||||
|
@ -329,6 +414,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback {
|
||||||
.putExtra(MainActivity.EXTRA_SUBSCRIPTION_BASE_URL, subscriptionBaseUrl)
|
.putExtra(MainActivity.EXTRA_SUBSCRIPTION_BASE_URL, subscriptionBaseUrl)
|
||||||
.putExtra(MainActivity.EXTRA_SUBSCRIPTION_TOPIC, subscriptionTopic)
|
.putExtra(MainActivity.EXTRA_SUBSCRIPTION_TOPIC, subscriptionTopic)
|
||||||
.putExtra(MainActivity.EXTRA_SUBSCRIPTION_INSTANT, subscriptionInstant)
|
.putExtra(MainActivity.EXTRA_SUBSCRIPTION_INSTANT, subscriptionInstant)
|
||||||
|
.putExtra(MainActivity.EXTRA_SUBSCRIPTION_MUTED_UNTIL, subscriptionMutedUntil)
|
||||||
setResult(RESULT_OK, result)
|
setResult(RESULT_OK, result)
|
||||||
finish()
|
finish()
|
||||||
|
|
||||||
|
@ -378,7 +464,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback {
|
||||||
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
|
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
|
||||||
this.actionMode = mode
|
this.actionMode = mode
|
||||||
if (mode != null) {
|
if (mode != null) {
|
||||||
mode.menuInflater.inflate(R.menu.detail_action_mode_menu, menu)
|
mode.menuInflater.inflate(R.menu.menu_detail_action_mode, menu)
|
||||||
mode.title = "1" // One item selected
|
mode.title = "1" // One item selected
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
@ -478,6 +564,5 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val TAG = "NtfyDetailActivity"
|
const val TAG = "NtfyDetailActivity"
|
||||||
const val CANCEL_NOTIFICATION_DELAY_MILLIS = 20_000L
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ class DetailAdapter(private val onClick: (Notification) -> Unit, private val onL
|
||||||
/* Creates and inflates view and return TopicViewHolder. */
|
/* Creates and inflates view and return TopicViewHolder. */
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DetailViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DetailViewHolder {
|
||||||
val view = LayoutInflater.from(parent.context)
|
val view = LayoutInflater.from(parent.context)
|
||||||
.inflate(R.layout.detail_fragment_item, parent, false)
|
.inflate(R.layout.fragment_detail_item, parent, false)
|
||||||
return DetailViewHolder(view, selected, onClick, onLongClick)
|
return DetailViewHolder(view, selected, onClick, onLongClick)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,11 +41,13 @@ class DetailAdapter(private val onClick: (Notification) -> Unit, private val onL
|
||||||
private var notification: Notification? = null
|
private var notification: Notification? = null
|
||||||
private val dateView: TextView = itemView.findViewById(R.id.detail_item_date_text)
|
private val dateView: TextView = itemView.findViewById(R.id.detail_item_date_text)
|
||||||
private val messageView: TextView = itemView.findViewById(R.id.detail_item_message_text)
|
private val messageView: TextView = itemView.findViewById(R.id.detail_item_message_text)
|
||||||
|
private val newImageView: View = itemView.findViewById(R.id.detail_item_new)
|
||||||
|
|
||||||
fun bind(notification: Notification) {
|
fun bind(notification: Notification) {
|
||||||
this.notification = notification
|
this.notification = notification
|
||||||
dateView.text = Date(notification.timestamp * 1000).toString()
|
dateView.text = Date(notification.timestamp * 1000).toString()
|
||||||
messageView.text = notification.message
|
messageView.text = notification.message
|
||||||
|
newImageView.visibility = if (notification.notificationId == 0) View.GONE else View.VISIBLE
|
||||||
itemView.setOnClickListener { onClick(notification) }
|
itemView.setOnClickListener { onClick(notification) }
|
||||||
itemView.setOnLongClickListener { onLongClick(notification); true }
|
itemView.setOnLongClickListener { onLongClick(notification); true }
|
||||||
if (selected.contains(notification.id)) {
|
if (selected.contains(notification.id)) {
|
||||||
|
|
|
@ -3,7 +3,6 @@ package io.heckel.ntfy.ui
|
||||||
import android.animation.Animator
|
import android.animation.Animator
|
||||||
import android.animation.AnimatorListenerAdapter
|
import android.animation.AnimatorListenerAdapter
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
@ -29,23 +28,28 @@ import io.heckel.ntfy.msg.ApiService
|
||||||
import io.heckel.ntfy.msg.NotificationService
|
import io.heckel.ntfy.msg.NotificationService
|
||||||
import io.heckel.ntfy.work.PollWorker
|
import io.heckel.ntfy.work.PollWorker
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.isActive
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
|
||||||
|
class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.SubscribeListener, NotificationFragment.NotificationSettingsListener {
|
||||||
class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.SubscribeListener {
|
|
||||||
private val viewModel by viewModels<SubscriptionsViewModel> {
|
private val viewModel by viewModels<SubscriptionsViewModel> {
|
||||||
SubscriptionsViewModelFactory((application as Application).repository)
|
SubscriptionsViewModelFactory((application as Application).repository)
|
||||||
}
|
}
|
||||||
private val repository by lazy { (application as Application).repository }
|
private val repository by lazy { (application as Application).repository }
|
||||||
private val api = ApiService()
|
private val api = ApiService()
|
||||||
|
|
||||||
|
// UI elements
|
||||||
|
private lateinit var menu: Menu
|
||||||
private lateinit var mainList: RecyclerView
|
private lateinit var mainList: RecyclerView
|
||||||
private lateinit var mainListContainer: SwipeRefreshLayout
|
private lateinit var mainListContainer: SwipeRefreshLayout
|
||||||
private lateinit var adapter: MainAdapter
|
private lateinit var adapter: MainAdapter
|
||||||
private lateinit var fab: View
|
private lateinit var fab: View
|
||||||
|
|
||||||
|
// Other stuff
|
||||||
private var actionMode: ActionMode? = null
|
private var actionMode: ActionMode? = null
|
||||||
private var workManager: WorkManager? = null // Context-dependent
|
private var workManager: WorkManager? = null // Context-dependent
|
||||||
private var notifier: NotificationService? = null // Context-dependent
|
private var notifier: NotificationService? = null // Context-dependent
|
||||||
|
@ -54,7 +58,7 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.main_activity)
|
setContentView(R.layout.activity_main)
|
||||||
|
|
||||||
Log.d(TAG, "Create $this")
|
Log.d(TAG, "Create $this")
|
||||||
|
|
||||||
|
@ -110,15 +114,13 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun startPeriodicWorker() {
|
private fun startPeriodicWorker() {
|
||||||
val sharedPrefs = getSharedPreferences(SHARED_PREFS_ID, Context.MODE_PRIVATE)
|
val pollWorkerVersion = repository.getPollWorkerVersion()
|
||||||
val workPolicy = if (sharedPrefs.getInt(SHARED_PREFS_POLL_WORKER_VERSION, 0) == PollWorker.VERSION) {
|
val workPolicy = if (pollWorkerVersion == PollWorker.VERSION) {
|
||||||
Log.d(TAG, "Poll worker version matches: choosing KEEP as existing work policy")
|
Log.d(TAG, "Poll worker version matches: choosing KEEP as existing work policy")
|
||||||
ExistingPeriodicWorkPolicy.KEEP
|
ExistingPeriodicWorkPolicy.KEEP
|
||||||
} else {
|
} else {
|
||||||
Log.d(TAG, "Poll worker version DOES NOT MATCH: choosing REPLACE as existing work policy")
|
Log.d(TAG, "Poll worker version DOES NOT MATCH: choosing REPLACE as existing work policy")
|
||||||
sharedPrefs.edit()
|
repository.setPollWorkerVersion(PollWorker.VERSION)
|
||||||
.putInt(SHARED_PREFS_POLL_WORKER_VERSION, PollWorker.VERSION)
|
|
||||||
.apply()
|
|
||||||
ExistingPeriodicWorkPolicy.REPLACE
|
ExistingPeriodicWorkPolicy.REPLACE
|
||||||
}
|
}
|
||||||
val constraints = Constraints.Builder()
|
val constraints = Constraints.Builder()
|
||||||
|
@ -133,12 +135,76 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
menuInflater.inflate(R.menu.main_action_bar_menu, menu)
|
menuInflater.inflate(R.menu.menu_main_action_bar, menu)
|
||||||
|
this.menu = menu
|
||||||
|
showHideNotificationMenuItems()
|
||||||
|
startNotificationMutedChecker() // This is done here, because then we know that we've initialized the menu
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun startNotificationMutedChecker() {
|
||||||
|
lifecycleScope.launch(Dispatchers.IO) {
|
||||||
|
delay(1000) // Just to be sure we've initialized all the things, we wait a bit ...
|
||||||
|
while (isActive) {
|
||||||
|
Log.d(DetailActivity.TAG, "Checking global and subscription-specific 'muted until' timestamp")
|
||||||
|
|
||||||
|
// Check global
|
||||||
|
val changed = repository.checkGlobalMutedUntil()
|
||||||
|
if (changed) {
|
||||||
|
Log.d(TAG, "Global muted until timestamp expired; updating prefs")
|
||||||
|
showHideNotificationMenuItems()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check subscriptions
|
||||||
|
var rerenderList = false
|
||||||
|
repository.getSubscriptions().forEach { subscription ->
|
||||||
|
val mutedUntilExpired = subscription.mutedUntil > 1L && System.currentTimeMillis()/1000 > subscription.mutedUntil
|
||||||
|
if (mutedUntilExpired) {
|
||||||
|
Log.d(TAG, "Subscription ${subscription.id}: Muted until timestamp expired, updating subscription")
|
||||||
|
val newSubscription = subscription.copy(mutedUntil = 0L)
|
||||||
|
repository.updateSubscription(newSubscription)
|
||||||
|
rerenderList = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (rerenderList) {
|
||||||
|
redrawList()
|
||||||
|
}
|
||||||
|
|
||||||
|
delay(60_000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun showHideNotificationMenuItems() {
|
||||||
|
val mutedUntilSeconds = repository.getGlobalMutedUntil()
|
||||||
|
runOnUiThread {
|
||||||
|
val notificationsEnabledItem = menu.findItem(R.id.main_menu_notifications_enabled)
|
||||||
|
val notificationsDisabledUntilItem = menu.findItem(R.id.main_menu_notifications_disabled_until)
|
||||||
|
val notificationsDisabledForeverItem = menu.findItem(R.id.main_menu_notifications_disabled_forever)
|
||||||
|
notificationsEnabledItem?.isVisible = mutedUntilSeconds == 0L
|
||||||
|
notificationsDisabledForeverItem?.isVisible = mutedUntilSeconds == 1L
|
||||||
|
notificationsDisabledUntilItem?.isVisible = mutedUntilSeconds > 1L
|
||||||
|
if (mutedUntilSeconds > 1L) {
|
||||||
|
val formattedDate = formatDateShort(mutedUntilSeconds)
|
||||||
|
notificationsDisabledUntilItem?.title = getString(R.string.main_menu_notifications_disabled_until, formattedDate)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
return when (item.itemId) {
|
return when (item.itemId) {
|
||||||
|
R.id.main_menu_notifications_enabled -> {
|
||||||
|
onNotificationSettingsClick(enable = false)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.main_menu_notifications_disabled_forever -> {
|
||||||
|
onNotificationSettingsClick(enable = true)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.main_menu_notifications_disabled_until -> {
|
||||||
|
onNotificationSettingsClick(enable = true)
|
||||||
|
true
|
||||||
|
}
|
||||||
R.id.main_menu_source -> {
|
R.id.main_menu_source -> {
|
||||||
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.main_menu_source_url))))
|
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.main_menu_source_url))))
|
||||||
true
|
true
|
||||||
|
@ -151,6 +217,32 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun onNotificationSettingsClick(enable: Boolean) {
|
||||||
|
if (!enable) {
|
||||||
|
Log.d(TAG, "Showing global notification settings dialog")
|
||||||
|
val notificationFragment = NotificationFragment()
|
||||||
|
notificationFragment.show(supportFragmentManager, NotificationFragment.TAG)
|
||||||
|
} else {
|
||||||
|
Log.d(TAG, "Re-enabling global notifications")
|
||||||
|
onNotificationMutedUntilChanged(0L)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onNotificationMutedUntilChanged(mutedUntilTimestamp: Long) {
|
||||||
|
repository.setGlobalMutedUntil(mutedUntilTimestamp)
|
||||||
|
showHideNotificationMenuItems()
|
||||||
|
runOnUiThread {
|
||||||
|
when (mutedUntilTimestamp) {
|
||||||
|
0L -> Toast.makeText(this@MainActivity, getString(R.string.notification_dialog_enabled_toast_message), Toast.LENGTH_LONG).show()
|
||||||
|
1L -> Toast.makeText(this@MainActivity, getString(R.string.notification_dialog_muted_forever_toast_message), Toast.LENGTH_LONG).show()
|
||||||
|
else -> {
|
||||||
|
val formattedDate = formatDateShort(mutedUntilTimestamp)
|
||||||
|
Toast.makeText(this@MainActivity, getString(R.string.notification_dialog_muted_until_toast_message, formattedDate), Toast.LENGTH_LONG).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun onSubscribeButtonClick() {
|
private fun onSubscribeButtonClick() {
|
||||||
val newFragment = AddFragment()
|
val newFragment = AddFragment()
|
||||||
newFragment.show(supportFragmentManager, AddFragment.TAG)
|
newFragment.show(supportFragmentManager, AddFragment.TAG)
|
||||||
|
@ -165,6 +257,7 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
||||||
baseUrl = baseUrl,
|
baseUrl = baseUrl,
|
||||||
topic = topic,
|
topic = topic,
|
||||||
instant = instant,
|
instant = instant,
|
||||||
|
mutedUntil = 0,
|
||||||
totalCount = 0,
|
totalCount = 0,
|
||||||
newCount = 0,
|
newCount = 0,
|
||||||
lastActive = Date().time/1000
|
lastActive = Date().time/1000
|
||||||
|
@ -222,10 +315,12 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
||||||
val notifications = api.poll(subscription.id, subscription.baseUrl, subscription.topic)
|
val notifications = api.poll(subscription.id, subscription.baseUrl, subscription.topic)
|
||||||
val newNotifications = repository.onlyNewNotifications(subscription.id, notifications)
|
val newNotifications = repository.onlyNewNotifications(subscription.id, notifications)
|
||||||
newNotifications.forEach { notification ->
|
newNotifications.forEach { notification ->
|
||||||
val notificationWithId = notification.copy(notificationId = Random.nextInt())
|
|
||||||
repository.addNotification(notificationWithId)
|
|
||||||
notifier?.send(subscription, notificationWithId)
|
|
||||||
newNotificationsCount++
|
newNotificationsCount++
|
||||||
|
val notificationWithId = notification.copy(notificationId = Random.nextInt())
|
||||||
|
val shouldNotify = repository.addNotification(notificationWithId)
|
||||||
|
if (shouldNotify) {
|
||||||
|
notifier?.send(subscription, notificationWithId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val toastMessage = if (newNotificationsCount == 0) {
|
val toastMessage = if (newNotificationsCount == 0) {
|
||||||
|
@ -256,6 +351,7 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
||||||
intent.putExtra(EXTRA_SUBSCRIPTION_BASE_URL, subscription.baseUrl)
|
intent.putExtra(EXTRA_SUBSCRIPTION_BASE_URL, subscription.baseUrl)
|
||||||
intent.putExtra(EXTRA_SUBSCRIPTION_TOPIC, subscription.topic)
|
intent.putExtra(EXTRA_SUBSCRIPTION_TOPIC, subscription.topic)
|
||||||
intent.putExtra(EXTRA_SUBSCRIPTION_INSTANT, subscription.instant)
|
intent.putExtra(EXTRA_SUBSCRIPTION_INSTANT, subscription.instant)
|
||||||
|
intent.putExtra(EXTRA_SUBSCRIPTION_MUTED_UNTIL, subscription.mutedUntil)
|
||||||
startActivityForResult(intent, REQUEST_CODE_DELETE_SUBSCRIPTION)
|
startActivityForResult(intent, REQUEST_CODE_DELETE_SUBSCRIPTION)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -292,7 +388,7 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
||||||
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
|
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
|
||||||
this.actionMode = mode
|
this.actionMode = mode
|
||||||
if (mode != null) {
|
if (mode != null) {
|
||||||
mode.menuInflater.inflate(R.menu.main_action_mode_menu, menu)
|
mode.menuInflater.inflate(R.menu.menu_main_action_mode, menu)
|
||||||
mode.title = "1" // One item selected
|
mode.title = "1" // One item selected
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
@ -386,7 +482,9 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun redrawList() {
|
private fun redrawList() {
|
||||||
mainList.adapter = adapter // Oh, what a hack ...
|
runOnUiThread {
|
||||||
|
mainList.adapter = adapter // Oh, what a hack ...
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -395,9 +493,8 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
||||||
const val EXTRA_SUBSCRIPTION_BASE_URL = "subscriptionBaseUrl"
|
const val EXTRA_SUBSCRIPTION_BASE_URL = "subscriptionBaseUrl"
|
||||||
const val EXTRA_SUBSCRIPTION_TOPIC = "subscriptionTopic"
|
const val EXTRA_SUBSCRIPTION_TOPIC = "subscriptionTopic"
|
||||||
const val EXTRA_SUBSCRIPTION_INSTANT = "subscriptionInstant"
|
const val EXTRA_SUBSCRIPTION_INSTANT = "subscriptionInstant"
|
||||||
|
const val EXTRA_SUBSCRIPTION_MUTED_UNTIL = "subscriptionMutedUntil"
|
||||||
const val REQUEST_CODE_DELETE_SUBSCRIPTION = 1
|
const val REQUEST_CODE_DELETE_SUBSCRIPTION = 1
|
||||||
const val ANIMATION_DURATION = 80L
|
const val ANIMATION_DURATION = 80L
|
||||||
const val SHARED_PREFS_ID = "MainPreferences"
|
|
||||||
const val SHARED_PREFS_POLL_WORKER_VERSION = "PollWorkerVersion"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ class MainAdapter(private val onClick: (Subscription) -> Unit, private val onLon
|
||||||
/* Creates and inflates view and return TopicViewHolder. */
|
/* Creates and inflates view and return TopicViewHolder. */
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SubscriptionViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SubscriptionViewHolder {
|
||||||
val view = LayoutInflater.from(parent.context)
|
val view = LayoutInflater.from(parent.context)
|
||||||
.inflate(R.layout.main_fragment_item, parent, false)
|
.inflate(R.layout.fragment_main_item, parent, false)
|
||||||
return SubscriptionViewHolder(view, selected, onClick, onLongClick)
|
return SubscriptionViewHolder(view, selected, onClick, onLongClick)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,6 +49,8 @@ class MainAdapter(private val onClick: (Subscription) -> Unit, private val onLon
|
||||||
private val nameView: TextView = itemView.findViewById(R.id.main_item_text)
|
private val nameView: TextView = itemView.findViewById(R.id.main_item_text)
|
||||||
private val statusView: TextView = itemView.findViewById(R.id.main_item_status)
|
private val statusView: TextView = itemView.findViewById(R.id.main_item_status)
|
||||||
private val dateView: TextView = itemView.findViewById(R.id.main_item_date)
|
private val dateView: TextView = itemView.findViewById(R.id.main_item_date)
|
||||||
|
private val notificationDisabledUntilImageView: View = itemView.findViewById(R.id.main_item_notification_disabled_until_image)
|
||||||
|
private val notificationDisabledForeverImageView: View = itemView.findViewById(R.id.main_item_notification_disabled_forever_image)
|
||||||
private val instantImageView: View = itemView.findViewById(R.id.main_item_instant_image)
|
private val instantImageView: View = itemView.findViewById(R.id.main_item_instant_image)
|
||||||
private val newItemsView: TextView = itemView.findViewById(R.id.main_item_new)
|
private val newItemsView: TextView = itemView.findViewById(R.id.main_item_new)
|
||||||
|
|
||||||
|
@ -78,11 +80,9 @@ class MainAdapter(private val onClick: (Subscription) -> Unit, private val onLon
|
||||||
nameView.text = topicShortUrl(subscription.baseUrl, subscription.topic)
|
nameView.text = topicShortUrl(subscription.baseUrl, subscription.topic)
|
||||||
statusView.text = statusMessage
|
statusView.text = statusMessage
|
||||||
dateView.text = dateText
|
dateView.text = dateText
|
||||||
if (subscription.instant) {
|
notificationDisabledUntilImageView.visibility = if (subscription.mutedUntil > 1L) View.VISIBLE else View.GONE
|
||||||
instantImageView.visibility = View.VISIBLE
|
notificationDisabledForeverImageView.visibility = if (subscription.mutedUntil == 1L) View.VISIBLE else View.GONE
|
||||||
} else {
|
instantImageView.visibility = if (subscription.instant) View.VISIBLE else View.GONE
|
||||||
instantImageView.visibility = View.GONE
|
|
||||||
}
|
|
||||||
if (subscription.newCount > 0) {
|
if (subscription.newCount > 0) {
|
||||||
newItemsView.visibility = View.VISIBLE
|
newItemsView.visibility = View.VISIBLE
|
||||||
newItemsView.text = if (subscription.newCount <= 99) subscription.newCount.toString() else "99+"
|
newItemsView.text = if (subscription.newCount <= 99) subscription.newCount.toString() else "99+"
|
||||||
|
|
96
app/src/main/java/io/heckel/ntfy/ui/NotificationFragment.kt
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
package io.heckel.ntfy.ui
|
||||||
|
|
||||||
|
import android.app.AlertDialog
|
||||||
|
import android.app.Dialog
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.widget.RadioButton
|
||||||
|
import androidx.fragment.app.DialogFragment
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import io.heckel.ntfy.R
|
||||||
|
import io.heckel.ntfy.data.Database
|
||||||
|
import io.heckel.ntfy.data.Repository
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class NotificationFragment : DialogFragment() {
|
||||||
|
private lateinit var repository: Repository
|
||||||
|
private lateinit var settingsListener: NotificationSettingsListener
|
||||||
|
private lateinit var muteFor30minButton: RadioButton
|
||||||
|
private lateinit var muteFor1hButton: RadioButton
|
||||||
|
private lateinit var muteFor2hButton: RadioButton
|
||||||
|
private lateinit var muteFor8hButton: RadioButton
|
||||||
|
private lateinit var muteUntilTomorrowButton: RadioButton
|
||||||
|
private lateinit var muteForeverButton: RadioButton
|
||||||
|
|
||||||
|
interface NotificationSettingsListener {
|
||||||
|
fun onNotificationMutedUntilChanged(mutedUntilTimestamp: Long)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onAttach(context: Context) {
|
||||||
|
super.onAttach(context)
|
||||||
|
settingsListener = activity as NotificationSettingsListener
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
|
if (activity == null) {
|
||||||
|
throw IllegalStateException("Activity cannot be null")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dependencies
|
||||||
|
val database = Database.getInstance(requireActivity().applicationContext)
|
||||||
|
val sharedPrefs = requireActivity().getSharedPreferences(Repository.SHARED_PREFS_ID, Context.MODE_PRIVATE)
|
||||||
|
repository = Repository.getInstance(sharedPrefs, database.subscriptionDao(), database.notificationDao())
|
||||||
|
|
||||||
|
// Build root view
|
||||||
|
val view = requireActivity().layoutInflater.inflate(R.layout.fragment_notification_dialog, null)
|
||||||
|
|
||||||
|
muteFor30minButton = view.findViewById(R.id.notification_dialog_30min)
|
||||||
|
muteFor30minButton.setOnClickListener { onClickMinutes(30) }
|
||||||
|
|
||||||
|
muteFor1hButton = view.findViewById(R.id.notification_dialog_1h)
|
||||||
|
muteFor1hButton.setOnClickListener { onClickMinutes(60) }
|
||||||
|
|
||||||
|
muteFor2hButton = view.findViewById(R.id.notification_dialog_2h)
|
||||||
|
muteFor2hButton.setOnClickListener { onClickMinutes(2 * 60) }
|
||||||
|
|
||||||
|
muteFor8hButton = view.findViewById(R.id.notification_dialog_8h)
|
||||||
|
muteFor8hButton.setOnClickListener{ onClickMinutes(8 * 60) }
|
||||||
|
|
||||||
|
muteUntilTomorrowButton = view.findViewById(R.id.notification_dialog_tomorrow)
|
||||||
|
muteUntilTomorrowButton.setOnClickListener {
|
||||||
|
val date = Calendar.getInstance()
|
||||||
|
date.add(Calendar.DAY_OF_MONTH, 1)
|
||||||
|
date.set(Calendar.HOUR_OF_DAY, 8)
|
||||||
|
date.set(Calendar.MINUTE, 30)
|
||||||
|
date.set(Calendar.SECOND, 0)
|
||||||
|
date.set(Calendar.MILLISECOND, 0)
|
||||||
|
onClick(date.timeInMillis/1000)
|
||||||
|
}
|
||||||
|
|
||||||
|
muteForeverButton = view.findViewById(R.id.notification_dialog_forever)
|
||||||
|
muteForeverButton.setOnClickListener{ onClick(1) }
|
||||||
|
|
||||||
|
return AlertDialog.Builder(activity)
|
||||||
|
.setView(view)
|
||||||
|
.create()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onClickMinutes(minutes: Int) {
|
||||||
|
onClick(System.currentTimeMillis()/1000 + minutes * 60)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onClick(mutedUntilTimestamp: Long) {
|
||||||
|
lifecycleScope.launch(Dispatchers.Main) {
|
||||||
|
delay(150) // Another hack: Let the animation finish before dismissing the window
|
||||||
|
settingsListener.onNotificationMutedUntilChanged(mutedUntilTimestamp)
|
||||||
|
dismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TAG = "NtfyNotificationFragment"
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,8 @@ package io.heckel.ntfy.ui
|
||||||
import android.animation.ArgbEvaluator
|
import android.animation.ArgbEvaluator
|
||||||
import android.animation.ValueAnimator
|
import android.animation.ValueAnimator
|
||||||
import android.view.Window
|
import android.view.Window
|
||||||
|
import java.text.DateFormat
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
// Status bar color fading to match action bar, see https://stackoverflow.com/q/51150077/1440785
|
// Status bar color fading to match action bar, see https://stackoverflow.com/q/51150077/1440785
|
||||||
fun fadeStatusBarColor(window: Window, fromColor: Int, toColor: Int) {
|
fun fadeStatusBarColor(window: Window, fromColor: Int, toColor: Int) {
|
||||||
|
@ -13,3 +15,8 @@ fun fadeStatusBarColor(window: Window, fromColor: Int, toColor: Int) {
|
||||||
}
|
}
|
||||||
statusBarColorAnimation.start()
|
statusBarColorAnimation.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun formatDateShort(timestampSecs: Long): String {
|
||||||
|
val mutedUntilDate = Date(timestampSecs*1000)
|
||||||
|
return DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(mutedUntilDate)
|
||||||
|
}
|
||||||
|
|
|
@ -14,14 +14,16 @@ import kotlinx.coroutines.withContext
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
|
||||||
class PollWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker(ctx, params) {
|
class PollWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker(ctx, params) {
|
||||||
// Every time the worker is changed, the periodic work has to be REPLACEd.
|
// IMPORTANT WARNING:
|
||||||
// This is facilitated in the MainActivity using the VERSION below.
|
// Every time the worker is changed, the periodic work has to be REPLACEd.
|
||||||
|
// This is facilitated in the MainActivity using the VERSION below.
|
||||||
|
|
||||||
override suspend fun doWork(): Result {
|
override suspend fun doWork(): Result {
|
||||||
return withContext(Dispatchers.IO) {
|
return withContext(Dispatchers.IO) {
|
||||||
Log.d(TAG, "Polling for new notifications")
|
Log.d(TAG, "Polling for new notifications")
|
||||||
val database = Database.getInstance(applicationContext)
|
val database = Database.getInstance(applicationContext)
|
||||||
val repository = Repository.getInstance(database.subscriptionDao(), database.notificationDao())
|
val sharedPrefs = applicationContext.getSharedPreferences(Repository.SHARED_PREFS_ID, Context.MODE_PRIVATE)
|
||||||
|
val repository = Repository.getInstance(sharedPrefs, database.subscriptionDao(), database.notificationDao())
|
||||||
val notifier = NotificationService(applicationContext)
|
val notifier = NotificationService(applicationContext)
|
||||||
val api = ApiService()
|
val api = ApiService()
|
||||||
|
|
||||||
|
@ -32,10 +34,8 @@ class PollWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker(ctx,
|
||||||
.onlyNewNotifications(subscription.id, notifications)
|
.onlyNewNotifications(subscription.id, notifications)
|
||||||
.map { it.copy(notificationId = Random.nextInt()) }
|
.map { it.copy(notificationId = Random.nextInt()) }
|
||||||
newNotifications.forEach { notification ->
|
newNotifications.forEach { notification ->
|
||||||
val added = repository.addNotification(notification)
|
val shouldNotify = repository.addNotification(notification)
|
||||||
val detailViewOpen = repository.detailViewSubscriptionId.get() == subscription.id
|
if (shouldNotify) {
|
||||||
|
|
||||||
if (added && !detailViewOpen) {
|
|
||||||
notifier.send(subscription, notification)
|
notifier.send(subscription, notification)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:width="24dp"
|
|
||||||
android:height="24dp"
|
|
||||||
android:viewportWidth="24"
|
|
||||||
android:viewportHeight="24"
|
|
||||||
android:tint="#FFFFFF">
|
|
||||||
<group android:scaleX="0.4392209"
|
|
||||||
android:scaleY="0.4392209"
|
|
||||||
android:translateX="0.96"
|
|
||||||
android:translateY="0.96">
|
|
||||||
<path
|
|
||||||
android:pathData="M0.8488,6.2383L0.8488,8.1719 0.8488,45.1504L49.5538,45.1504L49.5538,6.2383ZM4.714,10.1036L45.6886,10.1036L45.6886,41.2852L4.714,41.2852Z"
|
|
||||||
android:fillColor="#ffffff"/>
|
|
||||||
<path
|
|
||||||
android:pathData="m10.2651,30.0405l0,-3.4747l8.2553,-3.864q0.3985,-0.1798 0.7686,-0.2696 0.3985,-0.1197 0.7117,-0.1798 0.3416,-0.0299 0.6832,-0.0599l0,-0.2397q-0.3416,-0.0299 -0.6832,-0.1197 -0.3131,-0.0599 -0.7117,-0.1499 -0.3701,-0.1197 -0.7686,-0.2995l-8.2553,-3.864l0,-3.5046l12.753,6.1405l0,3.7442z"
|
|
||||||
android:strokeWidth="0.263"
|
|
||||||
android:fillColor="#ffffff"
|
|
||||||
android:strokeColor="#00000000"/>
|
|
||||||
<path
|
|
||||||
android:pathData="m9.9354,13.4714l0,4.2725l8.4501,3.957 0.005,0.0053c0.2753,0.1242 0.542,0.2264 0.8013,0.3103l0.0148,0.0053l0.0148,0c0.0565,0.0132 0.0984,0.0185 0.1524,0.031 -0.0623,0.0185 -0.1116,0.027 -0.177,0.0466 -0.2626,0.0651 -0.5313,0.1605 -0.8062,0.2845l-0.005,0l-8.4501,3.957l0,4.2415l0.467,-0.2275 12.9479,-6.2329l0,-4.1898zM10.5941,14.5525 L22.6867,20.3768l0,3.3001l-12.0926,5.8243l0,-2.7104l8.0568,-3.7708c0.2499,-0.1128 0.4879,-0.1936 0.7128,-0.2481l0.0098,0l0.005,-0.0053c0.2521,-0.0757 0.4764,-0.1282 0.6685,-0.1655 0.0043,-0.0008 0.0106,-0.0053 0.0148,-0.0053l0.9536,-0.0826l0,-0.8793l-0.3048,-0.0265c-0.2096,-0.0185 -0.4183,-0.0583 -0.6292,-0.1139l-0.0098,0l-0.0098,-0.0053c-0.1958,-0.0373 -0.4237,-0.0834 -0.6735,-0.1396 -0.2327,-0.0752 -0.478,-0.1698 -0.7324,-0.2845l-0.005,0l-8.0568,-3.7708z"
|
|
||||||
android:strokeWidth="0.26299965"
|
|
||||||
android:fillColor="#ffffff"
|
|
||||||
android:strokeColor="#00000000"/>
|
|
||||||
<path
|
|
||||||
android:pathData="m26.8784,32.6464l13.6639,0l0,3.3848L26.8784,36.0312Z"
|
|
||||||
android:strokeWidth="0.263"
|
|
||||||
android:fillColor="#ffffff"
|
|
||||||
android:strokeColor="#00000000"/>
|
|
||||||
<path
|
|
||||||
android:pathData="m26.5455,32.2995l0,0.3466 0,3.7346l14.3292,0l0,-4.0811zM27.2091,32.9926l13.002,0l0,2.6897l-13.002,0z"
|
|
||||||
android:strokeWidth="0.26299965"
|
|
||||||
android:fillColor="#ffffff"
|
|
||||||
android:strokeColor="#00000000"/>
|
|
||||||
</group>
|
|
||||||
</vector>
|
|
Before Width: | Height: | Size: 415 B |
Before Width: | Height: | Size: 294 B |
Before Width: | Height: | Size: 517 B |
Before Width: | Height: | Size: 732 B |
|
@ -5,5 +5,5 @@
|
||||||
android:viewportHeight="24">
|
android:viewportHeight="24">
|
||||||
<path
|
<path
|
||||||
android:pathData="M11,21h-1l1,-7H7.5c-0.88,0 -0.33,-0.75 -0.31,-0.78C8.48,10.94 10.42,7.54 13.01,3h1l-1,7h3.51c0.4,0 0.62,0.19 0.4,0.66C12.97,17.55 11,21 11,21z"
|
android:pathData="M11,21h-1l1,-7H7.5c-0.88,0 -0.33,-0.75 -0.31,-0.78C8.48,10.94 10.42,7.54 13.01,3h1l-1,7h3.51c0.4,0 0.62,0.19 0.4,0.66C12.97,17.55 11,21 11,21z"
|
||||||
android:fillColor="#000000"/>
|
android:fillColor="#555555"/>
|
||||||
</vector>
|
</vector>
|
31
app/src/main/res/drawable/ic_notification.xml
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="50dp"
|
||||||
|
android:height="50dp"
|
||||||
|
android:viewportWidth="50"
|
||||||
|
android:viewportHeight="50">
|
||||||
|
<path
|
||||||
|
android:pathData="m7.8399,6.35c-3.58,0 -6.6469,2.817 -6.6469,6.3983v0.003l0.0351,27.8668 -0.8991,6.6347 12.2261,-3.248L42.9487,44.0049c3.58,0 6.6469,-2.8208 6.6469,-6.4022v-24.8545c0,-3.5803 -3.0652,-6.3967 -6.6438,-6.3983h-0.0031zM7.8399,10.8662h35.1088,0.0031c1.2579,0.0013 2.1277,0.9164 2.1277,1.8821v24.8544c0,0.9666 -0.8714,1.8821 -2.1307,1.8821L11.8924,39.4849l-6.2114,1.8768 0.0633,-0.366 -0.0343,-28.2473c0,-0.9665 0.8706,-1.8821 2.13,-1.8821z"
|
||||||
|
android:strokeWidth="0.754022"
|
||||||
|
android:fillColor="#338574"
|
||||||
|
android:strokeColor="#00000000"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m11.5278,32.0849l0,-3.346l7.0363,-3.721q0.3397,-0.1732 0.6551,-0.2596 0.3397,-0.1153 0.6066,-0.1732 0.2912,-0.0288 0.5823,-0.0576l0,-0.2308q-0.2912,-0.0288 -0.5823,-0.1153 -0.2669,-0.0576 -0.6066,-0.1443 -0.3154,-0.1153 -0.6551,-0.2884l-7.0363,-3.721l0,-3.3749l10.8699,5.9132l0,3.6056z"
|
||||||
|
android:strokeWidth="0.525121"
|
||||||
|
android:fillColor="#338574"
|
||||||
|
android:strokeColor="#00000000"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m10.9661,15.6112l0,4.8516l7.3742,3.9002c0.0157,0.0077 0.0305,0.0128 0.0461,0.0204 -0.0157,0.0077 -0.0305,0.0128 -0.0461,0.0204l-7.3742,3.9002l0,4.8267l0.7961,-0.4333 11.1995,-6.0969l0,-4.463zM12.0931,17.6933 L21.8346,22.9981l0,2.7446l-9.7414,5.2999l0,-1.8679l6.6912,-3.5416 0.0084,-0.0051c0.1961,-0.0992 0.3826,-0.1724 0.5531,-0.2191l0.0127,0l0.0167,-0.0051c0.2034,-0.0691 0.3777,-0.1209 0.5279,-0.1545l1.0684,-0.1046l0,-1.4644l-0.5154,-0.0497c-0.1632,-0.0153 -0.3288,-0.0505 -0.4944,-0.0997l-0.0167,-0.0051 -0.0167,-0.0051c-0.1632,-0.0352 -0.3552,-0.0811 -0.5656,-0.1344 -0.1802,-0.0668 -0.3706,-0.1479 -0.5698,-0.2492l-0.0084,-0.0051 -6.6912,-3.5416z"
|
||||||
|
android:strokeWidth="0.525121"
|
||||||
|
android:fillColor="#338574"
|
||||||
|
android:strokeColor="#00000000"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m26.7503,30.9206l11.6118,0l0,3.1388L26.7503,34.0594Z"
|
||||||
|
android:strokeWidth="0.525121"
|
||||||
|
android:fillColor="#338574"
|
||||||
|
android:strokeColor="#00000000"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m26.1875,30.2775l0,0.6427 0,3.7845l12.7371,0l0,-4.4272zM27.3113,31.563l10.4896,0l0,1.8515l-10.4896,0z"
|
||||||
|
android:strokeWidth="0.525121"
|
||||||
|
android:fillColor="#338574"
|
||||||
|
android:strokeColor="#00000000"/>
|
||||||
|
</vector>
|
|
@ -1,25 +1,26 @@
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="50.270832dp"
|
android:width="50dp"
|
||||||
android:height="50.270832dp"
|
android:height="50dp"
|
||||||
android:viewportWidth="50.270832"
|
android:viewportWidth="50"
|
||||||
android:viewportHeight="50.270832">
|
android:viewportHeight="50">
|
||||||
<path
|
<path
|
||||||
android:pathData="m10.2906,32.0419l0,-3.4747l8.2553,-3.864q0.3985,-0.1798 0.7686,-0.2696 0.3985,-0.1197 0.7117,-0.1798 0.3416,-0.0299 0.6832,-0.0599l0,-0.2397q-0.3416,-0.0299 -0.6832,-0.1197 -0.3131,-0.0599 -0.7117,-0.1499 -0.3701,-0.1197 -0.7686,-0.2995l-8.2553,-3.864l0,-3.5046l12.753,6.1405l0,3.7442z"
|
android:pathData="M7.8398,6.35C4.2598,6.35 1.1932,9.1672 1.1932,12.7486L1.1932,12.7512L1.2283,40.6182L0.3292,47.2529L12.5553,44.0051L35.9384,44.0051L36.5848,39.4849L11.8923,39.4849L5.6808,41.3618L5.7444,40.9954L5.7097,12.7486C5.7097,11.7821 6.5805,10.866 7.8398,10.866L42.9488,10.866L42.9519,10.866C44.2097,10.8673 45.0794,11.7828 45.0794,12.7486L45.0794,25.7395L49.5954,25.7395L49.5954,12.7481C49.5954,9.1677 46.5305,6.3517 42.9519,6.35L42.9488,6.35L7.8398,6.35zM49.5954,31.4735C45.6685,38.326 43.7215,41.7259 42.4176,44.0051L42.9488,44.0051C46.5288,44.0051 49.5954,41.1842 49.5954,37.6029L49.5954,31.4735z"
|
||||||
android:strokeWidth="0.38733381"
|
android:strokeWidth="2.84985"
|
||||||
android:fillColor="#ffffff"
|
android:fillColor="#338574"
|
||||||
android:strokeColor="#00000000"/>
|
android:strokeColor="#00000000"/>
|
||||||
<path
|
<path
|
||||||
android:pathData="m9.9609,15.4729l0,4.2725l8.4501,3.957 0.005,0.0053c0.2753,0.1242 0.542,0.2264 0.8013,0.3103l0.0148,0.0053l0.0148,0c0.0565,0.0132 0.0984,0.0185 0.1524,0.031 -0.0623,0.0185 -0.1116,0.027 -0.177,0.0466 -0.2626,0.0651 -0.5313,0.1605 -0.8062,0.2845l-0.005,0l-8.4501,3.957l0,4.2415l0.467,-0.2275 12.9479,-6.2329l0,-4.1898zM10.6196,16.5539 L22.7122,22.3782l0,3.3001l-12.0926,5.8243l0,-2.7104l8.0568,-3.7708c0.2499,-0.1128 0.4879,-0.1936 0.7128,-0.2481l0.0098,0l0.005,-0.0053c0.2521,-0.0757 0.4764,-0.1282 0.6685,-0.1655 0.0043,-0.0008 0.0106,-0.0053 0.0148,-0.0053l0.9536,-0.0826l0,-0.8793l-0.3048,-0.0265c-0.2096,-0.0185 -0.4183,-0.0583 -0.6292,-0.1139l-0.0098,0l-0.0098,-0.0053c-0.1958,-0.0373 -0.4237,-0.0834 -0.6735,-0.1396 -0.2327,-0.0752 -0.478,-0.1698 -0.7324,-0.2845l-0.005,0l-8.0568,-3.7708z"
|
android:pathData="m11.5278,32.0849l0,-3.346l7.0363,-3.721q0.3397,-0.1732 0.6551,-0.2596 0.3397,-0.1153 0.6066,-0.1732 0.2912,-0.0288 0.5823,-0.0576l0,-0.2308q-0.2912,-0.0288 -0.5823,-0.1153 -0.2669,-0.0576 -0.6066,-0.1443 -0.3154,-0.1153 -0.6551,-0.2884l-7.0363,-3.721l0,-3.3749l10.8699,5.9132l0,3.6056z"
|
||||||
android:strokeWidth="0.38733381"
|
android:strokeWidth="0.525121"
|
||||||
android:fillColor="#ffffff"
|
android:fillColor="#338574"
|
||||||
android:strokeColor="#00000000"/>
|
android:strokeColor="#00000000"/>
|
||||||
<path
|
<path
|
||||||
android:pathData="m0.8486,6.2382v1.9337,36.9786h32.4947l0.5519,-3.8654L4.714,41.2851L4.714,10.1036h40.9748v15.3918h3.6484c0.069,0 0.1432,0.003 0.2165,0.005L49.5536,6.2383ZM49.5536,34.5496c-2.3656,4.1288 -4.5102,7.8727 -6.0709,10.6009h6.0709z"
|
android:pathData="m10.9661,15.6112l0,4.8516l7.3742,3.9002c0.0157,0.0077 0.0305,0.0128 0.0461,0.0204 -0.0157,0.0077 -0.0305,0.0128 -0.0461,0.0204l-7.3742,3.9002l0,4.8267l0.7961,-0.4333 11.1995,-6.0969l0,-4.463zM12.0931,17.6933 L21.8346,22.9981l0,2.7446l-9.7414,5.2999l0,-1.8679l6.6912,-3.5416 0.0084,-0.0051c0.1961,-0.0992 0.3826,-0.1724 0.5531,-0.2191l0.0127,0l0.0167,-0.0051c0.2034,-0.0691 0.3777,-0.1209 0.5279,-0.1545l1.0684,-0.1046l0,-1.4644l-0.5154,-0.0497c-0.1632,-0.0153 -0.3288,-0.0505 -0.4944,-0.0997l-0.0167,-0.0051 -0.0167,-0.0051c-0.1632,-0.0352 -0.3552,-0.0811 -0.5656,-0.1344 -0.1802,-0.0668 -0.3706,-0.1479 -0.5698,-0.2492l-0.0084,-0.0051 -6.6912,-3.5416z"
|
||||||
android:strokeWidth="1"
|
android:strokeWidth="0.525121"
|
||||||
android:fillColor="#ffffff"/>
|
android:fillColor="#338574"
|
||||||
|
android:strokeColor="#00000000"/>
|
||||||
<path
|
<path
|
||||||
android:pathData="m40.7092,16.7466c-4.1394,7.2567 -7.8235,13.7146 -10.2159,17.9374h8.5829l-1.8531,12.962c1.2024,-2.1043 3.8969,-6.8095 10.2878,-17.9601h-8.6543z"
|
android:pathData="m41.6796,15.3498c-4.1394,7.2567 -7.8235,13.7146 -10.2159,17.9374h8.5829l-1.8531,12.962c1.2024,-2.1043 3.8969,-6.8095 10.2878,-17.9601h-8.6543z"
|
||||||
android:strokeWidth="1"
|
android:strokeWidth="1"
|
||||||
android:fillColor="#ffffff"
|
android:fillColor="#338574"
|
||||||
android:strokeColor="#00000000"/>
|
android:strokeColor="#00000000"/>
|
||||||
</vector>
|
</vector>
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:pathData="M12,2.5C11.17,2.5 10.5,3.17 10.5,4L10.5,4.6797C9.556,4.9041 8.749,5.3367 8.0859,5.9219L9.5273,7.3672C10.1748,6.8243 11.0077,6.5 12,6.5C14.49,6.5 16,8.52 16,11L16,13.8555L18,15.8613L18,11C18,7.93 16.37,5.3597 13.5,4.6797L13.5,4C13.5,3.17 12.83,2.5 12,2.5zM6.7715,7.6289C6.2688,8.6106 6,9.762 6,11L6,16L4,18L4,19L18.1172,19L16,16.8789L16,17L8,17L8,11C8,10.3476 8.1073,9.7283 8.3066,9.168L6.7715,7.6289zM10,20C10,21.1 10.9,22 12,22C13.1,22 14,21.1 14,20L10,20z"
|
||||||
|
android:fillColor="#555555"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M3.543,3.3965 L2.0313,4.9043 19.5234,22.4395 21.0352,20.9316Z"
|
||||||
|
android:fillColor="#555555"/>
|
||||||
|
</vector>
|
|
@ -0,0 +1,15 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:pathData="M12,2.5C11.17,2.5 10.5,3.17 10.5,4L10.5,4.6797C9.556,4.9041 8.749,5.3367 8.0859,5.9219L9.5273,7.3672C10.1748,6.8243 11.0077,6.5 12,6.5C14.1766,6.5 15.6028,8.0429 15.9277,10.0879A6.6092,6.6092 0,0 1,16.502 10.0371A6.6092,6.6092 0,0 1,17.9609 10.2031C17.7024,7.4927 16.1179,5.2999 13.5,4.6797L13.5,4C13.5,3.17 12.83,2.5 12,2.5zM3.543,3.3965L2.0313,4.9043L6.2266,9.1094C6.0793,9.7072 6,10.3404 6,11L6,16L4,18L4,19L10.334,19A6.6092,6.6092 0,0 1,9.9238 17L8,17L8,11C8,10.9637 8.0032,10.9287 8.0039,10.8926L10.6738,13.5684A6.6092,6.6092 0,0 1,11.9824 11.8555L3.543,3.3965z"
|
||||||
|
android:fillColor="#555555"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m16.8553,10.7743c-3.3109,0 -6.002,2.6955 -6.002,6.0059 0,3.3104 2.6911,6.0078 6.002,6.0078 3.316,0 6.0117,-2.6969 6.0117,-6.0078 0,-3.3109 -2.6957,-6.0059 -6.0117,-6.0059zM16.8592,12.7861c2.2124,0 3.9941,1.7818 3.9941,3.9941 0,2.2124 -1.7818,3.9941 -3.9941,3.9941 -2.2124,0 -3.9941,-1.7818 -3.9941,-3.9941 0,-2.2124 1.7818,-3.9941 3.9941,-3.9941z"
|
||||||
|
android:fillColor="#555555"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m15.6308,13.426v4.041l3.5195,2.1113 0.8887,-1.4551 -2.6719,-1.5859v-3.1113h-0.4512z"
|
||||||
|
android:fillColor="#555555"/>
|
||||||
|
</vector>
|
|
@ -0,0 +1,15 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:pathData="M12,2.5C11.17,2.5 10.5,3.17 10.5,4L10.5,4.6797C9.556,4.9041 8.749,5.3367 8.0859,5.9219L9.5273,7.3672C10.1748,6.8243 11.0077,6.5 12,6.5C14.1766,6.5 15.6028,8.0429 15.9277,10.0879A6.6092,6.6092 0,0 1,16.502 10.0371A6.6092,6.6092 0,0 1,17.9609 10.2031C17.7024,7.4927 16.1179,5.2999 13.5,4.6797L13.5,4C13.5,3.17 12.83,2.5 12,2.5zM3.543,3.3965L2.0313,4.9043L6.2266,9.1094C6.0793,9.7072 6,10.3404 6,11L6,16L4,18L4,19L10.334,19A6.6092,6.6092 0,0 1,9.9238 17L8,17L8,11C8,10.9637 8.0032,10.9287 8.0039,10.8926L10.6738,13.5684A6.6092,6.6092 0,0 1,11.9824 11.8555L3.543,3.3965z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m16.8553,10.7743c-3.3109,0 -6.002,2.6955 -6.002,6.0059 0,3.3104 2.6911,6.0078 6.002,6.0078 3.316,0 6.0117,-2.6969 6.0117,-6.0078 0,-3.3109 -2.6957,-6.0059 -6.0117,-6.0059zM16.8592,12.7861c2.2124,0 3.9941,1.7818 3.9941,3.9941 0,2.2124 -1.7818,3.9941 -3.9941,3.9941 -2.2124,0 -3.9941,-1.7818 -3.9941,-3.9941 0,-2.2124 1.7818,-3.9941 3.9941,-3.9941z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m15.6308,13.426v4.041l3.5195,2.1113 0.8887,-1.4551 -2.6719,-1.5859v-3.1113h-0.4512z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
</vector>
|
|
@ -0,0 +1,12 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:pathData="M12,2.5C11.17,2.5 10.5,3.17 10.5,4L10.5,4.6797C9.556,4.9041 8.749,5.3367 8.0859,5.9219L9.5273,7.3672C10.1748,6.8243 11.0077,6.5 12,6.5C14.49,6.5 16,8.52 16,11L16,13.8555L18,15.8613L18,11C18,7.93 16.37,5.3597 13.5,4.6797L13.5,4C13.5,3.17 12.83,2.5 12,2.5zM6.7715,7.6289C6.2688,8.6106 6,9.762 6,11L6,16L4,18L4,19L18.1172,19L16,16.8789L16,17L8,17L8,11C8,10.3476 8.1073,9.7283 8.3066,9.168L6.7715,7.6289zM10,20C10,21.1 10.9,22 12,22C13.1,22 14,21.1 14,20L10,20z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M3.543,3.3965 L2.0313,4.9043 19.5234,22.4395 21.0352,20.9316Z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
</vector>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
</vector>
|
|
@ -1,10 +1,18 @@
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector android:height="24dp" android:viewportHeight="50"
|
||||||
android:width="48dp"
|
android:viewportWidth="50" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
android:height="48dp"
|
<path android:fillColor="#888888"
|
||||||
android:viewportWidth="24"
|
android:pathData="m7.8399,6.35c-3.58,0 -6.6469,2.817 -6.6469,6.3983v0.003l0.0351,27.8668 -0.8991,6.6347 12.2261,-3.248L42.9487,44.0049c3.58,0 6.6469,-2.8208 6.6469,-6.4022v-24.8545c0,-3.5803 -3.0652,-6.3967 -6.6438,-6.3983h-0.0031zM7.8399,10.8662h35.1088,0.0031c1.2579,0.0013 2.1277,0.9164 2.1277,1.8821v24.8544c0,0.9666 -0.8714,1.8821 -2.1307,1.8821L11.8924,39.4849l-6.2114,1.8768 0.0633,-0.366 -0.0343,-28.2473c0,-0.9665 0.8706,-1.8821 2.13,-1.8821z"
|
||||||
android:viewportHeight="24"
|
android:strokeColor="#00000000" android:strokeWidth="0.754022"/>
|
||||||
android:tint="?attr/colorControlNormal">
|
<path android:fillColor="#888888"
|
||||||
<path
|
android:pathData="m11.5278,32.0849l0,-3.346l7.0363,-3.721q0.3397,-0.1732 0.6551,-0.2596 0.3397,-0.1153 0.6066,-0.1732 0.2912,-0.0288 0.5823,-0.0576l0,-0.2308q-0.2912,-0.0288 -0.5823,-0.1153 -0.2669,-0.0576 -0.6066,-0.1443 -0.3154,-0.1153 -0.6551,-0.2884l-7.0363,-3.721l0,-3.3749l10.8699,5.9132l0,3.6056z"
|
||||||
android:fillColor="@android:color/white"
|
android:strokeColor="#00000000" android:strokeWidth="0.525121"/>
|
||||||
android:pathData="M20,2L4,2c-1.1,0 -2,0.9 -2,2v18l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM20,16L5.17,16L4,17.17L4,4h16v12zM7,9h2v2L7,11zM15,9h2v2h-2zM11,9h2v2h-2z"/>
|
<path android:fillColor="#888888"
|
||||||
|
android:pathData="m10.9661,15.6112l0,4.8516l7.3742,3.9002c0.0157,0.0077 0.0305,0.0128 0.0461,0.0204 -0.0157,0.0077 -0.0305,0.0128 -0.0461,0.0204l-7.3742,3.9002l0,4.8267l0.7961,-0.4333 11.1995,-6.0969l0,-4.463zM12.0931,17.6933 L21.8346,22.9981l0,2.7446l-9.7414,5.2999l0,-1.8679l6.6912,-3.5416 0.0084,-0.0051c0.1961,-0.0992 0.3826,-0.1724 0.5531,-0.2191l0.0127,0l0.0167,-0.0051c0.2034,-0.0691 0.3777,-0.1209 0.5279,-0.1545l1.0684,-0.1046l0,-1.4644l-0.5154,-0.0497c-0.1632,-0.0153 -0.3288,-0.0505 -0.4944,-0.0997l-0.0167,-0.0051 -0.0167,-0.0051c-0.1632,-0.0352 -0.3552,-0.0811 -0.5656,-0.1344 -0.1802,-0.0668 -0.3706,-0.1479 -0.5698,-0.2492l-0.0084,-0.0051 -6.6912,-3.5416z"
|
||||||
|
android:strokeColor="#00000000" android:strokeWidth="0.525121"/>
|
||||||
|
<path android:fillColor="#888888"
|
||||||
|
android:pathData="m26.7503,30.9206l11.6118,0l0,3.1388L26.7503,34.0594Z"
|
||||||
|
android:strokeColor="#00000000" android:strokeWidth="0.525121"/>
|
||||||
|
<path android:fillColor="#888888"
|
||||||
|
android:pathData="m26.1875,30.2775l0,0.6427 0,3.7845l12.7371,0l0,-4.4272zM27.3113,31.563l10.4896,0l0,1.8515l-10.4896,0z"
|
||||||
|
android:strokeColor="#00000000" android:strokeWidth="0.525121"/>
|
||||||
</vector>
|
</vector>
|
||||||
|
|
|
@ -1,4 +1,18 @@
|
||||||
<vector android:height="48dp" android:viewportHeight="24"
|
<vector android:height="48dp" android:viewportHeight="50"
|
||||||
android:viewportWidth="24" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:viewportWidth="50" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="#888888" android:pathData="M20,2L4,2c-1.1,0 -2,0.9 -2,2v18l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM20,16L5.17,16L4,17.17L4,4h16v12zM7,9h2v2L7,11zM15,9h2v2h-2zM11,9h2v2h-2z"/>
|
<path android:fillColor="#888888"
|
||||||
|
android:pathData="m7.8399,6.35c-3.58,0 -6.6469,2.817 -6.6469,6.3983v0.003l0.0351,27.8668 -0.8991,6.6347 12.2261,-3.248L42.9487,44.0049c3.58,0 6.6469,-2.8208 6.6469,-6.4022v-24.8545c0,-3.5803 -3.0652,-6.3967 -6.6438,-6.3983h-0.0031zM7.8399,10.8662h35.1088,0.0031c1.2579,0.0013 2.1277,0.9164 2.1277,1.8821v24.8544c0,0.9666 -0.8714,1.8821 -2.1307,1.8821L11.8924,39.4849l-6.2114,1.8768 0.0633,-0.366 -0.0343,-28.2473c0,-0.9665 0.8706,-1.8821 2.13,-1.8821z"
|
||||||
|
android:strokeColor="#00000000" android:strokeWidth="0.754022"/>
|
||||||
|
<path android:fillColor="#888888"
|
||||||
|
android:pathData="m11.5278,32.0849l0,-3.346l7.0363,-3.721q0.3397,-0.1732 0.6551,-0.2596 0.3397,-0.1153 0.6066,-0.1732 0.2912,-0.0288 0.5823,-0.0576l0,-0.2308q-0.2912,-0.0288 -0.5823,-0.1153 -0.2669,-0.0576 -0.6066,-0.1443 -0.3154,-0.1153 -0.6551,-0.2884l-7.0363,-3.721l0,-3.3749l10.8699,5.9132l0,3.6056z"
|
||||||
|
android:strokeColor="#00000000" android:strokeWidth="0.525121"/>
|
||||||
|
<path android:fillColor="#888888"
|
||||||
|
android:pathData="m10.9661,15.6112l0,4.8516l7.3742,3.9002c0.0157,0.0077 0.0305,0.0128 0.0461,0.0204 -0.0157,0.0077 -0.0305,0.0128 -0.0461,0.0204l-7.3742,3.9002l0,4.8267l0.7961,-0.4333 11.1995,-6.0969l0,-4.463zM12.0931,17.6933 L21.8346,22.9981l0,2.7446l-9.7414,5.2999l0,-1.8679l6.6912,-3.5416 0.0084,-0.0051c0.1961,-0.0992 0.3826,-0.1724 0.5531,-0.2191l0.0127,0l0.0167,-0.0051c0.2034,-0.0691 0.3777,-0.1209 0.5279,-0.1545l1.0684,-0.1046l0,-1.4644l-0.5154,-0.0497c-0.1632,-0.0153 -0.3288,-0.0505 -0.4944,-0.0997l-0.0167,-0.0051 -0.0167,-0.0051c-0.1632,-0.0352 -0.3552,-0.0811 -0.5656,-0.1344 -0.1802,-0.0668 -0.3706,-0.1479 -0.5698,-0.2492l-0.0084,-0.0051 -6.6912,-3.5416z"
|
||||||
|
android:strokeColor="#00000000" android:strokeWidth="0.525121"/>
|
||||||
|
<path android:fillColor="#888888"
|
||||||
|
android:pathData="m26.7503,30.9206l11.6118,0l0,3.1388L26.7503,34.0594Z"
|
||||||
|
android:strokeColor="#00000000" android:strokeWidth="0.525121"/>
|
||||||
|
<path android:fillColor="#888888"
|
||||||
|
android:pathData="m26.1875,30.2775l0,0.6427 0,3.7845l12.7371,0l0,-4.4272zM27.3113,31.563l10.4896,0l0,1.8515l-10.4896,0z"
|
||||||
|
android:strokeColor="#00000000" android:strokeWidth="0.525121"/>
|
||||||
</vector>
|
</vector>
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
<?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" android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="?android:attr/selectableItemBackground"
|
|
||||||
android:orientation="vertical" android:clickable="true" android:focusable="true">
|
|
||||||
<TextView
|
|
||||||
android:text="Sun, October 31, 2021, 10:43:12"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:id="@+id/detail_item_date_text"
|
|
||||||
android:layout_marginStart="16dp"
|
|
||||||
android:layout_marginEnd="16dp"
|
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"/>
|
|
||||||
<TextView
|
|
||||||
android:text="This is a very very very long message. It could be as long as 1024 charaters, which is a lot more than you'd think. No, really so far this message is barely 180 characters long. I can't believe how long 1024 bytes are. This is outrageous. Oh you know what, I think I won't type the whole thing. This seems a little too long for a sample text. Well, anyway, it was nice chatting. So far this message is about 400 bytes long. So maybe just double what you see and that's that."
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:id="@+id/detail_item_message_text"
|
|
||||||
android:layout_marginStart="16dp"
|
|
||||||
android:layout_marginEnd="16dp"
|
|
||||||
android:layout_marginBottom="10dp"
|
|
||||||
android:textColor="@color/primaryTextColor"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
|
@ -54,7 +54,7 @@
|
||||||
android:layout_marginTop="-8dp" android:layout_marginBottom="-5dp" android:layout_marginStart="-3dp"/>
|
android:layout_marginTop="-8dp" android:layout_marginBottom="-5dp" android:layout_marginStart="-3dp"/>
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="24dp"
|
android:layout_width="24dp"
|
||||||
android:layout_height="24dp" app:srcCompat="@drawable/ic_bolt_black_24dp"
|
android:layout_height="24dp" app:srcCompat="@drawable/ic_bolt_gray_24dp"
|
||||||
android:id="@+id/add_dialog_instant_image"
|
android:id="@+id/add_dialog_instant_image"
|
||||||
app:layout_constraintTop_toTopOf="@+id/main_item_text"
|
app:layout_constraintTop_toTopOf="@+id/main_item_text"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/main_item_date" android:paddingTop="3dp"
|
app:layout_constraintEnd_toStartOf="@+id/main_item_date" android:paddingTop="3dp"
|
39
app/src/main/res/layout/fragment_detail_item.xml
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<?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:attr/selectableItemBackground"
|
||||||
|
android:orientation="horizontal" android:clickable="true"
|
||||||
|
android:focusable="true" android:paddingBottom="10dp"
|
||||||
|
android:paddingTop="10dp" android:paddingStart="16dp"
|
||||||
|
android:paddingEnd="10dp">
|
||||||
|
<TextView
|
||||||
|
android:text="Sun, October 31, 2021, 10:43:12"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/detail_item_date_text"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Small" app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"/>
|
||||||
|
<TextView
|
||||||
|
android:layout_width="10dp"
|
||||||
|
android:layout_height="10dp" android:id="@+id/detail_item_new"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:background="@drawable/ic_circle"
|
||||||
|
android:gravity="center"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/detail_item_date_text"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/detail_item_date_text"
|
||||||
|
android:layout_marginTop="1dp" app:layout_constraintStart_toEndOf="@+id/detail_item_date_text"
|
||||||
|
android:layout_marginStart="5dp"/>
|
||||||
|
<TextView
|
||||||
|
android:text="This is a very very very long message. It could be as long as 1024 charaters, which is a lot more than you'd think. No, really so far this message is barely 180 characters long. I can't believe how long 1024 bytes are. This is outrageous. Oh you know what, I think I won't type the whole thing. This seems a little too long for a sample text. Well, anyway, it was nice chatting. So far this message is about 400 bytes long. So maybe just double what you see and that's that."
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/detail_item_message_text"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/detail_item_date_text"
|
||||||
|
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
|
@ -8,11 +8,11 @@
|
||||||
android:orientation="horizontal" android:clickable="true"
|
android:orientation="horizontal" android:clickable="true"
|
||||||
android:focusable="true">
|
android:focusable="true">
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="37dp"
|
android:layout_width="35dp"
|
||||||
android:layout_height="37dp" app:srcCompat="@drawable/ic_sms_gray_24dp"
|
android:layout_height="35dp" app:srcCompat="@drawable/ic_sms_gray_24dp"
|
||||||
android:id="@+id/main_item_image" app:layout_constraintTop_toTopOf="parent"
|
android:id="@+id/main_item_image" app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
android:layout_marginStart="15dp" android:layout_marginTop="14dp"/>
|
android:layout_marginStart="15dp" android:layout_marginTop="13dp"/>
|
||||||
<TextView
|
<TextView
|
||||||
android:text="ntfy.sh/example"
|
android:text="ntfy.sh/example"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
@ -32,9 +32,23 @@
|
||||||
android:layout_marginBottom="10dp"/>
|
android:layout_marginBottom="10dp"/>
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="20dp"
|
android:layout_width="20dp"
|
||||||
android:layout_height="24dp" app:srcCompat="@drawable/ic_bolt_black_24dp"
|
android:layout_height="24dp" app:srcCompat="@drawable/ic_notifications_off_time_gray_outline_24dp"
|
||||||
android:id="@+id/main_item_instant_image"
|
android:id="@+id/main_item_notification_disabled_until_image"
|
||||||
app:layout_constraintTop_toTopOf="@+id/main_item_text"
|
app:layout_constraintTop_toTopOf="@+id/main_item_text"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/main_item_notification_disabled_forever_image"
|
||||||
|
android:paddingTop="3dp" android:layout_marginEnd="3dp"/>
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="24dp" app:srcCompat="@drawable/ic_notifications_off_gray_outline_24dp"
|
||||||
|
android:id="@+id/main_item_notification_disabled_forever_image"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/main_item_notification_disabled_until_image"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/main_item_instant_image" android:paddingTop="3dp"
|
||||||
|
android:layout_marginEnd="3dp"/>
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="24dp" app:srcCompat="@drawable/ic_bolt_gray_24dp"
|
||||||
|
android:id="@+id/main_item_instant_image"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/main_item_notification_disabled_forever_image"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/main_item_date" android:paddingTop="3dp"/>
|
app:layout_constraintEnd_toStartOf="@+id/main_item_date" android:paddingTop="3dp"/>
|
||||||
<TextView
|
<TextView
|
||||||
android:text="10:13"
|
android:text="10:13"
|
72
app/src/main/res/layout/fragment_notification_dialog.xml
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingLeft="16dp"
|
||||||
|
android:paddingRight="16dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/notification_dialog_title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingTop="16dp"
|
||||||
|
android:paddingBottom="8dp"
|
||||||
|
android:text="@string/notification_dialog_title"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent" android:paddingStart="5dp" android:paddingEnd="5dp"
|
||||||
|
android:textColor="@color/primaryTextColor"/>
|
||||||
|
<RadioGroup
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/notification_dialog_title"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="10dp">
|
||||||
|
<RadioButton
|
||||||
|
android:text="@string/notification_dialog_30min"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/notification_dialog_30min"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:layout_marginTop="-3dp" android:layout_marginBottom="-3dp"
|
||||||
|
/>
|
||||||
|
<RadioButton
|
||||||
|
android:text="@string/notification_dialog_1h"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/notification_dialog_1h"
|
||||||
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
android:layout_marginTop="-3dp" android:layout_marginBottom="-3dp"
|
||||||
|
/>
|
||||||
|
<RadioButton
|
||||||
|
android:text="@string/notification_dialog_2h"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/notification_dialog_2h"
|
||||||
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
android:layout_marginTop="-3dp" android:layout_marginBottom="-3dp"
|
||||||
|
/>
|
||||||
|
<RadioButton
|
||||||
|
android:text="@string/notification_dialog_8h"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/notification_dialog_8h"
|
||||||
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
android:layout_marginTop="-3dp" android:layout_marginBottom="-3dp"
|
||||||
|
/>
|
||||||
|
<RadioButton
|
||||||
|
android:text="@string/notification_dialog_tomorrow"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/notification_dialog_tomorrow"
|
||||||
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
android:layout_marginTop="-3dp" android:layout_marginBottom="-3dp"
|
||||||
|
/>
|
||||||
|
<RadioButton
|
||||||
|
android:text="@string/notification_dialog_forever"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" android:id="@+id/notification_dialog_forever"
|
||||||
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
android:layout_marginTop="-3dp" android:layout_marginBottom="-3dp"
|
||||||
|
/>
|
||||||
|
</RadioGroup>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -1,4 +0,0 @@
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
|
|
||||||
<item android:id="@+id/main_menu_source" android:title="@string/main_menu_source_title"/>
|
|
||||||
<item android:id="@+id/main_menu_website" android:title="@string/main_menu_website_title"/>
|
|
||||||
</menu>
|
|
|
@ -1,4 +1,10 @@
|
||||||
<menu xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" >
|
<menu xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
<item android:id="@+id/detail_menu_notifications_enabled" android:title="@string/detail_menu_notifications_enabled"
|
||||||
|
app:showAsAction="ifRoom" android:icon="@drawable/ic_notifications_white_24dp"/>
|
||||||
|
<item android:id="@+id/detail_menu_notifications_disabled_until" android:title="@string/detail_menu_notifications_disabled_forever"
|
||||||
|
app:showAsAction="ifRoom" android:icon="@drawable/ic_notifications_off_time_white_outline_24dp"/>
|
||||||
|
<item android:id="@+id/detail_menu_notifications_disabled_forever" android:title="@string/detail_menu_notifications_disabled_forever"
|
||||||
|
app:showAsAction="ifRoom" android:icon="@drawable/ic_notifications_off_white_outline_24dp"/>
|
||||||
<item android:id="@+id/detail_menu_enable_instant" android:title="@string/detail_menu_enable_instant"
|
<item android:id="@+id/detail_menu_enable_instant" android:title="@string/detail_menu_enable_instant"
|
||||||
app:showAsAction="ifRoom" android:icon="@drawable/ic_bolt_outline_white_24dp"/>
|
app:showAsAction="ifRoom" android:icon="@drawable/ic_bolt_outline_white_24dp"/>
|
||||||
<item android:id="@+id/detail_menu_disable_instant" android:title="@string/detail_menu_disable_instant"
|
<item android:id="@+id/detail_menu_disable_instant" android:title="@string/detail_menu_disable_instant"
|
10
app/src/main/res/menu/menu_main_action_bar.xml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<item android:id="@+id/main_menu_notifications_enabled" android:title="@string/main_menu_notifications_enabled"
|
||||||
|
app:showAsAction="ifRoom" android:icon="@drawable/ic_notifications_white_24dp"/>
|
||||||
|
<item android:id="@+id/main_menu_notifications_disabled_until" android:title="@string/main_menu_notifications_disabled_forever"
|
||||||
|
app:showAsAction="ifRoom" android:icon="@drawable/ic_notifications_off_time_white_outline_24dp"/>
|
||||||
|
<item android:id="@+id/main_menu_notifications_disabled_forever" android:title="@string/detail_menu_notifications_disabled_forever"
|
||||||
|
app:showAsAction="ifRoom" android:icon="@drawable/ic_notifications_off_white_outline_24dp"/>
|
||||||
|
<item android:id="@+id/main_menu_source" android:title="@string/main_menu_source_title"/>
|
||||||
|
<item android:id="@+id/main_menu_website" android:title="@string/main_menu_website_title"/>
|
||||||
|
</menu>
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 759 B |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 8 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 12 KiB |
|
@ -21,13 +21,19 @@
|
||||||
|
|
||||||
<!-- Main activity: Action bar -->
|
<!-- Main activity: Action bar -->
|
||||||
<string name="main_action_bar_title">Subscribed topics</string>
|
<string name="main_action_bar_title">Subscribed topics</string>
|
||||||
|
<string name="main_menu_notifications_enabled">Notifications enabled</string>
|
||||||
|
<string name="main_menu_notifications_disabled_forever">Notifications disabled</string>
|
||||||
|
<string name="main_menu_notifications_disabled_until">Notifications disabled until %1$s</string>
|
||||||
<string name="main_menu_source_title">Report a bug</string>
|
<string name="main_menu_source_title">Report a bug</string>
|
||||||
<string name="main_menu_source_url">https://heckel.io/ntfy-android</string>
|
<string name="main_menu_source_url">https://heckel.io/ntfy-android</string>
|
||||||
<string name="main_menu_website_title">Visit ntfy.sh</string>
|
<string name="main_menu_website_title">Visit ntfy.sh</string>
|
||||||
|
|
||||||
<!-- Main activity: Action mode -->
|
<!-- Main activity: Action mode -->
|
||||||
<string name="main_action_mode_menu_unsubscribe">Unsubscribe</string>
|
<string name="main_action_mode_menu_unsubscribe">Unsubscribe</string>
|
||||||
<string name="main_action_mode_delete_dialog_message">Do you really want to unsubscribe from selected topic(s) and permanently delete all the messages you received?</string>
|
<string name="main_action_mode_delete_dialog_message">
|
||||||
|
Do you really want to unsubscribe from selected topic(s) and
|
||||||
|
permanently delete all the messages you received?
|
||||||
|
</string>
|
||||||
<string name="main_action_mode_delete_dialog_permanently_delete">Permanently delete</string>
|
<string name="main_action_mode_delete_dialog_permanently_delete">Permanently delete</string>
|
||||||
<string name="main_action_mode_delete_dialog_cancel">Cancel</string>
|
<string name="main_action_mode_delete_dialog_cancel">Cancel</string>
|
||||||
|
|
||||||
|
@ -38,12 +44,19 @@
|
||||||
<string name="main_item_date_yesterday">Yesterday</string>
|
<string name="main_item_date_yesterday">Yesterday</string>
|
||||||
<string name="main_add_button_description">Add subscription</string>
|
<string name="main_add_button_description">Add subscription</string>
|
||||||
<string name="main_no_subscriptions_text">It looks like you don\'t have any subscriptions yet.</string>
|
<string name="main_no_subscriptions_text">It looks like you don\'t have any subscriptions yet.</string>
|
||||||
<string name="main_how_to_intro">Click the button below to create or subscribe to a topic. After that, you can send messages via PUT or POST and you\'ll receive notifications on your phone.</string>
|
<string name="main_how_to_intro">
|
||||||
<string name="main_how_to_link">For more detailed instructions, check out the ntfy.sh website and documentation.</string>
|
Click the button below to create or subscribe to a topic. After that, you can send
|
||||||
|
messages via PUT or POST and you\'ll receive notifications on your phone.
|
||||||
|
</string>
|
||||||
|
<string name="main_how_to_link">For more detailed instructions, check out the ntfy.sh website and documentation.
|
||||||
|
</string>
|
||||||
|
|
||||||
<!-- Add dialog -->
|
<!-- Add dialog -->
|
||||||
<string name="add_dialog_title">Subscribe to topic</string>
|
<string name="add_dialog_title">Subscribe to topic</string>
|
||||||
<string name="add_dialog_description_below">Topics are not password-protected, so choose a name that\'s not easy to guess. Once subscribed, you can PUT/POST to receive notifications on your phone.</string>
|
<string name="add_dialog_description_below">
|
||||||
|
Topics are not password-protected, so choose a name that\'s not easy to
|
||||||
|
guess. Once subscribed, you can PUT/POST to receive notifications on your phone.
|
||||||
|
</string>
|
||||||
<string name="add_dialog_topic_name_hint">Topic name, e.g. phils_alerts</string>
|
<string name="add_dialog_topic_name_hint">Topic name, e.g. phils_alerts</string>
|
||||||
<string name="add_dialog_use_another_server">Use another server</string>
|
<string name="add_dialog_use_another_server">Use another server</string>
|
||||||
<string name="add_dialog_use_another_server_description">
|
<string name="add_dialog_use_another_server_description">
|
||||||
|
@ -63,7 +76,9 @@
|
||||||
<string name="detail_how_to_intro">To send notifications to this topic, simply PUT or POST to the topic URL.</string>
|
<string name="detail_how_to_intro">To send notifications to this topic, simply PUT or POST to the topic URL.</string>
|
||||||
<string name="detail_how_to_example"><![CDATA[ Example (using curl):<br/><tt>$ curl -d \"Hi\" %1$s</tt> ]]></string>
|
<string name="detail_how_to_example"><![CDATA[ Example (using curl):<br/><tt>$ curl -d \"Hi\" %1$s</tt> ]]></string>
|
||||||
<string name="detail_how_to_link">For more detailed instructions, check out the ntfy.sh website and documentation.</string>
|
<string name="detail_how_to_link">For more detailed instructions, check out the ntfy.sh website and documentation.</string>
|
||||||
<string name="detail_delete_dialog_message">Do you really want to unsubscribe from this topic and delete all of the messages you received?</string>
|
<string name="detail_delete_dialog_message">Do you really want to unsubscribe from this topic and delete all of the
|
||||||
|
messages you received?
|
||||||
|
</string>
|
||||||
<string name="detail_delete_dialog_permanently_delete">Permanently delete</string>
|
<string name="detail_delete_dialog_permanently_delete">Permanently delete</string>
|
||||||
<string name="detail_delete_dialog_cancel">Cancel</string>
|
<string name="detail_delete_dialog_cancel">Cancel</string>
|
||||||
<string name="detail_test_message">This is a test notification from the Ntfy Android app. It was sent at %1$s.</string>
|
<string name="detail_test_message">This is a test notification from the Ntfy Android app. It was sent at %1$s.</string>
|
||||||
|
@ -74,17 +89,35 @@
|
||||||
<string name="detail_instant_info">Instant delivery cannot be disabled for subscriptions from other servers</string>
|
<string name="detail_instant_info">Instant delivery cannot be disabled for subscriptions from other servers</string>
|
||||||
|
|
||||||
<!-- Detail activity: Action bar -->
|
<!-- Detail activity: Action bar -->
|
||||||
<string name="detail_menu_test">Send test notification</string>
|
<string name="detail_menu_notifications_enabled">Notifications enabled</string>
|
||||||
<string name="detail_menu_copy_url">Copy topic address</string>
|
<string name="detail_menu_notifications_disabled_forever">Notifications disabled</string>
|
||||||
|
<string name="detail_menu_notifications_disabled_until">Notifications disabled until %1$s</string>
|
||||||
<string name="detail_menu_enable_instant">Enable instant delivery</string>
|
<string name="detail_menu_enable_instant">Enable instant delivery</string>
|
||||||
<string name="detail_menu_disable_instant">Disable instant delivery</string>
|
<string name="detail_menu_disable_instant">Disable instant delivery</string>
|
||||||
|
<string name="detail_menu_test">Send test notification</string>
|
||||||
|
<string name="detail_menu_copy_url">Copy topic address</string>
|
||||||
<string name="detail_menu_instant_info">Instant delivery enabled</string>
|
<string name="detail_menu_instant_info">Instant delivery enabled</string>
|
||||||
<string name="detail_menu_unsubscribe">Unsubscribe</string>
|
<string name="detail_menu_unsubscribe">Unsubscribe</string>
|
||||||
|
|
||||||
<!-- Detail activity: Action mode -->
|
<!-- Detail activity: Action mode -->
|
||||||
<string name="detail_action_mode_menu_copy">Copy</string>
|
<string name="detail_action_mode_menu_copy">Copy</string>
|
||||||
<string name="detail_action_mode_menu_delete">Delete</string>
|
<string name="detail_action_mode_menu_delete">Delete</string>
|
||||||
<string name="detail_action_mode_delete_dialog_message">Do you really want to permanently delete the selected message(s)?</string>
|
<string name="detail_action_mode_delete_dialog_message">Do you really want to permanently delete the selected message(s)?
|
||||||
|
</string>
|
||||||
<string name="detail_action_mode_delete_dialog_permanently_delete">Permanently delete</string>
|
<string name="detail_action_mode_delete_dialog_permanently_delete">Permanently delete</string>
|
||||||
<string name="detail_action_mode_delete_dialog_cancel">Cancel</string>
|
<string name="detail_action_mode_delete_dialog_cancel">Cancel</string>
|
||||||
|
|
||||||
|
<!-- Notification dialog -->
|
||||||
|
<string name="notification_dialog_title">Pause notifications</string>
|
||||||
|
<string name="notification_dialog_cancel">Cancel</string>
|
||||||
|
<string name="notification_dialog_save">Save</string>
|
||||||
|
<string name="notification_dialog_enabled_toast_message">Notifications re-enabled</string>
|
||||||
|
<string name="notification_dialog_muted_forever_toast_message">Notifications are now paused</string>
|
||||||
|
<string name="notification_dialog_muted_until_toast_message">Notifications are now paused until %1$s</string>
|
||||||
|
<string name="notification_dialog_30min">30 minutes</string>
|
||||||
|
<string name="notification_dialog_1h">1 hour</string>
|
||||||
|
<string name="notification_dialog_2h">2 hours</string>
|
||||||
|
<string name="notification_dialog_8h">8 hours</string>
|
||||||
|
<string name="notification_dialog_tomorrow">Until tomorrow</string>
|
||||||
|
<string name="notification_dialog_forever">Forever</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Before Width: | Height: | Size: 5 KiB After Width: | Height: | Size: 4.6 KiB |
|
@ -2,16 +2,16 @@
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
width="150"
|
width="50mm"
|
||||||
height="150"
|
height="50mm"
|
||||||
viewBox="0 0 39.687498 39.687502"
|
viewBox="0 0 50 50"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg8"
|
id="svg8"
|
||||||
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
||||||
sodipodi:docname="favicon.svg"
|
sodipodi:docname="favicon-full.svg"
|
||||||
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/favicon.png"
|
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/favicon-full.png"
|
||||||
inkscape:export-xdpi="81.919998"
|
inkscape:export-xdpi="65.019997"
|
||||||
inkscape:export-ydpi="81.919998"
|
inkscape:export-ydpi="65.019997"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
@ -24,79 +24,73 @@
|
||||||
id="defs2">
|
id="defs2">
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
id="linearGradient28858">
|
id="linearGradient28858-5">
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#348878;stop-opacity:1"
|
style="stop-color:#348878;stop-opacity:1"
|
||||||
offset="0"
|
offset="0"
|
||||||
id="stop28854" />
|
id="stop28854-3" />
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#56bda8;stop-opacity:1"
|
style="stop-color:#56bda8;stop-opacity:1"
|
||||||
offset="1"
|
offset="1"
|
||||||
id="stop28856" />
|
id="stop28856-5" />
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
id="linearGradient26773">
|
xlink:href="#linearGradient28858-5"
|
||||||
<stop
|
id="linearGradient3255"
|
||||||
style="stop-color:#000000;stop-opacity:1;"
|
x1="160.72209"
|
||||||
offset="0"
|
y1="128.53317"
|
||||||
id="stop26769" />
|
x2="168.41153"
|
||||||
<stop
|
y2="134.32626"
|
||||||
style="stop-color:#000000;stop-opacity:0;"
|
|
||||||
offset="1"
|
|
||||||
id="stop26771" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient13319">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#d3d3d3;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop13315" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#feffff;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop13317" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient13319"
|
|
||||||
id="linearGradient13321"
|
|
||||||
x1="51.147327"
|
|
||||||
y1="81.515579"
|
|
||||||
x2="101.41816"
|
|
||||||
y2="131.78641"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient26773"
|
|
||||||
id="linearGradient26775"
|
|
||||||
x1="24.930517"
|
|
||||||
y1="34.460789"
|
|
||||||
x2="180.95911"
|
|
||||||
y2="190.48938"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient28858"
|
|
||||||
id="linearGradient28860"
|
|
||||||
x1="71.579453"
|
|
||||||
y1="89.347107"
|
|
||||||
x2="94.328819"
|
|
||||||
y2="108.10192"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
gradientUnits="userSpaceOnUse"
|
||||||
gradientTransform="matrix(1.5820285,0,0,1.5820285,-55.86363,-50.199094)" />
|
gradientTransform="matrix(5.5944799,0,0,5.5944799,-845.72623,-630.59839)" />
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB;"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter3958"
|
||||||
|
x="-0.076083149"
|
||||||
|
y="-0.091641662"
|
||||||
|
width="1.1759423"
|
||||||
|
height="1.2114791">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.192157"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood3948" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite3950" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="4"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur3952" />
|
||||||
|
<feOffset
|
||||||
|
dx="3"
|
||||||
|
dy="2.95367"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset3954" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite3956" />
|
||||||
|
</filter>
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#ffffff"
|
pagecolor="#747474"
|
||||||
bordercolor="#666666"
|
bordercolor="#666666"
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="2.1031741"
|
inkscape:zoom="1.8244841"
|
||||||
inkscape:cx="-62.524543"
|
inkscape:cx="-51.247364"
|
||||||
inkscape:cy="67.041525"
|
inkscape:cy="98.109926"
|
||||||
inkscape:document-units="mm"
|
inkscape:document-units="mm"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
|
@ -105,18 +99,49 @@
|
||||||
inkscape:snap-text-baseline="true"
|
inkscape:snap-text-baseline="true"
|
||||||
inkscape:window-width="1863"
|
inkscape:window-width="1863"
|
||||||
inkscape:window-height="1025"
|
inkscape:window-height="1025"
|
||||||
inkscape:window-x="57"
|
inkscape:window-x="1977"
|
||||||
inkscape:window-y="27"
|
inkscape:window-y="27"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="1"
|
||||||
fit-margin-top="0"
|
fit-margin-top="0"
|
||||||
fit-margin-left="0"
|
fit-margin-left="0"
|
||||||
fit-margin-right="0"
|
fit-margin-right="0"
|
||||||
fit-margin-bottom="0"
|
fit-margin-bottom="0"
|
||||||
showguides="true"
|
showguides="false"
|
||||||
inkscape:guide-bbox="true"
|
inkscape:guide-bbox="true"
|
||||||
inkscape:pagecheckerboard="0"
|
inkscape:pagecheckerboard="0">
|
||||||
units="px"
|
<sodipodi:guide
|
||||||
height="129px" />
|
position="10.173514,67.718331"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1770" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="39.965574,62.077508"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1772" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="10.173514,39.789015"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1774" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="-2.3077334,9.9462015"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1776" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="14.990626,36.198285"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4020" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="34.930725,39.789015"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4022" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="12.7026,32.00465"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4024" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="11.377711,17.981227"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4026" />
|
||||||
|
</sodipodi:namedview>
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata5">
|
id="metadata5">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
|
@ -132,48 +157,58 @@
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer2"
|
id="layer2"
|
||||||
inkscape:label="background"
|
inkscape:label="background"
|
||||||
style="display:none"
|
style="display:inline" />
|
||||||
transform="translate(-5.5755696,-7.930188)">
|
|
||||||
<path
|
|
||||||
style="opacity:1;fill:url(#linearGradient13321);fill-opacity:1;stroke-width:0.264583"
|
|
||||||
d="M 51.147327,81.515579 H 101.41816 V 131.78641 H 51.147327 Z"
|
|
||||||
id="rect283"
|
|
||||||
transform="translate(-51.147326,-81.51558)" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer4"
|
|
||||||
inkscape:label="drop shadow"
|
|
||||||
style="display:none"
|
|
||||||
transform="translate(-5.5755696,-7.930188)">
|
|
||||||
<path
|
|
||||||
id="path25977"
|
|
||||||
style="opacity:0.274892;fill:url(#linearGradient26775);fill-opacity:1;stroke:none;stroke-width:0.999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 167.26758,32.443359 -11.3647,41.791513 0.85286,84.027598 L 21.072266,158.26172 52.830078,190 H 190 V 55.175781 Z"
|
|
||||||
transform="scale(0.26458333)"
|
|
||||||
sodipodi:nodetypes="cccccccc" />
|
|
||||||
</g>
|
|
||||||
<g
|
<g
|
||||||
inkscape:label="foreground"
|
inkscape:label="foreground"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-56.722897,-89.445767)"
|
transform="translate(-51.147327,-81.515579)"
|
||||||
style="display:inline">
|
style="display:inline">
|
||||||
<path
|
<path
|
||||||
style="fill:url(#linearGradient28860);fill-opacity:1;stroke-width:1.90318"
|
style="color:#000000;fill:url(#linearGradient3255);stroke:none;stroke-width:3.72347;-inkscape-stroke:none"
|
||||||
inkscape:connector-curvature="0"
|
d="M 94.236816,89.911669 H 59.499347 c -2.388219,0 -4.34216,1.844109 -4.34216,4.098013 l 0.03319,27.754068 -0.648601,3.73856 9.297695,-2.80676 h 30.395197 c 2.388222,0 4.342215,-1.8441 4.342215,-4.09807 V 94.009682 c 0,-2.253904 -1.953993,-4.098013 -4.342215,-4.098013 z"
|
||||||
d="M 92.352819,91.306661 H 61.007838 c -2.154992,0 -3.918145,1.663998 -3.918145,3.697757 v 33.279962 l 7.836262,-7.39553 h 27.426864 c 2.154996,0 3.918132,-1.66402 3.918132,-3.69783 V 95.004418 c 0,-2.033759 -1.763136,-3.697757 -3.918132,-3.697757 z M 70.80314,107.94664 h -3.918112 v -3.69777 h 3.918112 z m 7.836263,0 h -3.91815 v -3.69777 h 3.91815 z m 7.836224,0 H 82.55752 v -3.69777 h 3.918107 z"
|
id="path7368" />
|
||||||
id="path403" />
|
<path
|
||||||
|
id="path2498"
|
||||||
|
style="color:#000000;fill:#ffffff;stroke:none;stroke-width:0.762343;-inkscape-stroke:none"
|
||||||
|
d="m 58.84854,86.790183 c -3.61952,0 -6.720259,2.848072 -6.720259,6.468906 v 0.0031 l 0.03546,30.272721 -0.90904,6.70792 12.361084,-3.2838 H 94.34501 c 3.619512,0 6.72026,-2.85186 6.72026,-6.47275 V 93.259089 c 0,-3.619798 -3.099027,-6.468906 -6.717176,-6.468906 h -0.0032 z m 0,4.566015 h 35.496477 0.0031 c 1.27174,0 2.15116,0.92648 2.15116,1.902891 v 27.227171 c 0,0.97724 -0.881151,1.92417 -2.154244,1.9029 H 62.945819 l -6.280004,1.89749 0.064,-0.3701 -0.0347,-30.657461 c 0,-0.977177 0.880222,-1.902891 2.153473,-1.902891 z"
|
||||||
|
sodipodi:nodetypes="ssccccsssscsccsssscccccc" />
|
||||||
|
<g
|
||||||
|
id="path1011-6-2"
|
||||||
|
transform="matrix(2.1688984,0,0,2.5784384,-73.131815,-187.22607)"
|
||||||
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;stroke:none;stroke-width:0.525121">
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
||||||
|
id="path7553" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 62.308594,110.31055 v 1.90234 l 3.4375,1.5293 c 0.0073,0.003 0.0142,0.005 0.02148,0.008 -0.0073,0.003 -0.0142,0.005 -0.02148,0.008 l -3.4375,1.5293 v 1.89258 l 0.371093,-0.16992 5.220704,-2.39063 v -1.75 z m 0.52539,0.8164 4.541016,2.08008 v 1.07617 l -4.541016,2.07813 v -0.73242 l 3.119141,-1.38868 0.0039,-0.002 c 0.09141,-0.0389 0.178343,-0.0676 0.257813,-0.0859 h 0.0059 l 0.0078,-0.002 c 0.09483,-0.0271 0.176055,-0.0474 0.246093,-0.0606 l 0.498047,-0.041 v -0.57422 l -0.240234,-0.0195 c -0.07606,-0.006 -0.153294,-0.0198 -0.230469,-0.0391 l -0.0078,-0.002 -0.0078,-0.002 c -0.07608,-0.0138 -0.16556,-0.0318 -0.263672,-0.0527 -0.08398,-0.0262 -0.172736,-0.058 -0.265625,-0.0977 l -0.0039,-0.002 -3.119141,-1.38868 z"
|
||||||
|
id="path7555" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g1224"
|
||||||
|
transform="matrix(2.1624714,0,0,2.4829436,-71.61328,-179.69552)"
|
||||||
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;stroke:none;stroke-width:0.525121">
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 69.17132,117.75404 h 5.428996 v 1.27808 H 69.17132 Z"
|
||||||
|
id="path1220" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 68.908203,117.49219 v 0.26172 1.54101 h 5.955078 v -1.80273 z m 0.525391,0.52344 h 4.904297 v 0.7539 h -4.904297 z"
|
||||||
|
id="path1222" />
|
||||||
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer3"
|
id="layer3"
|
||||||
inkscape:label="round icon preview"
|
inkscape:label="round icon preview"
|
||||||
style="display:none"
|
style="display:none">
|
||||||
transform="translate(-5.5755696,-7.930188)">
|
|
||||||
<path
|
<path
|
||||||
id="path18850"
|
id="path18850-8-1"
|
||||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:0.264583"
|
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:0.255654"
|
||||||
d="M 1e-6,-3e-6 V 50.27083 H 22.272026 A 25.220409,25.220409 0 0 1 0.008786,25.241867 25.220409,25.220409 0 0 1 25.228952,0.021184 25.220409,25.220409 0 0 1 50.270834,22.261687 V -3e-6 Z M 50.270834,28.086655 A 25.220409,25.220409 0 0 1 28.186394,50.27083 h 22.08444 z" />
|
d="M 50.337488,80.973198 V 131.61213 H 101.65302 V 80.973198 Z m 25.676545,1.442307 h 0.555989 a 24.369387,24.369387 0 0 1 23.860308,21.232925 v 6.09963 a 24.369387,24.369387 0 0 1 -21.288308,21.19336 h 21.288308 v 0.0138 H 51.963792 v -0.0158 H 73.428179 A 24.369387,24.369387 0 0 1 51.963792,107.97535 v -2.49089 A 24.369387,24.369387 0 0 1 76.014033,82.415508 Z"
|
||||||
|
transform="translate(-51.147326,-81.51558)" />
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 6 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 75 KiB |
|
@ -2,16 +2,16 @@
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
width="50.270832mm"
|
width="50mm"
|
||||||
height="50.270832mm"
|
height="50mm"
|
||||||
viewBox="0 0 50.270832 50.270832"
|
viewBox="0 0 50 50"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg8"
|
id="svg8"
|
||||||
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
||||||
sodipodi:docname="launcher_full.svg"
|
sodipodi:docname="launcher_full.svg"
|
||||||
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/launcher_full_fg.png"
|
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/launcher_full_bg.png"
|
||||||
inkscape:export-xdpi="258.69"
|
inkscape:export-xdpi="260.10001"
|
||||||
inkscape:export-ydpi="258.69"
|
inkscape:export-ydpi="260.10001"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
@ -24,91 +24,84 @@
|
||||||
id="defs2">
|
id="defs2">
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
id="linearGradient28858">
|
id="linearGradient4714">
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#3d9d89;stop-opacity:1;"
|
style="stop-color:#348878;stop-opacity:1"
|
||||||
offset="0"
|
offset="0"
|
||||||
id="stop28854" />
|
id="stop4710" />
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#6bc5b3;stop-opacity:1"
|
style="stop-color:#52bca6;stop-opacity:1"
|
||||||
offset="1"
|
offset="1"
|
||||||
id="stop28856" />
|
id="stop4712" />
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
id="linearGradient13319">
|
id="linearGradient28858-5">
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#d3d3d3;stop-opacity:1"
|
style="stop-color:#348878;stop-opacity:1"
|
||||||
offset="0"
|
offset="0"
|
||||||
id="stop13315" />
|
id="stop28854-3" />
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#feffff;stop-opacity:1"
|
style="stop-color:#56bda8;stop-opacity:1"
|
||||||
offset="1"
|
offset="1"
|
||||||
id="stop13317" />
|
id="stop28856-5" />
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
id="linearGradient873">
|
xlink:href="#linearGradient28858-5"
|
||||||
<stop
|
id="linearGradient3255"
|
||||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
x1="160.72209"
|
||||||
offset="0"
|
y1="128.53317"
|
||||||
id="stop869" />
|
x2="168.41153"
|
||||||
<stop
|
y2="134.32626"
|
||||||
style="stop-color:#656565;stop-opacity:0"
|
|
||||||
offset="1"
|
|
||||||
id="stop871" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient843">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#000000;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop839" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#434343;stop-opacity:0.88235295"
|
|
||||||
offset="1"
|
|
||||||
id="stop841" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient13319"
|
|
||||||
id="linearGradient13321"
|
|
||||||
x1="51.147327"
|
|
||||||
y1="81.515579"
|
|
||||||
x2="101.41816"
|
|
||||||
y2="131.78641"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient28858"
|
|
||||||
id="linearGradient2290"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
gradientUnits="userSpaceOnUse"
|
||||||
x1="71.579453"
|
gradientTransform="matrix(3.7495873,0,0,3.7495873,-541.79055,-387.59852)" />
|
||||||
y1="89.347107"
|
|
||||||
x2="94.328819"
|
|
||||||
y2="108.10192"
|
|
||||||
gradientTransform="translate(3.1941667,-5.0234847)" />
|
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
xlink:href="#linearGradient843"
|
xlink:href="#linearGradient4714"
|
||||||
id="linearGradient2286"
|
id="linearGradient4633"
|
||||||
|
x1="0.034492966"
|
||||||
|
y1="-0.0003150744"
|
||||||
|
x2="50.319355"
|
||||||
|
y2="50.284546"
|
||||||
gradientUnits="userSpaceOnUse"
|
gradientUnits="userSpaceOnUse"
|
||||||
gradientTransform="matrix(1.8927503,0,0,2.4405445,-114.82403,-248.81767)"
|
gradientTransform="matrix(0.99433502,0,0,0.99433502,-0.03429756,-1.7848888e-6)" />
|
||||||
x1="59.671928"
|
<filter
|
||||||
y1="101.946"
|
style="color-interpolation-filters:sRGB;"
|
||||||
x2="87.224854"
|
inkscape:label="Drop Shadow"
|
||||||
y2="122.54991" />
|
id="filter3958"
|
||||||
<linearGradient
|
x="-0.076083149"
|
||||||
inkscape:collect="always"
|
y="-0.091641662"
|
||||||
xlink:href="#linearGradient873"
|
width="1.1759423"
|
||||||
id="linearGradient2288"
|
height="1.2114791">
|
||||||
gradientUnits="userSpaceOnUse"
|
<feFlood
|
||||||
gradientTransform="matrix(1.8927507,0,0,2.1213386,-114.82405,-216.27591)"
|
flood-opacity="0.192157"
|
||||||
x1="59.671928"
|
flood-color="rgb(0,0,0)"
|
||||||
y1="101.946"
|
result="flood"
|
||||||
x2="87.091209"
|
id="feFlood3948" />
|
||||||
y2="105.0985" />
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite3950" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="4"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur3952" />
|
||||||
|
<feOffset
|
||||||
|
dx="3"
|
||||||
|
dy="2.95367"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset3954" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite3956" />
|
||||||
|
</filter>
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
|
@ -117,9 +110,9 @@
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="1.0217953"
|
inkscape:zoom="1.8244841"
|
||||||
inkscape:cx="119.88703"
|
inkscape:cx="4.6588513"
|
||||||
inkscape:cy="149.73645"
|
inkscape:cy="174.84395"
|
||||||
inkscape:document-units="mm"
|
inkscape:document-units="mm"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
|
@ -135,9 +128,42 @@
|
||||||
fit-margin-left="0"
|
fit-margin-left="0"
|
||||||
fit-margin-right="0"
|
fit-margin-right="0"
|
||||||
fit-margin-bottom="0"
|
fit-margin-bottom="0"
|
||||||
showguides="true"
|
showguides="false"
|
||||||
inkscape:guide-bbox="true"
|
inkscape:guide-bbox="true"
|
||||||
inkscape:pagecheckerboard="0" />
|
inkscape:pagecheckerboard="0">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="10.173514,67.718331"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1770" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="39.965574,62.077508"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1772" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="10.173514,39.789015"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1774" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="-2.3077334,9.9462015"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1776" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="14.990626,36.198285"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4020" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="34.930725,39.789015"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4022" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="12.7026,32.00465"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4024" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="11.377711,17.981227"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4026" />
|
||||||
|
</sodipodi:namedview>
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata5">
|
id="metadata5">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
|
@ -154,67 +180,76 @@
|
||||||
id="layer2"
|
id="layer2"
|
||||||
inkscape:label="background"
|
inkscape:label="background"
|
||||||
style="display:inline">
|
style="display:inline">
|
||||||
<path
|
|
||||||
style="opacity:1;fill:url(#linearGradient13321);fill-opacity:1;stroke-width:0.264583"
|
|
||||||
d="M 51.147327,81.515579 H 101.41816 V 131.78641 H 51.147327 Z"
|
|
||||||
id="rect283"
|
|
||||||
transform="translate(-51.147326,-81.51558)" />
|
|
||||||
<rect
|
<rect
|
||||||
style="display:inline;fill:url(#linearGradient2286);fill-opacity:1;stroke:none;stroke-width:0.269524;stroke-opacity:1"
|
style="fill:url(#linearGradient4633);fill-opacity:1;stroke:none;stroke-width:0.286502;stroke-linejoin:bevel"
|
||||||
id="rect283-1-6"
|
id="rect4545"
|
||||||
width="52.150806"
|
width="50"
|
||||||
height="50.284771"
|
height="50"
|
||||||
x="-1.879971"
|
x="0"
|
||||||
y="-0.013941986" />
|
y="-0.0003150744" />
|
||||||
<rect
|
|
||||||
style="display:inline;fill:url(#linearGradient2288);fill-opacity:1;stroke-width:0.125044"
|
|
||||||
id="rect283-1-9-6"
|
|
||||||
width="52.15081"
|
|
||||||
height="10.823667"
|
|
||||||
x="-1.879971"
|
|
||||||
y="-0.013941986" />
|
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer4"
|
id="layer5"
|
||||||
inkscape:label="drop shadow"
|
inkscape:label="drop shadow"
|
||||||
style="display:none" />
|
style="display:inline">
|
||||||
|
<path
|
||||||
|
id="path3646"
|
||||||
|
style="color:#000000;display:inline;fill:#ffffff;stroke:none;stroke-width:1.93113;-inkscape-stroke:none;filter:url(#filter3958)"
|
||||||
|
d="m 50.400391,46.882812 c -9.16879,0 -17.023438,7.2146 -17.023438,16.386719 v 0.0078 l 0.08984,71.369139 -2.302735,16.99219 31.3125,-8.31836 h 77.841802 c 9.16877,0 17.02344,-7.22425 17.02344,-16.39648 V 63.269531 c 0,-9.169496 -7.85031,-16.382463 -17.01563,-16.386719 h -0.008 z m 0,11.566407 h 89.917969 0.008 c 3.22151,0.0033 5.44922,2.346918 5.44922,4.820312 v 63.654299 c 0,2.47551 -2.23164,4.82031 -5.45703,4.82031 H 60.779297 l -15.908203,4.80664 0.162109,-0.9375 -0.08789,-72.343749 c 0,-2.475337 2.229739,-4.820312 5.455078,-4.820312 z"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
</g>
|
||||||
<g
|
<g
|
||||||
inkscape:label="foreground"
|
inkscape:label="foreground"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-51.147327,-81.515579)"
|
transform="translate(-51.147327,-81.515579)"
|
||||||
style="display:inline">
|
style="display:inline">
|
||||||
<g
|
|
||||||
aria-label=">_"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:8.48274px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.212069"
|
|
||||||
id="text320-0"
|
|
||||||
transform="matrix(1.676594,0,0,1.676594,-47.175732,-81.574619)">
|
|
||||||
<path
|
|
||||||
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.3104px;font-family:'JetBrains Mono';-inkscape-font-specification:'JetBrains Mono, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.212069"
|
|
||||||
id="path1011-6"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
<path
|
|
||||||
d="m 69.17132,117.75404 h 5.428996 v 1.27808 H 69.17132 Z"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.3104px;font-family:'JetBrains Mono';-inkscape-font-specification:'JetBrains Mono, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.212069"
|
|
||||||
id="path1013-2"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
<path
|
<path
|
||||||
style="display:inline;fill:url(#linearGradient2290);fill-opacity:1;stroke-width:1.203"
|
style="color:#000000;fill:url(#linearGradient3255);stroke:none;stroke-width:2.49558;-inkscape-stroke:none"
|
||||||
inkscape:connector-curvature="0"
|
d="M 88.200706,95.308804 H 64.918622 c -1.600657,0 -2.910245,1.235977 -2.910245,2.74661 l 0.02224,18.601596 -0.434711,2.5057 6.231592,-1.88118 h 20.371766 c 1.600658,0 2.910282,-1.23597 2.910282,-2.74664 V 98.055414 c 0,-1.510633 -1.309624,-2.74661 -2.910282,-2.74661 z"
|
||||||
d="m 96.881755,84.422283 h -19.81315 c -1.36217,0 -2.47666,1.05181 -2.47666,2.33735 v 21.036237 l 4.9533,-4.67471 h 17.33651 c 1.36217,0 2.476645,-1.05183 2.476645,-2.3374 V 86.759633 c 0,-1.28554 -1.114475,-2.33735 -2.476645,-2.33735 z m -13.62154,10.51812 h -2.47664 v -2.33735 h 2.47664 z m 4.9533,0 h -2.47666 v -2.33735 h 2.47666 z m 4.95327,0 h -2.47663 v -2.33735 h 2.47663 z"
|
id="path7368" />
|
||||||
id="path403-1" />
|
<path
|
||||||
|
id="path2498"
|
||||||
|
style="color:#000000;fill:#ffffff;stroke:none;stroke-width:1.93113;-inkscape-stroke:none"
|
||||||
|
d="m 50.400391,46.882812 c -9.16879,0 -17.023438,7.2146 -17.023438,16.386719 v 0.0078 l 0.08984,71.369139 -2.302735,16.99219 31.3125,-8.31836 h 77.841802 c 9.16877,0 17.02344,-7.22425 17.02344,-16.39648 V 63.269531 c 0,-9.169496 -7.85031,-16.382463 -17.01563,-16.386719 h -0.008 z m 0,11.566407 h 89.917969 0.008 c 3.22151,0.0033 5.44922,2.346918 5.44922,4.820312 v 63.654299 c 0,2.47551 -2.23164,4.82031 -5.45703,4.82031 H 60.779297 l -15.908203,4.80664 0.162109,-0.9375 -0.08789,-72.343749 c 0,-2.475337 2.229739,-4.820312 5.455078,-4.820312 z"
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,51.147327,81.515579)" />
|
||||||
|
<g
|
||||||
|
id="path1011-6-2"
|
||||||
|
transform="matrix(1.4536603,0,0,1.728146,-23.97473,-90.437157)"
|
||||||
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;stroke:none;stroke-width:0.525121">
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
||||||
|
id="path7553" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 62.308594,110.31055 v 1.90234 l 3.4375,1.5293 c 0.0073,0.003 0.0142,0.005 0.02148,0.008 -0.0073,0.003 -0.0142,0.005 -0.02148,0.008 l -3.4375,1.5293 v 1.89258 l 0.371093,-0.16992 5.220704,-2.39063 v -1.75 z m 0.52539,0.8164 4.541016,2.08008 v 1.07617 l -4.541016,2.07813 v -0.73242 l 3.119141,-1.38868 0.0039,-0.002 c 0.09141,-0.0389 0.178343,-0.0676 0.257813,-0.0859 h 0.0059 l 0.0078,-0.002 c 0.09483,-0.0271 0.176055,-0.0474 0.246093,-0.0606 l 0.498047,-0.041 v -0.57422 l -0.240234,-0.0195 c -0.07606,-0.006 -0.153294,-0.0198 -0.230469,-0.0391 l -0.0078,-0.002 -0.0078,-0.002 c -0.07608,-0.0138 -0.16556,-0.0318 -0.263672,-0.0527 -0.08398,-0.0262 -0.172736,-0.058 -0.265625,-0.0977 l -0.0039,-0.002 -3.119141,-1.38868 z"
|
||||||
|
id="path7555" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g1224"
|
||||||
|
transform="matrix(1.4493527,0,0,1.6641427,-22.956963,-85.389973)"
|
||||||
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;stroke:none;stroke-width:0.525121">
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 69.17132,117.75404 h 5.428996 v 1.27808 H 69.17132 Z"
|
||||||
|
id="path1220" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 68.908203,117.49219 v 0.26172 1.54101 h 5.955078 v -1.80273 z m 0.525391,0.52344 h 4.904297 v 0.7539 h -4.904297 z"
|
||||||
|
id="path1222" />
|
||||||
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer3"
|
id="layer3"
|
||||||
inkscape:label="round icon preview"
|
inkscape:label="round icon preview"
|
||||||
style="display:none">
|
style="display:inline">
|
||||||
<path
|
<path
|
||||||
id="path18850-8"
|
id="path18850-8-1"
|
||||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:0.264583"
|
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:0.255654"
|
||||||
d="m -29.394586,-30.646711 v 10.93008 h -3.240629 v 75.33081 h 11.515059 v 34.12815 h 85.1023 v -32.27349 h 1.50792 v -60.82832 h -3.2489 v -27.28723 z M -0.146759,-1e-6 h 50.417593 v 50.32974 H -0.146759 v -0.0139 H 22.067389 A 25.220409,25.220409 0 0 1 -0.146759,26.548769 v -2.57866 a 25.220409,25.220409 0 0 1 25.171073,-23.90396 25.220409,25.220409 0 0 1 25.04188,22.2405 V 0.044959 H -0.146759 Z m 50.212953,28.13162 a 25.220409,25.220409 0 0 1 -22.084437,22.18417 h 22.084437 z" />
|
d="M 50.337488,80.973198 V 131.61213 H 101.65302 V 80.973198 Z m 25.676545,1.442307 h 0.555989 a 24.369387,24.369387 0 0 1 23.860308,21.232925 v 6.09963 a 24.369387,24.369387 0 0 1 -21.288308,21.19336 h 21.288308 v 0.0138 H 51.963792 v -0.0158 H 73.428179 A 24.369387,24.369387 0 0 1 51.963792,107.97535 v -2.49089 A 24.369387,24.369387 0 0 1 76.014033,82.415508 Z"
|
||||||
|
transform="translate(-51.147326,-81.51558)" />
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 22 KiB |
BIN
assets/launcher_full_round.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
253
assets/launcher_full_round.svg
Normal file
|
@ -0,0 +1,253 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="50mm"
|
||||||
|
height="50mm"
|
||||||
|
viewBox="0 0 50 50"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
||||||
|
sodipodi:docname="launcher_full_round.svg"
|
||||||
|
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/launcher_full_bg.png"
|
||||||
|
inkscape:export-xdpi="260.10001"
|
||||||
|
inkscape:export-ydpi="260.10001"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient4714">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#348878;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop4710" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#52bca6;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop4712" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient28858-5">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#348878;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop28854-3" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#56bda8;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop28856-5" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient28858-5"
|
||||||
|
id="linearGradient3255"
|
||||||
|
x1="160.72209"
|
||||||
|
y1="128.53317"
|
||||||
|
x2="168.41153"
|
||||||
|
y2="134.32626"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(3.7495873,0,0,3.7495873,-541.79055,-387.59852)" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4714"
|
||||||
|
id="linearGradient4633"
|
||||||
|
x1="0.034492966"
|
||||||
|
y1="-0.0003150744"
|
||||||
|
x2="50.319355"
|
||||||
|
y2="50.284546"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(3.7581166,0,0,3.7581166,-0.12962857,-6.7460364e-6)" />
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB;"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter3958"
|
||||||
|
x="-0.076083149"
|
||||||
|
y="-0.091641662"
|
||||||
|
width="1.1759423"
|
||||||
|
height="1.2114791">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.192157"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood3948" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite3950" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="4"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur3952" />
|
||||||
|
<feOffset
|
||||||
|
dx="3"
|
||||||
|
dy="2.95367"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset3954" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite3956" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="2.5802102"
|
||||||
|
inkscape:cx="46.701622"
|
||||||
|
inkscape:cy="144.56187"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer2"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:measure-start="0,0"
|
||||||
|
inkscape:measure-end="0,0"
|
||||||
|
inkscape:snap-text-baseline="true"
|
||||||
|
inkscape:window-width="1863"
|
||||||
|
inkscape:window-height="1025"
|
||||||
|
inkscape:window-x="1977"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
showguides="false"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:pagecheckerboard="0">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="10.173514,67.718331"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1770" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="39.965574,62.077508"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1772" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="10.173514,39.789015"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1774" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="-2.3077334,9.9462015"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1776" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="14.990626,36.198285"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4020" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="34.930725,39.789015"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4022" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="12.7026,32.00465"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4024" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="11.377711,17.981227"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4026" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer2"
|
||||||
|
inkscape:label="background"
|
||||||
|
style="display:inline">
|
||||||
|
<path
|
||||||
|
id="rect4545"
|
||||||
|
style="fill:url(#linearGradient4633);fill-opacity:1;stroke:none;stroke-width:1.08284;stroke-linejoin:bevel"
|
||||||
|
d="M 94.488281 0 A 94.488189 94.488189 0 0 0 0 94.488281 A 94.488189 94.488189 0 0 0 94.435547 188.97461 L 94.541016 188.97461 A 94.488189 94.488189 0 0 0 188.97656 94.488281 A 94.488189 94.488189 0 0 0 94.488281 0 z "
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer5"
|
||||||
|
inkscape:label="drop shadow"
|
||||||
|
style="display:inline">
|
||||||
|
<path
|
||||||
|
id="path3646"
|
||||||
|
style="color:#000000;display:inline;fill:#ffffff;stroke:none;stroke-width:1.93113;-inkscape-stroke:none;filter:url(#filter3958)"
|
||||||
|
d="m 50.400391,46.882812 c -9.16879,0 -17.023438,7.2146 -17.023438,16.386719 v 0.0078 l 0.08984,71.369139 -2.302735,16.99219 31.3125,-8.31836 h 77.841802 c 9.16877,0 17.02344,-7.22425 17.02344,-16.39648 V 63.269531 c 0,-9.169496 -7.85031,-16.382463 -17.01563,-16.386719 h -0.008 z m 0,11.566407 h 89.917969 0.008 c 3.22151,0.0033 5.44922,2.346918 5.44922,4.820312 v 63.654299 c 0,2.47551 -2.23164,4.82031 -5.45703,4.82031 H 60.779297 l -15.908203,4.80664 0.162109,-0.9375 -0.08789,-72.343749 c 0,-2.475337 2.229739,-4.820312 5.455078,-4.820312 z"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:label="foreground"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-51.147327,-81.515579)"
|
||||||
|
style="display:inline">
|
||||||
|
<path
|
||||||
|
style="color:#000000;fill:url(#linearGradient3255);stroke:none;stroke-width:2.49558;-inkscape-stroke:none"
|
||||||
|
d="M 88.200706,95.308804 H 64.918622 c -1.600657,0 -2.910245,1.235977 -2.910245,2.74661 l 0.02224,18.601596 -0.434711,2.5057 6.231592,-1.88118 h 20.371766 c 1.600658,0 2.910282,-1.23597 2.910282,-2.74664 V 98.055414 c 0,-1.510633 -1.309624,-2.74661 -2.910282,-2.74661 z"
|
||||||
|
id="path7368" />
|
||||||
|
<path
|
||||||
|
id="path2498"
|
||||||
|
style="color:#000000;fill:#ffffff;stroke:none;stroke-width:1.93113;-inkscape-stroke:none"
|
||||||
|
d="m 50.400391,46.882812 c -9.16879,0 -17.023438,7.2146 -17.023438,16.386719 v 0.0078 l 0.08984,71.369139 -2.302735,16.99219 31.3125,-8.31836 h 77.841802 c 9.16877,0 17.02344,-7.22425 17.02344,-16.39648 V 63.269531 c 0,-9.169496 -7.85031,-16.382463 -17.01563,-16.386719 h -0.008 z m 0,11.566407 h 89.917969 0.008 c 3.22151,0.0033 5.44922,2.346918 5.44922,4.820312 v 63.654299 c 0,2.47551 -2.23164,4.82031 -5.45703,4.82031 H 60.779297 l -15.908203,4.80664 0.162109,-0.9375 -0.08789,-72.343749 c 0,-2.475337 2.229739,-4.820312 5.455078,-4.820312 z"
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,51.147327,81.515579)" />
|
||||||
|
<g
|
||||||
|
id="path1011-6-2"
|
||||||
|
transform="matrix(1.4536603,0,0,1.728146,-23.97473,-90.437157)"
|
||||||
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;stroke:none;stroke-width:0.525121">
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
||||||
|
id="path7553" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 62.308594,110.31055 v 1.90234 l 3.4375,1.5293 c 0.0073,0.003 0.0142,0.005 0.02148,0.008 -0.0073,0.003 -0.0142,0.005 -0.02148,0.008 l -3.4375,1.5293 v 1.89258 l 0.371093,-0.16992 5.220704,-2.39063 v -1.75 z m 0.52539,0.8164 4.541016,2.08008 v 1.07617 l -4.541016,2.07813 v -0.73242 l 3.119141,-1.38868 0.0039,-0.002 c 0.09141,-0.0389 0.178343,-0.0676 0.257813,-0.0859 h 0.0059 l 0.0078,-0.002 c 0.09483,-0.0271 0.176055,-0.0474 0.246093,-0.0606 l 0.498047,-0.041 v -0.57422 l -0.240234,-0.0195 c -0.07606,-0.006 -0.153294,-0.0198 -0.230469,-0.0391 l -0.0078,-0.002 -0.0078,-0.002 c -0.07608,-0.0138 -0.16556,-0.0318 -0.263672,-0.0527 -0.08398,-0.0262 -0.172736,-0.058 -0.265625,-0.0977 l -0.0039,-0.002 -3.119141,-1.38868 z"
|
||||||
|
id="path7555" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g1224"
|
||||||
|
transform="matrix(1.4493527,0,0,1.6641427,-22.956963,-85.389973)"
|
||||||
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;stroke:none;stroke-width:0.525121">
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 69.17132,117.75404 h 5.428996 v 1.27808 H 69.17132 Z"
|
||||||
|
id="path1220" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 68.908203,117.49219 v 0.26172 1.54101 h 5.955078 v -1.80273 z m 0.525391,0.52344 h 4.904297 v 0.7539 h -4.904297 z"
|
||||||
|
id="path1222" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer3"
|
||||||
|
inkscape:label="round icon preview"
|
||||||
|
style="display:none">
|
||||||
|
<path
|
||||||
|
id="path18850-8-1"
|
||||||
|
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:0.255654"
|
||||||
|
d="M 50.337488,80.973198 V 131.61213 H 101.65302 V 80.973198 Z m 25.676545,1.442307 h 0.555989 a 24.369387,24.369387 0 0 1 23.860308,21.232925 v 6.09963 a 24.369387,24.369387 0 0 1 -21.288308,21.19336 h 21.288308 v 0.0138 H 51.963792 v -0.0158 H 73.428179 A 24.369387,24.369387 0 0 1 51.963792,107.97535 v -2.49089 A 24.369387,24.369387 0 0 1 76.014033,82.415508 Z"
|
||||||
|
transform="translate(-51.147326,-81.51558)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 3.5 KiB |
|
@ -2,16 +2,16 @@
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
width="150"
|
width="39.258278mm"
|
||||||
height="150"
|
height="33.578144mm"
|
||||||
viewBox="0 0 39.687498 39.687502"
|
viewBox="0 0 39.258278 33.578144"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg8"
|
id="svg8"
|
||||||
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
||||||
sodipodi:docname="logo_website.svg"
|
sodipodi:docname="logo_website.svg"
|
||||||
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/favicon.png"
|
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/logo_website.png"
|
||||||
inkscape:export-xdpi="81.919998"
|
inkscape:export-xdpi="65.054222"
|
||||||
inkscape:export-ydpi="81.919998"
|
inkscape:export-ydpi="65.054222"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
@ -24,112 +24,62 @@
|
||||||
id="defs2">
|
id="defs2">
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
id="linearGradient28858">
|
id="linearGradient28858-5">
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#3d9d89;stop-opacity:1;"
|
style="stop-color:#348878;stop-opacity:1"
|
||||||
offset="0"
|
offset="0"
|
||||||
id="stop28854" />
|
id="stop28854-3" />
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#6bc5b3;stop-opacity:1"
|
style="stop-color:#56bda8;stop-opacity:1"
|
||||||
offset="1"
|
offset="1"
|
||||||
id="stop28856" />
|
id="stop28856-5" />
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
id="linearGradient26773">
|
xlink:href="#linearGradient28858-5"
|
||||||
<stop
|
id="linearGradient3255"
|
||||||
style="stop-color:#000000;stop-opacity:1;"
|
x1="160.72209"
|
||||||
offset="0"
|
y1="128.53317"
|
||||||
id="stop26769" />
|
x2="168.41153"
|
||||||
<stop
|
y2="134.32626"
|
||||||
style="stop-color:#000000;stop-opacity:0;"
|
|
||||||
offset="1"
|
|
||||||
id="stop26771" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient13319">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#d3d3d3;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop13315" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#feffff;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop13317" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient873">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop869" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#656565;stop-opacity:0"
|
|
||||||
offset="1"
|
|
||||||
id="stop871" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient843">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#000000;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop839" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#434343;stop-opacity:0.88235295"
|
|
||||||
offset="1"
|
|
||||||
id="stop841" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient843"
|
|
||||||
id="linearGradient845"
|
|
||||||
x1="59.671928"
|
|
||||||
y1="101.946"
|
|
||||||
x2="87.224854"
|
|
||||||
y2="122.54991"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
gradientUnits="userSpaceOnUse"
|
||||||
gradientTransform="matrix(1.302925,0,0,1.302925,-20.878025,-33.638325)" />
|
gradientTransform="matrix(3.7495873,0,0,3.7495873,-541.79055,-387.59852)" />
|
||||||
<linearGradient
|
<filter
|
||||||
inkscape:collect="always"
|
style="color-interpolation-filters:sRGB"
|
||||||
xlink:href="#linearGradient873"
|
inkscape:label="Drop Shadow"
|
||||||
id="linearGradient875"
|
id="filter3958"
|
||||||
x1="59.671928"
|
x="-0.076083149"
|
||||||
y1="101.946"
|
y="-0.091641662"
|
||||||
x2="87.091209"
|
width="1.1759423"
|
||||||
y2="105.0985"
|
height="1.2114791">
|
||||||
gradientUnits="userSpaceOnUse"
|
<feFlood
|
||||||
gradientTransform="matrix(1.3104386,0,0,1.302925,-21.326379,-33.638325)" />
|
flood-opacity="0.192157"
|
||||||
<linearGradient
|
flood-color="rgb(0,0,0)"
|
||||||
inkscape:collect="always"
|
result="flood"
|
||||||
xlink:href="#linearGradient13319"
|
id="feFlood3948" />
|
||||||
id="linearGradient13321"
|
<feComposite
|
||||||
x1="51.147327"
|
in="flood"
|
||||||
y1="81.515579"
|
in2="SourceGraphic"
|
||||||
x2="101.41816"
|
operator="in"
|
||||||
y2="131.78641"
|
result="composite1"
|
||||||
gradientUnits="userSpaceOnUse" />
|
id="feComposite3950" />
|
||||||
<linearGradient
|
<feGaussianBlur
|
||||||
inkscape:collect="always"
|
in="composite1"
|
||||||
xlink:href="#linearGradient26773"
|
stdDeviation="4"
|
||||||
id="linearGradient26775"
|
result="blur"
|
||||||
x1="24.930517"
|
id="feGaussianBlur3952" />
|
||||||
y1="34.460789"
|
<feOffset
|
||||||
x2="180.95911"
|
dx="3"
|
||||||
y2="190.48938"
|
dy="2.95367"
|
||||||
gradientUnits="userSpaceOnUse" />
|
result="offset"
|
||||||
<linearGradient
|
id="feOffset3954" />
|
||||||
inkscape:collect="always"
|
<feComposite
|
||||||
xlink:href="#linearGradient28858"
|
in="SourceGraphic"
|
||||||
id="linearGradient28860"
|
in2="offset"
|
||||||
x1="71.579453"
|
operator="over"
|
||||||
y1="89.347107"
|
result="composite2"
|
||||||
x2="94.328819"
|
id="feComposite3956" />
|
||||||
y2="108.10192"
|
</filter>
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="translate(0.14712694,2.6458334)" />
|
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
|
@ -138,11 +88,11 @@
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="2.8851069"
|
inkscape:zoom="2.5802102"
|
||||||
inkscape:cx="15.424039"
|
inkscape:cx="24.997963"
|
||||||
inkscape:cy="96.010309"
|
inkscape:cy="107.35559"
|
||||||
inkscape:document-units="mm"
|
inkscape:document-units="mm"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer5"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:measure-start="0,0"
|
inkscape:measure-start="0,0"
|
||||||
inkscape:measure-end="0,0"
|
inkscape:measure-end="0,0"
|
||||||
|
@ -156,11 +106,42 @@
|
||||||
fit-margin-left="0"
|
fit-margin-left="0"
|
||||||
fit-margin-right="0"
|
fit-margin-right="0"
|
||||||
fit-margin-bottom="0"
|
fit-margin-bottom="0"
|
||||||
showguides="true"
|
showguides="false"
|
||||||
inkscape:guide-bbox="true"
|
inkscape:guide-bbox="true"
|
||||||
inkscape:pagecheckerboard="0"
|
inkscape:pagecheckerboard="0">
|
||||||
units="px"
|
<sodipodi:guide
|
||||||
height="129px" />
|
position="4.4680236,61.160885"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1770" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="34.260083,55.520062"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1772" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="4.4680236,33.231569"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1774" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="-8.0132236,3.3887561"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1776" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="9.2851355,29.640839"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4020" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="29.225234,33.231569"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4022" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="6.9971096,25.447204"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4024" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="5.6722206,11.423781"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4026" />
|
||||||
|
</sodipodi:namedview>
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata5">
|
id="metadata5">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
|
@ -174,80 +155,56 @@
|
||||||
</metadata>
|
</metadata>
|
||||||
<g
|
<g
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer2"
|
id="layer5"
|
||||||
inkscape:label="background"
|
|
||||||
style="display:none"
|
|
||||||
transform="translate(-5.5755696,-7.930188)">
|
|
||||||
<path
|
|
||||||
style="opacity:1;fill:url(#linearGradient13321);fill-opacity:1;stroke-width:0.264583"
|
|
||||||
d="M 51.147327,81.515579 H 101.41816 V 131.78641 H 51.147327 Z"
|
|
||||||
id="rect283"
|
|
||||||
transform="translate(-51.147326,-81.51558)" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer4"
|
|
||||||
inkscape:label="drop shadow"
|
inkscape:label="drop shadow"
|
||||||
style="display:none"
|
style="display:inline"
|
||||||
transform="translate(-5.5755696,-7.930188)">
|
transform="translate(-5.7054904,-9.8644105)">
|
||||||
<path
|
<path
|
||||||
id="path25977"
|
id="path3646"
|
||||||
style="opacity:0.274892;fill:url(#linearGradient26775);fill-opacity:1;stroke:none;stroke-width:0.999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="color:#000000;display:inline;fill:#ffffff;stroke:none;stroke-width:1.93113;-inkscape-stroke:none;filter:url(#filter3958)"
|
||||||
d="m 167.26758,32.443359 -11.3647,41.791513 0.85286,84.027598 L 21.072266,158.26172 52.830078,190 H 190 V 55.175781 Z"
|
d="m 50.400391,46.882812 c -9.16879,0 -17.023438,7.2146 -17.023438,16.386719 v 0.0078 l 0.08984,71.369139 -2.302735,16.99219 31.3125,-8.31836 h 77.841802 c 9.16877,0 17.02344,-7.22425 17.02344,-16.39648 V 63.269531 c 0,-9.169496 -7.85031,-16.382463 -17.01563,-16.386719 h -0.008 z m 0,11.566407 h 89.917969 0.008 c 3.22151,0.0033 5.44922,2.346918 5.44922,4.820312 v 63.654299 c 0,2.47551 -2.23164,4.82031 -5.45703,4.82031 H 60.779297 l -15.908203,4.80664 0.162109,-0.9375 -0.08789,-72.343749 c 0,-2.475337 2.229739,-4.820312 5.455078,-4.820312 z"
|
||||||
transform="scale(0.26458333)"
|
transform="scale(0.26458333)" />
|
||||||
sodipodi:nodetypes="cccccccc" />
|
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
inkscape:label="foreground"
|
inkscape:label="foreground"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-56.722897,-89.445767)"
|
transform="translate(-56.852817,-91.379989)"
|
||||||
style="display:inline">
|
style="display:inline">
|
||||||
<rect
|
<path
|
||||||
style="fill:url(#linearGradient845);fill-opacity:1;stroke:none;stroke-width:0.16339;stroke-opacity:1"
|
style="color:#000000;fill:url(#linearGradient3255);stroke:none;stroke-width:2.49558;-inkscape-stroke:none"
|
||||||
id="rect283-1"
|
d="M 88.200706,95.308804 H 64.918622 c -1.600657,0 -2.910245,1.235977 -2.910245,2.74661 l 0.02224,18.601596 -0.434711,2.5057 6.231592,-1.88118 h 20.371766 c 1.600658,0 2.910282,-1.23597 2.910282,-2.74664 V 98.055414 c 0,-1.510633 -1.309624,-2.74661 -2.910282,-2.74661 z"
|
||||||
width="35.899391"
|
id="path7368" />
|
||||||
height="26.845356"
|
<path
|
||||||
x="56.870026"
|
id="path2498"
|
||||||
y="99.189674" />
|
style="color:#000000;fill:#ffffff;stroke:none;stroke-width:1.93113;-inkscape-stroke:none"
|
||||||
|
d="m 50.400391,46.882812 c -9.16879,0 -17.023438,7.2146 -17.023438,16.386719 v 0.0078 l 0.08984,71.369139 -2.302735,16.99219 31.3125,-8.31836 h 77.841802 c 9.16877,0 17.02344,-7.22425 17.02344,-16.39648 V 63.269531 c 0,-9.169496 -7.85031,-16.382463 -17.01563,-16.386719 h -0.008 z m 0,11.566407 h 89.917969 0.008 c 3.22151,0.0033 5.44922,2.346918 5.44922,4.820312 v 63.654299 c 0,2.47551 -2.23164,4.82031 -5.45703,4.82031 H 60.779297 l -15.908203,4.80664 0.162109,-0.9375 -0.08789,-72.343749 c 0,-2.475337 2.229739,-4.820312 5.455078,-4.820312 z"
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,51.147327,81.515579)" />
|
||||||
<g
|
<g
|
||||||
aria-label=">_"
|
id="path1011-6-2"
|
||||||
style="font-style:normal;font-weight:normal;font-size:8.48274px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.212069"
|
transform="matrix(1.4536603,0,0,1.728146,-23.97473,-90.437157)"
|
||||||
id="text320"
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;stroke:none;stroke-width:0.525121">
|
||||||
transform="matrix(1.302925,0,0,1.302925,-20.69267,-34.517514)">
|
|
||||||
<path
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.3104px;font-family:'JetBrains Mono';-inkscape-font-specification:'JetBrains Mono, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.212069"
|
id="path7553" />
|
||||||
id="path1011"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
<path
|
<path
|
||||||
d="m 69.17132,117.75404 h 5.428996 v 1.27808 H 69.17132 Z"
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.3104px;font-family:'JetBrains Mono';-inkscape-font-specification:'JetBrains Mono, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.212069"
|
d="m 62.308594,110.31055 v 1.90234 l 3.4375,1.5293 c 0.0073,0.003 0.0142,0.005 0.02148,0.008 -0.0073,0.003 -0.0142,0.005 -0.02148,0.008 l -3.4375,1.5293 v 1.89258 l 0.371093,-0.16992 5.220704,-2.39063 v -1.75 z m 0.52539,0.8164 4.541016,2.08008 v 1.07617 l -4.541016,2.07813 v -0.73242 l 3.119141,-1.38868 0.0039,-0.002 c 0.09141,-0.0389 0.178343,-0.0676 0.257813,-0.0859 h 0.0059 l 0.0078,-0.002 c 0.09483,-0.0271 0.176055,-0.0474 0.246093,-0.0606 l 0.498047,-0.041 v -0.57422 l -0.240234,-0.0195 c -0.07606,-0.006 -0.153294,-0.0198 -0.230469,-0.0391 l -0.0078,-0.002 -0.0078,-0.002 c -0.07608,-0.0138 -0.16556,-0.0318 -0.263672,-0.0527 -0.08398,-0.0262 -0.172736,-0.058 -0.265625,-0.0977 l -0.0039,-0.002 -3.119141,-1.38868 z"
|
||||||
id="path1013"
|
id="path7555" />
|
||||||
inkscape:connector-curvature="0" />
|
</g>
|
||||||
|
<g
|
||||||
|
id="g1224"
|
||||||
|
transform="matrix(1.4493527,0,0,1.6641427,-22.956963,-85.389973)"
|
||||||
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;stroke:none;stroke-width:0.525121">
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 69.17132,117.75404 h 5.428996 v 1.27808 H 69.17132 Z"
|
||||||
|
id="path1220" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 68.908203,117.49219 v 0.26172 1.54101 h 5.955078 v -1.80273 z m 0.525391,0.52344 h 4.904297 v 0.7539 h -4.904297 z"
|
||||||
|
id="path1222" />
|
||||||
</g>
|
</g>
|
||||||
<rect
|
|
||||||
style="fill:url(#linearGradient875);fill-opacity:1;stroke-width:0.0815418"
|
|
||||||
id="rect283-1-9"
|
|
||||||
width="36.106411"
|
|
||||||
height="6.6478906"
|
|
||||||
x="56.870026"
|
|
||||||
y="99.189674" />
|
|
||||||
<path
|
|
||||||
style="fill:url(#linearGradient28860);fill-opacity:1;stroke-width:1.203"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
d="M 93.834724,92.091602 H 74.021566 c -1.36217,0 -2.476659,1.051813 -2.476659,2.337352 v 21.036256 l 4.9533,-4.67471 h 17.336517 c 1.362173,0 2.476651,-1.05183 2.476651,-2.3374 V 94.428954 c 0,-1.285539 -1.114478,-2.337352 -2.476651,-2.337352 z M 80.213175,102.60973 h -2.476638 v -2.33736 h 2.476638 z m 4.953301,0 h -2.476662 v -2.33736 h 2.476662 z m 4.953276,0 h -2.476635 v -2.33736 h 2.476635 z"
|
|
||||||
id="path403" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer3"
|
|
||||||
inkscape:label="round icon preview"
|
|
||||||
style="display:none"
|
|
||||||
transform="translate(-5.5755696,-7.930188)">
|
|
||||||
<path
|
|
||||||
id="path18850"
|
|
||||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:0.264583"
|
|
||||||
d="M 1e-6,-3e-6 V 50.27083 H 22.272026 A 25.220409,25.220409 0 0 1 0.008786,25.241867 25.220409,25.220409 0 0 1 25.228952,0.021184 25.220409,25.220409 0 0 1 50.270834,22.261687 V -3e-6 Z M 50.270834,28.086655 A 25.220409,25.220409 0 0 1 28.186394,50.27083 h 22.08444 z" />
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9 KiB |
171
assets/main_list_icon.svg
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="50mm"
|
||||||
|
height="50mm"
|
||||||
|
viewBox="0 0 50 49.999999"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
||||||
|
sodipodi:docname="main-list-icon.svg"
|
||||||
|
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/launcher_full_bg.png"
|
||||||
|
inkscape:export-xdpi="260.10001"
|
||||||
|
inkscape:export-ydpi="260.10001"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter3958"
|
||||||
|
x="-0.076083146"
|
||||||
|
y="-0.091641665"
|
||||||
|
width="1.1759423"
|
||||||
|
height="1.2114791">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.192157"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood3948" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite3950" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="4"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur3952" />
|
||||||
|
<feOffset
|
||||||
|
dx="3"
|
||||||
|
dy="2.95367"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset3954" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite3956" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="2.6887315"
|
||||||
|
inkscape:cx="42.40716"
|
||||||
|
inkscape:cy="53.189293"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:measure-start="0,0"
|
||||||
|
inkscape:measure-end="0,0"
|
||||||
|
inkscape:snap-text-baseline="true"
|
||||||
|
inkscape:window-width="1863"
|
||||||
|
inkscape:window-height="1025"
|
||||||
|
inkscape:window-x="57"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
showguides="false"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:rotation="-1">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="9.8690703,86.715698"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1770" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="39.661132,81.074874"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1772" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="9.8690703,58.786381"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1774" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="-2.6121775,28.943566"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1776" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="14.686182,55.195651"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4020" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="34.626283,58.786381"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4022" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="12.398156,51.002016"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4024" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="11.073267,36.978591"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4026" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="foreground"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-51.451771,-87.327048)"
|
||||||
|
style="display:inline">
|
||||||
|
<path
|
||||||
|
id="path2498"
|
||||||
|
style="color:#000000;fill:#777777;fill-opacity:1;stroke:none;stroke-width:0.754022;-inkscape-stroke:none"
|
||||||
|
d="m 59.291677,93.677052 c -3.579993,0 -6.646873,2.817003 -6.646873,6.398338 v 0.003 l 0.03508,27.86677 -0.899113,6.63475 12.226096,-3.24797 H 94.40052 c 3.579985,0 6.64687,-2.82079 6.64687,-6.40216 v -24.85449 c 0,-3.580312 -3.065184,-6.39668 -6.643822,-6.398338 h -0.0031 z m 0,4.516205 h 35.108844 0.0031 c 1.257851,0.0013 2.12767,0.916373 2.12767,1.882133 v 24.85442 c 0,0.9666 -0.871353,1.88213 -2.13072,1.88213 H 63.344139 l -6.211425,1.87679 0.0633,-0.36604 -0.03431,-28.2473 c 0,-0.966516 0.870609,-1.882133 2.129956,-1.882133 z" />
|
||||||
|
<g
|
||||||
|
id="path1011-6-2"
|
||||||
|
transform="matrix(2.1452134,0,0,2.5503116,-71.247407,-178.388)"
|
||||||
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#777777;fill-opacity:1;stroke:none;stroke-width:0.525121">
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#777777;fill-opacity:1;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
||||||
|
id="path7553" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#777777;fill-opacity:1;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 62.308594,110.31055 v 1.90234 l 3.4375,1.5293 c 0.0073,0.003 0.0142,0.005 0.02148,0.008 -0.0073,0.003 -0.0142,0.005 -0.02148,0.008 l -3.4375,1.5293 v 1.89258 l 0.371093,-0.16992 5.220704,-2.39063 v -1.75 z m 0.52539,0.8164 4.541016,2.08008 v 1.07617 l -4.541016,2.07813 v -0.73242 l 3.119141,-1.38868 0.0039,-0.002 c 0.09141,-0.0389 0.178343,-0.0676 0.257813,-0.0859 h 0.0059 l 0.0078,-0.002 c 0.09483,-0.0271 0.176055,-0.0474 0.246093,-0.0606 l 0.498047,-0.041 v -0.57422 l -0.240234,-0.0195 c -0.07606,-0.006 -0.153294,-0.0198 -0.230469,-0.0391 l -0.0078,-0.002 -0.0078,-0.002 c -0.07608,-0.0138 -0.16556,-0.0318 -0.263672,-0.0527 -0.08398,-0.0262 -0.172736,-0.058 -0.265625,-0.0977 l -0.0039,-0.002 -3.119141,-1.38868 z"
|
||||||
|
id="path7555" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g1224"
|
||||||
|
transform="matrix(2.1388566,0,0,2.4558588,-69.745456,-170.93962)"
|
||||||
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#777777;fill-opacity:1;stroke:none;stroke-width:0.525121">
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#777777;fill-opacity:1;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 69.17132,117.75404 h 5.428996 v 1.27808 H 69.17132 Z"
|
||||||
|
id="path1220" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#777777;fill-opacity:1;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 68.908203,117.49219 v 0.26172 1.54101 h 5.955078 v -1.80273 z m 0.525391,0.52344 h 4.904297 v 0.7539 h -4.904297 z"
|
||||||
|
id="path1222" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 7 KiB |
1789
assets/new-launcher-prototyping.svg
Normal file
After Width: | Height: | Size: 132 KiB |
|
@ -2,16 +2,16 @@
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
width="50.270832mm"
|
width="50mm"
|
||||||
height="50.270832mm"
|
height="50mm"
|
||||||
viewBox="0 0 50.270832 50.270832"
|
viewBox="0 0 50 49.999999"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg8"
|
id="svg8"
|
||||||
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
||||||
sodipodi:docname="notification.svg"
|
sodipodi:docname="notification.svg"
|
||||||
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/notification.png"
|
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/launcher_full_bg.png"
|
||||||
inkscape:export-xdpi="258.69"
|
inkscape:export-xdpi="260.10001"
|
||||||
inkscape:export-ydpi="258.69"
|
inkscape:export-ydpi="260.10001"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
@ -20,17 +20,54 @@
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
<defs
|
<defs
|
||||||
id="defs2" />
|
id="defs2">
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter3958"
|
||||||
|
x="-0.076083146"
|
||||||
|
y="-0.091641665"
|
||||||
|
width="1.1759423"
|
||||||
|
height="1.2114791">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.192157"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood3948" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite3950" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="4"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur3952" />
|
||||||
|
<feOffset
|
||||||
|
dx="3"
|
||||||
|
dy="2.95367"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset3954" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite3956" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#000000"
|
pagecolor="#ffffff"
|
||||||
bordercolor="#666666"
|
bordercolor="#666666"
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="0"
|
inkscape:pageopacity="0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="3.6008717"
|
inkscape:zoom="2.6887315"
|
||||||
inkscape:cx="67.067093"
|
inkscape:cx="24.36093"
|
||||||
inkscape:cy="75.814975"
|
inkscape:cy="151.00057"
|
||||||
inkscape:document-units="mm"
|
inkscape:document-units="mm"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
|
@ -46,9 +83,42 @@
|
||||||
fit-margin-left="0"
|
fit-margin-left="0"
|
||||||
fit-margin-right="0"
|
fit-margin-right="0"
|
||||||
fit-margin-bottom="0"
|
fit-margin-bottom="0"
|
||||||
showguides="true"
|
showguides="false"
|
||||||
inkscape:guide-bbox="true"
|
inkscape:guide-bbox="true"
|
||||||
inkscape:pagecheckerboard="0" />
|
inkscape:pagecheckerboard="0">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="9.8690703,86.715698"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1770" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="39.661132,81.074874"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1772" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="9.8690703,58.786381"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1774" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="-2.6121775,28.943566"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1776" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="14.686182,55.195651"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4020" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="34.626283,58.786381"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4022" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="12.398156,51.002016"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4024" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="11.073267,36.978591"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4026" />
|
||||||
|
</sodipodi:namedview>
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata5">
|
id="metadata5">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
|
@ -64,53 +134,37 @@
|
||||||
inkscape:label="foreground"
|
inkscape:label="foreground"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-51.147327,-81.515579)"
|
transform="translate(-51.451771,-87.327048)"
|
||||||
style="display:inline">
|
style="display:inline">
|
||||||
<path
|
<path
|
||||||
style="color:#000000;fill:#ffffff;-inkscape-stroke:none"
|
id="path2498"
|
||||||
d="M 51.996094,87.753906 V 89.6875 126.66602 H 100.70117 V 87.753906 Z m 3.865234,3.865235 H 96.835937 V 122.80078 H 55.861328 Z"
|
style="color:#000000;fill:#338574;fill-opacity:1;stroke:none;stroke-width:0.754022;-inkscape-stroke:none"
|
||||||
id="rect849" />
|
d="m 59.291677,93.677052 c -3.579993,0 -6.646873,2.817003 -6.646873,6.398338 v 0.003 l 0.03508,27.86677 -0.899113,6.63475 12.226096,-3.24797 H 94.40052 c 3.579985,0 6.64687,-2.82079 6.64687,-6.40216 v -24.85449 c 0,-3.580312 -3.065184,-6.39668 -6.643822,-6.398338 h -0.0031 z m 0,4.516205 h 35.108844 0.0031 c 1.257851,0.0013 2.12767,0.916373 2.12767,1.882133 v 24.85442 c 0,0.9666 -0.871353,1.88213 -2.13072,1.88213 H 63.344139 l -6.211425,1.87679 0.0633,-0.36604 -0.03431,-28.2473 c 0,-0.966516 0.870609,-1.882133 2.129956,-1.882133 z" />
|
||||||
<g
|
<g
|
||||||
aria-label=">_"
|
id="path1011-6-2"
|
||||||
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;stroke:#ffffff;stroke-width:0.26299965"
|
transform="matrix(2.1452134,0,0,2.5503116,-71.247407,-178.388)"
|
||||||
id="text320"
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#338574;fill-opacity:1;stroke:none;stroke-width:0.525121">
|
||||||
transform="matrix(2.5168336,0,0,2.6483458,-96.067005,-197.69139)">
|
<path
|
||||||
<g
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#338574;fill-opacity:1;stroke:none;-inkscape-stroke:none"
|
||||||
id="path1011">
|
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
||||||
<path
|
id="path7553" />
|
||||||
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;stroke-width:0.263;-inkscape-stroke:none"
|
<path
|
||||||
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#338574;fill-opacity:1;stroke:none;-inkscape-stroke:none"
|
||||||
id="path1213" />
|
d="m 62.308594,110.31055 v 1.90234 l 3.4375,1.5293 c 0.0073,0.003 0.0142,0.005 0.02148,0.008 -0.0073,0.003 -0.0142,0.005 -0.02148,0.008 l -3.4375,1.5293 v 1.89258 l 0.371093,-0.16992 5.220704,-2.39063 v -1.75 z m 0.52539,0.8164 4.541016,2.08008 v 1.07617 l -4.541016,2.07813 v -0.73242 l 3.119141,-1.38868 0.0039,-0.002 c 0.09141,-0.0389 0.178343,-0.0676 0.257813,-0.0859 h 0.0059 l 0.0078,-0.002 c 0.09483,-0.0271 0.176055,-0.0474 0.246093,-0.0606 l 0.498047,-0.041 v -0.57422 l -0.240234,-0.0195 c -0.07606,-0.006 -0.153294,-0.0198 -0.230469,-0.0391 l -0.0078,-0.002 -0.0078,-0.002 c -0.07608,-0.0138 -0.16556,-0.0318 -0.263672,-0.0527 -0.08398,-0.0262 -0.172736,-0.058 -0.265625,-0.0977 l -0.0039,-0.002 -3.119141,-1.38868 z"
|
||||||
<path
|
id="path7555" />
|
||||||
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
</g>
|
||||||
d="m 62.439453,110.51367 v 1.61328 l 3.357422,1.49414 0.002,0.002 c 0.1094,0.0469 0.215332,0.0855 0.318359,0.11718 l 0.0059,0.002 h 0.0059 c 0.02244,0.005 0.03909,0.007 0.06055,0.0117 -0.02475,0.007 -0.04436,0.0102 -0.07031,0.0176 -0.104318,0.0246 -0.211081,0.0606 -0.320313,0.10743 h -0.002 l -3.357422,1.49414 v 1.60156 l 0.185547,-0.0859 5.144531,-2.35351 v -1.58203 z m 0.261719,0.40821 4.804687,2.19921 v 1.2461 l -4.804687,2.19922 v -1.02344 l 3.201172,-1.42383 c 0.0993,-0.0426 0.193839,-0.0731 0.283203,-0.0937 h 0.0039 l 0.002,-0.002 c 0.100152,-0.0286 0.189304,-0.0484 0.265625,-0.0625 0.0017,-3.2e-4 0.0042,-0.002 0.0059,-0.002 l 0.378906,-0.0312 v -0.33203 l -0.121094,-0.01 c -0.08326,-0.007 -0.166182,-0.022 -0.25,-0.043 h -0.0039 l -0.0039,-0.002 c -0.0778,-0.0141 -0.168362,-0.0315 -0.267579,-0.0527 -0.09247,-0.0284 -0.189935,-0.0641 -0.291015,-0.10742 h -0.002 l -3.201172,-1.42383 z"
|
<g
|
||||||
id="path1215" />
|
id="g1224"
|
||||||
</g>
|
transform="matrix(2.1388566,0,0,2.4558588,-69.745456,-170.93962)"
|
||||||
<g
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#338574;fill-opacity:1;stroke:none;stroke-width:0.525121">
|
||||||
id="path1013">
|
<path
|
||||||
<path
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#338574;fill-opacity:1;stroke:none;-inkscape-stroke:none"
|
||||||
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;stroke-width:0.263;-inkscape-stroke:none"
|
d="m 69.17132,117.75404 h 5.428996 v 1.27808 H 69.17132 Z"
|
||||||
d="m 69.17132,117.75404 h 5.428996 v 1.27808 H 69.17132 Z"
|
id="path1220" />
|
||||||
id="path1219" />
|
<path
|
||||||
<path
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#338574;fill-opacity:1;stroke:none;-inkscape-stroke:none"
|
||||||
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
d="m 68.908203,117.49219 v 0.26172 1.54101 h 5.955078 v -1.80273 z m 0.525391,0.52344 h 4.904297 v 0.7539 h -4.904297 z"
|
||||||
d="m 69.039062,117.62305 v 0.13086 1.41015 h 5.69336 v -1.54101 z m 0.263672,0.26172 h 5.166016 v 1.01562 h -5.166016 z"
|
id="path1222" />
|
||||||
id="path1221" />
|
|
||||||
</g>
|
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="g18852"
|
|
||||||
inkscape:label="round icon preview"
|
|
||||||
style="display:none">
|
|
||||||
<path
|
|
||||||
id="path18850"
|
|
||||||
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke-width:0.999999"
|
|
||||||
d="M 0,0 V 190 H 84.177734 A 95.321232,95.321232 0 0 1 0.03320312,95.402344 95.321232,95.321232 0 0 1 95.353516,0.08007812 95.321232,95.321232 0 0 1 190,84.138672 V 0 Z M 190,106.1543 A 95.321232,95.321232 0 0 1 106.53125,190 H 190 Z"
|
|
||||||
transform="scale(0.26458333)"
|
|
||||||
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/notification.png"
|
|
||||||
inkscape:export-xdpi="258.69"
|
|
||||||
inkscape:export-ydpi="258.69" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 7 KiB |
|
@ -2,16 +2,16 @@
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
width="50.270832mm"
|
width="50mm"
|
||||||
height="50.270832mm"
|
height="50mm"
|
||||||
viewBox="0 0 50.270832 50.270832"
|
viewBox="0 0 50 49.999999"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg8"
|
id="svg8"
|
||||||
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
||||||
sodipodi:docname="notification_instant.svg"
|
sodipodi:docname="notification_instant.svg"
|
||||||
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/notification.png"
|
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/launcher_full_bg.png"
|
||||||
inkscape:export-xdpi="258.69"
|
inkscape:export-xdpi="260.10001"
|
||||||
inkscape:export-ydpi="258.69"
|
inkscape:export-ydpi="260.10001"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
@ -20,17 +20,54 @@
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
<defs
|
<defs
|
||||||
id="defs2" />
|
id="defs2">
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter3958"
|
||||||
|
x="-0.076083146"
|
||||||
|
y="-0.091641665"
|
||||||
|
width="1.1759423"
|
||||||
|
height="1.2114791">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0.192157"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood3948" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite3950" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="4"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur3952" />
|
||||||
|
<feOffset
|
||||||
|
dx="3"
|
||||||
|
dy="2.95367"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset3954" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite3956" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#505050"
|
pagecolor="#ffffff"
|
||||||
bordercolor="#666666"
|
bordercolor="#666666"
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="0"
|
inkscape:pageopacity="0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="3.2922024"
|
inkscape:zoom="0.95061015"
|
||||||
inkscape:cx="108.28617"
|
inkscape:cx="146.74785"
|
||||||
inkscape:cy="72.899528"
|
inkscape:cy="144.11796"
|
||||||
inkscape:document-units="mm"
|
inkscape:document-units="mm"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
|
@ -39,16 +76,49 @@
|
||||||
inkscape:snap-text-baseline="true"
|
inkscape:snap-text-baseline="true"
|
||||||
inkscape:window-width="1863"
|
inkscape:window-width="1863"
|
||||||
inkscape:window-height="1025"
|
inkscape:window-height="1025"
|
||||||
inkscape:window-x="57"
|
inkscape:window-x="1977"
|
||||||
inkscape:window-y="27"
|
inkscape:window-y="27"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="1"
|
||||||
fit-margin-top="0"
|
fit-margin-top="0"
|
||||||
fit-margin-left="0"
|
fit-margin-left="0"
|
||||||
fit-margin-right="0"
|
fit-margin-right="0"
|
||||||
fit-margin-bottom="0"
|
fit-margin-bottom="0"
|
||||||
showguides="true"
|
showguides="false"
|
||||||
inkscape:guide-bbox="true"
|
inkscape:guide-bbox="true"
|
||||||
inkscape:pagecheckerboard="0" />
|
inkscape:pagecheckerboard="0">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="9.8690703,86.715698"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1770" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="39.661132,81.074874"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1772" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="9.8690703,58.786381"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1774" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="-2.6121775,28.943566"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1776" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="14.686182,55.195651"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4020" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="34.626283,58.786381"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4022" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="12.398156,51.002016"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4024" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="11.073267,36.978591"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4026" />
|
||||||
|
</sodipodi:namedview>
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata5">
|
id="metadata5">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
|
@ -64,42 +134,29 @@
|
||||||
inkscape:label="foreground"
|
inkscape:label="foreground"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-51.147327,-81.515579)"
|
transform="translate(-51.451771,-87.327048)"
|
||||||
style="display:inline">
|
style="display:inline">
|
||||||
|
<path
|
||||||
|
id="path2498"
|
||||||
|
style="color:#000000;fill:#338574;fill-opacity:1;stroke:none;stroke-width:2.84985;-inkscape-stroke:none"
|
||||||
|
d="M 29.630859 24 C 16.100177 24 4.5097656 34.647839 4.5097656 48.183594 L 4.5097656 48.193359 L 4.6425781 153.51758 L 1.2441406 178.59375 L 47.453125 166.31836 L 135.83008 166.31836 L 138.27344 149.23438 L 44.947266 149.23438 L 21.470703 156.32812 L 21.710938 154.94336 L 21.580078 48.183594 C 21.580078 44.53062 24.871123 41.068359 29.630859 41.068359 L 162.32617 41.068359 L 162.33789 41.068359 C 167.09197 41.073273 170.37891 44.533477 170.37891 48.183594 L 170.37891 97.283203 L 187.44727 97.283203 L 187.44727 48.181641 C 187.44727 34.649753 175.86345 24.006266 162.33789 24 L 162.32617 24 L 29.630859 24 z M 187.44727 118.95508 C 172.60523 144.85404 165.24675 157.70413 160.31836 166.31836 L 162.32617 166.31836 C 175.85682 166.31836 187.44727 155.65698 187.44727 142.12109 L 187.44727 118.95508 z "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,51.451771,87.327048)" />
|
||||||
<g
|
<g
|
||||||
id="path1011-3-5"
|
id="path1011-6-2"
|
||||||
transform="matrix(2.5168336,0,0,2.6483458,-96.041466,-195.68997)"
|
transform="matrix(2.1452134,0,0,2.5503116,-71.247407,-178.388)"
|
||||||
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ffffff;stroke:#ffffff;stroke-width:0.38733381;stroke-miterlimit:4;stroke-dasharray:none">
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#338574;fill-opacity:1;stroke:none;stroke-width:0.525121">
|
||||||
<path
|
<path
|
||||||
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;stroke-width:0.38733381;stroke-miterlimit:4;stroke-dasharray:none"
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#338574;fill-opacity:1;stroke:none;-inkscape-stroke:none"
|
||||||
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
||||||
id="path1213-5-9" />
|
id="path7553" />
|
||||||
<path
|
<path
|
||||||
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;stroke-width:0.38733381;stroke-miterlimit:4;stroke-dasharray:none"
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#338574;fill-opacity:1;stroke:none;-inkscape-stroke:none"
|
||||||
d="m 62.439453,110.51367 v 1.61328 l 3.357422,1.49414 0.002,0.002 c 0.1094,0.0469 0.215332,0.0855 0.318359,0.11718 l 0.0059,0.002 h 0.0059 c 0.02244,0.005 0.03909,0.007 0.06055,0.0117 -0.02475,0.007 -0.04436,0.0102 -0.07031,0.0176 -0.104318,0.0246 -0.211081,0.0606 -0.320313,0.10743 h -0.002 l -3.357422,1.49414 v 1.60156 l 0.185547,-0.0859 5.144531,-2.35351 v -1.58203 z m 0.261719,0.40821 4.804687,2.19921 v 1.2461 l -4.804687,2.19922 v -1.02344 l 3.201172,-1.42383 c 0.0993,-0.0426 0.193839,-0.0731 0.283203,-0.0937 h 0.0039 l 0.002,-0.002 c 0.100152,-0.0286 0.189304,-0.0484 0.265625,-0.0625 0.0017,-3.2e-4 0.0042,-0.002 0.0059,-0.002 l 0.378906,-0.0312 v -0.33203 l -0.121094,-0.01 c -0.08326,-0.007 -0.166182,-0.022 -0.25,-0.043 h -0.0039 l -0.0039,-0.002 c -0.0778,-0.0141 -0.168362,-0.0315 -0.267579,-0.0527 -0.09247,-0.0284 -0.189935,-0.0641 -0.291015,-0.10742 h -0.002 l -3.201172,-1.42383 z"
|
d="m 62.308594,110.31055 v 1.90234 l 3.4375,1.5293 c 0.0073,0.003 0.0142,0.005 0.02148,0.008 -0.0073,0.003 -0.0142,0.005 -0.02148,0.008 l -3.4375,1.5293 v 1.89258 l 0.371093,-0.16992 5.220704,-2.39063 v -1.75 z m 0.52539,0.8164 4.541016,2.08008 v 1.07617 l -4.541016,2.07813 v -0.73242 l 3.119141,-1.38868 0.0039,-0.002 c 0.09141,-0.0389 0.178343,-0.0676 0.257813,-0.0859 h 0.0059 l 0.0078,-0.002 c 0.09483,-0.0271 0.176055,-0.0474 0.246093,-0.0606 l 0.498047,-0.041 v -0.57422 l -0.240234,-0.0195 c -0.07606,-0.006 -0.153294,-0.0198 -0.230469,-0.0391 l -0.0078,-0.002 -0.0078,-0.002 c -0.07608,-0.0138 -0.16556,-0.0318 -0.263672,-0.0527 -0.08398,-0.0262 -0.172736,-0.058 -0.265625,-0.0977 l -0.0039,-0.002 -3.119141,-1.38868 z"
|
||||||
id="path1215-6-2" />
|
id="path7555" />
|
||||||
</g>
|
</g>
|
||||||
<path
|
|
||||||
id="rect849-7-2"
|
|
||||||
style="color:#000000;display:inline;fill:#ffffff;stroke-width:1;-inkscape-stroke:none"
|
|
||||||
d="m 51.995933,87.753738 v 1.933733 36.978649 h 32.494652 l 0.55191,-3.86541 H 55.861328 V 91.619141 h 40.974757 v 15.391819 h 3.648355 c 0.069,0 0.14316,0.003 0.21652,0.005 V 87.753843 Z m 48.705027,28.311452 c -2.365575,4.12885 -4.510165,7.87275 -6.070935,10.60093 h 6.070945 z" />
|
|
||||||
<path
|
<path
|
||||||
id="path6295"
|
id="path6295"
|
||||||
style="color:#000000;display:inline;fill:#ffffff;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
|
style="color:#000000;display:inline;fill:#338574;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
d="m 91.856545,98.262141 c -4.13939,7.256679 -7.82348,13.714569 -10.21591,17.937429 h 8.58294 l -1.85312,12.96199 c 1.20239,-2.10426 3.89686,-6.80945 10.28775,-17.96015 h -8.65426 z" />
|
d="m 93.131321,102.6768 c -4.13939,7.25668 -7.82348,13.71457 -10.21591,17.93743 h 8.58294 l -1.85312,12.96199 c 1.20239,-2.10426 3.89686,-6.80945 10.287752,-17.96015 h -8.654262 z" />
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="g18852"
|
|
||||||
inkscape:label="round icon preview"
|
|
||||||
style="display:none">
|
|
||||||
<path
|
|
||||||
id="path18850"
|
|
||||||
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke-width:0.999999"
|
|
||||||
d="M 0,0 V 190 H 84.177734 A 95.321232,95.321232 0 0 1 0.03320312,95.402344 95.321232,95.321232 0 0 1 95.353516,0.08007812 95.321232,95.321232 0 0 1 190,84.138672 V 0 Z M 190,106.1543 A 95.321232,95.321232 0 0 1 106.53125,190 H 190 Z"
|
|
||||||
transform="scale(0.26458333)"
|
|
||||||
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/notification.png"
|
|
||||||
inkscape:export-xdpi="258.69"
|
|
||||||
inkscape:export-ydpi="258.69" />
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 6.9 KiB |
1
assets/notifications_black_24dp.svg
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z"/></svg>
|
After Width: | Height: | Size: 280 B |
1
assets/notifications_black_outline_24dp.svg
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.9 2 2 2zm6-6v-5c0-3.07-1.63-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.64 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2zm-2 1H8v-6c0-2.48 1.51-4.5 4-4.5s4 2.02 4 4.5v6z"/></svg>
|
After Width: | Height: | Size: 366 B |
46
assets/notifications_off_black_outline_24dp.svg
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
height="24px"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
width="24px"
|
||||||
|
fill="#000000"
|
||||||
|
version="1.1"
|
||||||
|
id="svg870"
|
||||||
|
sodipodi:docname="notifications_off_black_outline_24dp.svg"
|
||||||
|
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs874" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview872"
|
||||||
|
pagecolor="#505050"
|
||||||
|
bordercolor="#eeeeee"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:pageshadow="0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="19.563079"
|
||||||
|
inkscape:cx="11.884632"
|
||||||
|
inkscape:cy="18.606478"
|
||||||
|
inkscape:window-width="1863"
|
||||||
|
inkscape:window-height="1025"
|
||||||
|
inkscape:window-x="57"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg870" />
|
||||||
|
<path
|
||||||
|
d="M0 0h24v24H0V0z"
|
||||||
|
fill="none"
|
||||||
|
id="path866" />
|
||||||
|
<path
|
||||||
|
id="path868"
|
||||||
|
d="M 12 2.5 C 11.17 2.5 10.5 3.17 10.5 4 L 10.5 4.6796875 C 9.5560271 4.9041286 8.7489952 5.336721 8.0859375 5.921875 L 9.5273438 7.3671875 C 10.17483 6.8242961 11.007683 6.5 12 6.5 C 14.49 6.5 16 8.52 16 11 L 16 13.855469 L 18 15.861328 L 18 11 C 18 7.93 16.37 5.3596875 13.5 4.6796875 L 13.5 4 C 13.5 3.17 12.83 2.5 12 2.5 z M 6.7714844 7.6289062 C 6.2688257 8.6105696 6 9.7619884 6 11 L 6 16 L 4 18 L 4 19 L 18.117188 19 L 16 16.878906 L 16 17 L 8 17 L 8 11 C 8 10.347635 8.1073172 9.7282789 8.3066406 9.1679688 L 6.7714844 7.6289062 z M 10 20 C 10 21.1 10.9 22 12 22 C 13.1 22 14 21.1 14 20 L 10 20 z " />
|
||||||
|
<path
|
||||||
|
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||||
|
d="M 3.5429688,3.3964844 2.03125,4.9042969 19.523437,22.439453 21.035156,20.931641 Z"
|
||||||
|
id="path989" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
60
assets/notifications_off_time_black_outline_24dp.svg
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
height="24px"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
width="24px"
|
||||||
|
fill="#000000"
|
||||||
|
version="1.1"
|
||||||
|
id="svg870"
|
||||||
|
sodipodi:docname="notifications_off_time_black_outline_24dp.svg"
|
||||||
|
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs874" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview872"
|
||||||
|
pagecolor="#505050"
|
||||||
|
bordercolor="#eeeeee"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:pageshadow="0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="17.160655"
|
||||||
|
inkscape:cx="17.977169"
|
||||||
|
inkscape:cy="25.989683"
|
||||||
|
inkscape:window-width="1863"
|
||||||
|
inkscape:window-height="1025"
|
||||||
|
inkscape:window-x="57"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg870" />
|
||||||
|
<path
|
||||||
|
d="M0 0h24v24H0V0z"
|
||||||
|
fill="none"
|
||||||
|
id="path866" />
|
||||||
|
<path
|
||||||
|
id="path868"
|
||||||
|
style="stroke:none;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||||
|
d="M 12 2.5 C 11.17 2.5 10.5 3.17 10.5 4 L 10.5 4.6796875 C 9.5560271 4.9041286 8.7489952 5.336721 8.0859375 5.921875 L 9.5273438 7.3671875 C 10.17483 6.8242961 11.007683 6.5 12 6.5 C 14.176573 6.5 15.602785 8.0428914 15.927734 10.087891 A 6.6092234 6.6092234 0 0 1 16.501953 10.037109 A 6.6092234 6.6092234 0 0 1 17.960938 10.203125 C 17.70244 7.4927147 16.117858 5.2999464 13.5 4.6796875 L 13.5 4 C 13.5 3.17 12.83 2.5 12 2.5 z M 3.5429688 3.3964844 L 2.03125 4.9042969 L 6.2265625 9.109375 C 6.0792507 9.7072066 6 10.340437 6 11 L 6 16 L 4 18 L 4 19 L 10.333984 19 A 6.6092234 6.6092234 0 0 1 9.9238281 17 L 8 17 L 8 11 C 8 10.96369 8.0032442 10.928679 8.0039062 10.892578 L 10.673828 13.568359 A 6.6092234 6.6092234 0 0 1 11.982422 11.855469 L 3.5429688 3.3964844 z " />
|
||||||
|
<path
|
||||||
|
id="path2323"
|
||||||
|
style="color:#000000;fill:#000000;stroke-width:0.901647;-inkscape-stroke:none"
|
||||||
|
d="m 16.85531,10.774346 c -3.310895,0 -6.001953,2.69551 -6.001953,6.005859 0,3.310352 2.691058,6.007813 6.001953,6.007813 3.316009,0 6.011719,-2.696918 6.011719,-6.007813 0,-3.310893 -2.69571,-6.005859 -6.011719,-6.005859 z m 0.0039,2.011719 c 2.212368,0 3.99414,1.781774 3.99414,3.99414 0,2.212369 -1.781772,3.994141 -3.99414,3.994141 -2.212368,0 -3.994141,-1.781772 -3.994141,-3.994141 0,-2.212367 1.781773,-3.99414 3.994141,-3.99414 z" />
|
||||||
|
<g
|
||||||
|
id="g2329"
|
||||||
|
transform="translate(0.08197986,0.02172169)"
|
||||||
|
style="fill:#000000">
|
||||||
|
<path
|
||||||
|
style="color:#000000;fill:#000000;stroke-width:0.901647;-inkscape-stroke:none"
|
||||||
|
d="M 16.833417,13.855469 H 16 v 3.333667 l 2.916958,1.750175 0.416708,-0.683401 -2.50025,-1.483483 z"
|
||||||
|
id="path2325" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||||
|
d="m 15.548828,13.404297 v 4.041015 l 3.519531,2.111329 0.888672,-1.455079 -2.671875,-1.585937 v -3.111328 h -0.451172 z"
|
||||||
|
id="path2327" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.1 KiB |
BIN
assets/old/favicon-whiteborder.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
196
assets/old/favicon-whiteborder.svg
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="150"
|
||||||
|
height="150"
|
||||||
|
viewBox="0 0 39.687498 39.687502"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
||||||
|
sodipodi:docname="favicon-whiteborder.svg"
|
||||||
|
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/favicon-whiteborder.png"
|
||||||
|
inkscape:export-xdpi="81.919998"
|
||||||
|
inkscape:export-ydpi="81.919998"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient28858">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#348878;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop28854" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#56bda8;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop28856" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient26773">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop26769" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop26771" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient13319">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#d3d3d3;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop13315" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#feffff;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop13317" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient13319"
|
||||||
|
id="linearGradient13321"
|
||||||
|
x1="51.147327"
|
||||||
|
y1="81.515579"
|
||||||
|
x2="101.41816"
|
||||||
|
y2="131.78641"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient26773"
|
||||||
|
id="linearGradient26775"
|
||||||
|
x1="24.930517"
|
||||||
|
y1="34.460789"
|
||||||
|
x2="180.95911"
|
||||||
|
y2="190.48938"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient28858"
|
||||||
|
id="linearGradient1552"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.4595463,0,0,1.4595463,-45.736589,-34.941623)"
|
||||||
|
x1="71.579453"
|
||||||
|
y1="89.347107"
|
||||||
|
x2="94.328819"
|
||||||
|
y2="108.10192" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#797975"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="2.5255066"
|
||||||
|
inkscape:cx="54.048561"
|
||||||
|
inkscape:cy="25.73741"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:measure-start="0,0"
|
||||||
|
inkscape:measure-end="0,0"
|
||||||
|
inkscape:snap-text-baseline="true"
|
||||||
|
inkscape:window-width="1863"
|
||||||
|
inkscape:window-height="1025"
|
||||||
|
inkscape:window-x="57"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
units="px"
|
||||||
|
height="129px" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer2"
|
||||||
|
inkscape:label="background"
|
||||||
|
style="display:none"
|
||||||
|
transform="translate(-5.5755696,-7.930188)">
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:url(#linearGradient13321);fill-opacity:1;stroke-width:0.264583"
|
||||||
|
d="M 51.147327,81.515579 H 101.41816 V 131.78641 H 51.147327 Z"
|
||||||
|
id="rect283"
|
||||||
|
transform="translate(-51.147326,-81.51558)" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer4"
|
||||||
|
inkscape:label="drop shadow"
|
||||||
|
style="display:none"
|
||||||
|
transform="translate(-5.5755696,-7.930188)">
|
||||||
|
<path
|
||||||
|
id="path25977"
|
||||||
|
style="opacity:0.274892;fill:url(#linearGradient26775);fill-opacity:1;stroke:none;stroke-width:0.999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 167.26758,32.443359 -11.3647,41.791513 0.85286,84.027598 L 21.072266,158.26172 52.830078,190 H 190 V 55.175781 Z"
|
||||||
|
transform="scale(0.26458333)"
|
||||||
|
sodipodi:nodetypes="cccccccc" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:label="foreground"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-56.722897,-89.445767)"
|
||||||
|
style="display:inline">
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:url(#linearGradient1552);fill-opacity:1;stroke:#ffffff;stroke-width:3.09972;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="M 91.004802,95.608619 H 62.086578 c -1.988152,0 -3.614799,1.535173 -3.614799,3.411476 l 0.03439,27.282905 7.195193,-3.40245 H 91.00481 c 1.988156,0 3.614782,-1.53519 3.614782,-3.41156 V 99.020095 c 0,-1.876303 -1.626626,-3.411476 -3.614783,-3.411476 z"
|
||||||
|
id="path403-5"
|
||||||
|
sodipodi:nodetypes="sssccsssss" />
|
||||||
|
<g
|
||||||
|
aria-label=">_"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:8.48274px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.525121;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="text320-0"
|
||||||
|
transform="matrix(1.8580345,0,0,1.8580345,-51.419296,-104.10826)">
|
||||||
|
<path
|
||||||
|
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.3104px;font-family:'JetBrains Mono';-inkscape-font-specification:'JetBrains Mono, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke:#ffffff;stroke-width:0.525121;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path1011-6"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
d="m 69.17132,117.75404 h 5.428996 v 1.27808 H 69.17132 Z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.3104px;font-family:'JetBrains Mono';-inkscape-font-specification:'JetBrains Mono, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke:#ffffff;stroke-width:0.525121;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path1013-2"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer3"
|
||||||
|
inkscape:label="round icon preview"
|
||||||
|
style="display:none"
|
||||||
|
transform="translate(-5.5755696,-7.930188)">
|
||||||
|
<path
|
||||||
|
id="path18850"
|
||||||
|
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:0.264583"
|
||||||
|
d="M 1e-6,-3e-6 V 50.27083 H 22.272026 A 25.220409,25.220409 0 0 1 0.008786,25.241867 25.220409,25.220409 0 0 1 25.228952,0.021184 25.220409,25.220409 0 0 1 50.270834,22.261687 V -3e-6 Z M 50.270834,28.086655 A 25.220409,25.220409 0 0 1 28.186394,50.27083 h 22.08444 z" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 7.9 KiB |
BIN
assets/old/favicon.png
Normal file
After Width: | Height: | Size: 5 KiB |
179
assets/old/favicon.svg
Normal file
|
@ -0,0 +1,179 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="150"
|
||||||
|
height="150"
|
||||||
|
viewBox="0 0 39.687498 39.687502"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
||||||
|
sodipodi:docname="favicon.svg"
|
||||||
|
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/favicon.png"
|
||||||
|
inkscape:export-xdpi="81.919998"
|
||||||
|
inkscape:export-ydpi="81.919998"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient28858">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#348878;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop28854" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#56bda8;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop28856" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient26773">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop26769" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop26771" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient13319">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#d3d3d3;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop13315" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#feffff;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop13317" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient13319"
|
||||||
|
id="linearGradient13321"
|
||||||
|
x1="51.147327"
|
||||||
|
y1="81.515579"
|
||||||
|
x2="101.41816"
|
||||||
|
y2="131.78641"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient26773"
|
||||||
|
id="linearGradient26775"
|
||||||
|
x1="24.930517"
|
||||||
|
y1="34.460789"
|
||||||
|
x2="180.95911"
|
||||||
|
y2="190.48938"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient28858"
|
||||||
|
id="linearGradient28860"
|
||||||
|
x1="71.579453"
|
||||||
|
y1="89.347107"
|
||||||
|
x2="94.328819"
|
||||||
|
y2="108.10192"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.5820285,0,0,1.5820285,-55.86363,-50.199094)" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="2.1031741"
|
||||||
|
inkscape:cx="-62.524543"
|
||||||
|
inkscape:cy="67.041525"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:measure-start="0,0"
|
||||||
|
inkscape:measure-end="0,0"
|
||||||
|
inkscape:snap-text-baseline="true"
|
||||||
|
inkscape:window-width="1863"
|
||||||
|
inkscape:window-height="1025"
|
||||||
|
inkscape:window-x="57"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
units="px"
|
||||||
|
height="129px" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer2"
|
||||||
|
inkscape:label="background"
|
||||||
|
style="display:none"
|
||||||
|
transform="translate(-5.5755696,-7.930188)">
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:url(#linearGradient13321);fill-opacity:1;stroke-width:0.264583"
|
||||||
|
d="M 51.147327,81.515579 H 101.41816 V 131.78641 H 51.147327 Z"
|
||||||
|
id="rect283"
|
||||||
|
transform="translate(-51.147326,-81.51558)" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer4"
|
||||||
|
inkscape:label="drop shadow"
|
||||||
|
style="display:none"
|
||||||
|
transform="translate(-5.5755696,-7.930188)">
|
||||||
|
<path
|
||||||
|
id="path25977"
|
||||||
|
style="opacity:0.274892;fill:url(#linearGradient26775);fill-opacity:1;stroke:none;stroke-width:0.999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 167.26758,32.443359 -11.3647,41.791513 0.85286,84.027598 L 21.072266,158.26172 52.830078,190 H 190 V 55.175781 Z"
|
||||||
|
transform="scale(0.26458333)"
|
||||||
|
sodipodi:nodetypes="cccccccc" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:label="foreground"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-56.722897,-89.445767)"
|
||||||
|
style="display:inline">
|
||||||
|
<path
|
||||||
|
style="fill:url(#linearGradient28860);fill-opacity:1;stroke-width:1.90318"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="M 92.352819,91.306661 H 61.007838 c -2.154992,0 -3.918145,1.663998 -3.918145,3.697757 v 33.279962 l 7.836262,-7.39553 h 27.426864 c 2.154996,0 3.918132,-1.66402 3.918132,-3.69783 V 95.004418 c 0,-2.033759 -1.763136,-3.697757 -3.918132,-3.697757 z M 70.80314,107.94664 h -3.918112 v -3.69777 h 3.918112 z m 7.836263,0 h -3.91815 v -3.69777 h 3.91815 z m 7.836224,0 H 82.55752 v -3.69777 h 3.918107 z"
|
||||||
|
id="path403" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer3"
|
||||||
|
inkscape:label="round icon preview"
|
||||||
|
style="display:none"
|
||||||
|
transform="translate(-5.5755696,-7.930188)">
|
||||||
|
<path
|
||||||
|
id="path18850"
|
||||||
|
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:0.264583"
|
||||||
|
d="M 1e-6,-3e-6 V 50.27083 H 22.272026 A 25.220409,25.220409 0 0 1 0.008786,25.241867 25.220409,25.220409 0 0 1 25.228952,0.021184 25.220409,25.220409 0 0 1 50.270834,22.261687 V -3e-6 Z M 50.270834,28.086655 A 25.220409,25.220409 0 0 1 28.186394,50.27083 h 22.08444 z" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 33 KiB |
|
@ -2,16 +2,16 @@
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
width="50.270832mm"
|
width="50mm"
|
||||||
height="50.270832mm"
|
height="50mm"
|
||||||
viewBox="0 0 50.270832 50.270832"
|
viewBox="0 0 50 50"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg8"
|
id="svg8"
|
||||||
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)"
|
||||||
sodipodi:docname="launcher.svg"
|
sodipodi:docname="playstore.svg"
|
||||||
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/launcher.png"
|
inkscape:export-filename="/home/pheckel/Code/ntfy-android/assets/playstore.png"
|
||||||
inkscape:export-xdpi="258.69"
|
inkscape:export-xdpi="260.10001"
|
||||||
inkscape:export-ydpi="258.69"
|
inkscape:export-ydpi="260.10001"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
@ -24,101 +24,84 @@
|
||||||
id="defs2">
|
id="defs2">
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
id="linearGradient28858">
|
id="linearGradient4714">
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#3d9d89;stop-opacity:1;"
|
style="stop-color:#348878;stop-opacity:1"
|
||||||
offset="0"
|
offset="0"
|
||||||
id="stop28854" />
|
id="stop4710" />
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#6bc5b3;stop-opacity:1"
|
style="stop-color:#52bca6;stop-opacity:1"
|
||||||
offset="1"
|
offset="1"
|
||||||
id="stop28856" />
|
id="stop4712" />
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
id="linearGradient13319">
|
id="linearGradient28858-5">
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#d3d3d3;stop-opacity:1"
|
style="stop-color:#348878;stop-opacity:1"
|
||||||
offset="0"
|
offset="0"
|
||||||
id="stop13315" />
|
id="stop28854-3" />
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#feffff;stop-opacity:1"
|
style="stop-color:#56bda8;stop-opacity:1"
|
||||||
offset="1"
|
offset="1"
|
||||||
id="stop13317" />
|
id="stop28856-5" />
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
id="linearGradient873">
|
xlink:href="#linearGradient28858-5"
|
||||||
<stop
|
id="linearGradient3255"
|
||||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
x1="160.72209"
|
||||||
offset="0"
|
y1="128.53317"
|
||||||
id="stop869" />
|
x2="168.41153"
|
||||||
<stop
|
y2="134.32626"
|
||||||
style="stop-color:#656565;stop-opacity:0"
|
|
||||||
offset="1"
|
|
||||||
id="stop871" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient843">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#000000;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop839" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#434343;stop-opacity:0.88235295"
|
|
||||||
offset="1"
|
|
||||||
id="stop841" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient843"
|
|
||||||
id="linearGradient845"
|
|
||||||
x1="59.671928"
|
|
||||||
y1="101.946"
|
|
||||||
x2="87.224854"
|
|
||||||
y2="122.54991"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
gradientUnits="userSpaceOnUse"
|
||||||
gradientTransform="matrix(1.4446251,0,0,1.4446251,-30.504136,-52.137997)" />
|
gradientTransform="matrix(3.7495873,0,0,3.7495873,-541.79055,-387.59852)" />
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
xlink:href="#linearGradient873"
|
xlink:href="#linearGradient4714"
|
||||||
id="linearGradient875"
|
id="linearGradient4633"
|
||||||
x1="59.671928"
|
x1="0.034492966"
|
||||||
y1="101.946"
|
y1="-0.0003150744"
|
||||||
x2="87.091209"
|
x2="50.319355"
|
||||||
y2="105.0985"
|
y2="50.284546"
|
||||||
gradientUnits="userSpaceOnUse"
|
gradientUnits="userSpaceOnUse"
|
||||||
gradientTransform="matrix(1.4529559,0,0,1.4446251,-31.001251,-52.137997)" />
|
gradientTransform="matrix(0.99433502,0,0,0.99433502,-0.03429756,-1.7848888e-6)" />
|
||||||
<linearGradient
|
<filter
|
||||||
inkscape:collect="always"
|
style="color-interpolation-filters:sRGB;"
|
||||||
xlink:href="#linearGradient13319"
|
inkscape:label="Drop Shadow"
|
||||||
id="linearGradient13321"
|
id="filter3958"
|
||||||
x1="51.147327"
|
x="-0.076083149"
|
||||||
y1="81.515579"
|
y="-0.091641662"
|
||||||
x2="101.41816"
|
width="1.1759423"
|
||||||
y2="131.78641"
|
height="1.2114791">
|
||||||
gradientUnits="userSpaceOnUse" />
|
<feFlood
|
||||||
<linearGradient
|
flood-opacity="0.192157"
|
||||||
inkscape:collect="always"
|
flood-color="rgb(0,0,0)"
|
||||||
xlink:href="#linearGradient28858"
|
result="flood"
|
||||||
id="linearGradient28860"
|
id="feFlood3948" />
|
||||||
x1="71.579453"
|
<feComposite
|
||||||
y1="89.347107"
|
in="flood"
|
||||||
x2="94.328819"
|
in2="SourceGraphic"
|
||||||
y2="108.10192"
|
operator="in"
|
||||||
gradientUnits="userSpaceOnUse"
|
result="composite1"
|
||||||
gradientTransform="matrix(1.1087554,0,0,1.1087554,-7.1923853,-11.907739)" />
|
id="feComposite3950" />
|
||||||
<linearGradient
|
<feGaussianBlur
|
||||||
inkscape:collect="always"
|
in="composite1"
|
||||||
xlink:href="#linearGradient13319"
|
stdDeviation="4"
|
||||||
id="linearGradient957"
|
result="blur"
|
||||||
gradientUnits="userSpaceOnUse"
|
id="feGaussianBlur3952" />
|
||||||
x1="68.959175"
|
<feOffset
|
||||||
y1="102.4965"
|
dx="3"
|
||||||
x2="101.41816"
|
dy="2.95367"
|
||||||
y2="131.78641"
|
result="offset"
|
||||||
gradientTransform="matrix(3.7795276,0,0,3.7795276,-193.31273,-308.09038)" />
|
id="feOffset3954" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite3956" />
|
||||||
|
</filter>
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
|
@ -127,11 +110,11 @@
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="1.5875888"
|
inkscape:zoom="1.8244841"
|
||||||
inkscape:cx="109.28523"
|
inkscape:cx="4.6588512"
|
||||||
inkscape:cy="208.49228"
|
inkscape:cy="174.84395"
|
||||||
inkscape:document-units="mm"
|
inkscape:document-units="mm"
|
||||||
inkscape:current-layer="layer4"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:measure-start="0,0"
|
inkscape:measure-start="0,0"
|
||||||
inkscape:measure-end="0,0"
|
inkscape:measure-end="0,0"
|
||||||
|
@ -145,9 +128,42 @@
|
||||||
fit-margin-left="0"
|
fit-margin-left="0"
|
||||||
fit-margin-right="0"
|
fit-margin-right="0"
|
||||||
fit-margin-bottom="0"
|
fit-margin-bottom="0"
|
||||||
showguides="true"
|
showguides="false"
|
||||||
inkscape:guide-bbox="true"
|
inkscape:guide-bbox="true"
|
||||||
inkscape:pagecheckerboard="0" />
|
inkscape:pagecheckerboard="0">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="10.173514,67.718331"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1770" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="39.965574,62.077508"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide1772" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="10.173514,39.789015"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1774" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="-2.3077334,9.9462015"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1776" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="14.990626,36.198285"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4020" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="34.930725,39.789015"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4022" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="12.7026,32.00465"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4024" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="11.377711,17.981227"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide4026" />
|
||||||
|
</sodipodi:namedview>
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata5">
|
id="metadata5">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
|
@ -164,21 +180,23 @@
|
||||||
id="layer2"
|
id="layer2"
|
||||||
inkscape:label="background"
|
inkscape:label="background"
|
||||||
style="display:inline">
|
style="display:inline">
|
||||||
<path
|
<rect
|
||||||
style="opacity:1;fill:url(#linearGradient13321);fill-opacity:1;stroke-width:0.264583"
|
style="fill:url(#linearGradient4633);fill-opacity:1;stroke:none;stroke-width:0.286502;stroke-linejoin:bevel"
|
||||||
d="M 51.147327,81.515579 H 101.41816 V 131.78641 H 51.147327 Z"
|
id="rect4545"
|
||||||
id="rect283"
|
width="50"
|
||||||
transform="translate(-51.147326,-81.51558)" />
|
height="50"
|
||||||
|
x="0"
|
||||||
|
y="-0.0003150744" />
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer4"
|
id="layer5"
|
||||||
inkscape:label="drop shadow"
|
inkscape:label="drop shadow"
|
||||||
style="display:inline">
|
style="display:inline">
|
||||||
<path
|
<path
|
||||||
id="path945"
|
id="path3646"
|
||||||
style="display:inline;opacity:1;fill:url(#linearGradient957);fill-opacity:1;stroke-width:0.999999"
|
style="color:#000000;display:inline;fill:#ffffff;stroke:none;stroke-width:1.93113;-inkscape-stroke:none;filter:url(#filter3958)"
|
||||||
d="m 179.29883,24.472656 -12.60156,46.335938 0.94726,93.166016 H 17.203125 L 43.246094,190 H 190 V 35.173828 Z"
|
d="m 50.400391,46.882812 c -9.16879,0 -17.023438,7.2146 -17.023438,16.386719 v 0.0078 l 0.08984,71.369139 -2.302735,16.99219 31.3125,-8.31836 h 77.841802 c 9.16877,0 17.02344,-7.22425 17.02344,-16.39648 V 63.269531 c 0,-9.169496 -7.85031,-16.382463 -17.01563,-16.386719 h -0.008 z m 0,11.566407 h 89.917969 0.008 c 3.22151,0.0033 5.44922,2.346918 5.44922,4.820312 v 63.654299 c 0,2.47551 -2.23164,4.82031 -5.45703,4.82031 H 60.779297 l -15.908203,4.80664 0.162109,-0.9375 -0.08789,-72.343749 c 0,-2.475337 2.229739,-4.820312 5.455078,-4.820312 z"
|
||||||
transform="scale(0.26458333)" />
|
transform="scale(0.26458333)" />
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
|
@ -187,41 +205,41 @@
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-51.147327,-81.515579)"
|
transform="translate(-51.147327,-81.515579)"
|
||||||
style="display:inline">
|
style="display:inline">
|
||||||
<rect
|
|
||||||
style="fill:url(#linearGradient845);fill-opacity:1;stroke:none;stroke-width:0.18116;stroke-opacity:1"
|
|
||||||
id="rect283-1"
|
|
||||||
width="39.803646"
|
|
||||||
height="29.764935"
|
|
||||||
x="55.699432"
|
|
||||||
y="95.135765" />
|
|
||||||
<g
|
|
||||||
aria-label=">_"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:8.48274px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.212069"
|
|
||||||
id="text320"
|
|
||||||
transform="matrix(1.4446252,0,0,1.4446252,-30.298624,-53.112805)">
|
|
||||||
<path
|
|
||||||
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.3104px;font-family:'JetBrains Mono';-inkscape-font-specification:'JetBrains Mono, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.212069"
|
|
||||||
id="path1011"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
<path
|
|
||||||
d="m 69.17132,117.75404 h 5.428996 v 1.27808 H 69.17132 Z"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.3104px;font-family:'JetBrains Mono';-inkscape-font-specification:'JetBrains Mono, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.212069"
|
|
||||||
id="path1013"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
<rect
|
|
||||||
style="fill:url(#linearGradient875);fill-opacity:1;stroke-width:0.0904099"
|
|
||||||
id="rect283-1-9"
|
|
||||||
width="40.03318"
|
|
||||||
height="7.3708849"
|
|
||||||
x="55.699432"
|
|
||||||
y="95.135765" />
|
|
||||||
<path
|
<path
|
||||||
style="fill:url(#linearGradient28860);fill-opacity:1;stroke-width:1.33383"
|
style="color:#000000;fill:url(#linearGradient3255);stroke:none;stroke-width:2.49558;-inkscape-stroke:none"
|
||||||
inkscape:connector-curvature="0"
|
d="M 88.200706,95.308804 H 64.918622 c -1.600657,0 -2.910245,1.235977 -2.910245,2.74661 l 0.02224,18.601596 -0.434711,2.5057 6.231592,-1.88118 h 20.371766 c 1.600658,0 2.910282,-1.23597 2.910282,-2.74664 V 98.055414 c 0,-1.510633 -1.309624,-2.74661 -2.910282,-2.74661 z"
|
||||||
d="M 96.684248,87.265742 H 74.716301 c -1.510313,0 -2.746009,1.166204 -2.746009,2.591552 v 23.324046 l 5.491999,-5.18311 h 19.221957 c 1.510317,0 2.746,-1.16622 2.746,-2.59161 V 89.857294 c 0,-1.425348 -1.235683,-2.591552 -2.746,-2.591552 z M 81.581282,98.92776 h -2.745986 v -2.591546 h 2.745986 z m 5.491999,0 h -2.746012 v -2.591546 h 2.746012 z m 5.491972,0 H 89.81927 v -2.591546 h 2.745983 z"
|
id="path7368" />
|
||||||
id="path403" />
|
<path
|
||||||
|
id="path2498"
|
||||||
|
style="color:#000000;fill:#ffffff;stroke:none;stroke-width:1.93113;-inkscape-stroke:none"
|
||||||
|
d="m 50.400391,46.882812 c -9.16879,0 -17.023438,7.2146 -17.023438,16.386719 v 0.0078 l 0.08984,71.369139 -2.302735,16.99219 31.3125,-8.31836 h 77.841802 c 9.16877,0 17.02344,-7.22425 17.02344,-16.39648 V 63.269531 c 0,-9.169496 -7.85031,-16.382463 -17.01563,-16.386719 h -0.008 z m 0,11.566407 h 89.917969 0.008 c 3.22151,0.0033 5.44922,2.346918 5.44922,4.820312 v 63.654299 c 0,2.47551 -2.23164,4.82031 -5.45703,4.82031 H 60.779297 l -15.908203,4.80664 0.162109,-0.9375 -0.08789,-72.343749 c 0,-2.475337 2.229739,-4.820312 5.455078,-4.820312 z"
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,51.147327,81.515579)" />
|
||||||
|
<g
|
||||||
|
id="path1011-6-2"
|
||||||
|
transform="matrix(1.4536603,0,0,1.728146,-23.97473,-90.437157)"
|
||||||
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;stroke:none;stroke-width:0.525121">
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 62.57046,116.77004 v -1.31201 l 3.280018,-1.45904 q 0.158346,-0.0679 0.305381,-0.1018 0.158346,-0.0452 0.282761,-0.0679 0.135725,-0.0113 0.271449,-0.0226 v -0.0905 q -0.135724,-0.0113 -0.271449,-0.0452 -0.124415,-0.0226 -0.282761,-0.0566 -0.147035,-0.0452 -0.305381,-0.1131 l -3.280018,-1.45904 v -1.32332 l 5.067063,2.31863 v 1.4138 z"
|
||||||
|
id="path7553" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 62.308594,110.31055 v 1.90234 l 3.4375,1.5293 c 0.0073,0.003 0.0142,0.005 0.02148,0.008 -0.0073,0.003 -0.0142,0.005 -0.02148,0.008 l -3.4375,1.5293 v 1.89258 l 0.371093,-0.16992 5.220704,-2.39063 v -1.75 z m 0.52539,0.8164 4.541016,2.08008 v 1.07617 l -4.541016,2.07813 v -0.73242 l 3.119141,-1.38868 0.0039,-0.002 c 0.09141,-0.0389 0.178343,-0.0676 0.257813,-0.0859 h 0.0059 l 0.0078,-0.002 c 0.09483,-0.0271 0.176055,-0.0474 0.246093,-0.0606 l 0.498047,-0.041 v -0.57422 l -0.240234,-0.0195 c -0.07606,-0.006 -0.153294,-0.0198 -0.230469,-0.0391 l -0.0078,-0.002 -0.0078,-0.002 c -0.07608,-0.0138 -0.16556,-0.0318 -0.263672,-0.0527 -0.08398,-0.0262 -0.172736,-0.058 -0.265625,-0.0977 l -0.0039,-0.002 -3.119141,-1.38868 z"
|
||||||
|
id="path7555" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g1224"
|
||||||
|
transform="matrix(1.4493527,0,0,1.6641427,-22.956963,-85.389973)"
|
||||||
|
style="font-size:8.48274px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;stroke:none;stroke-width:0.525121">
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 69.17132,117.75404 h 5.428996 v 1.27808 H 69.17132 Z"
|
||||||
|
id="path1220" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;-inkscape-font-specification:'JetBrains Mono, Bold';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||||
|
d="m 68.908203,117.49219 v 0.26172 1.54101 h 5.955078 v -1.80273 z m 0.525391,0.52344 h 4.904297 v 0.7539 h -4.904297 z"
|
||||||
|
id="path1222" />
|
||||||
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
|
@ -229,8 +247,9 @@
|
||||||
inkscape:label="round icon preview"
|
inkscape:label="round icon preview"
|
||||||
style="display:none">
|
style="display:none">
|
||||||
<path
|
<path
|
||||||
id="path18850"
|
id="path18850-8-1"
|
||||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:0.264583"
|
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:0.255654"
|
||||||
d="M 1e-6,-3e-6 V 50.27083 H 22.272026 A 25.220409,25.220409 0 0 1 0.008786,25.241867 25.220409,25.220409 0 0 1 25.228952,0.021184 25.220409,25.220409 0 0 1 50.270834,22.261687 V -3e-6 Z M 50.270834,28.086655 A 25.220409,25.220409 0 0 1 28.186394,50.27083 h 22.08444 z" />
|
d="M 50.337488,80.973198 V 131.61213 H 101.65302 V 80.973198 Z m 25.676545,1.442307 h 0.555989 a 24.369387,24.369387 0 0 1 23.860308,21.232925 v 6.09963 a 24.369387,24.369387 0 0 1 -21.288308,21.19336 h 21.288308 v 0.0138 H 51.963792 v -0.0158 H 73.428179 A 24.369387,24.369387 0 0 1 51.963792,107.97535 v -2.49089 A 24.369387,24.369387 0 0 1 76.014033,82.415508 Z"
|
||||||
|
transform="translate(-51.147326,-81.51558)" />
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 11 KiB |
1
assets/schedule_black_24dp.svg
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/><path d="M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"/></svg>
|
After Width: | Height: | Size: 352 B |