From 355251694d63640f028f3e2c17235d12a8573df6 Mon Sep 17 00:00:00 2001 From: pacien Date: Tue, 8 Dec 2020 18:03:20 +0100 Subject: ConfigurationAccessService: prevent service from being stopped when app loses focus This makes the ConfigurationAccessService (formerly ConfigurationFtpService) start in foreground through the use of a persistent notification so that it isn't stopped by the system after the app loses the focus on the user's screen, which happens when the user switches to an FTP client application on the same device. --- .../configure/ConfigurationAccessServerFragment.kt | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 app/src/main/java/org/pacien/tincapp/activities/configure/ConfigurationAccessServerFragment.kt (limited to 'app/src/main/java/org/pacien/tincapp/activities/configure/ConfigurationAccessServerFragment.kt') diff --git a/app/src/main/java/org/pacien/tincapp/activities/configure/ConfigurationAccessServerFragment.kt b/app/src/main/java/org/pacien/tincapp/activities/configure/ConfigurationAccessServerFragment.kt new file mode 100644 index 0000000..9fee749 --- /dev/null +++ b/app/src/main/java/org/pacien/tincapp/activities/configure/ConfigurationAccessServerFragment.kt @@ -0,0 +1,72 @@ +/* + * Tinc App, an Android binding and user interface for the tinc mesh VPN daemon + * Copyright (C) 2017-2020 Pacien TRAN-GIRARD + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.pacien.tincapp.activities.configure + +import android.content.Intent +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.databinding.Observable +import androidx.databinding.ObservableBoolean +import org.pacien.tincapp.activities.BaseFragment +import org.pacien.tincapp.databinding.ConfigureToolsConfigurationAccessFragmentBinding +import org.pacien.tincapp.service.ConfigurationAccessService + +/** + * @author pacien + */ +class ConfigurationAccessServerFragment : BaseFragment() { + private val ftpServerStartListener = object : Observable.OnPropertyChangedCallback() { + override fun onPropertyChanged(sender: Observable, propertyId: Int) { + binding.ftpEnabled = (sender as ObservableBoolean).get() + } + } + + private lateinit var binding: ConfigureToolsConfigurationAccessFragmentBinding + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + binding = ConfigureToolsConfigurationAccessFragmentBinding.inflate(inflater, container, false) + binding.ftpUsername = ConfigurationAccessService.FTP_USERNAME + binding.ftpPassword = ConfigurationAccessService.FTP_PASSWORD + binding.ftpPort = ConfigurationAccessService.FTP_PORT + binding.toggleFtpState = { toggleServer() } + return binding.root + } + + override fun onResume() { + super.onResume() + ConfigurationAccessService.runningState.addOnPropertyChangedCallback(ftpServerStartListener) + binding.ftpEnabled = ConfigurationAccessService.runningState.get() + } + + override fun onPause() { + ConfigurationAccessService.runningState.removeOnPropertyChangedCallback(ftpServerStartListener) + super.onPause() + } + + private fun toggleServer() { + val targetServiceIntent = Intent(requireContext(), ConfigurationAccessService::class.java) + + if (binding.ftpEnabled) + requireContext().stopService(targetServiceIntent) + else + requireContext().startService(targetServiceIntent) + } +} -- cgit v1.2.3