Archived
FetcherActivity.kt now has a bottom app bar with useful actions and extends FragmentActivity instead of AppCompatActivity to show a tutorial bottom sheet
This commit is contained in:
@@ -5,12 +5,13 @@ import android.os.Bundle
|
||||
import android.webkit.WebResourceRequest
|
||||
import android.webkit.WebView
|
||||
import android.webkit.WebViewClient
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.denizk0461.studip.R
|
||||
import com.denizk0461.studip.data.showErrorSnackBar
|
||||
import com.denizk0461.studip.data.showToast
|
||||
import com.denizk0461.studip.databinding.ActivityFetcherBinding
|
||||
import com.denizk0461.studip.sheet.TextSheet
|
||||
import com.denizk0461.studip.viewmodel.FetcherViewModel
|
||||
import java.io.IOException
|
||||
import java.net.URLDecoder
|
||||
@@ -19,7 +20,7 @@ import java.net.URLDecoder
|
||||
* Activity for allowing the user to log in to access and fetch their schedule from their Stud.IP
|
||||
* profile. Launched through a button in the app's settings.
|
||||
*/
|
||||
class FetcherActivity : AppCompatActivity() {
|
||||
class FetcherActivity : FragmentActivity() {
|
||||
|
||||
// View binding
|
||||
private lateinit var binding: ActivityFetcherBinding
|
||||
@@ -54,13 +55,40 @@ class FetcherActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
// Set up bottom app bar for various actions
|
||||
binding.bottomAppBar.setOnMenuItemClickListener { item ->
|
||||
when (item.itemId) {
|
||||
R.id.close -> {
|
||||
// Close the activity
|
||||
finish()
|
||||
true
|
||||
}
|
||||
R.id.refresh -> {
|
||||
// Refresh the currently opened page
|
||||
binding.webview.reload()
|
||||
true
|
||||
}
|
||||
R.id.help -> {
|
||||
// Present the user with a small tutorial on how to fetch their timetable
|
||||
TextSheet().also { sheet ->
|
||||
val bundle = Bundle()
|
||||
bundle.putString("header", getString(R.string.fetch_bar_help_sheet_title))
|
||||
bundle.putString("content", getString(R.string.fetch_bar_help_sheet_content))
|
||||
sheet.arguments = bundle
|
||||
}.show(supportFragmentManager, TextSheet::class.java.simpleName)
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Attempt to load the user-set Stud.IP front page. Redirects to login page if user is
|
||||
* not logged in.
|
||||
*/
|
||||
binding.webview.loadUrl("https://elearning.uni-bremen.de/index.php?again=yes")
|
||||
|
||||
binding.fab.setOnClickListener { view ->
|
||||
binding.fab.setOnClickListener {
|
||||
|
||||
if (binding.webview.url?.contains(
|
||||
"https://elearning.uni-bremen.de/dispatch.php/calendar/schedule"
|
||||
@@ -78,20 +106,19 @@ class FetcherActivity : AppCompatActivity() {
|
||||
viewModel.parse(URLDecoder.decode(p0, "UTF-8"))
|
||||
|
||||
// Notify the user that the fetch was successful
|
||||
Toast.makeText(
|
||||
this, R.string.toast_fetch_finished, Toast.LENGTH_SHORT
|
||||
).show()
|
||||
showToast(this, getString(R.string.toast_fetch_finished))
|
||||
|
||||
// Close the activity
|
||||
finish()
|
||||
|
||||
} catch (e: IOException) {
|
||||
// Let the user know that an error occurred
|
||||
theme.showErrorSnackBar(binding.rootView, getString(R.string.fetch_error_snack))
|
||||
theme.showErrorSnackBar(binding.rootView, getString(R.string.fetch_error_snack), binding.bottomAppBar)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
theme.showErrorSnackBar(binding.rootView, getString(R.string.fetch_error_webpage_snack))
|
||||
// Tell the user that they must navigate to their timetable
|
||||
theme.showErrorSnackBar(binding.rootView, getString(R.string.fetch_error_webpage_snack), binding.bottomAppBar)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user