From d804c20bd0b47454d13766983a9724d7dcd0cca8 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sun, 10 May 2020 22:41:31 +0100 Subject: [PATCH] Added initial code for the custom tle import from url --- .../look4sat/repo/DefaultRepository.kt | 4 +- .../com/rtbishop/look4sat/repo/Repository.kt | 2 +- .../com/rtbishop/look4sat/ui/MainActivity.kt | 27 +++++++++- .../rtbishop/look4sat/ui/SharedViewModel.kt | 9 +++- .../look4sat/ui/fragments/PassListFragment.kt | 15 +++--- app/src/main/res/layout/dialog_sat_entry.xml | 22 ++++---- app/src/main/res/layout/dialog_tle_url.xml | 53 +++++++++++++++++++ 7 files changed, 108 insertions(+), 24 deletions(-) create mode 100644 app/src/main/res/layout/dialog_tle_url.xml diff --git a/app/src/main/java/com/rtbishop/look4sat/repo/DefaultRepository.kt b/app/src/main/java/com/rtbishop/look4sat/repo/DefaultRepository.kt index 26fbf113..60007e11 100644 --- a/app/src/main/java/com/rtbishop/look4sat/repo/DefaultRepository.kt +++ b/app/src/main/java/com/rtbishop/look4sat/repo/DefaultRepository.kt @@ -36,8 +36,8 @@ class DefaultRepository @Inject constructor( private val remoteSource: RemoteSource ) : Repository { - override suspend fun updateEntriesFromFile(uri: Uri) { - resolver.openInputStream(uri)?.use { + override suspend fun updateEntriesFromFile(tleUri: Uri) { + resolver.openInputStream(tleUri)?.use { withContext(Dispatchers.IO) { val tleList = TLE.importSat(it) val entries = tleList.map { SatEntry(it) } diff --git a/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt b/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt index 58a431eb..81c68b37 100644 --- a/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt +++ b/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt @@ -6,7 +6,7 @@ import com.rtbishop.look4sat.data.Transmitter interface Repository { - suspend fun updateEntriesFromFile(uri: Uri) + suspend fun updateEntriesFromFile(tleUri: Uri) suspend fun updateEntriesFromUrl(tleUrl: String) diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt b/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt index c6bc2781..e12c3838 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt @@ -22,6 +22,7 @@ package com.rtbishop.look4sat.ui import android.Manifest import android.annotation.SuppressLint import android.app.Activity +import android.app.AlertDialog import android.content.Intent import android.content.pm.ActivityInfo import android.content.pm.PackageManager @@ -33,6 +34,7 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat +import androidx.core.widget.addTextChangedListener import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope @@ -46,6 +48,7 @@ import com.rtbishop.look4sat.R import com.rtbishop.look4sat.dagger.ViewModelFactory import com.rtbishop.look4sat.data.Result import com.rtbishop.look4sat.databinding.ActivityMainBinding +import com.rtbishop.look4sat.databinding.DialogTleUrlBinding import com.rtbishop.look4sat.databinding.DrawerHeaderBinding import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -162,7 +165,8 @@ class MainActivity : AppCompatActivity() { it.lockButton() } drawerBinding.drawerBtnTleUrl.setOnClickListener { - viewModel.updateEntriesFromWeb() + showTleUrlDialog() + mainBinding.drawerLayout.closeDrawers() it.lockButton() } drawerBinding.drawerBtnTrans.setOnClickListener { @@ -177,6 +181,27 @@ class MainActivity : AppCompatActivity() { drawerBinding.drawerBtnExit.setOnClickListener { finish() } } + private fun showTleUrlDialog() { + var tleUrl = "" + val dialogBinding = DialogTleUrlBinding.inflate(layoutInflater).apply { + dialogTleInput.addTextChangedListener { + tleUrl = it.toString() + } + dialogTleNeg.setOnClickListener { + + } + dialogTlePos.setOnClickListener { + + } + } + + AlertDialog.Builder(this).apply { + setView(dialogBinding.root) + create() + show() + } + } + private fun toast(message: String) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show() } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/SharedViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/ui/SharedViewModel.kt index 2c02d9af..1ccbc01e 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/SharedViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/SharedViewModel.kt @@ -98,10 +98,15 @@ class SharedViewModel @Inject constructor( } } - fun updateEntriesFromWeb() { + fun updateEntriesFromWeb(tleUrl: String? = null) { viewModelScope.launch(Dispatchers.IO) { try { - val url = prefsManager.getTleUrl() + val url = if (tleUrl.isNullOrEmpty()) { + prefsManager.getTleUrl() + } else { + prefsManager.setTleUrl(tleUrl) + tleUrl + } val selected = repository.getSelectedEntries().map { it.catNum } repository.updateEntriesFromUrl(url) repository.updateEntriesSelection(selected) diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassListFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassListFragment.kt index e941ac0b..dc88ca3a 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassListFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassListFragment.kt @@ -139,9 +139,9 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) { etHoursAhead.setText(hoursAhead.toString()) etMinEl.setText(minEl.toString()) - val builder = AlertDialog.Builder(mainActivity) - builder.setTitle(getString(R.string.dialog_filter_passes)) - .setPositiveButton(getString(R.string.btn_ok)) { _, _ -> + AlertDialog.Builder(mainActivity).apply { + setTitle(getString(R.string.dialog_filter_passes)) + setPositiveButton(getString(R.string.btn_ok)) { _, _ -> val hoursStr = etHoursAhead.text.toString() val elevationStr = etMinEl.text.toString() if (hoursStr.isNotEmpty() && elevationStr.isNotEmpty()) { @@ -174,12 +174,13 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) { ).show() } - .setNegativeButton(getString(R.string.btn_cancel)) { dialog, _ -> + setNegativeButton(getString(R.string.btn_cancel)) { dialog, _ -> dialog.cancel() } - .setView(satPassPrefView) - .create() - .show() + setView(satPassPrefView) + create() + show() + } } private fun showSelectSatDialog( diff --git a/app/src/main/res/layout/dialog_sat_entry.xml b/app/src/main/res/layout/dialog_sat_entry.xml index 081f50da..c1737a8d 100644 --- a/app/src/main/res/layout/dialog_sat_entry.xml +++ b/app/src/main/res/layout/dialog_sat_entry.xml @@ -29,10 +29,10 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="8dp" - android:layout_marginTop="4dp" + android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:text="@string/dialog_select_sat" - android:textSize="21sp" + android:textSize="18sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" @@ -42,8 +42,9 @@ android:id="@+id/dialog_search" android:layout_width="0dp" android:layout_height="wrap_content" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" + android:layout_marginTop="4dp" + app:layout_constraintEnd_toEndOf="@+id/dialog_title" + app:layout_constraintStart_toStartOf="@+id/dialog_title" app:layout_constraintTop_toBottomOf="@+id/dialog_title" /> + app:layout_constraintBaseline_toBaselineOf="@+id/dialog_btn_negative" + app:layout_constraintStart_toStartOf="@+id/dialog_recycler" /> + app:layout_constraintEnd_toEndOf="@+id/dialog_recycler" /> diff --git a/app/src/main/res/layout/dialog_tle_url.xml b/app/src/main/res/layout/dialog_tle_url.xml new file mode 100644 index 00000000..98a768a8 --- /dev/null +++ b/app/src/main/res/layout/dialog_tle_url.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + \ No newline at end of file