Add AppIntro activity

This commit is contained in:
Matte23
2020-10-28 10:30:17 +01:00
parent 4c09e91e99
commit 13ccae24bc
10 changed files with 212 additions and 3 deletions

View File

@@ -13,6 +13,10 @@
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".IntroActivity"
android:label="@string/title_intro" />
<activity
android:name=".SettingsActivity"
android:parentActivityName=".MainActivity"

View File

@@ -0,0 +1,48 @@
package net.underdesk.circolapp
import android.os.Bundle
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import com.github.appintro.AppIntro2
import com.github.appintro.AppIntroFragment
import com.github.appintro.AppIntroPageTransformerType
import net.underdesk.circolapp.fragments.intro.SchoolSelectionFragment
class IntroActivity : AppIntro2() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
isWizardMode = true
setTransformer(AppIntroPageTransformerType.Depth)
addSlide(
AppIntroFragment.newInstance(
title = getString(R.string.title_intro),
description = getString(R.string.activity_intro_welcome_description),
imageDrawable = R.mipmap.ic_launcher,
backgroundColor = ContextCompat.getColor(this, R.color.colorPrimary)
)
)
addSlide(SchoolSelectionFragment.newInstance())
addSlide(
AppIntroFragment.newInstance(
title = getString(R.string.activity_intro_last_slide_title),
description = getString(R.string.activity_intro_last_slide_description),
backgroundColor = ContextCompat.getColor(this, R.color.colorPrimary)
)
)
}
override fun onSkipPressed(currentFragment: Fragment?) {
super.onSkipPressed(currentFragment)
// Decide what to do when the user clicks on "Skip"
finish()
}
override fun onDonePressed(currentFragment: Fragment?) {
super.onDonePressed(currentFragment)
// Decide what to do when the user clicks on "Done"
finish()
}
}

View File

@@ -76,7 +76,7 @@ class MainActivity : AppCompatActivity(), CircularLetterAdapter.AdapterCallback
PollWork.enqueue(this)
if (getPreferences(Context.MODE_PRIVATE).getBoolean("first_start", true)) {
startInfoActivity()
startIntroActivity()
getPreferences(Context.MODE_PRIVATE).edit().apply {
putBoolean("first_start", false)
@@ -177,6 +177,10 @@ class MainActivity : AppCompatActivity(), CircularLetterAdapter.AdapterCallback
.start(this@MainActivity)
}
private fun startIntroActivity() {
startActivity(Intent(this, IntroActivity::class.java))
}
private fun loadDarkTheme() {
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

View File

@@ -0,0 +1,79 @@
package net.underdesk.circolapp.fragments.intro
import android.content.SharedPreferences
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import androidx.fragment.app.Fragment
import androidx.preference.PreferenceManager
import com.github.appintro.SlidePolicy
import com.tiper.MaterialSpinner
import kotlinx.android.synthetic.main.fragment_school_selection.view.*
import net.underdesk.circolapp.R
import net.underdesk.circolapp.server.ServerAPI
class SchoolSelectionFragment : Fragment(), SlidePolicy, MaterialSpinner.OnItemSelectedListener {
private lateinit var preferenceManager: SharedPreferences
private var schoolSelected = false
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? = inflater.inflate(R.layout.fragment_school_selection, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
preferenceManager = PreferenceManager.getDefaultSharedPreferences(requireContext())
val items = getSchoolListArray()
val adapter =
ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item, items)
view.school_selection_spinner.adapter = adapter
view.school_selection_spinner.onItemSelectedListener = this
}
private fun getSchoolListArray(): ArrayList<String> {
val servers = ServerAPI.Companion.Servers.values()
val entryNames = arrayListOf<String>()
for (i in servers.indices) {
entryNames.add(ServerAPI.getServerName(servers[i]))
}
return entryNames
}
override fun onItemSelected(parent: MaterialSpinner, view: View?, position: Int, id: Long) {
val editor = preferenceManager.edit()
editor.putString("school", position.toString())
editor.apply()
ServerAPI.changeServer(position)
schoolSelected = true
parent.error = null
}
override fun onNothingSelected(parent: MaterialSpinner) {
// Intentionally empty
}
override val isPolicyRespected: Boolean
get() = schoolSelected
override fun onUserIllegallyRequestedNextPage() {
view?.school_selection_spinner?.error =
getString(R.string.activity_intro_school_selection_error)
}
companion object {
fun newInstance(): SchoolSelectionFragment {
return SchoolSelectionFragment()
}
}
}

View File

@@ -73,9 +73,10 @@ class ServerAPI(
}
fun getInstance(context: Context): ServerAPI {
val preferenceManager = PreferenceManager.getDefaultSharedPreferences(context)
val server = Servers.values()[
PreferenceManager.getDefaultSharedPreferences(context).getString("school", "0")
?.toInt() ?: 0
preferenceManager.getString("school", "0")?.toInt() ?: 0
]
return instance ?: synchronized(this) {

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="@dimen/appintro_statusbar_height"
android:paddingBottom="@dimen/appintro2_bottombar_height"
android:background="@color/colorPrimary">
<TextView
android:id="@+id/school_selection_title"
android:layout_width="0dp"
android:layout_height="0dp"
android:gravity="center"
app:layout_constraintVertical_weight="2"
app:layout_constraintBottom_toTopOf="@+id/school_selection_spinner"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="spread"
style="@style/AppIntroDefaultHeading"
android:text="@string/activity_intro_school_selection_title" />
<com.tiper.MaterialSpinner
android:id="@+id/school_selection_spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:hint="@string/activity_intro_school_selection_hint"
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.Dense"
app:spinnerMode="bottomsheet"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/school_selection_note"
android:layout_width="0dp"
android:layout_height="0dp"
android:autoLink="web"
app:layout_constraintVertical_weight="3"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/school_selection_spinner"
style="@style/AppIntroDefaultText"
android:text="@string/activity_intro_school_selection_description" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -4,6 +4,7 @@
<string name="title_favourites">Preferiti</string>
<string name="title_reminders">Promemoria</string>
<string name="title_settings">Impostazioni</string>
<string name="title_intro">Benvenuto in Circolapp</string>
<string name="menu_about">Informazioni</string>
<string name="menu_search">Cerca</string>
@@ -47,6 +48,14 @@
<string name="activity_info_source_code">Codice sorgente</string>
<string name="activity_info_source_code_description">Puoi scaricare il codice sorgente da &lt;a href="https://github.com/Matte23/circolapp"&gt;https://github.com/Matte23/circolapp&lt;/a&gt;</string>
<string name="activity_intro_welcome_description">Con Circolapp puoi rimanere aggiornato sulle circolari della tua scuola. Visualizzare e scaricare le circolari non è mai stato così semplice</string>
<string name="activity_intro_school_selection_title">Inizia scegliendo la tua scuola</string>
<string name="activity_intro_school_selection_description">Puoi modificare la tua scelta in un secondo momento nelle impostazioni</string>
<string name="activity_intro_school_selection_error">Scegli una scuola</string>
<string name="activity_intro_school_selection_hint">Scuola</string>
<string name="activity_intro_last_slide_title">Hai finito</string>
<string name="activity_intro_last_slide_description">Adesso puoi iniziare ad usare Circolapp</string>
<string name="dialog_install_pdf_reader_title">Lettore PDF non installato</string>
<string name="dialog_install_pdf_reader_content">Installa un lettore di PDF per aprire le circolari</string>

View File

@@ -4,6 +4,7 @@
<string name="title_favourites">Favourites</string>
<string name="title_reminders">Reminders</string>
<string name="title_settings">Settings</string>
<string name="title_intro">Welcome to Circolapp</string>
<string name="menu_about">About</string>
<string name="menu_search">Search</string>
@@ -48,6 +49,14 @@
<string name="activity_info_source_code">Source code</string>
<string name="activity_info_source_code_description">The source code can be downloaded from &lt;a href="https://github.com/Matte23/circolapp"&gt;https://github.com/Matte23/circolapp&lt;/a&gt;</string>
<string name="activity_intro_welcome_description">With Circolapp you can stay updated on the circulars of your school. Viewing and downloading circulars has never been easier</string>
<string name="activity_intro_school_selection_title">Start by choosing your school</string>
<string name="activity_intro_school_selection_description">You can change your choice later in the settings</string>
<string name="activity_intro_school_selection_error">Please select a school</string>
<string name="activity_intro_school_selection_hint">School</string>
<string name="activity_intro_last_slide_title">You\'re done</string>
<string name="activity_intro_last_slide_description">Now you can start using Circolapp</string>
<string name="dialog_install_pdf_reader_title">PDF reader not found</string>
<string name="dialog_install_pdf_reader_content">Please install an external application to open circular letters</string>