diff options
Diffstat (limited to 'app/src/main/java/org/pacien/tincapp/service')
-rw-r--r-- | app/src/main/java/org/pacien/tincapp/service/ConfigurationAccessService.kt (renamed from app/src/main/java/org/pacien/tincapp/service/ConfigurationFtpService.kt) | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/app/src/main/java/org/pacien/tincapp/service/ConfigurationFtpService.kt b/app/src/main/java/org/pacien/tincapp/service/ConfigurationAccessService.kt index 2ea4a16..b083a83 100644 --- a/app/src/main/java/org/pacien/tincapp/service/ConfigurationFtpService.kt +++ b/app/src/main/java/org/pacien/tincapp/service/ConfigurationAccessService.kt | |||
@@ -18,6 +18,7 @@ | |||
18 | 18 | ||
19 | package org.pacien.tincapp.service | 19 | package org.pacien.tincapp.service |
20 | 20 | ||
21 | import android.app.PendingIntent | ||
21 | import android.app.Service | 22 | import android.app.Service |
22 | import android.content.Intent | 23 | import android.content.Intent |
23 | import android.os.IBinder | 24 | import android.os.IBinder |
@@ -31,7 +32,9 @@ import org.apache.ftpserver.listener.ListenerFactory | |||
31 | import org.apache.ftpserver.usermanager.UsernamePasswordAuthentication | 32 | import org.apache.ftpserver.usermanager.UsernamePasswordAuthentication |
32 | import org.apache.ftpserver.usermanager.impl.WritePermission | 33 | import org.apache.ftpserver.usermanager.impl.WritePermission |
33 | import org.pacien.tincapp.R | 34 | import org.pacien.tincapp.R |
35 | import org.pacien.tincapp.activities.configure.ConfigureActivity | ||
34 | import org.pacien.tincapp.context.App | 36 | import org.pacien.tincapp.context.App |
37 | import org.pacien.tincapp.context.AppNotificationManager | ||
35 | import org.pacien.tincapp.extensions.Java.defaultMessage | 38 | import org.pacien.tincapp.extensions.Java.defaultMessage |
36 | import org.slf4j.LoggerFactory | 39 | import org.slf4j.LoggerFactory |
37 | import java.io.IOException | 40 | import java.io.IOException |
@@ -42,7 +45,7 @@ import java.io.IOException | |||
42 | * | 45 | * |
43 | * @author pacien | 46 | * @author pacien |
44 | */ | 47 | */ |
45 | class ConfigurationFtpService : Service() { | 48 | class ConfigurationAccessService : Service() { |
46 | companion object { | 49 | companion object { |
47 | // Apache Mina FtpServer's INFO log level is actually VERBOSE. | 50 | // Apache Mina FtpServer's INFO log level is actually VERBOSE. |
48 | // The object holds static references to those loggers so that they stay around. | 51 | // The object holds static references to those loggers so that they stay around. |
@@ -63,6 +66,7 @@ class ConfigurationFtpService : Service() { | |||
63 | } | 66 | } |
64 | 67 | ||
65 | private val log by lazy { LoggerFactory.getLogger(this.javaClass)!! } | 68 | private val log by lazy { LoggerFactory.getLogger(this.javaClass)!! } |
69 | private val notificationManager by lazy { App.notificationManager } | ||
66 | private var sftpServer: FtpServer? = null | 70 | private var sftpServer: FtpServer? = null |
67 | 71 | ||
68 | override fun onBind(intent: Intent): IBinder? = null // non-bindable service | 72 | override fun onBind(intent: Intent): IBinder? = null // non-bindable service |
@@ -82,6 +86,7 @@ class ConfigurationFtpService : Service() { | |||
82 | it.start() | 86 | it.start() |
83 | runningState.set(true) | 87 | runningState.set(true) |
84 | log.info("Started FTP server on port {}", FTP_PORT) | 88 | log.info("Started FTP server on port {}", FTP_PORT) |
89 | pinInForeground() | ||
85 | } catch (e: IOException) { | 90 | } catch (e: IOException) { |
86 | log.error("Could not start FTP server", e) | 91 | log.error("Could not start FTP server", e) |
87 | App.alert(R.string.notification_error_title_unable_to_start_ftp_server, e.defaultMessage()) | 92 | App.alert(R.string.notification_error_title_unable_to_start_ftp_server, e.defaultMessage()) |
@@ -91,6 +96,25 @@ class ConfigurationFtpService : Service() { | |||
91 | return START_NOT_STICKY | 96 | return START_NOT_STICKY |
92 | } | 97 | } |
93 | 98 | ||
99 | /** | ||
100 | * Pins the service in the foreground so that it doesn't get stopped by the system when the | ||
101 | * application's activities are put in the background, which is the case when the user sets the | ||
102 | * focus on an FTP client app for example. | ||
103 | */ | ||
104 | private fun pinInForeground() { | ||
105 | startForeground( | ||
106 | AppNotificationManager.CONFIG_ACCESS_NOTIFICATION_ID, | ||
107 | notificationManager.newConfigurationAccessNotificationBuilder() | ||
108 | .setSmallIcon(R.drawable.ic_baseline_folder_open_primary_24dp) | ||
109 | .setContentTitle(resources.getString(R.string.notification_config_access_server_running_title)) | ||
110 | .setContentText(resources.getString(R.string.notification_config_access_server_running_message)) | ||
111 | .setContentIntent(Intent(this, ConfigureActivity::class.java).let { | ||
112 | PendingIntent.getActivity(this, 0, it, 0) | ||
113 | }) | ||
114 | .build() | ||
115 | ) | ||
116 | } | ||
117 | |||
94 | private fun setupSingleUserServer(ftpUser: User): FtpServer { | 118 | private fun setupSingleUserServer(ftpUser: User): FtpServer { |
95 | return FtpServerFactory() | 119 | return FtpServerFactory() |
96 | .apply { addListener("default", ListenerFactory().apply { port = FTP_PORT }.createListener()) } | 120 | .apply { addListener("default", ListenerFactory().apply { port = FTP_PORT }.createListener()) } |