2018-06-06 13:06:56 +02:00
|
|
|
package net.osmand.telegram
|
|
|
|
|
|
|
|
import android.app.Application
|
|
|
|
import android.content.Context
|
2018-06-09 11:20:21 +02:00
|
|
|
import android.content.Intent
|
2018-06-06 13:06:56 +02:00
|
|
|
import android.net.ConnectivityManager
|
|
|
|
import android.net.NetworkInfo
|
2018-06-09 11:20:21 +02:00
|
|
|
import android.os.Build
|
|
|
|
import android.os.Handler
|
2018-08-13 16:35:49 +02:00
|
|
|
import net.osmand.telegram.helpers.*
|
2018-06-11 20:22:07 +02:00
|
|
|
import net.osmand.telegram.helpers.OsmandAidlHelper.OsmandHelperListener
|
2018-08-29 15:01:53 +02:00
|
|
|
import net.osmand.telegram.helpers.OsmandAidlHelper.UpdatesListener
|
2018-06-09 11:20:21 +02:00
|
|
|
import net.osmand.telegram.notifications.NotificationHelper
|
|
|
|
import net.osmand.telegram.utils.AndroidUtils
|
2018-06-13 19:14:08 +02:00
|
|
|
import net.osmand.telegram.utils.UiUtils
|
2018-06-06 13:06:56 +02:00
|
|
|
|
2018-06-11 20:22:07 +02:00
|
|
|
class TelegramApplication : Application(), OsmandHelperListener {
|
2018-06-06 13:06:56 +02:00
|
|
|
|
2018-08-10 12:35:30 +02:00
|
|
|
val telegramHelper = TelegramHelper.instance
|
2018-06-11 18:57:33 +02:00
|
|
|
lateinit var settings: TelegramSettings private set
|
2018-06-13 19:14:08 +02:00
|
|
|
lateinit var uiUtils: UiUtils private set
|
2018-06-11 18:57:33 +02:00
|
|
|
lateinit var shareLocationHelper: ShareLocationHelper private set
|
|
|
|
lateinit var showLocationHelper: ShowLocationHelper private set
|
|
|
|
lateinit var notificationHelper: NotificationHelper private set
|
2018-07-09 12:59:30 +02:00
|
|
|
lateinit var osmandAidlHelper: OsmandAidlHelper private set
|
2018-07-05 17:16:55 +02:00
|
|
|
lateinit var locationProvider: TelegramLocationProvider private set
|
2019-01-25 17:04:26 +01:00
|
|
|
lateinit var locationMessages: LocationMessages private set
|
2018-06-11 18:57:33 +02:00
|
|
|
|
|
|
|
var telegramService: TelegramService? = null
|
|
|
|
|
|
|
|
private val uiHandler = Handler()
|
|
|
|
|
|
|
|
private val lastTimeInternetConnectionChecked: Long = 0
|
|
|
|
private var internetConnectionAvailable = true
|
|
|
|
|
|
|
|
override fun onCreate() {
|
|
|
|
super.onCreate()
|
2018-08-10 12:35:30 +02:00
|
|
|
telegramHelper.appDir = filesDir.absolutePath
|
2018-08-13 16:35:49 +02:00
|
|
|
telegramHelper.init()
|
2018-06-11 18:57:33 +02:00
|
|
|
|
|
|
|
settings = TelegramSettings(this)
|
2018-08-10 12:35:30 +02:00
|
|
|
telegramHelper.messageActiveTimeSec = settings.locHistoryTime
|
2018-06-13 19:14:08 +02:00
|
|
|
uiUtils = UiUtils(this)
|
2018-07-09 12:59:30 +02:00
|
|
|
osmandAidlHelper = OsmandAidlHelper(this)
|
2018-07-30 15:45:09 +02:00
|
|
|
osmandAidlHelper.listener = object : OsmandAidlHelper.OsmandHelperListener {
|
2018-07-27 15:50:07 +02:00
|
|
|
override fun onOsmandConnectionStateChanged(connected: Boolean) {
|
|
|
|
if (connected) {
|
2018-07-31 20:36:31 +02:00
|
|
|
osmandAidlHelper.setNavDrawerItems(
|
2018-09-06 14:55:38 +02:00
|
|
|
applicationContext.packageName,
|
2019-02-15 18:32:17 +01:00
|
|
|
listOf(getString(R.string.app_name_short_online)),
|
2018-07-31 12:24:14 +02:00
|
|
|
listOf("osmand_telegram://main_activity"),
|
2018-08-02 11:38:38 +02:00
|
|
|
listOf("ic_action_location_sharing_app"),
|
2018-07-31 12:24:14 +02:00
|
|
|
listOf(-1)
|
2018-07-30 15:45:09 +02:00
|
|
|
)
|
2019-04-20 12:53:06 +02:00
|
|
|
showLocationHelper.addDirectionContextMenuButton()
|
2018-08-29 16:26:09 +02:00
|
|
|
if (settings.hasAnyChatToShowOnMap()) {
|
|
|
|
showLocationHelper.startShowingLocation()
|
|
|
|
}
|
2018-07-27 15:50:07 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-08-29 15:01:53 +02:00
|
|
|
osmandAidlHelper.setUpdatesListener(object : UpdatesListener {
|
2018-08-29 14:27:50 +02:00
|
|
|
override fun update() {
|
2018-08-29 15:01:53 +02:00
|
|
|
showLocationHelper.startUpdateMessagesTask()
|
2018-08-29 14:27:50 +02:00
|
|
|
}
|
|
|
|
})
|
2018-06-11 18:57:33 +02:00
|
|
|
shareLocationHelper = ShareLocationHelper(this)
|
|
|
|
showLocationHelper = ShowLocationHelper(this)
|
|
|
|
notificationHelper = NotificationHelper(this)
|
2018-07-05 17:16:55 +02:00
|
|
|
locationProvider = TelegramLocationProvider(this)
|
2019-01-25 17:04:26 +01:00
|
|
|
locationMessages = LocationMessages(this)
|
2018-06-11 18:57:33 +02:00
|
|
|
|
|
|
|
if (settings.hasAnyChatToShareLocation() && AndroidUtils.isLocationPermissionAvailable(this)) {
|
|
|
|
shareLocationHelper.startSharingLocation()
|
|
|
|
}
|
2019-02-06 12:50:02 +01:00
|
|
|
if (settings.monitoringEnabled) {
|
|
|
|
showLocationHelper.startShowingLocation()
|
|
|
|
}
|
2018-06-11 18:57:33 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fun cleanupResources() {
|
2018-07-09 12:59:30 +02:00
|
|
|
osmandAidlHelper.cleanupResources()
|
2018-06-11 18:57:33 +02:00
|
|
|
telegramHelper.close()
|
|
|
|
}
|
|
|
|
|
2018-09-07 14:34:03 +02:00
|
|
|
fun stopSharingLocation() {
|
|
|
|
settings.stopSharingLocationToChats()
|
|
|
|
shareLocationHelper.stopSharingLocation()
|
2018-10-08 18:10:55 +02:00
|
|
|
telegramHelper.stopSendingLiveLocationMessages(settings.getChatsShareInfo())
|
2018-09-07 14:34:03 +02:00
|
|
|
}
|
|
|
|
|
2019-02-15 18:32:17 +01:00
|
|
|
fun stopMonitoring() {
|
|
|
|
settings.monitoringEnabled = false
|
|
|
|
stopUserLocationService()
|
|
|
|
}
|
|
|
|
|
2019-02-05 17:15:51 +01:00
|
|
|
fun isAnyOsmAndInstalled() = TelegramSettings.AppConnect.getInstalledApps(this).isNotEmpty()
|
2019-02-05 16:26:42 +01:00
|
|
|
|
2019-02-05 17:15:51 +01:00
|
|
|
fun isOsmAndChosen() = settings.appToConnectPackage.isNotEmpty()
|
2019-02-05 16:26:42 +01:00
|
|
|
|
2019-02-05 17:15:51 +01:00
|
|
|
fun isOsmAndInstalled() = AndroidUtils.isAppInstalled(this, settings.appToConnectPackage)
|
2018-09-07 12:32:21 +02:00
|
|
|
|
2018-06-11 18:57:33 +02:00
|
|
|
val isWifiConnected: Boolean
|
|
|
|
get() {
|
|
|
|
val mgr = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
|
|
|
val ni = mgr.activeNetworkInfo
|
|
|
|
return ni != null && ni.type == ConnectivityManager.TYPE_WIFI
|
|
|
|
}
|
|
|
|
|
2019-01-25 17:04:26 +01:00
|
|
|
val isMobileConnected: Boolean
|
|
|
|
get() {
|
|
|
|
val mgr = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
|
|
|
val ni = mgr.activeNetworkInfo
|
|
|
|
return ni != null && ni.type == ConnectivityManager.TYPE_MOBILE
|
|
|
|
}
|
|
|
|
|
2018-06-11 18:57:33 +02:00
|
|
|
private val isInternetConnected: Boolean
|
|
|
|
get() {
|
|
|
|
val mgr = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
|
|
|
val active = mgr.activeNetworkInfo
|
|
|
|
if (active == null) {
|
|
|
|
return false
|
|
|
|
} else {
|
|
|
|
val state = active.state
|
|
|
|
return state != NetworkInfo.State.DISCONNECTED && state != NetworkInfo.State.DISCONNECTING
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check internet connection available every 15 seconds
|
|
|
|
val isInternetConnectionAvailable: Boolean
|
|
|
|
get() = isInternetConnectionAvailable(false)
|
|
|
|
|
|
|
|
fun isInternetConnectionAvailable(update: Boolean): Boolean {
|
|
|
|
val delta = System.currentTimeMillis() - lastTimeInternetConnectionChecked
|
|
|
|
if (delta < 0 || delta > 15000 || update) {
|
|
|
|
internetConnectionAvailable = isInternetConnected
|
|
|
|
}
|
|
|
|
return internetConnectionAvailable
|
|
|
|
}
|
|
|
|
|
2018-06-11 20:22:07 +02:00
|
|
|
override fun onOsmandConnectionStateChanged(connected: Boolean) {
|
2019-04-20 12:53:06 +02:00
|
|
|
if (connected) {
|
|
|
|
showLocationHelper.setupMapLayer()
|
|
|
|
showLocationHelper.addDirectionContextMenuButton()
|
|
|
|
}
|
2018-06-11 20:22:07 +02:00
|
|
|
}
|
|
|
|
|
2018-06-14 14:21:58 +02:00
|
|
|
private fun startTelegramService(intent: Int, serviceOffInterval: Long = 0) {
|
2018-06-11 18:57:33 +02:00
|
|
|
var i = intent
|
2018-06-14 14:21:58 +02:00
|
|
|
var interval = serviceOffInterval
|
2018-06-11 18:57:33 +02:00
|
|
|
val serviceIntent = Intent(this, TelegramService::class.java)
|
|
|
|
|
|
|
|
val telegramService = telegramService
|
|
|
|
if (telegramService != null) {
|
|
|
|
i = intent or telegramService.usedBy
|
2018-06-14 14:21:58 +02:00
|
|
|
interval = if (TelegramService.isOffIntervalDepended(intent)) {
|
|
|
|
Math.min(telegramService.serviceOffInterval, interval)
|
|
|
|
} else {
|
|
|
|
telegramService.serviceOffInterval
|
|
|
|
}
|
2018-06-11 18:57:33 +02:00
|
|
|
telegramService.stopSelf()
|
|
|
|
}
|
|
|
|
|
|
|
|
serviceIntent.putExtra(TelegramService.USAGE_INTENT, i)
|
2018-06-14 14:21:58 +02:00
|
|
|
serviceIntent.putExtra(TelegramService.USAGE_OFF_INTERVAL, interval)
|
2018-08-10 12:16:46 +02:00
|
|
|
serviceIntent.putExtra(TelegramService.SEND_LOCATION_INTERVAL, settings.sendMyLocInterval)
|
2018-06-11 18:57:33 +02:00
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
|
|
startForegroundService(serviceIntent)
|
|
|
|
} else {
|
|
|
|
startService(serviceIntent)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fun startMyLocationService() {
|
2018-08-10 12:16:46 +02:00
|
|
|
val interval = settings.sendMyLocInterval
|
2018-06-14 14:21:58 +02:00
|
|
|
startTelegramService(TelegramService.USED_BY_MY_LOCATION, TelegramService.normalizeOffInterval(interval))
|
2018-06-11 18:57:33 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fun stopMyLocationService() {
|
|
|
|
telegramService?.stopIfNeeded(this, TelegramService.USED_BY_MY_LOCATION)
|
|
|
|
}
|
|
|
|
|
2018-06-19 15:33:15 +02:00
|
|
|
fun forceUpdateMyLocation() {
|
|
|
|
telegramService?.forceLocationUpdate()
|
|
|
|
}
|
|
|
|
|
2018-08-15 12:58:59 +02:00
|
|
|
fun updateSendLocationInterval() {
|
|
|
|
telegramService?.updateSendLocationInterval(settings.sendMyLocInterval)
|
|
|
|
}
|
|
|
|
|
2018-06-11 18:57:33 +02:00
|
|
|
fun startUserLocationService() {
|
|
|
|
startTelegramService(TelegramService.USED_BY_USERS_LOCATIONS)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun stopUserLocationService() {
|
|
|
|
telegramService?.stopIfNeeded(this, TelegramService.USED_BY_USERS_LOCATIONS)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun runInUIThread(action: (() -> Unit)) {
|
|
|
|
uiHandler.post(action)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun runInUIThread(action: (() -> Unit), delay: Long) {
|
|
|
|
uiHandler.postDelayed(action, delay)
|
|
|
|
}
|
2018-06-06 13:06:56 +02:00
|
|
|
}
|