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:
Finn M Glas 2020-06-23 21:28:42 +02:00 committed by GitHub
commit 2c7edf77fa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
27 changed files with 764 additions and 204 deletions

View file

@ -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

View file

@ -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(

View file

@ -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() {

View file

@ -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

View file

@ -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 }
} }

View file

@ -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)
}
}

View file

@ -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()
}
}

View file

@ -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)
}
}

View file

@ -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()
}
}

View file

@ -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)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 KiB

View 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>

View 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>

View 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>

View file

@ -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"

View 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>

View file

@ -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>

View 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>

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"
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>

View 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>

View 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>

View 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>

View file

@ -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>

View file

@ -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>

View file

@ -14,6 +14,11 @@
<string name="fas_times" translatable="false">&#xf00d;</string> <!-- 'close' --> <string name="fas_times" translatable="false">&#xf00d;</string> <!-- 'close' -->
<string name="fas_three_dots" translatable="false">&#xf142;</string> <!-- 'ellipsis-v' --> <string name="fas_three_dots" translatable="false">&#xf142;</string> <!-- 'ellipsis-v' -->
<string name="fas_angle_double_left" translatable="false">&#xf100;</string>
<string name="fas_angle_double_right" translatable="false">&#xf101;</string>
<string name="fas_angle_double_up" translatable="false">&#xf102;</string>
<string name="fas_angle_double_down" translatable="false">&#xf103;</string>
<!-- icons that can be used with type="brands" --> <!-- icons that can be used with type="brands" -->
<string name="fab_apple" translatable="false">&#xf179;</string> <string name="fab_apple" translatable="false">&#xf179;</string>
<string name="fab_instagram" translatable="false">&#xf16d;</string> <string name="fab_instagram" translatable="false">&#xf16d;</string>

View file

@ -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">