Added App Introduction Screens

Added three screens explaining Meshtastic and how to use the app. This is only shown on the first launch of the app.
This commit is contained in:
Ayub 2022-08-10 17:12:49 +01:00
parent 4e2b00bfd5
commit 51f78a3328
11 changed files with 299 additions and 199 deletions

View file

@ -0,0 +1,68 @@
package com.geeksville.mesh
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
import androidx.fragment.app.Fragment
import com.github.appintro.AppIntro
import com.github.appintro.AppIntroFragment
class AppIntroduction : AppIntro() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Make sure you don't call setContentView!
// Call addSlide passing your Fragments.
// You can use AppIntroFragment to use a pre-built fragment
addSlide(
AppIntroFragment.createInstance(
title = resources.getString(R.string.intro_welcome_title),
description = resources.getString(R.string.intro_meshtastic_desc),
imageDrawable = R.mipmap.ic_launcher2_round,
backgroundColorRes = R.color.colourGrey,
descriptionColorRes = R.color.colorOnPrimary
))
addSlide(AppIntroFragment.createInstance(
title = resources.getString(R.string.intro_get_started),
description = resources.getString(R.string.intro_started_text),
imageDrawable = R.drawable.icon_meanings,
backgroundColorRes = R.color.colourGrey,
descriptionColorRes = R.color.colorOnPrimary
))
addSlide(AppIntroFragment.createInstance(
title = resources.getString(R.string.intro_ecryption_title),
description = resources.getString(R.string.intro_encryption_text),
imageDrawable = R.drawable.channel_name_image,
backgroundColorRes = R.color.colourGrey,
descriptionColorRes = R.color.colorOnPrimary
))
//addSlide(SlideTwoFragment())
}
override fun onSkipPressed(currentFragment: Fragment?) {
super.onSkipPressed(currentFragment)
// Decide what to do when the user clicks on "Skip"
finish()
val preferences = getSharedPreferences("PREFERENCES", Context.MODE_PRIVATE)
var editor = preferences.edit()
editor.putBoolean("app_intro_completed", true)
editor.apply()
startActivity(Intent(this, MainActivity::class.java))
}
override fun onDonePressed(currentFragment: Fragment?) {
super.onDonePressed(currentFragment)
// Decide what to do when the user clicks on "Done"
finish()
val preferences = getSharedPreferences("PREFERENCES", Context.MODE_PRIVATE)
var editor = preferences.edit()
editor.putBoolean("app_intro_completed", true)
editor.apply()
startActivity(Intent(this, MainActivity::class.java))
}
}

View file

@ -404,9 +404,16 @@ class MainActivity : BaseActivity(), Logging,
}
override fun onCreate(savedInstanceState: Bundle?) {
val preferences = getSharedPreferences("PREFERENCES", Context.MODE_PRIVATE)
installSplashScreen()
super.onCreate(savedInstanceState)
if (preferences.getBoolean("app_intro_completed", false) == false) {
startActivity(Intent(this, AppIntroduction::class.java))
}
binding = ActivityMainBinding.inflate(layoutInflater)
val prefs = UIViewModel.getPreferences(this)
@ -1070,6 +1077,10 @@ class MainActivity : BaseActivity(), Logging,
chooseMapStyle()
return true
}
R.id.show_intro -> {
startActivity(Intent(this, AppIntroduction::class.java))
return true
}
else -> super.onOptionsItemSelected(item)
}
}

View file

@ -21,9 +21,11 @@ val Context.bluetoothManager: BluetoothManager? get() = getSystemService(Context
val Context.deviceManager: CompanionDeviceManager?
@SuppressLint("InlinedApi")
get() {
val activity: MainActivity? = GeeksvilleApplication.currentActivity as MainActivity?
return if (hasCompanionDeviceApi()) activity?.getSystemService(Context.COMPANION_DEVICE_SERVICE) as? CompanionDeviceManager?
else null
if (GeeksvilleApplication.currentActivity is MainActivity) {
val activity = GeeksvilleApplication.currentActivity
if (hasCompanionDeviceApi()) return activity?.getSystemService(Context.COMPANION_DEVICE_SERVICE) as? CompanionDeviceManager?
}
return null
}
val Context.usbManager: UsbManager get() = requireNotNull(getSystemService(Context.USB_SERVICE) as? UsbManager?) { "USB_SERVICE is not available"}