diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/appSettingsScreen/AppSettingsFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/appSettingsScreen/AppSettingsFragment.kt
index 1145687d..2f3ce3cf 100644
--- a/app/src/main/java/com/rtbishop/look4sat/presentation/appSettingsScreen/AppSettingsFragment.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/presentation/appSettingsScreen/AppSettingsFragment.kt
@@ -28,10 +28,10 @@ import androidx.core.content.ContextCompat
import androidx.preference.EditTextPreference
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
-import com.google.android.material.snackbar.Snackbar
import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.data.PreferencesSource
import com.rtbishop.look4sat.framework.PreferencesProvider
+import com.rtbishop.look4sat.utility.showSnack
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@@ -46,7 +46,7 @@ class AppSettingsFragment : PreferenceFragmentCompat() {
if (isGranted) {
updatePositionFromGPS()
} else {
- showSnack(getString(R.string.pref_pos_gps_error))
+ requireView().showSnack(getString(R.string.pref_pos_gps_error))
}
}
@@ -75,7 +75,7 @@ class AppSettingsFragment : PreferenceFragmentCompat() {
if (Patterns.IP_ADDRESS.matcher(newValue.toString()).matches()) {
return@setOnPreferenceChangeListener true
} else {
- showSnack(getString(R.string.tracking_rotator_address_invalid))
+ requireView().showSnack(getString(R.string.tracking_rotator_address_invalid))
return@setOnPreferenceChangeListener false
}
}
@@ -88,7 +88,7 @@ class AppSettingsFragment : PreferenceFragmentCompat() {
if (portValue.isNotEmpty() && portValue.toInt() in 1024..65535) {
return@setOnPreferenceChangeListener true
} else {
- showSnack(getString(R.string.tracking_rotator_port_invalid))
+ requireView().showSnack(getString(R.string.tracking_rotator_port_invalid))
return@setOnPreferenceChangeListener false
}
}
@@ -97,10 +97,10 @@ class AppSettingsFragment : PreferenceFragmentCompat() {
private fun updatePositionFromQth(qthString: String): Boolean {
return if (preferencesSource.updatePositionFromQTH(qthString)) {
- showSnack(getString(R.string.pref_pos_success))
+ requireView().showSnack(getString(R.string.pref_pos_success))
true
} else {
- showSnack(getString(R.string.pref_pos_qth_error))
+ requireView().showSnack(getString(R.string.pref_pos_qth_error))
false
}
}
@@ -110,14 +110,10 @@ class AppSettingsFragment : PreferenceFragmentCompat() {
val locPermResult = ContextCompat.checkSelfPermission(requireContext(), locPermString)
if (locPermResult == PackageManager.PERMISSION_GRANTED) {
if (preferencesSource.updatePositionFromGPS()) {
- showSnack(getString(R.string.pref_pos_success))
- } else showSnack(getString(R.string.pref_pos_gps_null))
+ requireView().showSnack(getString(R.string.pref_pos_success))
+ } else {
+ requireView().showSnack(getString(R.string.pref_pos_gps_null))
+ }
} else requestPermissionLauncher.launch(locPermString)
}
-
- private fun showSnack(message: String) {
- Snackbar.make(requireView(), message, Snackbar.LENGTH_SHORT).apply {
- setAnchorView(R.id.nav_bottom)
- }.show()
- }
}
diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/appSplashDialog/AppSplashDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/appSplashDialog/AppSplashDialog.kt
deleted file mode 100644
index c67bba1b..00000000
--- a/app/src/main/java/com/rtbishop/look4sat/presentation/appSplashDialog/AppSplashDialog.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Look4Sat. Amateur radio satellite tracker and pass predictor.
- * Copyright (C) 2019-2021 Arty Bishop (bishop.arty@gmail.com)
- *
- * 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 com.rtbishop.look4sat.presentation.appSplashDialog
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.view.WindowManager
-import androidx.appcompat.app.AppCompatDialogFragment
-import com.rtbishop.look4sat.R
-import com.rtbishop.look4sat.databinding.DialogSplashBinding
-
-class AppSplashDialog : AppCompatDialogFragment() {
-
- override fun onCreateView(inflater: LayoutInflater, group: ViewGroup?, state: Bundle?): View? {
- return inflater.inflate(R.layout.dialog_splash, group, false)
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- DialogSplashBinding.bind(view).apply {
- dialog?.window?.setLayout(
- WindowManager.LayoutParams.MATCH_PARENT,
- WindowManager.LayoutParams.WRAP_CONTENT
- )
- splashOkButton.setOnClickListener { dismiss() }
- }
- }
-}
diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/satItemScreen/SatItemFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/satItemScreen/SatItemFragment.kt
index 44e6a58a..615385a0 100644
--- a/app/src/main/java/com/rtbishop/look4sat/presentation/satItemScreen/SatItemFragment.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/presentation/satItemScreen/SatItemFragment.kt
@@ -18,18 +18,21 @@
package com.rtbishop.look4sat.presentation.satItemScreen
import android.os.Bundle
+import android.util.Patterns
import android.view.View
import androidx.activity.result.contract.ActivityResultContracts
+import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.SimpleItemAnimator
-import com.google.android.material.snackbar.Snackbar
import com.rtbishop.look4sat.R
+import com.rtbishop.look4sat.databinding.DialogSourceBinding
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
import com.rtbishop.look4sat.domain.model.SatItem
import com.rtbishop.look4sat.framework.model.Result
import com.rtbishop.look4sat.utility.RecyclerDivider
+import com.rtbishop.look4sat.utility.showSnack
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
@@ -59,6 +62,7 @@ class SatItemFragment : Fragment(R.layout.fragment_entries) {
addItemDecoration(RecyclerDivider(R.drawable.rec_divider_light))
}
importWeb.setOnClickListener { viewModel.updateEntriesFromWeb(null) }
+ importSource.setOnClickListener { showSourceDialog() }
importFile.setOnClickListener { filePicker.launch("*/*") }
selectMode.setOnClickListener { viewModel.createModesDialog(requireContext()).show() }
selectAll.setOnClickListener { viewModel.selectCurrentItems() }
@@ -88,11 +92,26 @@ class SatItemFragment : Fragment(R.layout.fragment_entries) {
is Result.Error -> {
binding.entriesProgress.visibility = View.INVISIBLE
binding.entriesRecycler.visibility = View.VISIBLE
- val errorMsg = getString(R.string.entries_update_error)
- Snackbar.make(requireView(), errorMsg, Snackbar.LENGTH_SHORT).apply {
- setAnchorView(R.id.nav_bottom)
- }.show()
+ requireView().showSnack(getString(R.string.entries_update_error))
}
}
}
+
+ private fun showSourceDialog() {
+ val dialogBinding = DialogSourceBinding.inflate(requireActivity().layoutInflater)
+ val dialogBuilder = AlertDialog.Builder(requireContext()).apply {
+ setMessage(getString(R.string.sources_title))
+ setView(dialogBinding.root)
+ setPositiveButton(android.R.string.ok) { _, _ ->
+ val editTextInput = dialogBinding.sourceUrl.text.toString()
+ if (Patterns.WEB_URL.matcher(editTextInput).matches()) {
+ viewModel.updateEntriesFromWeb(listOf(editTextInput))
+ } else {
+ requireView().showSnack(getString(R.string.sources_error))
+ }
+ }
+ setNeutralButton(android.R.string.cancel, null)
+ }
+ dialogBuilder.create().show()
+ }
}
diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/satPassInfoScreen/SatTransAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/satPassInfoScreen/SatTransAdapter.kt
index db51dbc6..506e5ec7 100644
--- a/app/src/main/java/com/rtbishop/look4sat/presentation/satPassInfoScreen/SatTransAdapter.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/presentation/satPassInfoScreen/SatTransAdapter.kt
@@ -58,8 +58,8 @@ class SatTransAdapter : RecyclerView.Adapter() {
RecyclerView.ViewHolder(binding.root) {
private val divider = 1000000f
- private val strNo = itemView.context.getString(R.string.btn_no)
- private val strYes = itemView.context.getString(R.string.btn_yes)
+ private val strNo = itemView.context.getString(R.string.no)
+ private val strYes = itemView.context.getString(R.string.yes)
private val mode = itemView.context.getString(R.string.trans_mode)
private val formatLink = itemView.context.getString(R.string.trans_link_low)
private val formatLinkNull = itemView.context.getString(R.string.trans_no_link)
diff --git a/app/src/main/java/com/rtbishop/look4sat/utility/Extensions.kt b/app/src/main/java/com/rtbishop/look4sat/utility/Extensions.kt
index 799ab76c..e66e67c8 100644
--- a/app/src/main/java/com/rtbishop/look4sat/utility/Extensions.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/utility/Extensions.kt
@@ -18,10 +18,13 @@
package com.rtbishop.look4sat.utility
import android.os.Bundle
+import android.view.View
import androidx.annotation.IdRes
import androidx.navigation.NavController
import androidx.navigation.NavOptions
import androidx.navigation.Navigator
+import com.google.android.material.snackbar.Snackbar
+import com.rtbishop.look4sat.R
import java.util.concurrent.TimeUnit
fun Long.toTimerString(): String {
@@ -38,6 +41,12 @@ fun Double.round(decimals: Int): Double {
return kotlin.math.round(this * multiplier) / multiplier
}
+fun View.showSnack(message: String, isAnchored: Boolean = true) {
+ Snackbar.make(this, message, Snackbar.LENGTH_SHORT).apply {
+ if (isAnchored) setAnchorView(R.id.nav_bottom)
+ }.show()
+}
+
fun NavController.navigateSafe(
@IdRes resId: Int,
args: Bundle? = null,
diff --git a/app/src/main/res/drawable/ic_baseline_cached_24.xml b/app/src/main/res/drawable/ic_baseline_cached_24.xml
new file mode 100644
index 00000000..a96341a9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_cached_24.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_link_24.xml b/app/src/main/res/drawable/ic_baseline_link_24.xml
new file mode 100644
index 00000000..1b02e601
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_link_24.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_sync_24.xml b/app/src/main/res/drawable/ic_baseline_sync_24.xml
new file mode 100644
index 00000000..07125691
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_sync_24.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/dialog_source.xml b/app/src/main/res/layout/dialog_source.xml
new file mode 100644
index 00000000..0e9067f8
--- /dev/null
+++ b/app/src/main/res/layout/dialog_source.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/dialog_sources.xml b/app/src/main/res/layout/dialog_sources.xml
deleted file mode 100644
index 71d3e729..00000000
--- a/app/src/main/res/layout/dialog_sources.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_splash.xml b/app/src/main/res/layout/dialog_splash.xml
deleted file mode 100644
index 8b189ddf..00000000
--- a/app/src/main/res/layout/dialog_splash.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_entries.xml b/app/src/main/res/layout/fragment_entries.xml
index a3abb5d6..90883910 100644
--- a/app/src/main/res/layout/fragment_entries.xml
+++ b/app/src/main/res/layout/fragment_entries.xml
@@ -30,7 +30,19 @@
android:backgroundTint="@color/greyDark"
android:contentDescription="@string/placeholder"
android:elevation="4dp"
- android:src="@drawable/ic_update_web"
+ android:src="@drawable/ic_baseline_cached_24"
+ app:layout_constraintBottom_toBottomOf="@+id/import_file"
+ app:layout_constraintEnd_toStartOf="@+id/import_source"
+ app:layout_constraintTop_toTopOf="@+id/import_file" />
+
+
diff --git a/app/src/main/res/layout/item_tle_source.xml b/app/src/main/res/layout/item_tle_source.xml
deleted file mode 100644
index 5193c99e..00000000
--- a/app/src/main/res/layout/item_tle_source.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index 4dd3f5ea..296e46b8 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -59,9 +59,5 @@
android:id="@+id/nav_info"
android:name="com.rtbishop.look4sat.presentation.appInfoScreen.AppInfoFragment"
tools:layout="@layout/fragment_info" />
-
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 82411fd1..ea8b3061 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -1,9 +1,7 @@
- Да
- Нет
- Отмена
- Обновить
+ Да
+ Нет
Спутники
Пролеты
@@ -11,9 +9,9 @@
Настройки
Инфо
- Управление TLE
- Источник TLE
- Только протокол HTTPS
+ Введите HTTPS адрес источника
+ URL источника
+ Пожалуйста, проверьте URL
Обновить спутники:
Имя / Номер
@@ -60,11 +58,6 @@
Использовать компас
Показывать время пролета по UTC
- Данные спутников теряют точность со временем, поэтому
- их рекомендуется обновлять примерно раз в неделю
- Чтобы корректно рассчитывать орбиты спутников,
- установите позицию наземной станции через меню Настройки
-
Настройки слежения
Управление поворотным устройством
IP адрес поворотного устройства
@@ -74,7 +67,7 @@
Версия: %s
Трекер спутников для Android
- Угостить кофе
+ Поддержать
Огромное спасибо:
\n— Вам за использование этого приложения! \nЖелаю всегда чистого неба над головой!
\n— David A. B. Johnson и
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 195b1c95..11bb37fd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3,10 +3,8 @@
Look4Sat
Placeholder
- No
- Yes
- Cancel
- Update
+ No
+ Yes
Satellites
Passes
@@ -14,9 +12,9 @@
Settings
Info
- Manage TLE sources
- TLE source
- Protocol HTTPS only
+ Enter HTTPS source address
+ Source URL
+ Please check the entered URL
TLE data update:
Name / Id
@@ -76,11 +74,6 @@
Show pass time in UTC
Use sensors to rotate PolarView
- TLE satellite data looses precision over time, so it is
- recommended to update it every week or so
- To get the accurate predictions please set
- the ground station position via the Settings menu
-
Tracking preferences
Antenna rotator control
Rotator IP address
diff --git a/core/build.gradle b/core/build.gradle
index 833913ef..b0b0327f 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -10,7 +10,7 @@ java {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
- implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
+ implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
testImplementation "junit:junit:$junit_version"
testImplementation "org.mockito:mockito-core:$mockito_version"