mirror of
https://github.com/jrpie/Launcher.git
synced 2025-02-23 06:21:31 +01:00
Merge pull request #57 from finnmglas/feature/swipable-tutorial
Make the tutorial swipeable, fix some bugs, make it way more professional ^^
This commit is contained in:
commit
2c7edf77fa
27 changed files with 764 additions and 204 deletions
|
@ -253,13 +253,22 @@ fun loadSettings(){
|
||||||
|
|
||||||
fun resetSettings(context: Context) : MutableList<String>{
|
fun resetSettings(context: Context) : MutableList<String>{
|
||||||
|
|
||||||
// set default theme
|
|
||||||
saveTheme("finn")
|
|
||||||
|
|
||||||
val defaultList :MutableList<String> = mutableListOf<String>()
|
val defaultList :MutableList<String> = mutableListOf<String>()
|
||||||
|
|
||||||
val editor = launcherPreferences.edit()
|
val editor = launcherPreferences.edit()
|
||||||
|
|
||||||
|
// set default theme
|
||||||
|
dominantColor = context.resources.getColor(R.color.finnmglasTheme_background_color)
|
||||||
|
vibrantColor = context.resources.getColor(R.color.finnmglasTheme_accent_color)
|
||||||
|
|
||||||
|
launcherPreferences.edit()
|
||||||
|
.putString("background_uri", "")
|
||||||
|
.putInt("custom_dominant", dominantColor)
|
||||||
|
.putInt("custom_vibrant", vibrantColor)
|
||||||
|
.apply()
|
||||||
|
|
||||||
|
saveTheme("finn")
|
||||||
|
|
||||||
val (chosenUpName, chosenUpPackage) = pickDefaultApp(
|
val (chosenUpName, chosenUpPackage) = pickDefaultApp(
|
||||||
"action_upApp",
|
"action_upApp",
|
||||||
context
|
context
|
||||||
|
|
|
@ -59,22 +59,6 @@ class SettingsActivity: AppCompatActivity(), UIObject {
|
||||||
if (!intendedSettingsPause) finish()
|
if (!intendedSettingsPause) finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
|
||||||
when (requestCode) {
|
|
||||||
REQUEST_CHOOSE_APP -> {
|
|
||||||
val value = data?.getStringExtra("value")
|
|
||||||
val forApp = data?.getStringExtra("forApp") ?: return
|
|
||||||
|
|
||||||
launcherPreferences.edit()
|
|
||||||
.putString("action_$forApp", value.toString())
|
|
||||||
.apply()
|
|
||||||
|
|
||||||
loadSettings()
|
|
||||||
}
|
|
||||||
else -> super.onActivityResult(requestCode, resultCode, data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun applyTheme() {
|
override fun applyTheme() {
|
||||||
settings_container.setBackgroundColor(dominantColor)
|
settings_container.setBackgroundColor(dominantColor)
|
||||||
settings_appbar.setBackgroundColor(dominantColor)
|
settings_appbar.setBackgroundColor(dominantColor)
|
||||||
|
@ -93,6 +77,22 @@ class SettingsActivity: AppCompatActivity(), UIObject {
|
||||||
startActivity(Intent(Settings.ACTION_SETTINGS))
|
startActivity(Intent(Settings.ACTION_SETTINGS))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
|
when (requestCode) {
|
||||||
|
REQUEST_CHOOSE_APP -> {
|
||||||
|
val value = data?.getStringExtra("value")
|
||||||
|
val forApp = data?.getStringExtra("forApp") ?: return
|
||||||
|
|
||||||
|
launcherPreferences.edit()
|
||||||
|
.putString("action_$forApp", value.toString())
|
||||||
|
.apply()
|
||||||
|
|
||||||
|
loadSettings()
|
||||||
|
}
|
||||||
|
else -> super.onActivityResult(requestCode, resultCode, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val TAB_TITLES = arrayOf(
|
private val TAB_TITLES = arrayOf(
|
||||||
|
|
|
@ -9,7 +9,6 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
|
||||||
import com.finnmglas.launcher.*
|
import com.finnmglas.launcher.*
|
||||||
import com.finnmglas.launcher.list.ListActivity
|
import com.finnmglas.launcher.list.ListActivity
|
||||||
import com.finnmglas.launcher.settings.intendedSettingsPause
|
import com.finnmglas.launcher.settings.intendedSettingsPause
|
||||||
|
@ -36,17 +35,6 @@ class SettingsFragmentActions : Fragment(), UIObject {
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super<Fragment>.onStart()
|
super<Fragment>.onStart()
|
||||||
super<UIObject>.onStart()
|
super<UIObject>.onStart()
|
||||||
|
|
||||||
// set up the list / recycler
|
|
||||||
val actionViewManager = LinearLayoutManager(context)
|
|
||||||
val actionViewAdapter = ActionsRecyclerAdapter( activity!! )
|
|
||||||
|
|
||||||
settings_actions_rview.apply {
|
|
||||||
// improve performance (since content changes don't change the layout size)
|
|
||||||
setHasFixedSize(true)
|
|
||||||
layoutManager = actionViewManager
|
|
||||||
adapter = actionViewAdapter
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun applyTheme() {
|
override fun applyTheme() {
|
||||||
|
|
|
@ -1,20 +1,56 @@
|
||||||
package com.finnmglas.launcher.settings.actions
|
package com.finnmglas.launcher.settings.actions
|
||||||
|
|
||||||
import android.app.Activity
|
import android.os.Bundle
|
||||||
import android.content.Intent
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import com.finnmglas.launcher.*
|
||||||
|
import com.finnmglas.launcher.list.ListActivity
|
||||||
|
import kotlinx.android.synthetic.main.settings_actions_recycler.*
|
||||||
|
import android.app.Activity
|
||||||
|
import android.content.Intent
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.finnmglas.launcher.*
|
|
||||||
import com.finnmglas.launcher.list.ListActivity
|
|
||||||
import com.finnmglas.launcher.libraries.FontAwesome
|
import com.finnmglas.launcher.libraries.FontAwesome
|
||||||
import com.finnmglas.launcher.settings.intendedSettingsPause
|
import com.finnmglas.launcher.settings.intendedSettingsPause
|
||||||
import java.lang.Exception
|
import java.lang.Exception
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The [SettingsFragmentActionsRecycler] is a fragment containing the [ActionsRecyclerAdapter],
|
||||||
|
* which displays all selected actions / apps.
|
||||||
|
*
|
||||||
|
* It is used in the Tutorial and in Settings
|
||||||
|
*/
|
||||||
|
class SettingsFragmentActionsRecycler : Fragment(), UIObject {
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
return inflater.inflate(R.layout.settings_actions_recycler, container, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStart() {
|
||||||
|
super<Fragment>.onStart()
|
||||||
|
|
||||||
|
// set up the list / recycler
|
||||||
|
val actionViewManager = LinearLayoutManager(context)
|
||||||
|
val actionViewAdapter = ActionsRecyclerAdapter( activity!! )
|
||||||
|
|
||||||
|
settings_actions_rview.apply {
|
||||||
|
// improve performance (since content changes don't change the layout size)
|
||||||
|
setHasFixedSize(true)
|
||||||
|
layoutManager = actionViewManager
|
||||||
|
adapter = actionViewAdapter
|
||||||
|
}
|
||||||
|
|
||||||
|
super<UIObject>.onStart()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class ActionsRecyclerAdapter(val activity: Activity):
|
class ActionsRecyclerAdapter(val activity: Activity):
|
||||||
RecyclerView.Adapter<ActionsRecyclerAdapter.ViewHolder>() {
|
RecyclerView.Adapter<ActionsRecyclerAdapter.ViewHolder>() {
|
||||||
|
@ -47,6 +83,8 @@ class ActionsRecyclerAdapter(val activity: Activity):
|
||||||
.putString("action_$actionName", "") // clear it
|
.putString("action_$actionName", "") // clear it
|
||||||
.apply()
|
.apply()
|
||||||
|
|
||||||
|
loadSettings() // apply new settings to the app
|
||||||
|
|
||||||
viewHolder.fontAwesome.visibility = View.INVISIBLE
|
viewHolder.fontAwesome.visibility = View.INVISIBLE
|
||||||
viewHolder.img.visibility = View.INVISIBLE
|
viewHolder.img.visibility = View.INVISIBLE
|
||||||
viewHolder.removeAction.visibility = View.GONE
|
viewHolder.removeAction.visibility = View.GONE
|
|
@ -1,11 +1,17 @@
|
||||||
package com.finnmglas.launcher.tutorial
|
package com.finnmglas.launcher.tutorial
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.TypedValue
|
|
||||||
import android.view.*
|
import android.view.*
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.fragment.app.FragmentManager
|
||||||
|
import androidx.fragment.app.FragmentPagerAdapter
|
||||||
|
import androidx.viewpager.widget.ViewPager
|
||||||
import com.finnmglas.launcher.*
|
import com.finnmglas.launcher.*
|
||||||
|
import com.finnmglas.launcher.tutorial.tab.*
|
||||||
|
import com.google.android.material.tabs.TabLayout
|
||||||
import kotlinx.android.synthetic.main.tutorial.*
|
import kotlinx.android.synthetic.main.tutorial.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,22 +23,25 @@ import kotlinx.android.synthetic.main.tutorial.*
|
||||||
*/
|
*/
|
||||||
class TutorialActivity: AppCompatActivity(), UIObject {
|
class TutorialActivity: AppCompatActivity(), UIObject {
|
||||||
|
|
||||||
private var menuNumber = 0
|
|
||||||
private var defaultApps = mutableListOf<String>()
|
|
||||||
private var isFirstTime = false
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
// Initialise layout
|
// Initialise layout
|
||||||
setContentView(R.layout.tutorial)
|
setContentView(R.layout.tutorial)
|
||||||
loadMenu(this)
|
|
||||||
|
|
||||||
// Check if it is the first time starting the app
|
// Check if the app was started before
|
||||||
isFirstTime = !launcherPreferences.getBoolean("startedBefore", false)
|
if (launcherPreferences.getBoolean("startedBefore", false))
|
||||||
if (isFirstTime)
|
tutorial_appbar.visibility = View.VISIBLE
|
||||||
defaultApps = resetSettings(this) // UP, DOWN, RIGHT, LEFT, VOLUME_UP, VOLUME_DOWN
|
else resetSettings(this)
|
||||||
else tutorial_appbar.visibility = View.VISIBLE
|
|
||||||
|
loadSettings()
|
||||||
|
|
||||||
|
// set up tabs and swiping in settings
|
||||||
|
val sectionsPagerAdapter = TutorialSectionsPagerAdapter(this, supportFragmentManager)
|
||||||
|
val viewPager: ViewPager = findViewById(R.id.tutorial_viewpager)
|
||||||
|
viewPager.adapter = sectionsPagerAdapter
|
||||||
|
val tabs: TabLayout = findViewById(R.id.tutorial_tabs)
|
||||||
|
tabs.setupWithViewPager(viewPager)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
|
@ -40,64 +49,62 @@ class TutorialActivity: AppCompatActivity(), UIObject {
|
||||||
super<UIObject>.onStart()
|
super<UIObject>.onStart()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
|
|
||||||
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){
|
|
||||||
menuNumber++
|
|
||||||
loadMenu(this)
|
|
||||||
}
|
|
||||||
else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_BACK){
|
|
||||||
menuNumber--
|
|
||||||
|
|
||||||
// prevent negative indices
|
|
||||||
if (menuNumber < 0) menuNumber = 0
|
|
||||||
|
|
||||||
loadMenu(this)
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
fun clickAnywhere(view: View){
|
|
||||||
menuNumber++
|
|
||||||
loadMenu(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun loadMenu(context: Context) { // Context needed for packageManager
|
|
||||||
val intro = resources.getStringArray(R.array.intro)
|
|
||||||
|
|
||||||
if (menuNumber < intro.size){
|
|
||||||
val entry = intro[menuNumber].split("|").toTypedArray() //heading|infoText|hintText|size
|
|
||||||
|
|
||||||
tutorial_page_heading.text = entry[0]
|
|
||||||
if (entry[4] == "1" && isFirstTime)
|
|
||||||
tutorial_page_text.text = String.format(entry[1],
|
|
||||||
defaultApps[0], defaultApps[1], defaultApps[2], defaultApps[3], defaultApps[4], defaultApps[5])
|
|
||||||
else if (entry[4] == "1" && !isFirstTime)
|
|
||||||
tutorial_page_text.text = String.format(entry[1],
|
|
||||||
"-", "-", "-", "-", "-", "-")
|
|
||||||
else tutorial_page_text.text = entry[1]
|
|
||||||
tutorial_page_hint.text = entry[2]
|
|
||||||
tutorial_page_text.setTextSize(TypedValue.COMPLEX_UNIT_SP, entry[3].toFloat())
|
|
||||||
|
|
||||||
} else { // End intro
|
|
||||||
if (isFirstTime){
|
|
||||||
launcherPreferences.edit()
|
|
||||||
.putBoolean("startedBefore", true) // never auto run this again
|
|
||||||
.putLong("firstStartup", System.currentTimeMillis() / 1000L) // record first startup timestamp
|
|
||||||
.apply()
|
|
||||||
}
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun applyTheme() {
|
override fun applyTheme() {
|
||||||
tutorial_appbar.setBackgroundColor(dominantColor)
|
tutorial_appbar.setBackgroundColor(dominantColor)
|
||||||
tutorial_container.setBackgroundColor(dominantColor)
|
tutorial_container.setBackgroundColor(dominantColor)
|
||||||
tutorial_close.setTextColor(vibrantColor)
|
tutorial_close.setTextColor(vibrantColor)
|
||||||
|
|
||||||
tutorial_page_hint.blink() // animate
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setOnClicks() {
|
override fun setOnClicks() {
|
||||||
tutorial_close.setOnClickListener() { finish() }
|
tutorial_close.setOnClickListener() { finish() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// same as in SettingsActivity; TODO: Use same function
|
||||||
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
|
when (requestCode) {
|
||||||
|
REQUEST_CHOOSE_APP -> {
|
||||||
|
val value = data?.getStringExtra("value")
|
||||||
|
val forApp = data?.getStringExtra("forApp") ?: return
|
||||||
|
|
||||||
|
launcherPreferences.edit()
|
||||||
|
.putString("action_$forApp", value.toString())
|
||||||
|
.apply()
|
||||||
|
|
||||||
|
loadSettings()
|
||||||
|
}
|
||||||
|
else -> super.onActivityResult(requestCode, resultCode, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prevent going back, allow if viewed again later
|
||||||
|
override fun onBackPressed() {
|
||||||
|
if (launcherPreferences.getBoolean("startedBefore", false))
|
||||||
|
super.onBackPressed()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The [TutorialSectionsPagerAdapter] defines which fragments are shown when,
|
||||||
|
* in the [TutorialActivity].
|
||||||
|
*
|
||||||
|
* Tabs: (Start | Concept | Usage | Setup | Finish)
|
||||||
|
*/
|
||||||
|
class TutorialSectionsPagerAdapter(private val context: Context, fm: FragmentManager)
|
||||||
|
: FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
|
||||||
|
|
||||||
|
override fun getItem(position: Int): Fragment {
|
||||||
|
return when (position){
|
||||||
|
0 -> TutorialFragmentStart()
|
||||||
|
1 -> TutorialFragmentConcept()
|
||||||
|
2 -> TutorialFragmentUsage()
|
||||||
|
3 -> TutorialFragmentSetup()
|
||||||
|
4 -> TutorialFragmentFinish()
|
||||||
|
else -> Fragment()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We don't use titles here, as we have the dots */
|
||||||
|
override fun getPageTitle(position: Int): CharSequence? { return "" }
|
||||||
|
override fun getCount(): Int { return 5 }
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.finnmglas.launcher.tutorial.tab
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import com.finnmglas.launcher.*
|
||||||
|
import kotlinx.android.synthetic.main.tutorial_concept.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The [TutorialFragmentConcept] is a used as a tab in the TutorialActivity.
|
||||||
|
*
|
||||||
|
* It is used to display info about Launchers concept (open source, efficiency ...)
|
||||||
|
*/
|
||||||
|
class TutorialFragmentConcept(): Fragment(), UIObject {
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
return inflater.inflate(R.layout.tutorial_concept, container, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStart(){
|
||||||
|
super<Fragment>.onStart()
|
||||||
|
super<UIObject>.onStart()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun applyTheme() {
|
||||||
|
tutorial_concept_container.setBackgroundColor(dominantColor)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
package com.finnmglas.launcher.tutorial.tab
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import com.finnmglas.launcher.*
|
||||||
|
import kotlinx.android.synthetic.main.tutorial_finish.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The [TutorialFragmentFinish] is a used as a tab in the TutorialActivity.
|
||||||
|
*
|
||||||
|
* It is used to display further resources and let the user start Launcher
|
||||||
|
*/
|
||||||
|
class TutorialFragmentFinish(): Fragment(), UIObject {
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
return inflater.inflate(R.layout.tutorial_finish, container, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStart() {
|
||||||
|
super<Fragment>.onStart()
|
||||||
|
super<UIObject>.onStart()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun applyTheme() {
|
||||||
|
tutorial_finish_container.setBackgroundColor(dominantColor)
|
||||||
|
setButtonColor(tutorial_finish_button_start, vibrantColor)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setOnClicks() {
|
||||||
|
super.setOnClicks()
|
||||||
|
tutorial_finish_button_start.setOnClickListener{ finishTutorial() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun adjustLayout() {
|
||||||
|
super.adjustLayout()
|
||||||
|
|
||||||
|
// Different text if opened again later (from settings)
|
||||||
|
if (launcherPreferences.getBoolean("startedBefore", false))
|
||||||
|
tutorial_finish_button_start.text = "Back to Settings"
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun finishTutorial() {
|
||||||
|
if (!launcherPreferences.getBoolean("startedBefore", false)){
|
||||||
|
launcherPreferences.edit()
|
||||||
|
.putBoolean("startedBefore", true) // never auto run this again
|
||||||
|
.putLong("firstStartup", System.currentTimeMillis() / 1000L) // record first startup timestamp
|
||||||
|
.apply()
|
||||||
|
}
|
||||||
|
activity!!.finish()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.finnmglas.launcher.tutorial.tab
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import com.finnmglas.launcher.*
|
||||||
|
import kotlinx.android.synthetic.main.tutorial_setup.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The [TutorialFragmentSetup] is a used as a tab in the TutorialActivity.
|
||||||
|
*
|
||||||
|
* It is used to display info in the tutorial
|
||||||
|
*/
|
||||||
|
class TutorialFragmentSetup(): Fragment(), UIObject {
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
return inflater.inflate(R.layout.tutorial_setup, container, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStart(){
|
||||||
|
super<Fragment>.onStart()
|
||||||
|
super<UIObject>.onStart()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun applyTheme() {
|
||||||
|
tutorial_setup_container.setBackgroundColor(dominantColor)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
package com.finnmglas.launcher.tutorial.tab
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import com.finnmglas.launcher.*
|
||||||
|
import kotlinx.android.synthetic.main.tutorial_start.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The [TutorialFragmentStart] is a used as a tab in the TutorialActivity.
|
||||||
|
*
|
||||||
|
* It displays info about the app and gets the user into the tutorial
|
||||||
|
*/
|
||||||
|
class TutorialFragmentStart(): Fragment(), UIObject {
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
return inflater.inflate(R.layout.tutorial_start, container, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStart(){
|
||||||
|
super<Fragment>.onStart()
|
||||||
|
super<UIObject>.onStart()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun applyTheme() {
|
||||||
|
tutorial_start_container.setBackgroundColor(dominantColor)
|
||||||
|
|
||||||
|
// set icons
|
||||||
|
val rightIcon = getString(R.string.fas_angle_double_right)
|
||||||
|
|
||||||
|
tutorial_start_icon_right.text = rightIcon.repeat(3)
|
||||||
|
tutorial_start_icon_right.setTextColor(vibrantColor)
|
||||||
|
tutorial_start_icon_right.blink()
|
||||||
|
|
||||||
|
tutorial_start_icon_right_2.text = rightIcon.repeat(3)
|
||||||
|
tutorial_start_icon_right_2.setTextColor(vibrantColor)
|
||||||
|
tutorial_start_icon_right_2.blink()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.finnmglas.launcher.tutorial.tab
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import com.finnmglas.launcher.*
|
||||||
|
import kotlinx.android.synthetic.main.tutorial_usage.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The [TutorialFragmentUsage] is a used as a tab in the TutorialActivity.
|
||||||
|
*
|
||||||
|
* Tells the user how his screen will look and how the app can be used
|
||||||
|
*/
|
||||||
|
class TutorialFragmentUsage(): Fragment(), UIObject {
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
return inflater.inflate(R.layout.tutorial_usage, container, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStart(){
|
||||||
|
super<Fragment>.onStart()
|
||||||
|
super<UIObject>.onStart()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun applyTheme() {
|
||||||
|
tutorial_usage_container.setBackgroundColor(dominantColor)
|
||||||
|
}
|
||||||
|
}
|
BIN
app/src/main/res/drawable/badge_version.png
Normal file
BIN
app/src/main/res/drawable/badge_version.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
BIN
app/src/main/res/drawable/home_round_screen.png
Normal file
BIN
app/src/main/res/drawable/home_round_screen.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 455 KiB |
12
app/src/main/res/drawable/tutorial_default_dot.xml
Normal file
12
app/src/main/res/drawable/tutorial_default_dot.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item>
|
||||||
|
<shape
|
||||||
|
android:innerRadius="0dp"
|
||||||
|
android:shape="ring"
|
||||||
|
android:thickness="5dp"
|
||||||
|
android:useLevel="false">
|
||||||
|
<solid android:color="#777"/>
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
</layer-list>
|
12
app/src/main/res/drawable/tutorial_selected_dot.xml
Normal file
12
app/src/main/res/drawable/tutorial_selected_dot.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item>
|
||||||
|
<shape
|
||||||
|
android:innerRadius="0dp"
|
||||||
|
android:shape="ring"
|
||||||
|
android:thickness="5dp"
|
||||||
|
android:useLevel="false">
|
||||||
|
<solid android:color="#ddd"/>
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
</layer-list>
|
8
app/src/main/res/drawable/tutorial_tab_selector.xml
Normal file
8
app/src/main/res/drawable/tutorial_tab_selector.xml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<item android:drawable="@drawable/tutorial_selected_dot"
|
||||||
|
android:state_selected="true"/>
|
||||||
|
|
||||||
|
<item android:drawable="@drawable/tutorial_default_dot"/>
|
||||||
|
</selector>
|
|
@ -9,17 +9,16 @@
|
||||||
android:paddingTop="16sp"
|
android:paddingTop="16sp"
|
||||||
android:paddingRight="32sp">
|
android:paddingRight="32sp">
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<fragment
|
||||||
android:id="@+id/settings_actions_rview"
|
android:id="@+id/settings_actions_rview_fragment"
|
||||||
|
android:name="com.finnmglas.launcher.settings.actions.SettingsFragmentActionsRecycler"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_marginBottom="16dp"
|
android:layout_marginBottom="16dp"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/settings_actions_buttons"
|
app:layout_constraintBottom_toTopOf="@+id/settings_actions_buttons"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
app:layout_constraintTop_toTopOf="parent"/>
|
||||||
|
|
||||||
</androidx.recyclerview.widget.RecyclerView>
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/settings_actions_buttons"
|
android:id="@+id/settings_actions_buttons"
|
||||||
|
|
18
app/src/main/res/layout/settings_actions_recycler.xml
Normal file
18
app/src/main/res/layout/settings_actions_recycler.xml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?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:id="@+id/settings_actions_recycler_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/settings_actions_rview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
</androidx.recyclerview.widget.RecyclerView>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -8,7 +8,6 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/colorPrimary"
|
android:background="?attr/colorPrimary"
|
||||||
android:onClick="clickAnywhere"
|
|
||||||
tools:context=".tutorial.TutorialActivity">
|
tools:context=".tutorial.TutorialActivity">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
|
@ -16,7 +15,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:visibility="invisible"
|
android:visibility="gone"
|
||||||
custom:layout_constraintEnd_toEndOf="parent"
|
custom:layout_constraintEnd_toEndOf="parent"
|
||||||
custom:layout_constraintStart_toStartOf="parent"
|
custom:layout_constraintStart_toStartOf="parent"
|
||||||
custom:layout_constraintTop_toTopOf="parent">
|
custom:layout_constraintTop_toTopOf="parent">
|
||||||
|
@ -56,59 +55,27 @@
|
||||||
custom:layout_constraintTop_toTopOf="parent"
|
custom:layout_constraintTop_toTopOf="parent"
|
||||||
custom:type="solid" />
|
custom:type="solid" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
<TextView
|
<androidx.viewpager.widget.ViewPager
|
||||||
android:id="@+id/tutorial_page_heading"
|
android:id="@+id/tutorial_viewpager"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/tutorial_tabs"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/tutorial_appbar" />
|
||||||
|
|
||||||
|
<com.google.android.material.tabs.TabLayout
|
||||||
|
android:id="@+id/tutorial_tabs"
|
||||||
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
app:tabBackground="@drawable/tutorial_tab_selector"
|
||||||
android:onClick="clickAnywhere"
|
app:tabGravity="center"
|
||||||
android:textSize="64sp"
|
app:tabIndicatorHeight="0dp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent" />
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:layout_constraintVertical_bias="0.100000024" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tutorial_page_text"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_marginStart="32dp"
|
|
||||||
android:layout_marginLeft="32dp"
|
|
||||||
android:layout_marginEnd="32dp"
|
|
||||||
android:layout_marginRight="32dp"
|
|
||||||
android:layout_marginBottom="100dp"
|
|
||||||
android:gravity="center"
|
|
||||||
android:onClick="clickAnywhere"
|
|
||||||
android:textColor="#fff"
|
|
||||||
android:textSize="36sp"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="0.6"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/tutorial_page_heading" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tutorial_page_hint"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_marginStart="32dp"
|
|
||||||
android:layout_marginLeft="32dp"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
android:layout_marginEnd="32dp"
|
|
||||||
android:layout_marginRight="32dp"
|
|
||||||
android:layout_marginBottom="8dp"
|
|
||||||
android:gravity="center"
|
|
||||||
android:onClick="clickAnywhere"
|
|
||||||
android:textColor="#999"
|
|
||||||
android:textSize="18sp"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="0.6"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/tutorial_page_text" />
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
65
app/src/main/res/layout/tutorial_concept.xml
Normal file
65
app/src/main/res/layout/tutorial_concept.xml
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
<?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"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/tutorial_concept_container"
|
||||||
|
android:paddingLeft="32sp"
|
||||||
|
android:paddingRight="32sp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/colorPrimary"
|
||||||
|
tools:context=".tutorial.tab.TutorialFragmentConcept">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_concept_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:text="@string/tutorial_concept_title"
|
||||||
|
android:textSize="30sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_concept_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/tutorial_concept_text"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/tutorial_concept_title"
|
||||||
|
app:layout_constraintVertical_bias="0.19999999" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_concept_text_2"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/tutorial_concept_text_2"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/tutorial_concept_badge_version"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="32dp"
|
||||||
|
android:layout_marginLeft="32dp"
|
||||||
|
android:layout_marginEnd="32dp"
|
||||||
|
android:layout_marginRight="32dp"
|
||||||
|
android:src="@drawable/badge_version"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/tutorial_concept_text_2"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/tutorial_concept_text"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
52
app/src/main/res/layout/tutorial_finish.xml
Normal file
52
app/src/main/res/layout/tutorial_finish.xml
Normal 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"
|
||||||
|
xmlns:custom="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/tutorial_finish_container"
|
||||||
|
android:paddingLeft="32sp"
|
||||||
|
android:paddingRight="32sp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/colorPrimary"
|
||||||
|
tools:context=".tutorial.tab.TutorialFragmentFinish">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_finish_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:text="@string/tutorial_finish_title"
|
||||||
|
android:textSize="30sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_finish_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/tutorial_finish_text"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/tutorial_finish_button_start"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_bias="0.8" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/tutorial_finish_button_start"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:padding="32sp"
|
||||||
|
android:text="@string/tutorial_finish_button"
|
||||||
|
android:textAllCaps="false"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_bias="0.7" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
61
app/src/main/res/layout/tutorial_setup.xml
Normal file
61
app/src/main/res/layout/tutorial_setup.xml
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
<?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"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/tutorial_setup_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/colorPrimary"
|
||||||
|
android:paddingLeft="32sp"
|
||||||
|
android:paddingRight="32sp"
|
||||||
|
tools:context=".tutorial.tab.TutorialFragmentSetup">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_setup_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:text="@string/tutorial_setup_title"
|
||||||
|
android:textSize="30sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_setup_subtitle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/tutorial_setup_text"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/tutorial_setup_title" />
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/tutorial_setup_actions_rview_fragment"
|
||||||
|
android:name="com.finnmglas.launcher.settings.actions.SettingsFragmentActionsRecycler"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_marginTop="32dp"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/tutorial_setup_text_bottom"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/tutorial_setup_subtitle" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_setup_text_bottom"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/tutorial_setup_text_2"
|
||||||
|
android:textSize="14sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
48
app/src/main/res/layout/tutorial_start.xml
Normal file
48
app/src/main/res/layout/tutorial_start.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?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"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/tutorial_start_container"
|
||||||
|
android:paddingLeft="32sp"
|
||||||
|
android:paddingRight="32sp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/colorPrimary"
|
||||||
|
tools:context=".tutorial.tab.TutorialFragmentStart">
|
||||||
|
|
||||||
|
<com.finnmglas.launcher.libraries.FontAwesome
|
||||||
|
android:id="@+id/tutorial_start_icon_right_2"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/fas_angle_double_right"
|
||||||
|
android:textSize="64sp"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/tutorial_start_text"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_start_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/tutorial_start_text"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<com.finnmglas.launcher.libraries.FontAwesome
|
||||||
|
android:id="@+id/tutorial_start_icon_right"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/fas_angle_double_right"
|
||||||
|
android:textSize="64sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/tutorial_start_text" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
65
app/src/main/res/layout/tutorial_usage.xml
Normal file
65
app/src/main/res/layout/tutorial_usage.xml
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
<?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"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/tutorial_usage_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/colorPrimary"
|
||||||
|
android:paddingLeft="32sp"
|
||||||
|
android:paddingRight="32sp"
|
||||||
|
tools:context=".tutorial.tab.TutorialFragmentUsage">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_usage_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:text="@string/tutorial_usage_title"
|
||||||
|
android:textSize="30sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_usage_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginBottom="32dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/tutorial_usage_text"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/tutorial_usage_screen"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/tutorial_usage_title" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/tutorial_usage_screen"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:scaleType="centerInside"
|
||||||
|
android:src="@drawable/home_round_screen"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/tutorial_usage_text_2"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/tutorial_usage_text"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/tutorial_usage_text"
|
||||||
|
app:srcCompat="@drawable/home_round_screen"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_usage_text_2"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="32dp"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/tutorial_usage_text_2"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/tutorial_usage_screen" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -48,7 +48,7 @@
|
||||||
<string name="settings_meta_contact_url">https://www.finnmglas.com/de/kontakt/</string>
|
<string name="settings_meta_contact_url">https://www.finnmglas.com/de/kontakt/</string>
|
||||||
<string name="settings_meta_donate">Finanziell unterstützen</string>
|
<string name="settings_meta_donate">Finanziell unterstützen</string>
|
||||||
|
|
||||||
<!-- Choose Activity -->
|
<!-- List Activity -->
|
||||||
<string name="choose_title">App wählen</string>
|
<string name="choose_title">App wählen</string>
|
||||||
<string name="choose_title_view">Alle Apps</string>
|
<string name="choose_title_view">Alle Apps</string>
|
||||||
|
|
||||||
|
@ -57,22 +57,23 @@
|
||||||
<string name="choose_removed_toast">Die App wurde entfernt</string>
|
<string name="choose_removed_toast">Die App wurde entfernt</string>
|
||||||
<string name="choose_not_removed_toast">Die App konnte nicht entfernt werden</string>
|
<string name="choose_not_removed_toast">Die App konnte nicht entfernt werden</string>
|
||||||
|
|
||||||
<!-- FirstStartup Activity -->
|
<!-- Tutorial Activity -->
|
||||||
<string name="tutorial_title">Tutorial</string>
|
<string name="tutorial_title">Tutorial</string>
|
||||||
<string-array name="intro">
|
<string name="tutorial_start_text">Nimm dir kurz Zeit und lerne, wie du diesen Launcher verwendest!</string>
|
||||||
<!--item> heading | infoText | hintText | size | format </item-->
|
|
||||||
<item>|Nimm dir kurz Zeit und lerne, wie du diesen Launcher verwendest!\n\n|— Tippe um weiterzukommen —|36F|0</item>
|
|
||||||
<item>Konzept|Er bietet dir eine minimalistische, effiziente und ablenkungsfreie digitale Umgebung.|— Tippe um weiterzukommen —|36F|0</item>
|
|
||||||
<item>Konzept|Er kostet dich nichts, enthält keine Werbung, sammelt keine persönlichen Daten.|— Tippe um weiterzukommen —|36F|0</item>
|
|
||||||
<item>Benutzung|Auf deinem Homescreen siehst du nur das Datum und die Uhrzeit. Keine Ablenkung.|— Tippe um weiterzukommen —|36F|0</item>
|
|
||||||
<item>Benutzung|Du öffnest Apps indem du über den Bildschirm wischt oder die Lautstärketasten drückst.|— Tippe um weiterzukommen —|36F|0</item>
|
|
||||||
<item>Einrichtung|Wir haben dir ein paar Standardaktionen eingerichtet…|— Zurück = Lautstärke Runter —|36F|0</item>
|
|
||||||
<item>Einrichtung|Hochwischen: Browser öffnen (%1$s)\n\nRunterwischen: Interne Such-app öffnen (%2$s)\n\n
|
|
||||||
Rechtswischen: Mails öffnen (%3$s)\n\nLinkswischen: Kalendar öffnen (%4$s)\n\n
|
|
||||||
Lautstärke Hoch: Messenger öffnen (%5$s)\n\nLautstärke Runter: Tools öffnen (%6$s)|— Zurück = Lautstärke Runter —|18F|1
|
|
||||||
</item>
|
|
||||||
<item>Einrichtung|Du kannst auch eigene Apps auswählen:\n\nÖffne die Einstellungen durch langes tippen auf den Startbildschirm.|— Zurück = Lautstärke Runter —|36F|0</item>
|
|
||||||
<item>|Du bist bereit loszulegen!\n\nIch hoffe diese App ist sehr wertvoll für dich!\n\n- Finn M Glas\n\n|— Launcher von Finn M Glas —|36F|0</item>
|
|
||||||
</string-array>
|
|
||||||
|
|
||||||
|
<string name="tutorial_concept_title">Konzept</string>
|
||||||
|
<string name="tutorial_concept_text">Launcher bietet dir eine minimalistische, effiziente und ablenkungsfreie digitale Umgebung.\n\nDie App kostet dich nichts, enthält keine Werbung, sammelt keine persönlichen Daten.</string>
|
||||||
|
<string name="tutorial_concept_text_2">Launcher ist open-source (MIT license) und auf GitHub!\n\nSchau gerne mal dort vorbei!</string>
|
||||||
|
|
||||||
|
<string name="tutorial_usage_title">Benutzung</string>
|
||||||
|
<string name="tutorial_usage_text">Auf deinem Homescreen siehst du nur das Datum und die Uhrzeit. Keine Ablenkung.</string>
|
||||||
|
<string name="tutorial_usage_text_2">Du öffnest Apps indem du über den Bildschirm wischt oder die Lautstärketasten drückst. Gleich wählst du deine Apps.</string>
|
||||||
|
|
||||||
|
<string name="tutorial_setup_title">Einrichtung</string>
|
||||||
|
<string name="tutorial_setup_text">Wir haben dir ein paar Standardapps ausgewählt, du kannst sie gerne ändern.</string>
|
||||||
|
<string name="tutorial_setup_text_2">Du kannst deine Einstellungen auch später noch ändern.</string>
|
||||||
|
|
||||||
|
<string name="tutorial_finish_title">Los gehts!</string>
|
||||||
|
<string name="tutorial_finish_text">Du bist bereit loszulegen!\n\nIch hoffe diese App ist sehr wertvoll für dich!\n\n- Finn M Glas\n(der Entwickler)</string>
|
||||||
|
<string name="tutorial_finish_button">Launcher starten</string>
|
||||||
</resources>
|
</resources>
|
|
@ -48,7 +48,7 @@
|
||||||
<string name="settings_meta_contact_url">https://www.finnmglas.com/fr/contact/</string>
|
<string name="settings_meta_contact_url">https://www.finnmglas.com/fr/contact/</string>
|
||||||
<string name="settings_meta_donate">Faire un don</string>
|
<string name="settings_meta_donate">Faire un don</string>
|
||||||
|
|
||||||
<!-- Choose Activity -->
|
<!-- List Activity -->
|
||||||
<string name="choose_title">Choisir App</string>
|
<string name="choose_title">Choisir App</string>
|
||||||
<string name="choose_title_view">Applications</string>
|
<string name="choose_title_view">Applications</string>
|
||||||
|
|
||||||
|
@ -57,21 +57,24 @@
|
||||||
<string name="choose_removed_toast">Application supprimée</string>
|
<string name="choose_removed_toast">Application supprimée</string>
|
||||||
<string name="choose_not_removed_toast">Impossible de supprimer l\'application</string>
|
<string name="choose_not_removed_toast">Impossible de supprimer l\'application</string>
|
||||||
|
|
||||||
<!-- FirstStartup Activity -->
|
<!-- Tutorial Activity -->
|
||||||
<string name="tutorial_title">Le Tutoriel</string>
|
<string name="tutorial_title">Le Tutoriel</string>
|
||||||
<string-array name="intro">
|
<string name="tutorial_start_text">Prenez un moment et apprenez à utiliser ce lanceur!</string>
|
||||||
<!--item> heading | infoText | hintText | size | format </item-->
|
|
||||||
<item>|Prenez un moment et apprenez à utiliser ce lanceur!\n\n|— Appuyez pour continuer —|36F|0</item>
|
<string name="tutorial_concept_title">Concept</string>
|
||||||
<item>Concept|Il vous offre un environnement minimaliste, efficace et sans distraction.|— Appuyez pour continuer —|36F|0</item>
|
<string name="tutorial_concept_text">Launcher vous offre un environnement minimaliste, efficace et sans distraction.\n\nIl ne vous coûte rien, ne contient aucune publicité, ne recueille pas de données personnelles.</string>
|
||||||
<item>Concept|Il ne vous coûte rien, ne contient aucune publicité, ne recueille pas de données personnelles.|— Appuyez pour continuer —|36F|0</item>
|
<string name="tutorial_concept_text_2">L\'application est open-source (licence MIT) et disponible sur GitHub!\n\nAssurez-vous de visiter le repo!</string>
|
||||||
<item>Utilisation|Vous ne voyez que la date et l\'heure sur votre écran d\'accueil. Aucune distraction.|— Appuyez pour continuer —|36F|0</item>
|
|
||||||
<item>Utilisation|Vous ouvrez des applications en faisant glisser l\'écran ou en appuyant sur les touches de volume.|— Appuyez pour continuer —|36F|0</item>
|
<string name="tutorial_usage_title">Utilisation</string>
|
||||||
<item>Installer|Nous avons mis en place quelques promotions standards pour vous…|— Retour = volume en baisse —|36F|0</item>
|
<string name="tutorial_usage_text">Vous ne voyez que la date et l\'heure sur votre écran d\'accueil. Aucune distraction.</string>
|
||||||
<item>Installer|Balayez haut: Ouvrir le navigateur (%1$s)\n\nBalayez bas: Ouvrir l\'application de recherche interne (%2$s)\n\n
|
<string name="tutorial_usage_text_2">Vous ouvrez des applications en faisant glisser l\'écran ou en appuyant sur les touches de volume. Choisissez-les maintenant.</string>
|
||||||
Balayez droit: Ouvrir Mail (%3$s)\n\nBalayez gauche: Ouvrir le Calendrier (%4$s)\n\n
|
|
||||||
Monter volume: Ouvrir Messenger (%5$s)\n\nBaisser volume: Ouvrir utilitaires (%6$s)|— Retour = volume en baisse —|18F|1
|
<string name="tutorial_setup_title">Installer</string>
|
||||||
</item>
|
<string name="tutorial_setup_text">Nous avons choisi quelques applications standards pour vous, vous pouvez changer-les maintenant.</string>
|
||||||
<item>Installer|Vous pouvez choisir vos applications:\n\nOuvrez les paramètres en appuyant longuement sur l\'écran d\'accueil.|— Retour = volume en baisse —|36F|0</item>
|
<string name="tutorial_setup_text_2">Vous pouvez également modifier votre sélection ultérieurement.</string>
|
||||||
<item>|Vous êtes prêt à commencer!\n\nJ\'espère que cette application vous sera très précieuse!\n\n- Finn M Glas\n\n|— Launcher par Finn M Glas —|36F|0</item>
|
|
||||||
</string-array>
|
<string name="tutorial_finish_title">Allez!</string>
|
||||||
|
<string name="tutorial_finish_text">Vous êtes prêt à commencer!\n\nJ\'espère que cette application vous sera très précieuse!\n\n- Finn M Glas\n(le développeur)</string>
|
||||||
|
<string name="tutorial_finish_button">Ouvrir Launcher</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
|
@ -14,6 +14,11 @@
|
||||||
<string name="fas_times" translatable="false"></string> <!-- 'close' -->
|
<string name="fas_times" translatable="false"></string> <!-- 'close' -->
|
||||||
<string name="fas_three_dots" translatable="false"></string> <!-- 'ellipsis-v' -->
|
<string name="fas_three_dots" translatable="false"></string> <!-- 'ellipsis-v' -->
|
||||||
|
|
||||||
|
<string name="fas_angle_double_left" translatable="false"></string>
|
||||||
|
<string name="fas_angle_double_right" translatable="false"></string>
|
||||||
|
<string name="fas_angle_double_up" translatable="false"></string>
|
||||||
|
<string name="fas_angle_double_down" translatable="false"></string>
|
||||||
|
|
||||||
<!-- icons that can be used with type="brands" -->
|
<!-- icons that can be used with type="brands" -->
|
||||||
<string name="fab_apple" translatable="false"></string>
|
<string name="fab_apple" translatable="false"></string>
|
||||||
<string name="fab_instagram" translatable="false"></string>
|
<string name="fab_instagram" translatable="false"></string>
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
<string name="settings_meta_donate">Make a donation</string>
|
<string name="settings_meta_donate">Make a donation</string>
|
||||||
<string name="settings_meta_donate_url" translatable="false">https://sponsor.finnmglas.com</string>
|
<string name="settings_meta_donate_url" translatable="false">https://sponsor.finnmglas.com</string>
|
||||||
|
|
||||||
<!-- Choose Activity -->
|
<!-- List Activity -->
|
||||||
<string name="choose_title">Choose App</string>
|
<string name="choose_title">Choose App</string>
|
||||||
<string name="choose_title_view">All Apps</string>
|
<string name="choose_title_view">All Apps</string>
|
||||||
|
|
||||||
|
@ -69,23 +69,25 @@
|
||||||
<string name="choose_removed_toast">Removed the selected application</string>
|
<string name="choose_removed_toast">Removed the selected application</string>
|
||||||
<string name="choose_not_removed_toast">Unable to remove application</string>
|
<string name="choose_not_removed_toast">Unable to remove application</string>
|
||||||
|
|
||||||
<!-- FirstStartup Activity -->
|
<!-- Tutorial Activity -->
|
||||||
<string name="tutorial_title">Tutorial</string>
|
<string name="tutorial_title">Tutorial</string>
|
||||||
<string-array name="intro">
|
<string name="tutorial_start_text">Take a few seconds to learn how to use this Launcher!</string>
|
||||||
<!--item> heading | infoText | hintText | size | format </item-->
|
|
||||||
<item>|Take a few seconds to learn how to use this Launcher!\n\n|— Tap anywhere to continue —|36F|0</item>
|
<string name="tutorial_concept_title">Concept</string>
|
||||||
<item>Concept|It is designed to be minimal, efficient and free of distraction.|— Tap anywhere to continue —|36F|0</item>
|
<string name="tutorial_concept_text">Launcher is designed to be minimal, efficient and free of distraction.\n\nIt is free of payments, ads and tracking services.</string>
|
||||||
<item>Concept|It is free of payments, ads and tracking services.|— Tap anywhere to continue —|36F|0</item>
|
<string name="tutorial_concept_text_2">The app is open-source (MIT license) and available on GitHub!\n\nMake sure to check out the repository!</string>
|
||||||
<item>Usage|Your home screen contains the local date and time. No distraction.|— Tap anywhere to continue —|36F|0</item>
|
|
||||||
<item>Usage|You can open your apps with a single swipe or button press.|— Tap anywhere to continue —|36F|0</item>
|
<string name="tutorial_usage_title">Usage</string>
|
||||||
<item>Setup|We have set up some default actions for you…|— Use volume keys to navigate —|36F|0</item>
|
<string name="tutorial_usage_text">Your home screen contains the local date and time. No distraction.</string>
|
||||||
<item>Setup|Swipe Up: Open a Browser (%1$s)\n\nSwipe Down: Open internal Search App (%2$s)\n\n
|
<string name="tutorial_usage_text_2">You can launch your apps with a single swipe or button press. Choose some in the next slide.</string>
|
||||||
Swipe Right: Open Mail (%3$s)\n\nSwipe Left: Open Calendar (%4$s)\n\n
|
|
||||||
Volume Up: Open a messenger (%5$s)\n\nVolume Down: Open Utilities (%6$s)|— Use volume keys to navigate —|18F|1
|
<string name="tutorial_setup_title">Setup</string>
|
||||||
</item>
|
<string name="tutorial_setup_text">We chose some default apps for you, if you want to, you can change them now.</string>
|
||||||
<item>Setup|You can choose your own apps:\n\nOpen settings by tapping and holding the home screen.|— Use volume keys to navigate —|36F|0</item>
|
<string name="tutorial_setup_text_2">You can also change your selection later.</string>
|
||||||
<item>|You are ready to get started!\n\n I hope this provides great value to you!\n\n- Finn M Glas\n\n|— Launcher by Finn M Glas —|36F|0</item>
|
|
||||||
</string-array>
|
<string name="tutorial_finish_title">Let\'s go!</string>
|
||||||
|
<string name="tutorial_finish_text">You are ready to get started!\n\n I hope this provides great value to you!\n\n- Finn M Glas\n(the developer)</string>
|
||||||
|
<string name="tutorial_finish_button">Start Launcher</string>
|
||||||
|
|
||||||
<!-- Default Apps for different actions (button-press, swipes ...) -->
|
<!-- Default Apps for different actions (button-press, swipes ...) -->
|
||||||
<string-array name="default_up">
|
<string-array name="default_up">
|
||||||
|
|
Loading…
Add table
Reference in a new issue