diff --git a/mobile/app/build.gradle.kts b/mobile/app/build.gradle.kts index 272effe..e35bf27 100644 --- a/mobile/app/build.gradle.kts +++ b/mobile/app/build.gradle.kts @@ -50,6 +50,7 @@ dependencies { implementation("androidx.viewpager2:viewpager2:1.0.0") implementation("com.github.bumptech.glide:glide:4.16.0") implementation("com.google.android.material:material:1.11.0") + implementation("com.github.bumptech.glide:glide:4.16.0") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation("androidx.test.ext:junit:1.1.5") testImplementation("junit:junit:4.13.2") diff --git a/mobile/app/src/main/AndroidManifest.xml b/mobile/app/src/main/AndroidManifest.xml index 3b47675..1881874 100644 --- a/mobile/app/src/main/AndroidManifest.xml +++ b/mobile/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ + diff --git a/mobile/app/src/main/gitlab_logo-playstore.png b/mobile/app/src/main/gitlab_logo-playstore.png new file mode 100644 index 0000000..51220e5 Binary files /dev/null and b/mobile/app/src/main/gitlab_logo-playstore.png differ diff --git a/mobile/app/src/main/grade-playstore.png b/mobile/app/src/main/grade-playstore.png new file mode 100644 index 0000000..52a120a Binary files /dev/null and b/mobile/app/src/main/grade-playstore.png differ diff --git a/mobile/app/src/main/grade2-playstore.png b/mobile/app/src/main/grade2-playstore.png new file mode 100644 index 0000000..4142987 Binary files /dev/null and b/mobile/app/src/main/grade2-playstore.png differ diff --git a/mobile/app/src/main/java/com/odweta/solen/AboutFragment.kt b/mobile/app/src/main/java/com/odweta/solen/AboutFragment.kt index e8bb7d3..af24acc 100644 --- a/mobile/app/src/main/java/com/odweta/solen/AboutFragment.kt +++ b/mobile/app/src/main/java/com/odweta/solen/AboutFragment.kt @@ -1,36 +1,53 @@ package com.odweta.solen import android.app.Dialog -import android.content.DialogInterface +import android.content.Intent +import android.graphics.Paint +import android.net.Uri import android.os.Bundle +import android.text.Spannable +import android.text.SpannableString +import android.text.method.LinkMovementMethod +import android.text.style.ClickableSpan +import android.text.style.UnderlineSpan import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.Window +import android.widget.TextView +import android.widget.Toast import androidx.core.content.ContextCompat import androidx.fragment.app.DialogFragment + class AboutFragment : DialogFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setStyle(STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar) + setStyle(STYLE_NORMAL, R.style.Theme_Solen_PrimaryStatusBar) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.activity_about, container, false) - } + val view = inflater.inflate(R.layout.activity_about, container, false) - override fun onCancel(dialog: DialogInterface) { - super.onCancel(dialog) + val link = view.findViewById(R.id.link) + val underlinedText = SpannableString(link.text) + underlinedText.setSpan(UnderlineSpan(), 1, link.text.length, 0) - // Change statusBarColor when the back button is pressed (dialog dismissed) - requireActivity().window.statusBarColor = ContextCompat.getColor( - requireContext(), - R.color.primary - ) + link.text = underlinedText + makeTextViewClickable(link, "https://gitlab.com/Odweta", 1) + + + val srcLink = view.findViewById(R.id.sourceCode) + val underlinedText2 = SpannableString(srcLink.text) + underlinedText2.setSpan(UnderlineSpan(), 1, srcLink.text.length, 0) + + srcLink.text = underlinedText2 + makeTextViewClickable(srcLink, "https://gitlab.com/Odweta/solen") + + return view } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { @@ -40,4 +57,27 @@ class AboutFragment : DialogFragment() { return dialog } + + private fun makeTextViewClickable(link: TextView, url: String, offset: Int = 0) { + val clickableSpan = object : ClickableSpan() { + override fun onClick(widget: View) { + if (Vars.internetAvail) { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) + startActivity(intent) + } else { + Toast.makeText( + requireContext(), + "Bez připojení k internetu.", + Toast.LENGTH_SHORT + ).show() + } + } + } + + val spannable = Spannable.Factory.getInstance().newSpannable(link.text) + spannable.setSpan(clickableSpan, offset, link.text.length, Spannable.SPAN_COMPOSING) + + link.text = spannable + link.movementMethod = LinkMovementMethod.getInstance() + } } \ No newline at end of file diff --git a/mobile/app/src/main/java/com/odweta/solen/CalWeekFragment.kt b/mobile/app/src/main/java/com/odweta/solen/CalWeekFragment.kt index eaf80da..85fec22 100644 --- a/mobile/app/src/main/java/com/odweta/solen/CalWeekFragment.kt +++ b/mobile/app/src/main/java/com/odweta/solen/CalWeekFragment.kt @@ -18,6 +18,7 @@ import android.widget.ScrollView import android.widget.Space import android.widget.TextView import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.lifecycle.Lifecycle @@ -78,6 +79,8 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { return view } private fun createDayView(day: Day, rootLayout: LinearLayout, resources: Resources) { + val customFont = context?.let { ResourcesCompat.getFont(it, R.font.roboto) } + val scrollView = ScrollView(requireContext()) val dayLayout = LinearLayout(requireContext()) @@ -85,6 +88,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { val nameDateTextView = TextView(requireContext()) val nameDateString = day.name + " " + day.date + nameDateTextView.typeface = customFont nameDateTextView.text = nameDateString nameDateTextView.textSize = 30f nameDateTextView.setTextColor( @@ -151,6 +155,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { ) val subjectNumberTextView = TextView(requireContext()) + subjectNumberTextView.typeface = customFont subjectNumberTextView.text = subj.number subjectNumberTextView.textSize = 30f subjectNumberTextView.setPadding(20, 20, 20, 20) @@ -180,6 +185,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { if (subj.name != "Volno") { subjectNameTextView.text = subj.name.uppercase() } + subjectNameTextView.typeface = customFont subjectNameTextView.textSize = 27f subjectNameTextView.setPadding(60, 35, 20, 35) subjectNameTextView.textAlignment = View.TEXT_ALIGNMENT_CENTER @@ -201,6 +207,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { subjectLayout.addView(subjectNameTextView) val subjectPlaceTextView = TextView(requireContext()) + subjectPlaceTextView.typeface = customFont subjectPlaceTextView.text = subj.place if (subj.free) { // underline @@ -232,6 +239,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { val subjectTimeTextView = TextView(requireContext()) val subjectTimeString = subj.start + " - " + subj.end + subjectTimeTextView.typeface = customFont subjectTimeTextView.text = subjectTimeString subjectTimeTextView.textSize = 20f subjectTimeTextView.setPadding(10, 10, 20, 10) @@ -245,6 +253,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { val subjectTeacherTextView = TextView(requireContext()) subjectTeacherTextView.text = subj.teacher + subjectTeacherTextView.typeface = customFont subjectTeacherTextView.textSize = 15f subjectTeacherTextView.setPadding(10, 10, 20, 10) subjectTeacherTextView.textAlignment = View.TEXT_ALIGNMENT_TEXT_END @@ -332,6 +341,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { val endTime = day.subjects[day.subjects.size - 1].end val dayEndString = "Den končí v $endTime" dayEndTextView.text = dayEndString + dayEndTextView.typeface = customFont dayEndTextView.textSize = 20f dayEndTextView.setPadding(0, 30, 0, 30) dayEndTextView.textAlignment = View.TEXT_ALIGNMENT_CENTER diff --git a/mobile/app/src/main/java/com/odweta/solen/MainActivity.kt b/mobile/app/src/main/java/com/odweta/solen/MainActivity.kt index 732c55d..7b7234f 100644 --- a/mobile/app/src/main/java/com/odweta/solen/MainActivity.kt +++ b/mobile/app/src/main/java/com/odweta/solen/MainActivity.kt @@ -2,11 +2,7 @@ package com.odweta.solen import android.content.Context import android.content.Intent -import android.graphics.ImageDecoder -import android.graphics.drawable.AnimatedImageDrawable import android.os.Bundle -import android.view.Menu -import android.view.MenuItem import android.widget.Button import android.widget.EditText import android.widget.ImageView @@ -14,9 +10,25 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.lifecycle.lifecycleScope +import com.bumptech.glide.Glide +import com.google.android.material.bottomnavigation.BottomNavigationView +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import org.json.JSONObject class MainActivity : AppCompatActivity() { + private var week: List = mutableListOf() + private var toastShowing: Boolean = false + private var toastShown: Boolean = false + private var toast2Shown: Boolean = false + private var done: Boolean = false + private lateinit var toolbar: androidx.appcompat.widget.Toolbar + private var role: String = " - Student" + private lateinit var navbar: BottomNavigationView + + // @section COMPANION companion object { fun quit(context: Context) { @@ -51,55 +63,6 @@ class MainActivity : AppCompatActivity() { } } - // Override onCreateOptionsMenu to handle menu item clicks - override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.menu_main, menu) - return true - } - - // Override onOptionsItemSelected to handle menu item clicks - override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { - /*R.id.item_refresh -> { - lifecycleScope.launch { - launch() - } - return true - }*/ - - // TODO: IMPLEMENT MARKS/GRADES - /*R.id.item_marks -> { - showMarksScreen() - - return true - }*/ - - R.id.item_sign_in -> { - window.statusBarColor = ContextCompat.getColor(this, R.color.black) - SignInFragment().show(supportFragmentManager, "fragment_sign_in") - return true - } - - R.id.item_settings -> { - showSettingsScreen() - return true - } - - R.id.item_sign_out -> { - Dialogs.SignOut(this).show() - return true - } - - R.id.item_about -> { - window.statusBarColor = ContextCompat.getColor(this, R.color.black) - AboutFragment().show(supportFragmentManager, "fragment_about") - return true - } - } - - return super.onOptionsItemSelected(item) - } - @@ -132,12 +95,61 @@ class MainActivity : AppCompatActivity() { } private fun setSignInButtonOnClick() { - window.statusBarColor = ContextCompat.getColor(this, R.color.black) findViewById