diff --git a/briar-android/artwork/notification_ongoing.svg b/briar-android/artwork/notification_ongoing.svg new file mode 100644 index 0000000000000000000000000000000000000000..b85939f22e36b43a19e8d316ef10001d3ca9286c --- /dev/null +++ b/briar-android/artwork/notification_ongoing.svg @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Ebene_1" + x="0px" + y="0px" + viewBox="0 0 24 24" + xml:space="preserve" + inkscape:version="0.92.3 (2405546, 2018-03-11)" + sodipodi:docname="notification_ongoing.svg" + width="24" + height="24"><metadata + id="metadata61"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs + id="defs59" /><sodipodi:namedview + pagecolor="#000000" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1020" + id="namedview57" + showgrid="false" + inkscape:zoom="11.466748" + inkscape:cx="-4.790356" + inkscape:cy="17.536496" + inkscape:window-x="1442" + inkscape:window-y="24" + inkscape:window-maximized="0" + inkscape:current-layer="Ebene_1" + units="px" /><style + type="text/css" + id="style3"> + .st0{fill:#FFFFFF;} + .st1{display:none;fill:#87C214;} + .st2{fill:#87C214;} + .st3{display:none;fill:#FFFFFF;} + .st4{fill:#95D220;} + .st5{display:none;fill:#95D220;} +</style><path + style="fill:#ffffff;stroke-width:0.07272727" + d="M 12,0 A 12,12 0 0 0 0,12 12,12 0 0 0 12,24 12,12 0 0 0 24,12 12,12 0 0 0 12,0 Z M 8.1454545,3.4764204 h 0.6036931 c 0.7054546,0 1.2872164,0.5817614 1.2872164,1.287216 V 6.4 H 6.8582386 V 4.7636364 c 0,-0.7054546 0.5817614,-1.287216 1.2872159,-1.287216 z m 7.0545455,0 h 0.603693 c 0.712727,0 1.287216,0.5817614 1.287216,1.287216 V 13.454545 H 13.912784 V 4.7636364 c 0,-0.7054546 0.581761,-1.287216 1.287216,-1.287216 z M 4.7127841,6.9090909 H 13.403693 V 10.087216 H 4.7127841 c -0.7127273,0 -1.287358,-0.5817618 -1.287358,-1.2872156 V 8.1963069 c 0,-0.7127273 0.5819034,-1.287216 1.287358,-1.287216 z m 12.8872159,0 h 1.636364 c 0.705454,0 1.279943,0.5817615 1.287216,1.287216 v 0.6036935 c 0,0.7127269 -0.581762,1.2872156 -1.287216,1.2872156 H 17.6 Z M 6.8582386,10.596307 h 3.1781254 v 8.690909 c 0,0.705454 -0.5817618,1.287358 -1.2872164,1.287358 H 8.1454545 c -0.7127272,0 -1.2872159,-0.581904 -1.2872159,-1.287358 z m -2.1454545,3.367329 h 1.6363636 v 3.178125 H 4.7127841 c -0.7127273,0 -1.287358,-0.581761 -1.287358,-1.287216 v -0.603693 c 0,-0.712727 0.5819034,-1.287216 1.287358,-1.287216 z m 5.8326709,0 h 8.690909 c 0.705454,0 1.279943,0.581761 1.287216,1.287216 v 0.603693 c 0,0.705455 -0.581762,1.287216 -1.287216,1.287216 h -8.690909 z m 3.367329,3.687216 h 3.178125 v 1.636364 c 0,0.705454 -0.581761,1.287358 -1.287216,1.287358 H 15.2 c -0.705455,0 -1.287216,-0.581904 -1.287216,-1.287358 z" + id="circle7" + inkscape:connector-curvature="0" /></svg> diff --git a/briar-android/artwork/notification_reminder.svg b/briar-android/artwork/notification_reminder.svg new file mode 100644 index 0000000000000000000000000000000000000000..7d30fd683dc8119476a58e8f795ce8930977568e --- /dev/null +++ b/briar-android/artwork/notification_reminder.svg @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Ebene_1" + x="0px" + y="0px" + viewBox="0 0 24 24" + xml:space="preserve" + inkscape:version="0.92.3 (2405546, 2018-03-11)" + sodipodi:docname="notification_reminder.svg" + width="24" + height="24"><metadata + id="metadata61"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs + id="defs59" /><sodipodi:namedview + pagecolor="#000000" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1020" + id="namedview57" + showgrid="false" + inkscape:zoom="32.43286" + inkscape:cx="6.4172501" + inkscape:cy="12.231457" + inkscape:window-x="1442" + inkscape:window-y="24" + inkscape:window-maximized="0" + inkscape:current-layer="Ebene_1" + units="px" /><style + type="text/css" + id="style3"> + .st0{fill:#FFFFFF;} + .st1{display:none;fill:#87C214;} + .st2{fill:#87C214;} + .st3{display:none;fill:#FFFFFF;} + .st4{fill:#95D220;} + .st5{display:none;fill:#95D220;} +</style><path + style="display:inline;fill:#ffffff;stroke-width:0.07272727" + d="M 12 0 A 12 12 0 0 0 4.875 2.3613281 L 6.9316406 4.4160156 C 7.0875805 3.8805807 7.5639651 3.4765625 8.1464844 3.4765625 L 8.7480469 3.4765625 C 9.4535014 3.4765625 10.035156 4.0582174 10.035156 4.7636719 L 10.035156 6.4003906 L 8.9140625 6.4003906 L 9.4238281 6.9101562 L 13.404297 6.9101562 L 13.404297 10.085938 L 12.601562 10.085938 L 13.914062 11.398438 L 13.914062 4.7636719 C 13.914062 4.0582174 14.495717 3.4765625 15.201172 3.4765625 L 15.802734 3.4765625 C 16.515461 3.4765625 17.089844 4.0582174 17.089844 4.7636719 L 17.089844 13.455078 L 15.96875 13.455078 L 16.478516 13.964844 L 19.236328 13.964844 C 19.941782 13.964844 20.516165 14.546498 20.523438 15.251953 L 20.523438 15.853516 C 20.523438 16.436036 20.119418 16.91242 19.583984 17.068359 L 21.638672 19.125 A 12 12 0 0 0 24 12 A 12 12 0 0 0 12 0 z M 1.2617188 1.3632812 L 0 2.6269531 L 2.3125 4.9472656 A 12 12 0 0 0 0 12 A 12 12 0 0 0 12 24 A 12 12 0 0 0 19.027344 21.707031 L 21.314453 24 L 22.576172 22.734375 L 2.7519531 2.8554688 L 1.9863281 2.0898438 L 1.2617188 1.3632812 z M 17.599609 6.9101562 L 19.236328 6.9101562 C 19.941782 6.9101562 20.516165 7.4918111 20.523438 8.1972656 L 20.523438 8.7988281 C 20.523438 9.511555 19.941782 10.085937 19.236328 10.085938 L 17.599609 10.085938 L 17.599609 6.9101562 z M 4.359375 6.9980469 L 7.4394531 10.085938 L 4.7128906 10.085938 C 4.0001632 10.085938 3.4257813 9.504282 3.4257812 8.7988281 L 3.4257812 8.1972656 C 3.4257812 7.6133228 3.8294199 7.1540656 4.359375 6.9980469 z M 6.859375 10.595703 L 7.9472656 10.595703 L 10.035156 12.689453 L 10.035156 19.287109 C 10.035156 19.992562 9.4535014 20.574219 8.7480469 20.574219 L 8.1464844 20.574219 C 7.4337573 20.574219 6.859375 19.992563 6.859375 19.287109 L 6.859375 10.595703 z M 4.7128906 13.964844 L 6.3496094 13.964844 L 6.3496094 17.140625 L 4.7128906 17.140625 C 4.0001632 17.140625 3.4257813 16.558971 3.4257812 15.853516 L 3.4257812 15.251953 C 3.4257812 14.539226 4.007436 13.964844 4.7128906 13.964844 z M 10.544922 13.964844 L 11.306641 13.964844 L 14.474609 17.140625 L 10.544922 17.140625 L 10.544922 13.964844 z M 13.914062 17.650391 L 14.982422 17.650391 L 16.992188 19.666016 C 16.827053 20.182975 16.371277 20.574219 15.802734 20.574219 L 15.201172 20.574219 C 14.495717 20.574219 13.914063 19.992563 13.914062 19.287109 L 13.914062 17.650391 z " + id="circle7" /></svg> \ No newline at end of file diff --git a/briar-android/src/main/AndroidManifest.xml b/briar-android/src/main/AndroidManifest.xml index 3c3ac063e6085c12a485364264e48268f73f0070..f105d57e9706e53679d3ba75d2c8baed390c9497 100644 --- a/briar-android/src/main/AndroidManifest.xml +++ b/briar-android/src/main/AndroidManifest.xml @@ -14,6 +14,7 @@ <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> + <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission-sdk-23 android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/> <application @@ -24,6 +25,14 @@ android:logo="@mipmap/ic_launcher_round" android:theme="@style/BriarTheme"> + <receiver + android:name="org.briarproject.briar.android.BootReceiver" + android:exported="false"> + <intent-filter> + <action android:name="android.intent.action.BOOT_COMPLETED"/> + </intent-filter> + </receiver> + <service android:name="org.briarproject.briar.android.BriarService" android:exported="false"> diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java index 02a5dc0ff71fad378ff9ecc856fee8d87e304b33..778a6f2b95c6454adaf4ddad3d174eb5239f13cb 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java @@ -150,6 +150,8 @@ public interface AndroidComponent @IoExecutor Executor ioExecutor(); + void inject(BootReceiver briarService); + void inject(BriarService briarService); void inject(BriarReportSender briarReportSender); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java index c18d2a7c641b846534d351f09669b4345854c27b..91743a06c12957cc3a51b40343e3150495a94954 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java @@ -85,13 +85,6 @@ import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_ class AndroidNotificationManagerImpl implements AndroidNotificationManager, Service, EventListener { - // Notification IDs - private static final int PRIVATE_MESSAGE_NOTIFICATION_ID = 3; - private static final int GROUP_MESSAGE_NOTIFICATION_ID = 4; - private static final int FORUM_POST_NOTIFICATION_ID = 5; - private static final int BLOG_POST_NOTIFICATION_ID = 6; - private static final int INTRODUCTION_SUCCESS_NOTIFICATION_ID = 7; - private static final long SOUND_DELAY = TimeUnit.SECONDS.toMillis(2); private static final Logger LOG = diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BootReceiver.java b/briar-android/src/main/java/org/briarproject/briar/android/BootReceiver.java new file mode 100644 index 0000000000000000000000000000000000000000..cf4e0ab13eb058412c7730e997982de41c6c327d --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/BootReceiver.java @@ -0,0 +1,83 @@ +package org.briarproject.briar.android; + +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.support.v4.app.NotificationCompat; +import android.support.v4.content.ContextCompat; + +import org.briarproject.bramble.api.db.DatabaseConfig; +import org.briarproject.briar.R; +import org.briarproject.briar.android.navdrawer.NavDrawerActivity; + +import javax.inject.Inject; + +import static android.app.NotificationManager.IMPORTANCE_LOW; +import static android.content.Context.NOTIFICATION_SERVICE; +import static android.content.Intent.ACTION_BOOT_COMPLETED; +import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; +import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; +import static android.os.Build.VERSION.SDK_INT; +import static android.support.v4.app.NotificationCompat.PRIORITY_LOW; +import static android.support.v4.app.NotificationCompat.VISIBILITY_SECRET; +import static org.briarproject.briar.android.TestingConstants.FEATURE_FLAG_SIGN_IN_REMINDER; +import static org.briarproject.briar.api.android.AndroidNotificationManager.REMINDER_CHANNEL_ID; +import static org.briarproject.briar.api.android.AndroidNotificationManager.REMINDER_NOTIFICATION_ID; + +public class BootReceiver extends BroadcastReceiver { + + @Inject + DatabaseConfig databaseConfig; + + @Override + public void onReceive(Context ctx, Intent intent) { + if (!FEATURE_FLAG_SIGN_IN_REMINDER) return; + + AndroidComponent applicationComponent = + ((BriarApplication) ctx.getApplicationContext()) + .getApplicationComponent(); + applicationComponent.inject(this); + + String action = intent.getAction(); + if (action != null && action.equals(ACTION_BOOT_COMPLETED)) { + if (databaseConfig.databaseExists()) { + showSignInNotification(ctx); + } + } + } + + private void showSignInNotification(Context ctx) { + NotificationManager nm = (NotificationManager) + ctx.getSystemService(NOTIFICATION_SERVICE); + if (nm == null) return; + + if (SDK_INT >= 26) { + NotificationChannel channel = + new NotificationChannel(REMINDER_CHANNEL_ID, ctx.getString( + R.string.reminder_notification_channel_title), + IMPORTANCE_LOW); + channel.setLockscreenVisibility(VISIBILITY_SECRET); + nm.createNotificationChannel(channel); + } + + NotificationCompat.Builder b = + new NotificationCompat.Builder(ctx, REMINDER_CHANNEL_ID); + b.setSmallIcon(R.drawable.notification_reminder); + b.setColor(ContextCompat.getColor(ctx, R.color.briar_primary)); + b.setContentTitle(ctx.getText(R.string.reminder_notification_title)); + b.setContentText(ctx.getText(R.string.reminder_notification_text)); + b.setAutoCancel(true); + b.setWhen(0); // Don't show the time + b.setPriority(PRIORITY_LOW); + + Intent i = new Intent(ctx, NavDrawerActivity.class); + i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP); + b.setContentIntent(PendingIntent.getActivity(ctx, 0, i, 0)); + + nm.notify(REMINDER_NOTIFICATION_ID, b.build()); + } + +} diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java index bfd2ed156380575fcde912f16e629a3f2550bb56..523935278bf0baa04299c6f24f945ec8d9da1fd4 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java @@ -50,6 +50,11 @@ import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.ALREADY_RUNNING; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.SUCCESS; +import static org.briarproject.briar.api.android.AndroidNotificationManager.FAILURE_CHANNEL_ID; +import static org.briarproject.briar.api.android.AndroidNotificationManager.FAILURE_NOTIFICATION_ID; +import static org.briarproject.briar.api.android.AndroidNotificationManager.ONGOING_CHANNEL_ID; +import static org.briarproject.briar.api.android.AndroidNotificationManager.ONGOING_NOTIFICATION_ID; +import static org.briarproject.briar.api.android.AndroidNotificationManager.REMINDER_NOTIFICATION_ID; public class BriarService extends Service { @@ -60,14 +65,6 @@ public class BriarService extends Service { public static String EXTRA_STARTUP_FAILED = "org.briarproject.briar.STARTUP_FAILED"; - private static final int ONGOING_NOTIFICATION_ID = 1; - private static final int FAILURE_NOTIFICATION_ID = 2; - - // Channels are sorted by channel ID in the Settings app, so use IDs - // that will sort below the main channels such as contacts - private static final String ONGOING_CHANNEL_ID = "zForegroundService"; - private static final String FAILURE_CHANNEL_ID = "zStartupFailure"; - private static final Logger LOG = Logger.getLogger(BriarService.class.getName()); @@ -106,9 +103,9 @@ public class BriarService extends Service { } // Create notification channels + NotificationManager nm = (NotificationManager) + getSystemService(NOTIFICATION_SERVICE); if (SDK_INT >= 26) { - NotificationManager nm = (NotificationManager) - getSystemService(NOTIFICATION_SERVICE); NotificationChannel ongoingChannel = new NotificationChannel( ONGOING_CHANNEL_ID, getString(R.string.ongoing_notification_title), @@ -140,6 +137,8 @@ public class BriarService extends Service { } b.setPriority(PRIORITY_MIN); startForeground(ONGOING_NOTIFICATION_ID, b.build()); + // Remove sign-in reminder notification + nm.cancel(REMINDER_NOTIFICATION_ID); // Start the services in a background thread new Thread(() -> { String nickname = databaseConfig.getLocalAuthorName(); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/TestingConstants.java b/briar-android/src/main/java/org/briarproject/briar/android/TestingConstants.java index cf8d9ac4c66f3ec0051b90ba2081fe2397b45275..ea67d50ec5741d3645ebd7aae49b8ca8806071e8 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/TestingConstants.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/TestingConstants.java @@ -35,4 +35,9 @@ public interface TestingConstants { * Feature flag for enabling the dark UI theme in release builds. */ boolean FEATURE_FLAG_DARK_THEME = false; + + /** + * Feature flag for enabling the sign-in reminder in release builds. + */ + boolean FEATURE_FLAG_SIGN_IN_REMINDER = IS_DEBUG_BUILD; } diff --git a/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java b/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java index 0579dc87323f2421576ebc18def5fb03dc27b85a..c9415cbd5f19f1f75bf96b997dd2091d23b4066c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java +++ b/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java @@ -21,11 +21,26 @@ public interface AndroidNotificationManager { String PREF_NOTIFY_VIBRATION = "notifyVibration"; String PREF_NOTIFY_LOCK_SCREEN = "notifyLockScreen"; + // Notification IDs + int ONGOING_NOTIFICATION_ID = 1; + int FAILURE_NOTIFICATION_ID = 2; + int REMINDER_NOTIFICATION_ID = 3; + int PRIVATE_MESSAGE_NOTIFICATION_ID = 4; + int GROUP_MESSAGE_NOTIFICATION_ID = 5; + int FORUM_POST_NOTIFICATION_ID = 6; + int BLOG_POST_NOTIFICATION_ID = 7; + int INTRODUCTION_SUCCESS_NOTIFICATION_ID = 8; + // Channel IDs String CONTACT_CHANNEL_ID = "contacts"; String GROUP_CHANNEL_ID = "groups"; String FORUM_CHANNEL_ID = "forums"; String BLOG_CHANNEL_ID = "blogs"; + // Channels are sorted by channel ID in the Settings app, so use IDs + // that will sort below the main channels such as contacts + String ONGOING_CHANNEL_ID = "zForegroundService"; + String FAILURE_CHANNEL_ID = "zStartupFailure"; + String REMINDER_CHANNEL_ID = "zSignInReminder"; // Content URIs for pending intents String CONTACT_URI = "content://org.briarproject.briar/contact"; diff --git a/briar-android/src/main/res/drawable/notification_reminder.xml b/briar-android/src/main/res/drawable/notification_reminder.xml new file mode 100644 index 0000000000000000000000000000000000000000..1defd7d3d3583a62e15eac36d7e8066b389903da --- /dev/null +++ b/briar-android/src/main/res/drawable/notification_reminder.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportHeight="24" + android:viewportWidth="24"> + <path + android:fillColor="#ffffff" + android:pathData="M 12 0 A 12 12 0 0 0 4.875 2.3613281 L 6.9316406 4.4160156 C 7.0875805 3.8805807 7.5639651 3.4765625 8.1464844 3.4765625 L 8.7480469 3.4765625 C 9.4535014 3.4765625 10.035156 4.0582174 10.035156 4.7636719 L 10.035156 6.4003906 L 8.9140625 6.4003906 L 9.4238281 6.9101562 L 13.404297 6.9101562 L 13.404297 10.085938 L 12.601562 10.085938 L 13.914062 11.398438 L 13.914062 4.7636719 C 13.914062 4.0582174 14.495717 3.4765625 15.201172 3.4765625 L 15.802734 3.4765625 C 16.515461 3.4765625 17.089844 4.0582174 17.089844 4.7636719 L 17.089844 13.455078 L 15.96875 13.455078 L 16.478516 13.964844 L 19.236328 13.964844 C 19.941782 13.964844 20.516165 14.546498 20.523438 15.251953 L 20.523438 15.853516 C 20.523438 16.436036 20.119418 16.91242 19.583984 17.068359 L 21.638672 19.125 A 12 12 0 0 0 24 12 A 12 12 0 0 0 12 0 z M 1.2617188 1.3632812 L 0 2.6269531 L 2.3125 4.9472656 A 12 12 0 0 0 0 12 A 12 12 0 0 0 12 24 A 12 12 0 0 0 19.027344 21.707031 L 21.314453 24 L 22.576172 22.734375 L 2.7519531 2.8554688 L 1.9863281 2.0898438 L 1.2617188 1.3632812 z M 17.599609 6.9101562 L 19.236328 6.9101562 C 19.941782 6.9101562 20.516165 7.4918111 20.523438 8.1972656 L 20.523438 8.7988281 C 20.523438 9.511555 19.941782 10.085937 19.236328 10.085938 L 17.599609 10.085938 L 17.599609 6.9101562 z M 4.359375 6.9980469 L 7.4394531 10.085938 L 4.7128906 10.085938 C 4.0001632 10.085938 3.4257813 9.504282 3.4257812 8.7988281 L 3.4257812 8.1972656 C 3.4257812 7.6133228 3.8294199 7.1540656 4.359375 6.9980469 z M 6.859375 10.595703 L 7.9472656 10.595703 L 10.035156 12.689453 L 10.035156 19.287109 C 10.035156 19.992562 9.4535014 20.574219 8.7480469 20.574219 L 8.1464844 20.574219 C 7.4337573 20.574219 6.859375 19.992563 6.859375 19.287109 L 6.859375 10.595703 z M 4.7128906 13.964844 L 6.3496094 13.964844 L 6.3496094 17.140625 L 4.7128906 17.140625 C 4.0001632 17.140625 3.4257813 16.558971 3.4257812 15.853516 L 3.4257812 15.251953 C 3.4257812 14.539226 4.007436 13.964844 4.7128906 13.964844 z M 10.544922 13.964844 L 11.306641 13.964844 L 14.474609 17.140625 L 10.544922 17.140625 L 10.544922 13.964844 z M 13.914062 17.650391 L 14.982422 17.650391 L 16.992188 19.666016 C 16.827053 20.182975 16.371277 20.574219 15.802734 20.574219 L 15.201172 20.574219 C 14.495717 20.574219 13.914063 19.992563 13.914062 19.287109 L 13.914062 17.650391 z"/> +</vector> \ No newline at end of file diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index 1c0fb4d57e70d7c90c8462d4fd79390d6cd794b9..93fb23f4d95b19dab35d15896cd1d7de30f34e12 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -68,6 +68,9 @@ <string name="transport_lan">Wi-Fi</string> <!-- Notifications --> + <string name="reminder_notification_title">Signed out of Briar</string> + <string name="reminder_notification_text">Tap to sign back in or swipe to dismiss.</string> + <string name="reminder_notification_channel_title">Briar Sign-in Reminder</string> <string name="ongoing_notification_title">Signed into Briar</string> <string name="ongoing_notification_text">Touch to open Briar.</string> <plurals name="private_message_notification_text">