mirror of
https://github.com/jrpie/Launcher.git
synced 2025-04-12 15:24:31 +02:00
Compare commits
11 commits
0ac7022a95
...
3a16cd003e
Author | SHA1 | Date | |
---|---|---|---|
![]() |
3a16cd003e | ||
c1511cd475 | |||
![]() |
3e632c9892 | ||
![]() |
268acedb2c | ||
![]() |
4b756d47ee | ||
![]() |
e323309cf9 | ||
![]() |
47a5476978 | ||
3597baee1f | |||
e02ca4091f | |||
541e60356c | |||
492749a340 |
43 changed files with 652 additions and 175 deletions
|
@ -23,8 +23,8 @@ android {
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 35
|
targetSdkVersion 35
|
||||||
compileSdk 35
|
compileSdk 35
|
||||||
versionCode 39
|
versionCode 40
|
||||||
versionName "0.0.23"
|
versionName "0.1.0"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
|
|
@ -194,7 +194,7 @@ fun getApps(
|
||||||
loadList.add(detailedAppInfo)
|
loadList.add(detailedAppInfo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
loadList.sortBy { it.getCustomLabel(context).toString() }
|
loadList.sortBy { it.getCustomLabel(context) }
|
||||||
|
|
||||||
var end = System.currentTimeMillis()
|
var end = System.currentTimeMillis()
|
||||||
Log.i(LOG_TAG, "${loadList.size} apps loaded (${end - start}ms)")
|
Log.i(LOG_TAG, "${loadList.size} apps loaded (${end - start}ms)")
|
||||||
|
|
|
@ -91,6 +91,7 @@ fun isPrivateSpaceLocked(context: Context): Boolean {
|
||||||
val privateSpaceUser = getPrivateSpaceUser(context) ?: return false
|
val privateSpaceUser = getPrivateSpaceUser(context) ?: return false
|
||||||
return userManager.isQuietModeEnabled(privateSpaceUser)
|
return userManager.isQuietModeEnabled(privateSpaceUser)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun lockPrivateSpace(context: Context, lock: Boolean) {
|
fun lockPrivateSpace(context: Context, lock: Boolean) {
|
||||||
if (!isPrivateSpaceSupported()) {
|
if (!isPrivateSpaceSupported()) {
|
||||||
return
|
return
|
||||||
|
@ -123,10 +124,16 @@ fun togglePrivateSpaceLock(context: Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun hidePrivateSpaceWhenLocked(context: Context): Boolean {
|
fun hidePrivateSpaceWhenLocked(context: Context): Boolean {
|
||||||
// TODO: perhaps this should be cached
|
// Trying to access the setting as a 3rd party launcher raises a security exception.
|
||||||
|
// This is an Android bug: https://issuetracker.google.com/issues/352276244#comment5
|
||||||
|
// The logic for this is implemented.
|
||||||
|
// TODO: replace this once the Android bug is fixed
|
||||||
|
return false
|
||||||
|
|
||||||
|
// TODO: perhaps this should be cached
|
||||||
// https://cs.android.com/android/platform/superproject/main/+/main:packages/apps/Launcher3/src/com/android/launcher3/util/SettingsCache.java;l=61;drc=56bf7ad33bc9d5ed3c18e7abefeec5c177ec75d7
|
// https://cs.android.com/android/platform/superproject/main/+/main:packages/apps/Launcher3/src/com/android/launcher3/util/SettingsCache.java;l=61;drc=56bf7ad33bc9d5ed3c18e7abefeec5c177ec75d7
|
||||||
val key = "hide_privatespace_entry_point"
|
|
||||||
return Settings.Secure.getInt(context.contentResolver, key, 0) == 1
|
// val key = "hide_privatespace_entry_point"
|
||||||
|
// return Settings.Secure.getInt(context.contentResolver, key, 0) == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,10 +27,14 @@ fun View.blink(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Taken from: https://stackoverflow.com/a/30340794/12787264
|
// Taken from: https://stackoverflow.com/a/30340794/12787264
|
||||||
fun ImageView.transformGrayscale() {
|
fun ImageView.transformGrayscale(grayscale: Boolean) {
|
||||||
this.colorFilter = ColorMatrixColorFilter(ColorMatrix().apply {
|
this.colorFilter = if (grayscale) {
|
||||||
|
ColorMatrixColorFilter(ColorMatrix().apply {
|
||||||
setSaturation(0f)
|
setSaturation(0f)
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package de.jrpie.android.launcher.ui.list
|
package de.jrpie.android.launcher.ui.list
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
|
@ -33,16 +32,6 @@ import de.jrpie.android.launcher.ui.list.apps.ListFragmentApps
|
||||||
import de.jrpie.android.launcher.ui.list.other.ListFragmentOther
|
import de.jrpie.android.launcher.ui.list.other.ListFragmentOther
|
||||||
|
|
||||||
|
|
||||||
// TODO: Better solution for this intercommunication functionality (used in list-fragments)
|
|
||||||
var intention = ListActivity.ListActivityIntention.VIEW
|
|
||||||
var favoritesVisibility: AppFilter.Companion.AppSetVisibility =
|
|
||||||
AppFilter.Companion.AppSetVisibility.VISIBLE
|
|
||||||
var privateSpaceVisibility: AppFilter.Companion.AppSetVisibility =
|
|
||||||
AppFilter.Companion.AppSetVisibility.VISIBLE
|
|
||||||
var hiddenVisibility: AppFilter.Companion.AppSetVisibility =
|
|
||||||
AppFilter.Companion.AppSetVisibility.HIDDEN
|
|
||||||
var forGesture: String? = null
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The [ListActivity] is the most general purpose activity in Launcher:
|
* The [ListActivity] is the most general purpose activity in Launcher:
|
||||||
* - used to view all apps and edit their settings
|
* - used to view all apps and edit their settings
|
||||||
|
@ -52,6 +41,14 @@ var forGesture: String? = null
|
||||||
*/
|
*/
|
||||||
class ListActivity : AppCompatActivity(), UIObject {
|
class ListActivity : AppCompatActivity(), UIObject {
|
||||||
private lateinit var binding: ListBinding
|
private lateinit var binding: ListBinding
|
||||||
|
var intention = ListActivityIntention.VIEW
|
||||||
|
var favoritesVisibility: AppFilter.Companion.AppSetVisibility =
|
||||||
|
AppFilter.Companion.AppSetVisibility.VISIBLE
|
||||||
|
var privateSpaceVisibility: AppFilter.Companion.AppSetVisibility =
|
||||||
|
AppFilter.Companion.AppSetVisibility.VISIBLE
|
||||||
|
var hiddenVisibility: AppFilter.Companion.AppSetVisibility =
|
||||||
|
AppFilter.Companion.AppSetVisibility.HIDDEN
|
||||||
|
var forGesture: String? = null
|
||||||
|
|
||||||
|
|
||||||
private fun updateLockIcon(locked: Boolean) {
|
private fun updateLockIcon(locked: Boolean) {
|
||||||
|
@ -261,7 +258,7 @@ private val TAB_TITLES = arrayOf(
|
||||||
* The [ListSectionsPagerAdapter] returns the fragment,
|
* The [ListSectionsPagerAdapter] returns the fragment,
|
||||||
* which corresponds to the selected tab in [ListActivity].
|
* which corresponds to the selected tab in [ListActivity].
|
||||||
*/
|
*/
|
||||||
class ListSectionsPagerAdapter(private val context: Context, fm: FragmentManager) :
|
class ListSectionsPagerAdapter(private val activity: ListActivity, fm: FragmentManager) :
|
||||||
FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
|
FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
|
||||||
|
|
||||||
override fun getItem(position: Int): Fragment {
|
override fun getItem(position: Int): Fragment {
|
||||||
|
@ -273,11 +270,11 @@ class ListSectionsPagerAdapter(private val context: Context, fm: FragmentManager
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getPageTitle(position: Int): CharSequence {
|
override fun getPageTitle(position: Int): CharSequence {
|
||||||
return context.resources.getString(TAB_TITLES[position])
|
return activity.resources.getString(TAB_TITLES[position])
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getCount(): Int {
|
override fun getCount(): Int {
|
||||||
return when (intention) {
|
return when (activity.intention) {
|
||||||
ListActivity.ListActivityIntention.VIEW -> 1
|
ListActivity.ListActivityIntention.VIEW -> 1
|
||||||
else -> 2
|
else -> 2
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ class AppsRecyclerAdapter(
|
||||||
|
|
||||||
private val apps = (activity.applicationContext as Application).apps
|
private val apps = (activity.applicationContext as Application).apps
|
||||||
private val appsListDisplayed: MutableList<AbstractDetailedAppInfo> = mutableListOf()
|
private val appsListDisplayed: MutableList<AbstractDetailedAppInfo> = mutableListOf()
|
||||||
|
private val grayscale = LauncherPreferences.theme().monochromeIcons()
|
||||||
|
|
||||||
// temporarily disable auto launch
|
// temporarily disable auto launch
|
||||||
var disableAutoLaunch: Boolean = false
|
var disableAutoLaunch: Boolean = false
|
||||||
|
@ -79,20 +80,19 @@ class AppsRecyclerAdapter(
|
||||||
override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) {
|
override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) {
|
||||||
var appLabel = appsListDisplayed[i].getCustomLabel(activity)
|
var appLabel = appsListDisplayed[i].getCustomLabel(activity)
|
||||||
|
|
||||||
|
val appIcon = appsListDisplayed[i].getIcon(activity)
|
||||||
|
|
||||||
|
viewHolder.img.transformGrayscale(grayscale)
|
||||||
|
viewHolder.img.setImageDrawable(appIcon.constantState?.newDrawable() ?: appIcon)
|
||||||
|
|
||||||
if (layout.useBadgedText) {
|
if (layout.useBadgedText) {
|
||||||
appLabel = activity.packageManager.getUserBadgedLabel(
|
appLabel = activity.packageManager.getUserBadgedLabel(
|
||||||
appLabel,
|
appLabel,
|
||||||
appsListDisplayed[i].getUser(activity)
|
appsListDisplayed[i].getUser(activity)
|
||||||
).toString()
|
).toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
val appIcon = appsListDisplayed[i].getIcon(activity)
|
|
||||||
|
|
||||||
viewHolder.textView.text = appLabel
|
viewHolder.textView.text = appLabel
|
||||||
viewHolder.img.setImageDrawable(appIcon)
|
|
||||||
|
|
||||||
if (LauncherPreferences.theme().monochromeIcons())
|
|
||||||
viewHolder.img.transformGrayscale()
|
|
||||||
|
|
||||||
// decide when to show the options popup menu about
|
// decide when to show the options popup menu about
|
||||||
if (intention == ListActivity.ListActivityIntention.VIEW) {
|
if (intention == ListActivity.ListActivityIntention.VIEW) {
|
||||||
|
|
|
@ -17,11 +17,6 @@ import de.jrpie.android.launcher.databinding.ListAppsBinding
|
||||||
import de.jrpie.android.launcher.preferences.LauncherPreferences
|
import de.jrpie.android.launcher.preferences.LauncherPreferences
|
||||||
import de.jrpie.android.launcher.ui.UIObject
|
import de.jrpie.android.launcher.ui.UIObject
|
||||||
import de.jrpie.android.launcher.ui.list.ListActivity
|
import de.jrpie.android.launcher.ui.list.ListActivity
|
||||||
import de.jrpie.android.launcher.ui.list.favoritesVisibility
|
|
||||||
import de.jrpie.android.launcher.ui.list.forGesture
|
|
||||||
import de.jrpie.android.launcher.ui.list.hiddenVisibility
|
|
||||||
import de.jrpie.android.launcher.ui.list.intention
|
|
||||||
import de.jrpie.android.launcher.ui.list.privateSpaceVisibility
|
|
||||||
import de.jrpie.android.launcher.ui.openSoftKeyboard
|
import de.jrpie.android.launcher.ui.openSoftKeyboard
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,7 +49,7 @@ class ListFragmentApps : Fragment(), UIObject {
|
||||||
.registerOnSharedPreferenceChangeListener(sharedPreferencesListener)
|
.registerOnSharedPreferenceChangeListener(sharedPreferencesListener)
|
||||||
|
|
||||||
binding.listAppsCheckBoxFavorites.isChecked =
|
binding.listAppsCheckBoxFavorites.isChecked =
|
||||||
(favoritesVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE)
|
((activity as? ListActivity)?.favoritesVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
|
@ -67,16 +62,17 @@ class ListFragmentApps : Fragment(), UIObject {
|
||||||
override fun setOnClicks() {}
|
override fun setOnClicks() {}
|
||||||
|
|
||||||
override fun adjustLayout() {
|
override fun adjustLayout() {
|
||||||
|
val listActivity = activity as? ListActivity ?: return
|
||||||
|
|
||||||
appsRecyclerAdapter =
|
appsRecyclerAdapter =
|
||||||
AppsRecyclerAdapter(
|
AppsRecyclerAdapter(
|
||||||
requireActivity(), binding.root, intention, forGesture,
|
listActivity, binding.root, listActivity.intention, listActivity.forGesture,
|
||||||
appFilter = AppFilter(
|
appFilter = AppFilter(
|
||||||
requireContext(),
|
requireContext(),
|
||||||
"",
|
"",
|
||||||
favoritesVisibility = favoritesVisibility,
|
favoritesVisibility = listActivity.favoritesVisibility,
|
||||||
privateSpaceVisibility = privateSpaceVisibility,
|
privateSpaceVisibility = listActivity.privateSpaceVisibility,
|
||||||
hiddenVisibility = hiddenVisibility
|
hiddenVisibility = listActivity.hiddenVisibility
|
||||||
),
|
),
|
||||||
layout = LauncherPreferences.list().layout()
|
layout = LauncherPreferences.list().layout()
|
||||||
)
|
)
|
||||||
|
@ -124,7 +120,8 @@ class ListFragmentApps : Fragment(), UIObject {
|
||||||
|
|
||||||
if (newText == " " &&
|
if (newText == " " &&
|
||||||
!appsRecyclerAdapter.disableAutoLaunch &&
|
!appsRecyclerAdapter.disableAutoLaunch &&
|
||||||
intention == ListActivity.ListActivityIntention.VIEW &&
|
(activity as? ListActivity)?.intention
|
||||||
|
== ListActivity.ListActivityIntention.VIEW &&
|
||||||
LauncherPreferences.functionality().searchAutoLaunch()
|
LauncherPreferences.functionality().searchAutoLaunch()
|
||||||
) {
|
) {
|
||||||
appsRecyclerAdapter.disableAutoLaunch = true
|
appsRecyclerAdapter.disableAutoLaunch = true
|
||||||
|
@ -141,17 +138,17 @@ class ListFragmentApps : Fragment(), UIObject {
|
||||||
})
|
})
|
||||||
|
|
||||||
binding.listAppsCheckBoxFavorites.setOnClickListener {
|
binding.listAppsCheckBoxFavorites.setOnClickListener {
|
||||||
favoritesVisibility =
|
listActivity.favoritesVisibility =
|
||||||
if (binding.listAppsCheckBoxFavorites.isChecked) {
|
if (binding.listAppsCheckBoxFavorites.isChecked) {
|
||||||
AppFilter.Companion.AppSetVisibility.EXCLUSIVE
|
AppFilter.Companion.AppSetVisibility.EXCLUSIVE
|
||||||
} else {
|
} else {
|
||||||
AppFilter.Companion.AppSetVisibility.VISIBLE
|
AppFilter.Companion.AppSetVisibility.VISIBLE
|
||||||
}
|
}
|
||||||
appsRecyclerAdapter.setFavoritesVisibility(favoritesVisibility)
|
appsRecyclerAdapter.setFavoritesVisibility(listActivity.favoritesVisibility)
|
||||||
(activity as? ListActivity)?.updateTitle()
|
(activity as? ListActivity)?.updateTitle()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (intention == ListActivity.ListActivityIntention.VIEW
|
if (listActivity.intention == ListActivity.ListActivityIntention.VIEW
|
||||||
&& LauncherPreferences.functionality().searchAutoOpenKeyboard()
|
&& LauncherPreferences.functionality().searchAutoOpenKeyboard()
|
||||||
) {
|
) {
|
||||||
binding.listAppsSearchview.openSoftKeyboard(requireContext())
|
binding.listAppsSearchview.openSoftKeyboard(requireContext())
|
||||||
|
|
|
@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView
|
||||||
import de.jrpie.android.launcher.R
|
import de.jrpie.android.launcher.R
|
||||||
import de.jrpie.android.launcher.REQUEST_CHOOSE_APP
|
import de.jrpie.android.launcher.REQUEST_CHOOSE_APP
|
||||||
import de.jrpie.android.launcher.actions.LauncherAction
|
import de.jrpie.android.launcher.actions.LauncherAction
|
||||||
import de.jrpie.android.launcher.ui.list.forGesture
|
import de.jrpie.android.launcher.ui.list.ListActivity
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The [OtherRecyclerAdapter] will only be displayed in the ListActivity,
|
* The [OtherRecyclerAdapter] will only be displayed in the ListActivity,
|
||||||
|
@ -36,7 +36,7 @@ class OtherRecyclerAdapter(val activity: Activity) :
|
||||||
val pos = bindingAdapterPosition
|
val pos = bindingAdapterPosition
|
||||||
val content = othersList[pos]
|
val content = othersList[pos]
|
||||||
|
|
||||||
forGesture?.let { returnChoiceIntent(it, content) }
|
(activity as? ListActivity)?.forGesture?.let { returnChoiceIntent(it, content) }
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
|
|
@ -143,9 +143,7 @@ class ActionsRecyclerAdapter(val activity: Activity) :
|
||||||
val description = gesture.getDescription(activity)
|
val description = gesture.getDescription(activity)
|
||||||
viewHolder.descriptionTextView.text = description
|
viewHolder.descriptionTextView.text = description
|
||||||
|
|
||||||
|
viewHolder.img.transformGrayscale(LauncherPreferences.theme().monochromeIcons())
|
||||||
if (LauncherPreferences.theme().monochromeIcons())
|
|
||||||
viewHolder.img.transformGrayscale()
|
|
||||||
|
|
||||||
updateViewHolder(gesture, viewHolder)
|
updateViewHolder(gesture, viewHolder)
|
||||||
viewHolder.img.setOnClickListener { chooseApp(gesture) }
|
viewHolder.img.setOnClickListener { chooseApp(gesture) }
|
||||||
|
|
|
@ -4,23 +4,26 @@ import android.content.Intent
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
import android.window.OnBackInvokedDispatcher
|
import android.window.OnBackInvokedDispatcher
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentManager
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.fragment.app.FragmentPagerAdapter
|
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager2.widget.ViewPager2
|
||||||
import com.google.android.material.tabs.TabLayout
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import de.jrpie.android.launcher.R
|
|
||||||
import de.jrpie.android.launcher.REQUEST_CHOOSE_APP
|
import de.jrpie.android.launcher.REQUEST_CHOOSE_APP
|
||||||
|
import de.jrpie.android.launcher.databinding.TutorialBinding
|
||||||
import de.jrpie.android.launcher.preferences.LauncherPreferences
|
import de.jrpie.android.launcher.preferences.LauncherPreferences
|
||||||
import de.jrpie.android.launcher.saveListActivityChoice
|
import de.jrpie.android.launcher.saveListActivityChoice
|
||||||
import de.jrpie.android.launcher.ui.UIObject
|
import de.jrpie.android.launcher.ui.UIObject
|
||||||
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragmentConcept
|
import de.jrpie.android.launcher.ui.blink
|
||||||
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragmentFinish
|
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragment0Start
|
||||||
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragmentSetup
|
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragment1Concept
|
||||||
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragmentStart
|
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragment2Usage
|
||||||
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragmentUsage
|
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragment3AppList
|
||||||
|
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragment4Setup
|
||||||
|
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragment5Finish
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The [TutorialActivity] is displayed automatically on new installations.
|
* The [TutorialActivity] is displayed automatically on new installations.
|
||||||
|
@ -31,10 +34,16 @@ import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragmentUsage
|
||||||
*/
|
*/
|
||||||
class TutorialActivity : AppCompatActivity(), UIObject {
|
class TutorialActivity : AppCompatActivity(), UIObject {
|
||||||
|
|
||||||
|
private lateinit var binding: TutorialBinding
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super<AppCompatActivity>.onCreate(savedInstanceState)
|
super<AppCompatActivity>.onCreate(savedInstanceState)
|
||||||
super<UIObject>.onCreate()
|
super<UIObject>.onCreate()
|
||||||
|
|
||||||
|
// Initialise layout
|
||||||
|
binding = TutorialBinding.inflate(layoutInflater)
|
||||||
|
setContentView(binding.root)
|
||||||
|
|
||||||
// Handle back key / gesture on Android 13+
|
// Handle back key / gesture on Android 13+
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||||
onBackInvokedDispatcher.registerOnBackInvokedCallback(
|
onBackInvokedDispatcher.registerOnBackInvokedCallback(
|
||||||
|
@ -48,15 +57,51 @@ class TutorialActivity : AppCompatActivity(), UIObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialise layout
|
|
||||||
setContentView(R.layout.tutorial)
|
|
||||||
|
|
||||||
// set up tabs and swiping in settings
|
// set up tabs and swiping in settings
|
||||||
val sectionsPagerAdapter = TutorialSectionsPagerAdapter(supportFragmentManager)
|
val sectionsPagerAdapter = TutorialSectionsPagerAdapter(this)
|
||||||
val viewPager: ViewPager = findViewById(R.id.tutorial_viewpager)
|
binding.tutorialViewpager.apply {
|
||||||
viewPager.adapter = sectionsPagerAdapter
|
adapter = sectionsPagerAdapter
|
||||||
val tabs: TabLayout = findViewById(R.id.tutorial_tabs)
|
currentItem = 0
|
||||||
tabs.setupWithViewPager(viewPager)
|
registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
|
||||||
|
override fun onPageSelected(position: Int) {
|
||||||
|
binding.tutorialButtonNext.apply {
|
||||||
|
val lastItem = sectionsPagerAdapter.itemCount - 1
|
||||||
|
visibility = if (position == lastItem) {
|
||||||
|
View.INVISIBLE
|
||||||
|
} else {
|
||||||
|
View.VISIBLE
|
||||||
|
}
|
||||||
|
if (position == 0) {
|
||||||
|
blink()
|
||||||
|
} else {
|
||||||
|
clearAnimation()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
binding.tutorialButtonBack.apply {
|
||||||
|
visibility = if (position == 0) {
|
||||||
|
View.INVISIBLE
|
||||||
|
} else {
|
||||||
|
View.VISIBLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
TabLayoutMediator(binding.tutorialTabs, binding.tutorialViewpager) { _, _ -> }.attach()
|
||||||
|
binding.tutorialButtonNext.setOnClickListener {
|
||||||
|
binding.tutorialViewpager.apply {
|
||||||
|
setCurrentItem(
|
||||||
|
(currentItem + 1).coerceAtMost(sectionsPagerAdapter.itemCount - 1),
|
||||||
|
true
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
binding.tutorialButtonBack.setOnClickListener {
|
||||||
|
binding.tutorialViewpager.apply {
|
||||||
|
setCurrentItem((currentItem - 1).coerceAtLeast(0), true)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTheme(): Resources.Theme {
|
override fun getTheme(): Resources.Theme {
|
||||||
|
@ -89,26 +134,22 @@ class TutorialActivity : AppCompatActivity(), UIObject {
|
||||||
*
|
*
|
||||||
* Tabs: (Start | Concept | Usage | Setup | Finish)
|
* Tabs: (Start | Concept | Usage | Setup | Finish)
|
||||||
*/
|
*/
|
||||||
class TutorialSectionsPagerAdapter(fm: FragmentManager) :
|
class TutorialSectionsPagerAdapter(activity: FragmentActivity) :
|
||||||
FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
|
FragmentStateAdapter(activity) {
|
||||||
|
|
||||||
override fun getItem(position: Int): Fragment {
|
override fun getItemCount(): Int {
|
||||||
|
return 6
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createFragment(position: Int): Fragment {
|
||||||
return when (position) {
|
return when (position) {
|
||||||
0 -> TutorialFragmentStart()
|
0 -> TutorialFragment0Start()
|
||||||
1 -> TutorialFragmentConcept()
|
1 -> TutorialFragment1Concept()
|
||||||
2 -> TutorialFragmentUsage()
|
2 -> TutorialFragment2Usage()
|
||||||
3 -> TutorialFragmentSetup()
|
3 -> TutorialFragment3AppList()
|
||||||
4 -> TutorialFragmentFinish()
|
4 -> TutorialFragment4Setup()
|
||||||
|
5 -> TutorialFragment5Finish()
|
||||||
else -> Fragment()
|
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,24 +5,22 @@ 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.fragment.app.Fragment
|
||||||
import de.jrpie.android.launcher.databinding.TutorialStartBinding
|
import de.jrpie.android.launcher.databinding.Tutorial0StartBinding
|
||||||
import de.jrpie.android.launcher.ui.UIObject
|
import de.jrpie.android.launcher.ui.UIObject
|
||||||
import de.jrpie.android.launcher.ui.blink
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The [TutorialFragmentStart] is a used as a tab in the TutorialActivity.
|
* The [TutorialFragment0Start] is a used as a tab in the TutorialActivity.
|
||||||
*
|
*
|
||||||
* It displays info about the app and gets the user into the tutorial
|
* It displays info about the app and gets the user into the tutorial
|
||||||
*/
|
*/
|
||||||
class TutorialFragmentStart : Fragment(), UIObject {
|
class TutorialFragment0Start : Fragment(), UIObject {
|
||||||
|
|
||||||
private lateinit var binding: TutorialStartBinding
|
private lateinit var binding: Tutorial0StartBinding
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View {
|
): View {
|
||||||
binding = TutorialStartBinding.inflate(inflater, container, false)
|
binding = Tutorial0StartBinding.inflate(inflater, container, false)
|
||||||
binding.tutorialStartIconRight.blink()
|
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,22 +6,22 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import de.jrpie.android.launcher.BuildConfig
|
import de.jrpie.android.launcher.BuildConfig
|
||||||
import de.jrpie.android.launcher.databinding.TutorialConceptBinding
|
import de.jrpie.android.launcher.databinding.Tutorial1ConceptBinding
|
||||||
import de.jrpie.android.launcher.ui.UIObject
|
import de.jrpie.android.launcher.ui.UIObject
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The [TutorialFragmentConcept] is a used as a tab in the TutorialActivity.
|
* The [TutorialFragment1Concept] is a used as a tab in the TutorialActivity.
|
||||||
*
|
*
|
||||||
* It is used to display info about Launchers concept (open source, efficiency ...)
|
* It is used to display info about Launchers concept (open source, efficiency ...)
|
||||||
*/
|
*/
|
||||||
class TutorialFragmentConcept : Fragment(), UIObject {
|
class TutorialFragment1Concept : Fragment(), UIObject {
|
||||||
private lateinit var binding: TutorialConceptBinding
|
private lateinit var binding: Tutorial1ConceptBinding
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View {
|
): View {
|
||||||
binding = TutorialConceptBinding.inflate(inflater, container, false)
|
binding = Tutorial1ConceptBinding.inflate(inflater, container, false)
|
||||||
binding.tutorialConceptBadgeVersion.text = BuildConfig.VERSION_NAME
|
binding.tutorialConceptBadgeVersion.text = BuildConfig.VERSION_NAME
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
|
@ -9,17 +9,17 @@ import de.jrpie.android.launcher.R
|
||||||
import de.jrpie.android.launcher.ui.UIObject
|
import de.jrpie.android.launcher.ui.UIObject
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The [TutorialFragmentUsage] is a used as a tab in the TutorialActivity.
|
* The [TutorialFragment2Usage] is a used as a tab in the TutorialActivity.
|
||||||
*
|
*
|
||||||
* Tells the user how his screen will look and how the app can be used
|
* Tells the user how his screen will look and how the app can be used
|
||||||
*/
|
*/
|
||||||
class TutorialFragmentUsage : Fragment(), UIObject {
|
class TutorialFragment2Usage : Fragment(), UIObject {
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View? {
|
||||||
return inflater.inflate(R.layout.tutorial_usage, container, false)
|
return inflater.inflate(R.layout.tutorial_2_usage, container, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
|
@ -0,0 +1,30 @@
|
||||||
|
package de.jrpie.android.launcher.ui.tutorial.tabs
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import de.jrpie.android.launcher.R
|
||||||
|
import de.jrpie.android.launcher.ui.UIObject
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The [TutorialFragment3AppList] 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 TutorialFragment3AppList : Fragment(), UIObject {
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
return inflater.inflate(R.layout.tutorial_3_app_list, container, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStart() {
|
||||||
|
super<Fragment>.onStart()
|
||||||
|
super<UIObject>.onStart()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -9,17 +9,17 @@ import de.jrpie.android.launcher.R
|
||||||
import de.jrpie.android.launcher.ui.UIObject
|
import de.jrpie.android.launcher.ui.UIObject
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The [TutorialFragmentSetup] is a used as a tab in the TutorialActivity.
|
* The [TutorialFragment4Setup] is a used as a tab in the TutorialActivity.
|
||||||
*
|
*
|
||||||
* It is used to display info in the tutorial
|
* It is used to display info in the tutorial
|
||||||
*/
|
*/
|
||||||
class TutorialFragmentSetup : Fragment(), UIObject {
|
class TutorialFragment4Setup : Fragment(), UIObject {
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View? {
|
||||||
return inflater.inflate(R.layout.tutorial_setup, container, false)
|
return inflater.inflate(R.layout.tutorial_4_setup, container, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
|
@ -6,25 +6,25 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import de.jrpie.android.launcher.BuildConfig.VERSION_CODE
|
import de.jrpie.android.launcher.BuildConfig.VERSION_CODE
|
||||||
import de.jrpie.android.launcher.databinding.TutorialFinishBinding
|
import de.jrpie.android.launcher.databinding.Tutorial5FinishBinding
|
||||||
import de.jrpie.android.launcher.preferences.LauncherPreferences
|
import de.jrpie.android.launcher.preferences.LauncherPreferences
|
||||||
import de.jrpie.android.launcher.setDefaultHomeScreen
|
import de.jrpie.android.launcher.setDefaultHomeScreen
|
||||||
import de.jrpie.android.launcher.ui.UIObject
|
import de.jrpie.android.launcher.ui.UIObject
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The [TutorialFragmentFinish] is a used as a tab in the TutorialActivity.
|
* The [TutorialFragment5Finish] is a used as a tab in the TutorialActivity.
|
||||||
*
|
*
|
||||||
* It is used to display further resources and let the user start Launcher
|
* It is used to display further resources and let the user start Launcher
|
||||||
*/
|
*/
|
||||||
class TutorialFragmentFinish : Fragment(), UIObject {
|
class TutorialFragment5Finish : Fragment(), UIObject {
|
||||||
|
|
||||||
private lateinit var binding: TutorialFinishBinding
|
private lateinit var binding: Tutorial5FinishBinding
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View {
|
): View {
|
||||||
binding = TutorialFinishBinding.inflate(inflater, container, false)
|
binding = Tutorial5FinishBinding.inflate(inflater, container, false)
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
11
app/src/main/res/drawable/baseline_navigate_before_24.xml
Normal file
11
app/src/main/res/drawable/baseline_navigate_before_24.xml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:fillColor="?android:textColor"
|
||||||
|
android:pathData="M15.41,7.41L14,6l-6,6 6,6 1.41,-1.41L10.83,12z" />
|
||||||
|
|
||||||
|
</vector>
|
11
app/src/main/res/drawable/baseline_navigate_next_24.xml
Normal file
11
app/src/main/res/drawable/baseline_navigate_next_24.xml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:fillColor="?android:textColor"
|
||||||
|
android:pathData="M10,6L8.59,7.41 13.17,12l-4.58,4.59L10,18l6,-6z" />
|
||||||
|
|
||||||
|
</vector>
|
Binary file not shown.
Before Width: | Height: | Size: 159 KiB |
6
app/src/main/res/drawable/round_outline.xml
Normal file
6
app/src/main/res/drawable/round_outline.xml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- https://stackoverflow.com/a/30692466 -->
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<corners android:radius="10dp" />
|
||||||
|
</shape>
|
BIN
app/src/main/res/drawable/tutorial_app_list.png
Normal file
BIN
app/src/main/res/drawable/tutorial_app_list.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 124 KiB |
BIN
app/src/main/res/drawable/tutorial_home_screen.png
Normal file
BIN
app/src/main/res/drawable/tutorial_home_screen.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
|
@ -10,7 +10,7 @@
|
||||||
tools:context=".ui.tutorial.TutorialActivity">
|
tools:context=".ui.tutorial.TutorialActivity">
|
||||||
|
|
||||||
|
|
||||||
<androidx.viewpager.widget.ViewPager
|
<androidx.viewpager2.widget.ViewPager2
|
||||||
android:id="@+id/tutorial_viewpager"
|
android:id="@+id/tutorial_viewpager"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
|
@ -22,15 +22,37 @@
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintVertical_bias="0.0" />
|
app:layout_constraintVertical_bias="0.0" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/tutorial_button_back"
|
||||||
|
android:layout_width="50dp"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:alpha="0.5"
|
||||||
|
android:src="@drawable/baseline_navigate_before_24"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/tutorial_viewpager" />
|
||||||
|
|
||||||
|
|
||||||
<com.google.android.material.tabs.TabLayout
|
<com.google.android.material.tabs.TabLayout
|
||||||
android:id="@+id/tutorial_tabs"
|
android:id="@+id/tutorial_tabs"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="50dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/tutorial_button_next"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/tutorial_button_back"
|
||||||
app:tabBackground="@drawable/tutorial_tab_selector"
|
app:tabBackground="@drawable/tutorial_tab_selector"
|
||||||
app:tabGravity="center"
|
app:tabGravity="center"
|
||||||
app:tabIndicatorHeight="0dp"
|
app:tabIndicatorHeight="0dp" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/tutorial_button_next"
|
||||||
|
android:layout_width="50dp"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:src="@drawable/baseline_navigate_next_24"
|
||||||
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_constraintTop_toBottomOf="@+id/tutorial_viewpager" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -8,7 +8,7 @@
|
||||||
android:paddingRight="32sp"
|
android:paddingRight="32sp"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".ui.tutorial.tabs.TutorialFragmentStart">
|
tools:context=".ui.tutorial.tabs.TutorialFragment0Start">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tutorial_start_text"
|
android:id="@+id/tutorial_start_text"
|
||||||
|
@ -21,16 +21,4 @@
|
||||||
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" />
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tutorial_start_icon_right"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text=">>>>>>"
|
|
||||||
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>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -8,7 +8,7 @@
|
||||||
android:paddingRight="32sp"
|
android:paddingRight="32sp"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".ui.tutorial.tabs.TutorialFragmentConcept">
|
tools:context=".ui.tutorial.tabs.TutorialFragment1Concept">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tutorial_concept_title"
|
android:id="@+id/tutorial_concept_title"
|
||||||
|
@ -28,11 +28,10 @@
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="@string/tutorial_concept_text"
|
android:text="@string/tutorial_concept_text"
|
||||||
android:textSize="18sp"
|
android:textSize="18sp"
|
||||||
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_toBottomOf="@+id/tutorial_concept_title"
|
app:layout_constraintTop_toBottomOf="@+id/tutorial_concept_title"
|
||||||
app:layout_constraintVertical_bias="0.19999999" />
|
app:layout_constraintBottom_toTopOf="@id/tutorial_concept_badge_version_label"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tutorial_concept_text_2"
|
android:id="@+id/tutorial_concept_text_2"
|
||||||
|
@ -60,6 +59,22 @@
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/tutorial_concept_text"
|
app:layout_constraintTop_toBottomOf="@+id/tutorial_concept_text"
|
||||||
|
tools:text="0.0.7"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_concept_badge_version_label"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="32dp"
|
||||||
|
android:layout_marginEnd="32dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:text="@string/tutorial_concept_label_version"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/tutorial_concept_badge_version"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintHorizontal_bias="0.0"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
tools:ignore="ContentDescription" />
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -7,7 +7,7 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:paddingLeft="32sp"
|
android:paddingLeft="32sp"
|
||||||
android:paddingRight="32sp"
|
android:paddingRight="32sp"
|
||||||
tools:context=".ui.tutorial.tabs.TutorialFragmentUsage">
|
tools:context=".ui.tutorial.tabs.TutorialFragment2Usage">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tutorial_usage_title"
|
android:id="@+id/tutorial_usage_title"
|
||||||
|
@ -39,12 +39,12 @@
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:scaleType="centerInside"
|
android:scaleType="centerInside"
|
||||||
android:src="@drawable/home_round_screen"
|
android:src="@drawable/tutorial_home_screen"
|
||||||
app:layout_constraintBottom_toTopOf="@id/tutorial_usage_text_2"
|
app:layout_constraintBottom_toTopOf="@id/tutorial_usage_text_2"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="@+id/tutorial_usage_text"
|
app:layout_constraintStart_toStartOf="@+id/tutorial_usage_text"
|
||||||
app:layout_constraintTop_toBottomOf="@id/tutorial_usage_text"
|
app:layout_constraintTop_toBottomOf="@id/tutorial_usage_text"
|
||||||
app:srcCompat="@drawable/home_round_screen"
|
app:srcCompat="@drawable/tutorial_home_screen"
|
||||||
tools:ignore="ContentDescription" />
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
64
app/src/main/res/layout/tutorial_3_app_list.xml
Normal file
64
app/src/main/res/layout/tutorial_3_app_list.xml
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
<?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:paddingLeft="32sp"
|
||||||
|
android:paddingRight="32sp"
|
||||||
|
tools:context=".ui.tutorial.tabs.TutorialFragment3AppList">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_app_list_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:text="@string/tutorial_app_list_title"
|
||||||
|
android:textSize="30sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_app_list_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_app_list_text"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/tutorial_app_list_screen"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/tutorial_app_list_title" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/tutorial_app_list_screen"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:scaleType="centerInside"
|
||||||
|
android:src="@drawable/tutorial_app_list"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/tutorial_app_list_text_2"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/tutorial_app_list_text"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/tutorial_app_list_text"
|
||||||
|
app:srcCompat="@drawable/tutorial_app_list"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tutorial_app_list_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_app_list_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_app_list_screen" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -8,7 +8,7 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:paddingLeft="32sp"
|
android:paddingLeft="32sp"
|
||||||
android:paddingRight="32sp"
|
android:paddingRight="32sp"
|
||||||
tools:context=".ui.tutorial.tabs.TutorialFragmentSetup">
|
tools:context=".ui.tutorial.tabs.TutorialFragment4Setup">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tutorial_setup_title"
|
android:id="@+id/tutorial_setup_title"
|
|
@ -7,7 +7,7 @@
|
||||||
android:paddingRight="32sp"
|
android:paddingRight="32sp"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".ui.tutorial.tabs.TutorialFragmentFinish">
|
tools:context=".ui.tutorial.tabs.TutorialFragment5Finish">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tutorial_finish_title"
|
android:id="@+id/tutorial_finish_title"
|
||||||
|
@ -24,6 +24,7 @@
|
||||||
android:id="@+id/tutorial_finish_text"
|
android:id="@+id/tutorial_finish_text"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
android:text="@string/tutorial_finish_text"
|
android:text="@string/tutorial_finish_text"
|
||||||
android:textSize="18sp"
|
android:textSize="18sp"
|
||||||
app:layout_constraintBottom_toTopOf="@id/tutorial_finish_button_start"
|
app:layout_constraintBottom_toTopOf="@id/tutorial_finish_button_start"
|
|
@ -97,7 +97,6 @@
|
||||||
<string name="settings_launcher_change_wallpaper">Hintergrund ändern</string>
|
<string name="settings_launcher_change_wallpaper">Hintergrund ändern</string>
|
||||||
<string name="settings_launcher_section_display">Bildschirm</string>
|
<string name="settings_launcher_section_display">Bildschirm</string>
|
||||||
<string name="settings_display_screen_timeout_disabled">Bildschirm nicht ausschalten</string>
|
<string name="settings_display_screen_timeout_disabled">Bildschirm nicht ausschalten</string>
|
||||||
<string name="settings_display_full_screen">Vollbild</string>
|
|
||||||
<string name="settings_display_rotate_screen">Bildschirm drehen</string>
|
<string name="settings_display_rotate_screen">Bildschirm drehen</string>
|
||||||
<string name="settings_launcher_section_functionality">Funktionalität</string>
|
<string name="settings_launcher_section_functionality">Funktionalität</string>
|
||||||
<string name="settings_enabled_gestures_double_swipe">Doppelte Wischaktionen</string>
|
<string name="settings_enabled_gestures_double_swipe">Doppelte Wischaktionen</string>
|
||||||
|
@ -118,7 +117,6 @@
|
||||||
<string name="settings_list_layout_item_grid">Raster</string>
|
<string name="settings_list_layout_item_grid">Raster</string>
|
||||||
<string name="settings_general_choose_home_screen">Launcher wählen</string>
|
<string name="settings_general_choose_home_screen">Launcher wählen</string>
|
||||||
<string name="settings_meta_cant_select_launcher">App Info</string>
|
<string name="settings_meta_cant_select_launcher">App Info</string>
|
||||||
<string name="settings_meta_cant_select_launcher_msg">Das Gerät unterstützt diese Funktion nicht. Stattdessen die App Details bearbeiten?</string>
|
|
||||||
<string name="settings_meta_show_tutorial">Zum Tutorial</string>
|
<string name="settings_meta_show_tutorial">Zum Tutorial</string>
|
||||||
<string name="settings_meta_reset">Einstellungen zurücksetzen</string>
|
<string name="settings_meta_reset">Einstellungen zurücksetzen</string>
|
||||||
<string name="settings_meta_reset_confirm">Alle Einstellungen gehen verloren. Weitermachen?</string>
|
<string name="settings_meta_reset_confirm">Alle Einstellungen gehen verloren. Weitermachen?</string>
|
||||||
|
|
|
@ -63,7 +63,6 @@
|
||||||
<string name="settings_launcher_change_wallpaper">Cambiar fondo de pantalla</string>
|
<string name="settings_launcher_change_wallpaper">Cambiar fondo de pantalla</string>
|
||||||
<string name="settings_launcher_section_display">Pantalla</string>
|
<string name="settings_launcher_section_display">Pantalla</string>
|
||||||
<string name="settings_display_screen_timeout_disabled">Mantener encendida</string>
|
<string name="settings_display_screen_timeout_disabled">Mantener encendida</string>
|
||||||
<string name="settings_display_full_screen">Pantalla completa</string>
|
|
||||||
<string name="settings_launcher_section_functionality">Funciones</string>
|
<string name="settings_launcher_section_functionality">Funciones</string>
|
||||||
<string name="settings_enabled_gestures_double_swipe">Deslizar con dos dedos</string>
|
<string name="settings_enabled_gestures_double_swipe">Deslizar con dos dedos</string>
|
||||||
<string name="settings_functionality_auto_launch">Auto-lanzar búsquedas</string>
|
<string name="settings_functionality_auto_launch">Auto-lanzar búsquedas</string>
|
||||||
|
@ -76,7 +75,6 @@
|
||||||
-->
|
-->
|
||||||
<string name="settings_general_choose_home_screen">Seleccionar Launcher</string>
|
<string name="settings_general_choose_home_screen">Seleccionar Launcher</string>
|
||||||
<string name="settings_meta_cant_select_launcher">Información de la aplicación</string>
|
<string name="settings_meta_cant_select_launcher">Información de la aplicación</string>
|
||||||
<string name="settings_meta_cant_select_launcher_msg">Su dispositivo no posee esta caracrerística. Desea cambiar los detalles de la aplicación?</string>
|
|
||||||
<string name="settings_meta_show_tutorial">Ver tutorial de Launcher</string>
|
<string name="settings_meta_show_tutorial">Ver tutorial de Launcher</string>
|
||||||
<string name="settings_meta_reset">Configuración por defecto</string>
|
<string name="settings_meta_reset">Configuración por defecto</string>
|
||||||
<string name="settings_meta_reset_confirm">Todas sus preferencias se eliminarán. Desea continuar?</string>
|
<string name="settings_meta_reset_confirm">Todas sus preferencias se eliminarán. Desea continuar?</string>
|
||||||
|
|
|
@ -55,7 +55,6 @@
|
||||||
<string name="settings_launcher_change_wallpaper">Changer le fond d\'écran</string>
|
<string name="settings_launcher_change_wallpaper">Changer le fond d\'écran</string>
|
||||||
<string name="settings_launcher_section_display">Écran</string>
|
<string name="settings_launcher_section_display">Écran</string>
|
||||||
<string name="settings_display_screen_timeout_disabled">Garder l\'écran allumé</string>
|
<string name="settings_display_screen_timeout_disabled">Garder l\'écran allumé</string>
|
||||||
<string name="settings_display_full_screen">Utiliser le plein écran</string>
|
|
||||||
<string name="settings_launcher_section_functionality">Fonctions</string>
|
<string name="settings_launcher_section_functionality">Fonctions</string>
|
||||||
<string name="settings_enabled_gestures_double_swipe">Actions de double balayage</string>
|
<string name="settings_enabled_gestures_double_swipe">Actions de double balayage</string>
|
||||||
<string name="settings_functionality_auto_launch">Lancer apps par recherche</string>
|
<string name="settings_functionality_auto_launch">Lancer apps par recherche</string>
|
||||||
|
@ -68,7 +67,6 @@
|
||||||
-->
|
-->
|
||||||
<string name="settings_general_choose_home_screen">Choisir μLauncher comme application d\'écran d\'accueil par défaut</string>
|
<string name="settings_general_choose_home_screen">Choisir μLauncher comme application d\'écran d\'accueil par défaut</string>
|
||||||
<string name="settings_meta_cant_select_launcher">Informations sur l\'application</string>
|
<string name="settings_meta_cant_select_launcher">Informations sur l\'application</string>
|
||||||
<string name="settings_meta_cant_select_launcher_msg">Votre appareil ne prend pas en charge cette fonctionnalité. Souhaitez-vous plutôt accéder aux détails de l\'application ?</string>
|
|
||||||
<string name="settings_meta_show_tutorial">Regarder le tutoriel</string>
|
<string name="settings_meta_show_tutorial">Regarder le tutoriel</string>
|
||||||
<string name="settings_meta_reset">Réinitialiser</string>
|
<string name="settings_meta_reset">Réinitialiser</string>
|
||||||
<string name="settings_meta_reset_confirm">Vous allez réinitialiser tous vos paramètres. Souhaitez-vous poursuivre ?</string>
|
<string name="settings_meta_reset_confirm">Vous allez réinitialiser tous vos paramètres. Souhaitez-vous poursuivre ?</string>
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
<br/><br/><br/><br/>
|
<br/><br/><br/><br/>
|
||||||
Puoi cambiare le tue scelte in seguito nelle impostazioni.
|
Puoi cambiare le tue scelte in seguito nelle impostazioni.
|
||||||
]]></string>
|
]]></string>
|
||||||
<string name="settings_meta_cant_select_launcher_msg">Il tuo dispositivo non supporta questa funzione. Vuoi aprire la pagina di dettaglio dell\'applicazione?</string>
|
|
||||||
<string name="alert_cant_open_title">Impossibile aprire l\'applicazione</string>
|
<string name="alert_cant_open_title">Impossibile aprire l\'applicazione</string>
|
||||||
<string name="alert_cant_open_message">Desideri modificare le impostazioni?</string>
|
<string name="alert_cant_open_message">Desideri modificare le impostazioni?</string>
|
||||||
<string name="toast_cant_open_message">Apri le impostazioni per abbinare un\'azione a questo gesto</string>
|
<string name="toast_cant_open_message">Apri le impostazioni per abbinare un\'azione a questo gesto</string>
|
||||||
|
@ -115,7 +114,6 @@
|
||||||
<string name="settings_launcher_change_wallpaper">Cambia immagine di sfondo</string>
|
<string name="settings_launcher_change_wallpaper">Cambia immagine di sfondo</string>
|
||||||
<string name="settings_launcher_section_display">Schermo</string>
|
<string name="settings_launcher_section_display">Schermo</string>
|
||||||
<string name="settings_display_screen_timeout_disabled">Mantieni lo schermo acceso</string>
|
<string name="settings_display_screen_timeout_disabled">Mantieni lo schermo acceso</string>
|
||||||
<string name="settings_display_full_screen">Schermo intero</string>
|
|
||||||
<string name="settings_display_rotate_screen">Ruota lo schermo</string>
|
<string name="settings_display_rotate_screen">Ruota lo schermo</string>
|
||||||
<string name="settings_launcher_section_functionality">Funzionalità</string>
|
<string name="settings_launcher_section_functionality">Funzionalità</string>
|
||||||
<string name="settings_functionality_auto_keyboard">Apri automaticamente la tastiera per cercare</string>
|
<string name="settings_functionality_auto_keyboard">Apri automaticamente la tastiera per cercare</string>
|
||||||
|
|
|
@ -1,2 +1,200 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources></resources>
|
<resources>
|
||||||
|
<string name="alert_cant_open_title">アプリを開けません</string>
|
||||||
|
<string name="alert_cant_open_message">設定を変更しますか?</string>
|
||||||
|
<string name="settings_title">設定</string>
|
||||||
|
<string name="settings_tab_app">アプリ</string>
|
||||||
|
<string name="settings_tab_launcher">ランチャー</string>
|
||||||
|
<string name="settings_tab_meta">その他</string>
|
||||||
|
<string name="toast_cant_open_message">このジェスチャのアクションを選択するには設定を開きます</string>
|
||||||
|
<string name="settings_gesture_description_up">上にスワイプ</string>
|
||||||
|
<string name="settings_gesture_description_tap_up">タップしてから上にスワイプ</string>
|
||||||
|
<string name="settings_gesture_double_up">Double Up</string>
|
||||||
|
<string name="settings_gesture_tap_up">Tap + Up</string>
|
||||||
|
<string name="settings_gesture_up">Up</string>
|
||||||
|
<string name="settings_gesture_back">Back</string>
|
||||||
|
<string name="settings_gesture_description_double_up">2本指で上にスワイプ</string>
|
||||||
|
<string name="settings_gesture_down">Down</string>
|
||||||
|
<string name="settings_gesture_description_down">下にスワイプ</string>
|
||||||
|
<string name="settings_gesture_tap_down">Tap + Down</string>
|
||||||
|
<string name="settings_gesture_description_tap_down">タップしてから下にスワイプ</string>
|
||||||
|
<string name="settings_gesture_double_down">Double Down</string>
|
||||||
|
<string name="settings_gesture_description_double_down">2本指で下にスワイプ</string>
|
||||||
|
<string name="settings_gesture_left">Left</string>
|
||||||
|
<string name="settings_gesture_description_left">左にスワイプ</string>
|
||||||
|
<string name="settings_gesture_tap_left">Tap + Left</string>
|
||||||
|
<string name="settings_gesture_description_tap_left">タップしてから左にスワイプ</string>
|
||||||
|
<string name="settings_gesture_double_left">Double Left</string>
|
||||||
|
<string name="settings_gesture_description_double_left">2本指で左にスワイプ</string>
|
||||||
|
<string name="settings_gesture_right">Right</string>
|
||||||
|
<string name="settings_gesture_description_right">右にスワイプ</string>
|
||||||
|
<string name="settings_gesture_description_tap_right">タップしてから右にスワイプ</string>
|
||||||
|
<string name="settings_gesture_double_right">Double Right</string>
|
||||||
|
<string name="settings_gesture_right_top_edge">Right (Top)</string>
|
||||||
|
<string name="settings_gesture_description_right_top_edge">画面の上部で右にスワイプ</string>
|
||||||
|
<string name="settings_gesture_right_bottom_edge">Right (Bottom)</string>
|
||||||
|
<string name="settings_gesture_description_right_bottom_edge">画面の下部で右にスワイプ</string>
|
||||||
|
<string name="settings_gesture_left_bottom_edge">Left (Bottom)</string>
|
||||||
|
<string name="settings_gesture_description_left_bottom_edge">画面の下部で左にスワイプ</string>
|
||||||
|
<string name="settings_gesture_left_top_edge">Left (Top)</string>
|
||||||
|
<string name="settings_gesture_description_left_top_edge">画面の上部で左にスワイプ</string>
|
||||||
|
<string name="settings_gesture_up_left_edge">Up (Left Edge)</string>
|
||||||
|
<string name="settings_gesture_up_right_edge">Up (Right Edge)</string>
|
||||||
|
<string name="settings_gesture_description_up_right_edge">画面の右端で上にスワイプ</string>
|
||||||
|
<string name="settings_gesture_down_left_edge">Down (Left Edge)</string>
|
||||||
|
<string name="settings_gesture_description_down_left_edge">画面の左端で下にスワイプ</string>
|
||||||
|
<string name="settings_gesture_down_right_edge">Down (Right Edge)</string>
|
||||||
|
<string name="settings_gesture_swipe_larger"><![CDATA[>]]></string>
|
||||||
|
<string name="settings_gesture_description_swipe_larger">左上 -> 右中 -> 左下</string>
|
||||||
|
<string name="settings_gesture_swipe_larger_reverse"><![CDATA[> (Reverse)]]></string>
|
||||||
|
<string name="settings_gesture_description_swipe_larger_reverse">左下 -> 右中 -> 左上</string>
|
||||||
|
<string name="settings_gesture_swipe_smaller"><![CDATA[<]]></string>
|
||||||
|
<string name="settings_gesture_description_swipe_smaller">右上 -> 左中 -> 右下</string>
|
||||||
|
<string name="settings_gesture_swipe_smaller_reverse"><![CDATA[< (Reverse)]]></string>
|
||||||
|
<string name="settings_gesture_swipe_v">V</string>
|
||||||
|
<string name="settings_gesture_description_swipe_v">左上 -> 中下 -> 右上</string>
|
||||||
|
<string name="settings_gesture_swipe_v_reverse">V (Reverse)</string>
|
||||||
|
<string name="settings_gesture_description_swipe_v_reverse">右上 -> 中下 -> 左上</string>
|
||||||
|
<string name="settings_gesture_swipe_lambda">Λ</string>
|
||||||
|
<string name="settings_gesture_description_swipe_lambda">左下 -> 中上 -> 右下</string>
|
||||||
|
<string name="settings_gesture_swipe_lambda_reverse">Λ (Reverse)</string>
|
||||||
|
<string name="settings_gesture_description_swipe_lambda_reverse">右下 -> 中上 -> 左下</string>
|
||||||
|
<string name="settings_gesture_vol_down">Volume Down</string>
|
||||||
|
<string name="settings_gesture_description_vol_down">音量ダウンボタンを押す</string>
|
||||||
|
<string name="settings_gesture_double_click">Double Click</string>
|
||||||
|
<string name="settings_gesture_description_double_click">空白部分をダブルタップ</string>
|
||||||
|
<string name="settings_gesture_long_click">Long Click</string>
|
||||||
|
<string name="settings_gesture_date">Date</string>
|
||||||
|
<string name="settings_gesture_description_date">日付をタップ</string>
|
||||||
|
<string name="settings_gesture_time">Time</string>
|
||||||
|
<string name="settings_gesture_description_time">時刻をタップ</string>
|
||||||
|
<string name="settings_apps_choose">アプリを選択</string>
|
||||||
|
<string name="settings_launcher_section_appearance">外観</string>
|
||||||
|
<string name="settings_theme_color_theme">カラーテーマ</string>
|
||||||
|
<string name="settings_theme_color_theme_item_default">デフォルト</string>
|
||||||
|
<string name="settings_theme_color_theme_item_dark">ダーク</string>
|
||||||
|
<string name="settings_theme_color_theme_item_dynamic">ダイナミック</string>
|
||||||
|
<string name="settings_theme_text_shadow">文字の影</string>
|
||||||
|
<string name="settings_theme_background_item_transparent">透明</string>
|
||||||
|
<string name="settings_theme_background_item_blur">ブラー</string>
|
||||||
|
<string name="settings_theme_background_item_solid">ソリッド</string>
|
||||||
|
<string name="settings_theme_font">フォント</string>
|
||||||
|
<string name="settings_theme_font_item_system_default">システムデフォルト</string>
|
||||||
|
<string name="settings_theme_monochrome_icons">モノクロのアプリアイコン</string>
|
||||||
|
<string name="settings_launcher_section_date_time"><![CDATA[Date & time]]></string>
|
||||||
|
<string name="settings_clock_color">色</string>
|
||||||
|
<string name="settings_clock_time_visible">時刻を表示</string>
|
||||||
|
<string name="settings_clock_date_visible">日付を表示</string>
|
||||||
|
<string name="settings_clock_localized">ローカライズされた日付形式を使用する</string>
|
||||||
|
<string name="settings_clock_show_seconds">秒を表示</string>
|
||||||
|
<string name="settings_clock_flip_date_time">日付と時刻を反転</string>
|
||||||
|
<string name="settings_theme_wallpaper">壁紙を選択</string>
|
||||||
|
<string name="settings_launcher_change_wallpaper">壁紙を変更</string>
|
||||||
|
<string name="settings_launcher_section_display">表示</string>
|
||||||
|
<string name="settings_display_screen_timeout_disabled">画面オンを維持</string>
|
||||||
|
<string name="settings_display_rotate_screen">画面の回転</string>
|
||||||
|
<string name="settings_enabled_gestures_double_swipe_summary">2本指でスワイプ</string>
|
||||||
|
<string name="settings_enabled_gestures_edge_swipe">Edgeスワイプアクション</string>
|
||||||
|
<string name="settings_enabled_gestures_edge_swipe_summary">画面端でスワイプ</string>
|
||||||
|
<string name="settings_functionality_search_web_summary">アプリリストで検索中にリターンキーを押すとWeb検索が起動します。</string>
|
||||||
|
<string name="settings_functionality_search_web">Webで検索</string>
|
||||||
|
<string name="settings_functionality_auto_keyboard">検索時にキーボードを表示</string>
|
||||||
|
<string name="settings_launcher_section_apps">アプリ</string>
|
||||||
|
<string name="settings_apps_hide_bound_apps">ジェスチャーに設定されたアプリをアプリ一覧に表示しない</string>
|
||||||
|
<string name="settings_apps_hide_paused_apps">一時停止されたアプリを隠す</string>
|
||||||
|
<string name="settings_list_layout">アプリ一覧のレイアウト</string>
|
||||||
|
<string name="settings_list_reverse_layout">アプリ一覧を反転</string>
|
||||||
|
<string name="settings_list_layout_item_default">デフォルト</string>
|
||||||
|
<string name="settings_list_layout_item_text">テキスト</string>
|
||||||
|
<string name="settings_list_layout_item_grid">グリッド</string>
|
||||||
|
<string name="settings_meta_show_tutorial">ランチャーのチュートリアルを見る</string>
|
||||||
|
<string name="settings_meta_reset">設定をリセット</string>
|
||||||
|
<string name="settings_meta_reset_confirm">すべての設定を破棄します。続行しますか?</string>
|
||||||
|
<string name="settings_meta_view_code">ソースコードを見る</string>
|
||||||
|
<string name="dialog_report_bug_title">バグを報告</string>
|
||||||
|
<string name="dialog_report_bug_button_clipboard">クリップボードにコピー</string>
|
||||||
|
<string name="dialog_report_bug_security_info">セキュリティ上の脆弱性をGitHubに公開しないでください。代わりに以下を使用してください。</string>
|
||||||
|
<string name="dialog_report_bug_button_security">セキュリティ上の脆弱性を報告</string>
|
||||||
|
<string name="dialog_report_bug_create_report">レポートを作成</string>
|
||||||
|
<string name="settings_meta_join_chat">µLauncherのチャットに入る</string>
|
||||||
|
<string name="settings_meta_privacy">プライバシーポリシー</string>
|
||||||
|
<string name="settings_meta_discord">Discordに参加してください!</string>
|
||||||
|
<string name="list_title_hidden">非表示のアプリ</string>
|
||||||
|
<string name="list_title_private_space">プライベートスペース</string>
|
||||||
|
<string name="list_title_pick">アプリを選択</string>
|
||||||
|
<string name="list_tab_app">アプリ</string>
|
||||||
|
<string name="list_tab_other">その他</string>
|
||||||
|
<string name="list_app_delete">アンインストール</string>
|
||||||
|
<string name="list_app_info">アプリ情報</string>
|
||||||
|
<string name="list_app_favorite_remove">お気に入りから削除</string>
|
||||||
|
<string name="list_app_hidden_add">隠す</string>
|
||||||
|
<string name="list_app_rename">名称を変更</string>
|
||||||
|
<string name="list_not_removed">アプリを削除できませんでした</string>
|
||||||
|
<string name="list_apps_search_hint">検索</string>
|
||||||
|
<string name="list_apps_search_hint_no_auto_launch">検索(自動起動なし)</string>
|
||||||
|
<string name="list_other_settings">µLauncherの設定</string>
|
||||||
|
<string name="list_other_list">すべてのアプリ</string>
|
||||||
|
<string name="list_other_toggle_private_space_lock">プライベートスペースのロックを切り替え</string>
|
||||||
|
<string name="list_other_volume_up">音楽: うるさい</string>
|
||||||
|
<string name="list_other_volume_down">音楽: ひっそり</string>
|
||||||
|
<string name="list_other_track_next">音楽: 次</string>
|
||||||
|
<string name="list_other_track_previous">音楽: 前</string>
|
||||||
|
<string name="list_other_expand_notifications_panel">通知パネルを表示</string>
|
||||||
|
<string name="list_other_nop">なにもしねぇ</string>
|
||||||
|
<string name="list_other_lock_screen">画面をロック</string>
|
||||||
|
<string name="list_other_torch">ライトを切り替え</string>
|
||||||
|
<string name="pin_shortcut_title">ショートカットを追加</string>
|
||||||
|
<string name="pin_shortcut_button_bind">ジェシュチャーに設定</string>
|
||||||
|
<string name="pin_shortcut_button_ok">Ok</string>
|
||||||
|
<string name="pin_shortcut_switch_visible">アプリ一覧に表示</string>
|
||||||
|
<string name="tutorial_title">チュートリアル</string>
|
||||||
|
<string name="tutorial_concept_title">コンセプト</string>
|
||||||
|
<string name="tutorial_usage_title">使い方</string>
|
||||||
|
<string name="tutorial_usage_text">ホーム画面には現地の日付と時刻が表示されます。邪魔されることはありません。</string>
|
||||||
|
<string name="tutorial_usage_text_2">1回のスワイプまたはボタンのタップでアプリを起動できます。次のスライドでいくつか選択してください。</string>
|
||||||
|
<string name="tutorial_setup_title">セットアップ</string>
|
||||||
|
<string name="tutorial_setup_text_2">選択内容は後で変更することもできます。</string>
|
||||||
|
<string name="tutorial_finish_title">さあ行きましょう!</string>
|
||||||
|
<string name="tutorial_finish_button">始める</string>
|
||||||
|
<string name="settings">設定</string>
|
||||||
|
<string name="settings_gesture_description_back">戻るボタン / 戻るジェスチャ</string>
|
||||||
|
<string name="settings_theme_color_theme_item_light">ライト</string>
|
||||||
|
<string name="settings_enabled_gestures_double_swipe">Doubleスワイプアクション</string>
|
||||||
|
<string name="settings_functionality_auto_launch">検索結果を起動</string>
|
||||||
|
<string name="list_title_favorite">お気に入りのアプリ</string>
|
||||||
|
<string name="settings_gesture_description_vol_up">音量アップボタンを押す</string>
|
||||||
|
<string name="settings_gesture_description_long_click">空白部分をロングタップ</string>
|
||||||
|
<string name="settings_launcher_section_functionality">機能性</string>
|
||||||
|
<string name="dialog_report_bug_info">µLauncherの改善にご協力いただきありがとうございます。\nバグレポートに次の情報を追加することを検討してください。</string>
|
||||||
|
<string name="list_app_favorite_add">お気に入りに追加</string>
|
||||||
|
<string name="settings_gesture_description_up_left_edge">画面の左端で上にスワイプ</string>
|
||||||
|
<string name="settings_gesture_description_down_right_edge">画面の右端で下にスワイプ</string>
|
||||||
|
<string name="settings_apps_install">アプリをインストール</string>
|
||||||
|
<string name="list_removed">選択されたアプリを削除しました</string>
|
||||||
|
<string name="tutorial_finish_text">始める準備はできました!これがあなたにとって大きな価値となることを願っています! \t- Finn(Launcherの作成者)とJosia(いくつかの改良を行い、フォーク μLauncher を保守)</string>
|
||||||
|
<string name="settings_gesture_tap_right">Tap + Right</string>
|
||||||
|
<string name="settings_gesture_description_double_right">2本指で右にスワイプ</string>
|
||||||
|
<string name="settings_apps_hidden">非表示のアプリ</string>
|
||||||
|
<string name="settings_general_choose_home_screen">μLauncherホーム画面に設定</string>
|
||||||
|
<string name="settings_meta_fork_contact">フォークの開発者に問い合わせ</string>
|
||||||
|
<string name="settings_meta_contact">オリジナルの開発者に問い合わせる</string>
|
||||||
|
<string name="list_other_list_favorites">お気に入りのアプリ</string>
|
||||||
|
<string name="list_other_track_play_pause">音楽: 再生 / 一時停止</string>
|
||||||
|
<string name="settings_theme_background_item_dim">薄暗い</string>
|
||||||
|
<string name="settings_launcher_sensitivity">感度</string>
|
||||||
|
<string name="settings_meta_cant_select_launcher">アプリ情報</string>
|
||||||
|
<string name="settings_gesture_vol_up">Volume Up</string>
|
||||||
|
<string name="list_title_view">すべてのアプリ</string>
|
||||||
|
<string name="list_app_hidden_remove">表示</string>
|
||||||
|
<string name="settings_gesture_description_swipe_smaller_reverse">右下 -> 左中 -> 右上</string>
|
||||||
|
<string name="settings_theme_background">背景(アプリ一覧と設定)</string>
|
||||||
|
<string name="settings_enabled_gestures_edge_swipe_edge_width">端の幅</string>
|
||||||
|
<string name="settings_functionality_auto_launch_summary">この機能を一時的に無効にするにはスペースキーを押します。</string>
|
||||||
|
<string name="list_other_list_private_space">プライベートスペース</string>
|
||||||
|
<string name="settings_apps_hide_private_space_apps">アプリ一覧からプライベートスペースを隠す</string>
|
||||||
|
<string name="settings_meta_report_bug">バグを報告</string>
|
||||||
|
<string name="tutorial_start_text">このランチャーの使い方を学ぶのにほんの数秒しかかかりません</string>
|
||||||
|
<string name="tutorial_concept_text">Launcherは、最小限かつ効率的で、邪魔にならないように設計されています。支払い、広告、追跡サービスは一切ありません。</string>
|
||||||
|
<string name="tutorial_concept_text_2">このアプリはオープンソース(MIT ライセンス)であり、GitHub で入手できます!リポジトリを必ずチェックしてください!</string>
|
||||||
|
<string name="tutorial_setup_text">デフォルトのアプリをいくつか選択しました。必要に応じて今すぐ変更できます。</string>
|
||||||
|
</resources>
|
||||||
|
|
|
@ -66,7 +66,6 @@
|
||||||
<string name="settings_launcher_change_wallpaper">Alterar papel de parede</string>
|
<string name="settings_launcher_change_wallpaper">Alterar papel de parede</string>
|
||||||
<string name="settings_launcher_section_display">Exibição</string>
|
<string name="settings_launcher_section_display">Exibição</string>
|
||||||
<string name="settings_display_screen_timeout_disabled">Manter a tela ligada</string>
|
<string name="settings_display_screen_timeout_disabled">Manter a tela ligada</string>
|
||||||
<string name="settings_display_full_screen">Usar tela cheia</string>
|
|
||||||
<string name="settings_launcher_section_functionality">Funcionalidades</string>
|
<string name="settings_launcher_section_functionality">Funcionalidades</string>
|
||||||
<string name="settings_enabled_gestures_double_swipe">Gestos com 2 dedos</string>
|
<string name="settings_enabled_gestures_double_swipe">Gestos com 2 dedos</string>
|
||||||
<string name="settings_enabled_gestures_edge_swipe">Ações de deslize nas bordas</string>
|
<string name="settings_enabled_gestures_edge_swipe">Ações de deslize nas bordas</string>
|
||||||
|
@ -80,7 +79,6 @@
|
||||||
-->
|
-->
|
||||||
<string name="settings_general_choose_home_screen">Definir o μLauncher como tela inicial</string>
|
<string name="settings_general_choose_home_screen">Definir o μLauncher como tela inicial</string>
|
||||||
<string name="settings_meta_cant_select_launcher">Informações do aplicativo</string>
|
<string name="settings_meta_cant_select_launcher">Informações do aplicativo</string>
|
||||||
<string name="settings_meta_cant_select_launcher_msg">Seu dispositivo não é compatível com esse recurso. Gerenciar detalhes do app em vez disso?</string>
|
|
||||||
<string name="settings_meta_show_tutorial">Ver tutorial do launcher</string>
|
<string name="settings_meta_show_tutorial">Ver tutorial do launcher</string>
|
||||||
<string name="settings_meta_reset">Redefinir configuraçãos</string>
|
<string name="settings_meta_reset">Redefinir configuraçãos</string>
|
||||||
<string name="settings_meta_reset_confirm">Você vai descartar todas as suas preferências. Continuar?</string>
|
<string name="settings_meta_reset_confirm">Você vai descartar todas as suas preferências. Continuar?</string>
|
||||||
|
|
|
@ -137,7 +137,6 @@
|
||||||
<string name="settings_launcher_change_wallpaper">Duvar kağıdını değiştir</string>
|
<string name="settings_launcher_change_wallpaper">Duvar kağıdını değiştir</string>
|
||||||
<string name="settings_launcher_section_display">Ekran</string>
|
<string name="settings_launcher_section_display">Ekran</string>
|
||||||
<string name="settings_display_screen_timeout_disabled">Ekranı açık tut</string>
|
<string name="settings_display_screen_timeout_disabled">Ekranı açık tut</string>
|
||||||
<string name="settings_display_full_screen">Tam ekran kullan</string>
|
|
||||||
<string name="settings_display_rotate_screen">Ekranı döndür</string>
|
<string name="settings_display_rotate_screen">Ekranı döndür</string>
|
||||||
<string name="settings_launcher_section_functionality">İşlevsellik</string>
|
<string name="settings_launcher_section_functionality">İşlevsellik</string>
|
||||||
<string name="settings_enabled_gestures_edge_swipe_summary">Ekranın köşesinden kaydırın</string>
|
<string name="settings_enabled_gestures_edge_swipe_summary">Ekranın köşesinden kaydırın</string>
|
||||||
|
@ -165,7 +164,6 @@
|
||||||
<string name="settings_list_layout_item_text">Metin</string>
|
<string name="settings_list_layout_item_text">Metin</string>
|
||||||
<string name="settings_list_layout_item_grid">Izgara</string>
|
<string name="settings_list_layout_item_grid">Izgara</string>
|
||||||
<string name="settings_meta_cant_select_launcher">Uygulama Detayı</string>
|
<string name="settings_meta_cant_select_launcher">Uygulama Detayı</string>
|
||||||
<string name="settings_meta_cant_select_launcher_msg">Sizin cihazınız bu özelliği desteklemiyor. Onun yerine uygulama detaylarını düzenleyin?</string>
|
|
||||||
<string name="settings_meta_reset">Ayarları Sıfırlayın</string>
|
<string name="settings_meta_reset">Ayarları Sıfırlayın</string>
|
||||||
<string name="settings_meta_reset_confirm">Tüm tercihlerinizi bir kenara bırakacaksınız. Devam mı?</string>
|
<string name="settings_meta_reset_confirm">Tüm tercihlerinizi bir kenara bırakacaksınız. Devam mı?</string>
|
||||||
<string name="settings_theme_font_item_monospace">Tek uzay</string>
|
<string name="settings_theme_font_item_monospace">Tek uzay</string>
|
||||||
|
|
|
@ -44,14 +44,12 @@
|
||||||
<string name="settings_theme_wallpaper">选择一个壁纸</string>
|
<string name="settings_theme_wallpaper">选择一个壁纸</string>
|
||||||
<string name="settings_launcher_change_wallpaper">换壁纸</string>
|
<string name="settings_launcher_change_wallpaper">换壁纸</string>
|
||||||
<string name="settings_display_screen_timeout_disabled">保持屏幕常亮</string>
|
<string name="settings_display_screen_timeout_disabled">保持屏幕常亮</string>
|
||||||
<string name="settings_display_full_screen">使用全屏</string>
|
|
||||||
<string name="settings_launcher_section_functionality">功能</string>
|
<string name="settings_launcher_section_functionality">功能</string>
|
||||||
<string name="settings_enabled_gestures_edge_swipe">边缘滑动动作</string>
|
<string name="settings_enabled_gestures_edge_swipe">边缘滑动动作</string>
|
||||||
<string name="settings_functionality_auto_launch">零点击启动唯一搜索结果</string>
|
<string name="settings_functionality_auto_launch">直接启动匹配搜索内容的应用</string>
|
||||||
<string name="settings_functionality_auto_keyboard">搜索时呼出键盘</string>
|
<string name="settings_functionality_auto_keyboard">搜索时呼出键盘</string>
|
||||||
<string name="settings_launcher_sensitivity">灵敏度</string>
|
<string name="settings_launcher_sensitivity">灵敏度</string>
|
||||||
<string name="settings_meta_cant_select_launcher">应用信息</string>
|
<string name="settings_meta_cant_select_launcher">应用信息</string>
|
||||||
<string name="settings_meta_cant_select_launcher_msg">您的设备不支持此功能。要不打开应用程序详细?</string>
|
|
||||||
<string name="settings_meta_show_tutorial">查看启动器教程</string>
|
<string name="settings_meta_show_tutorial">查看启动器教程</string>
|
||||||
<string name="settings_meta_reset">重置设置</string>
|
<string name="settings_meta_reset">重置设置</string>
|
||||||
<string name="settings_meta_reset_confirm">你将放弃你所有的配置。继续吗?</string>
|
<string name="settings_meta_reset_confirm">你将放弃你所有的配置。继续吗?</string>
|
||||||
|
@ -213,4 +211,63 @@
|
||||||
<string name="toast_private_space_default_home_screen">µLauncher 需要作为默认的主屏幕来访问私人空间。</string>
|
<string name="toast_private_space_default_home_screen">µLauncher 需要作为默认的主屏幕来访问私人空间。</string>
|
||||||
<string name="toast_activity_not_found_search_web">没有找到处理搜索的应用。</string>
|
<string name="toast_activity_not_found_search_web">没有找到处理搜索的应用。</string>
|
||||||
<string name="toast_activity_not_found_browser">无法打开 URL:找不到浏览器。</string>
|
<string name="toast_activity_not_found_browser">无法打开 URL:找不到浏览器。</string>
|
||||||
|
<string name="dialog_consent_accessibility_privileges">我已知晓,这将赋予 µLauncher 广泛且重要的权限。</string>
|
||||||
|
<string name="settings_apps_hide_private_space_apps">在应用程序列表中隐藏私人空间</string>
|
||||||
|
<string name="settings_apps_hide_paused_apps">隐藏已被暂停的应用</string>
|
||||||
|
<string name="settings_gesture_description_back">返回按键 / 返回手势</string>
|
||||||
|
<string name="settings_gesture_description_tap_down">先单击然后再下滑</string>
|
||||||
|
<string name="settings_functionality_search_web">在网络上搜索</string>
|
||||||
|
<string name="settings_gesture_description_swipe_smaller">(从)右上 (滑向)中左(滑向)右下</string>
|
||||||
|
<string name="settings_functionality_search_web_summary">通过按回车键在应用列表搜索界面激活网络搜索。</string>
|
||||||
|
<string name="settings_gesture_description_swipe_lambda">(从)左下 (滑向)中上(滑向)右下</string>
|
||||||
|
<string name="screen_lock_method_dialog_text"><![CDATA[
|
||||||
|
<h1>选择锁定设备的方式</h1>
|
||||||
|
有2种方式可以用来锁定屏幕。
|
||||||
|
遗憾的是,两者都有缺点:<br/><br/>
|
||||||
|
|
||||||
|
<h3>通过设置“设备管理应用”</h3>
|
||||||
|
无法和指纹解锁和脸部解锁共同使用。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<h3>通过“无障碍”功能</h3>
|
||||||
|
需要更多的权限。
|
||||||
|
µLauncher 将这些权限仅用于锁定屏幕。
|
||||||
|
<br/>
|
||||||
|
(对于任何一个从网上下载的应用所做的类似声明,你都不应该抱持“默认为可信”的态度,你可以并应该检查一下它的<a href=\"https://github.com/jrpie/Launcher\">源代码</a>.)
|
||||||
|
<br/>
|
||||||
|
在某些设备上,激活辅助功能服务后,启动PIN码将不再用于加密数据。
|
||||||
|
如果遇到该问题,可以通过<a href="https://issuetracker.google.com/issues/37010136#comment36">该方法</a>重新激活启动PIN码用于数据加密。
|
||||||
|
|
||||||
|
<br/><br/><br/><br/>
|
||||||
|
你可以在设置中随时更改这个选项。
|
||||||
|
]]></string>
|
||||||
|
<string name="list_apps_search_hint_no_auto_launch">搜索(不触发自动启动应用程序)</string>
|
||||||
|
<string name="dialog_consent_accessibility_text"><![CDATA[您即将激活“无障碍”服务。这将授予 µLauncher <strong>广泛且重要的权限</strong>。<br/>µLauncher 将这些权限<strong>仅用于锁定屏幕</strong>。µLauncher <strong>绝不会收集任何数据</strong>。尤其是,µLauncher 不会使用“无障碍”服务来收集任何数据。]]></string>
|
||||||
|
<string name="settings_gesture_description_swipe_larger">(从)左上 (滑向)中右(滑向)左下</string>
|
||||||
|
<string name="settings_gesture_tap_up">单击 + 上滑</string>
|
||||||
|
<string name="settings_gesture_tap_down">单击 + 下滑</string>
|
||||||
|
<string name="settings_gesture_tap_left">单击 + 左滑</string>
|
||||||
|
<string name="settings_gesture_description_tap_left">先单击然后再左滑</string>
|
||||||
|
<string name="settings_gesture_description_tap_up">先单击然后再上滑</string>
|
||||||
|
<string name="settings_gesture_tap_right">单击 + 右滑</string>
|
||||||
|
<string name="settings_gesture_description_tap_right">先单击然后再右滑</string>
|
||||||
|
<string name="settings_gesture_description_swipe_larger_reverse">(从)左下 (滑向)中右(滑向)左上</string>
|
||||||
|
<string name="settings_gesture_description_swipe_smaller_reverse">(从)右下 (滑向)中左(滑向)右上</string>
|
||||||
|
<string name="settings_gesture_description_swipe_v">(从)左上 (滑向)中下(滑向)右上</string>
|
||||||
|
<string name="settings_gesture_description_swipe_v_reverse">(从)右上 (滑向)中下(滑向)左上</string>
|
||||||
|
<string name="settings_gesture_description_swipe_lambda_reverse">(从)右下 (滑向)中上(滑向)左下</string>
|
||||||
|
<string name="settings_gesture_swipe_lambda_reverse">Λ (反向)</string>
|
||||||
|
<string name="settings_gesture_swipe_v_reverse">V(反向)</string>
|
||||||
|
<string name="settings_gesture_swipe_larger_reverse"><![CDATA[> (反向)]]></string>
|
||||||
|
<string name="settings_gesture_swipe_smaller_reverse"><![CDATA[< (反向)]]></string>
|
||||||
|
<string name="settings_functionality_auto_launch_summary">按空格键临时暂停该功能。</string>
|
||||||
|
<string name="settings_list_layout">应用程序列表样式</string>
|
||||||
|
<string name="pin_shortcut_button_bind">绑定到手势</string>
|
||||||
|
<string name="list_other_track_play_pause">音乐:播放 / 暂停</string>
|
||||||
|
<string name="dialog_report_bug_button_security">报告安全漏洞</string>
|
||||||
|
<string name="dialog_report_bug_security_info">安全漏洞请不要在 Github 上以公开的方式提交,而是使用以下方式进行报告:</string>
|
||||||
|
<string name="dialog_report_bug_info">感谢您帮助改进 µLauncher!\n请考虑在您的应用程序错误报告中添加以下信息:</string>
|
||||||
|
<string name="dialog_consent_accessibility_other_options">我已知晓,还有其他替代方法(使用设备管理员权限或电源按键)。</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -176,7 +176,7 @@
|
||||||
|
|
||||||
<!-- Legal -->
|
<!-- Legal -->
|
||||||
<string name="legal_info_text"><![CDATA[
|
<string name="legal_info_text"><![CDATA[
|
||||||
<h2>µLauncher</h2>
|
<h2>μLauncher</h2>
|
||||||
Modifications to Launcher.
|
Modifications to Launcher.
|
||||||
<p><a href=\"https://github.com/jrpie/launcher\">github.com/jrpie/launcher</a></p>
|
<p><a href=\"https://github.com/jrpie/launcher\">github.com/jrpie/launcher</a></p>
|
||||||
|
|
||||||
|
|
|
@ -179,7 +179,7 @@
|
||||||
<string name="settings_apps_hide_paused_apps">Hide paused apps</string>
|
<string name="settings_apps_hide_paused_apps">Hide paused apps</string>
|
||||||
<string name="settings_apps_hide_private_space_apps">Hide private space from app list</string>
|
<string name="settings_apps_hide_private_space_apps">Hide private space from app list</string>
|
||||||
<string name="settings_list_layout">Layout of app list</string>
|
<string name="settings_list_layout">Layout of app list</string>
|
||||||
<string name="settings_list_reverse_layout">Reverse app list</string>
|
<string name="settings_list_reverse_layout">Reverse the app list</string>
|
||||||
|
|
||||||
<string name="settings_list_layout_item_default">Default</string>
|
<string name="settings_list_layout_item_default">Default</string>
|
||||||
<string name="settings_list_layout_item_text">Text</string>
|
<string name="settings_list_layout_item_text">Text</string>
|
||||||
|
@ -193,7 +193,7 @@
|
||||||
<string name="settings_general_choose_home_screen">Set μLauncher as home screen</string>
|
<string name="settings_general_choose_home_screen">Set μLauncher as home screen</string>
|
||||||
<string name="settings_meta_cant_select_launcher">App Info</string>
|
<string name="settings_meta_cant_select_launcher">App Info</string>
|
||||||
|
|
||||||
<string name="settings_meta_show_tutorial">View Launcher Tutorial</string>
|
<string name="settings_meta_show_tutorial">View µLauncher Tutorial</string>
|
||||||
|
|
||||||
<string name="settings_meta_reset">Reset Settings</string>
|
<string name="settings_meta_reset">Reset Settings</string>
|
||||||
<string name="settings_meta_reset_confirm">You are going to discard all your preferences. Continue?</string>
|
<string name="settings_meta_reset_confirm">You are going to discard all your preferences. Continue?</string>
|
||||||
|
@ -202,14 +202,14 @@
|
||||||
<string name="settings_meta_report_bug">Report a bug</string>
|
<string name="settings_meta_report_bug">Report a bug</string>
|
||||||
|
|
||||||
<string name="dialog_report_bug_title">Report a bug</string>
|
<string name="dialog_report_bug_title">Report a bug</string>
|
||||||
<string name="dialog_report_bug_info">Thank you for helping to improve µLauncher!\nPlease consider adding the following information to your bug report:</string>
|
<string name="dialog_report_bug_info">Thank you for helping to improve μLauncher!\nPlease consider adding the following information to your bug report:</string>
|
||||||
<string name="dialog_report_bug_button_clipboard">Copy to clipboard</string>
|
<string name="dialog_report_bug_button_clipboard">Copy to clipboard</string>
|
||||||
<string name="dialog_report_bug_security_info">Please do not report security vulnerabilities publicly on GitHub, but use the following instead:</string>
|
<string name="dialog_report_bug_security_info">Please do not report security vulnerabilities publicly on GitHub, but use the following instead:</string>
|
||||||
<string name="dialog_report_bug_button_security">Report a security vulnerability</string>
|
<string name="dialog_report_bug_button_security">Report a security vulnerability</string>
|
||||||
<string name="dialog_report_bug_create_report">Create report</string>
|
<string name="dialog_report_bug_create_report">Create report</string>
|
||||||
|
|
||||||
<string name="settings_meta_fork_contact">Contact the developer of the fork</string>
|
<string name="settings_meta_fork_contact">Contact the developer of the fork</string>
|
||||||
<string name="settings_meta_join_chat">Join µLauncher chat</string>
|
<string name="settings_meta_join_chat">Join μLauncher chat</string>
|
||||||
<string name="settings_meta_donate">Donate</string>
|
<string name="settings_meta_donate">Donate</string>
|
||||||
|
|
||||||
<string name="settings_meta_privacy">Privacy Policy</string>
|
<string name="settings_meta_privacy">Privacy Policy</string>
|
||||||
|
@ -246,7 +246,7 @@
|
||||||
<string name="list_apps_search_hint">Search</string>
|
<string name="list_apps_search_hint">Search</string>
|
||||||
<string name="list_apps_search_hint_no_auto_launch">Search (no auto launch)</string>
|
<string name="list_apps_search_hint_no_auto_launch">Search (no auto launch)</string>
|
||||||
|
|
||||||
<string name="list_other_settings">µLauncher Settings</string>
|
<string name="list_other_settings">μLauncher Settings</string>
|
||||||
<string name="list_other_list">All Applications</string>
|
<string name="list_other_list">All Applications</string>
|
||||||
<string name="list_other_list_favorites">Favorite Applications</string>
|
<string name="list_other_list_favorites">Favorite Applications</string>
|
||||||
<string name="list_other_list_private_space">Private Space</string>
|
<string name="list_other_list_private_space">Private Space</string>
|
||||||
|
@ -274,22 +274,29 @@
|
||||||
-
|
-
|
||||||
-->
|
-->
|
||||||
<string name="tutorial_title">Tutorial</string>
|
<string name="tutorial_title">Tutorial</string>
|
||||||
<string name="tutorial_start_text">Take a few seconds to learn how to use this Launcher!</string>
|
<string name="tutorial_start_text">👋\n\nTake a few seconds to learn how to use this Launcher!</string>
|
||||||
|
|
||||||
<string name="tutorial_concept_title">Concept</string>
|
<string name="tutorial_concept_title">Concept</string>
|
||||||
<string name="tutorial_concept_text">Launcher is designed to be minimal, efficient and free of distraction. It is free of payments, ads and tracking services.</string>
|
<string name="tutorial_concept_text">μLauncher is designed to be minimal, efficient and free of distraction.
|
||||||
<string name="tutorial_concept_text_2">The app is open-source (MIT license) and available on GitHub! Make sure to check out the repository!</string>
|
\n\nIt contains no ads and collects no data.</string>
|
||||||
|
<string name="tutorial_concept_text_2">It is free software (MIT license)!\nMake sure to check out the repository!</string>
|
||||||
|
<string name="tutorial_concept_label_version">Version</string>
|
||||||
|
|
||||||
<string name="tutorial_usage_title">Usage</string>
|
<string name="tutorial_usage_title">Usage</string>
|
||||||
<string name="tutorial_usage_text">Your home screen contains the local date and time. No distraction.</string>
|
<string name="tutorial_usage_text">Your home screen contains the local date and time. No distraction.</string>
|
||||||
<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>
|
<string name="tutorial_usage_text_2">You can launch your most important apps with touch gestures or button presses.</string>
|
||||||
|
|
||||||
|
<string name="tutorial_app_list_title">All Apps</string>
|
||||||
|
<string name="tutorial_app_list_text">You can quickly search through all apps in the app list.\n\nSwipe up to open it, or bind it to a different gesture.</string>
|
||||||
|
<string name="tutorial_app_list_text_2">Once only one app matches, it launches automatically.\nThis can be disabled by prefixing the query with a space.</string>
|
||||||
|
|
||||||
|
|
||||||
<string name="tutorial_setup_title">Setup</string>
|
<string name="tutorial_setup_title">Setup</string>
|
||||||
<string name="tutorial_setup_text">We chose some default apps for you. You can change them now if you want to:</string>
|
<string name="tutorial_setup_text">We chose some default apps for you. You can change them now if you want to:</string>
|
||||||
<string name="tutorial_setup_text_2">You can also change your selection later.</string>
|
<string name="tutorial_setup_text_2">You can also change your selection later.</string>
|
||||||
|
|
||||||
<string name="tutorial_finish_title">Let\'s go!</string>
|
<string name="tutorial_finish_title">Let\'s go!</string>
|
||||||
<string name="tutorial_finish_text">You are ready to get started! I hope this is of great value to you! - Finn (who made Launcher) \tand Josia (who made some improvements and maintains the fork μLauncher)</string>
|
<string name="tutorial_finish_text">You are ready to get started!\n\nI hope this is of great value to you!\n\n- Finn (who made Launcher) and Josia (who made some improvements and maintains the fork μLauncher)</string>
|
||||||
<string name="tutorial_finish_button">Start</string>
|
<string name="tutorial_finish_button">Start</string>
|
||||||
|
|
||||||
|
|
||||||
|
@ -301,7 +308,7 @@
|
||||||
<string name="snackbar_app_hidden">App hidden. You can make it visible again in settings.</string>
|
<string name="snackbar_app_hidden">App hidden. You can make it visible again in settings.</string>
|
||||||
<string name="undo">Undo</string>
|
<string name="undo">Undo</string>
|
||||||
<string name="list_other_expand_settings_panel">Quick Settings</string>
|
<string name="list_other_expand_settings_panel">Quick Settings</string>
|
||||||
<string name="toast_device_admin_not_enabled">µLauncher needs to be a device admin in order to lock the screen.</string>
|
<string name="toast_device_admin_not_enabled">μLauncher needs to be a device admin in order to lock the screen.</string>
|
||||||
<string name="device_admin_explanation">This is required for the lock screen action.</string>
|
<string name="device_admin_explanation">This is required for the lock screen action.</string>
|
||||||
<string name="device_admin_description">Enable the lock screen action</string>
|
<string name="device_admin_description">Enable the lock screen action</string>
|
||||||
<string name="alert_no_torch_found">No camera with torch detected.</string>
|
<string name="alert_no_torch_found">No camera with torch detected.</string>
|
||||||
|
@ -311,18 +318,18 @@
|
||||||
<string name="toast_private_space_locked">Private space locked</string>
|
<string name="toast_private_space_locked">Private space locked</string>
|
||||||
<string name="toast_private_space_unlocked">Private space unlocked</string>
|
<string name="toast_private_space_unlocked">Private space unlocked</string>
|
||||||
<string name="toast_private_space_not_available">Private space is not available</string>
|
<string name="toast_private_space_not_available">Private space is not available</string>
|
||||||
<string name="toast_private_space_default_home_screen">µLauncher needs to be the default home screen to access private space.</string>
|
<string name="toast_private_space_default_home_screen">μLauncher needs to be the default home screen to access private space.</string>
|
||||||
<string name="tooltip_lock_private_space">Lock private space</string>
|
<string name="tooltip_lock_private_space">Lock private space</string>
|
||||||
<string name="tooltip_unlock_private_space">Unlock private space</string>
|
<string name="tooltip_unlock_private_space">Unlock private space</string>
|
||||||
<string name="toast_lock_screen_not_supported">Error: Locking the screen using accessibility is not supported on this device. Please use device admin instead.</string>
|
<string name="toast_lock_screen_not_supported">Error: Locking the screen using accessibility is not supported on this device. Please use device admin instead.</string>
|
||||||
<string name="accessibility_service_name">µLauncher - lock screen</string>
|
<string name="accessibility_service_name">μLauncher - lock screen</string>
|
||||||
<string name="accessibility_service_description">
|
<string name="accessibility_service_description">
|
||||||
Setting µLauncher as an accessibility service allows it to lock the screen.
|
Setting μLauncher as an accessibility service allows it to lock the screen.
|
||||||
Note that excessive permissions are required. You should never grant such permissions lightly to any app.
|
Note that excessive permissions are required. You should never grant such permissions lightly to any app.
|
||||||
|
|
||||||
µLauncher will use the accessibility service only for locking the screen. You can check the source code to make sure.
|
μLauncher will use the accessibility service only for locking the screen. You can check the source code to make sure.
|
||||||
|
|
||||||
Note that locking the screen can also be accomplished by granting µLauncher device administrator permissions. However that method doesn\'t work with fingerprint and face unlock.
|
Note that locking the screen can also be accomplished by granting μLauncher device administrator permissions. However that method doesn\'t work with fingerprint and face unlock.
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
|
|
||||||
|
@ -340,7 +347,7 @@
|
||||||
|
|
||||||
<h3>Accessibility Service</h3>
|
<h3>Accessibility Service</h3>
|
||||||
Requires excessive privileges.
|
Requires excessive privileges.
|
||||||
µLauncher will use those privileges only for locking the screen.
|
μLauncher will use those privileges only for locking the screen.
|
||||||
<br/>
|
<br/>
|
||||||
(You really should not trust a random app you just downloaded with such a claim, but you can check the <a href=\"https://github.com/jrpie/Launcher\">source code</a>.)
|
(You really should not trust a random app you just downloaded with such a claim, but you can check the <a href=\"https://github.com/jrpie/Launcher\">source code</a>.)
|
||||||
<br/>
|
<br/>
|
||||||
|
@ -363,11 +370,11 @@
|
||||||
<string name="dialog_select_color_ok">Ok</string>
|
<string name="dialog_select_color_ok">Ok</string>
|
||||||
<string name="dialog_select_color_color_hex">Color</string>
|
<string name="dialog_select_color_color_hex">Color</string>
|
||||||
<string name="dialog_choose_color_title">Choose color</string>
|
<string name="dialog_choose_color_title">Choose color</string>
|
||||||
<string name="dialog_consent_accessibility_privileges">I am aware that this will grant far-reaching privileges to µLauncher.</string>
|
<string name="dialog_consent_accessibility_privileges">I am aware that this will grant far-reaching privileges to μLauncher.</string>
|
||||||
<string name="dialog_consent_accessibility_other_options">I am aware that other options exist (using device administrator privileges or the power button).</string>
|
<string name="dialog_consent_accessibility_other_options">I am aware that other options exist (using device administrator privileges or the power button).</string>
|
||||||
<string name="dialog_consent_accessibility_consent">I consent to µLauncher using the accessibility service to provide functionality unrelated to accessibility.</string>
|
<string name="dialog_consent_accessibility_consent">I consent to μLauncher using the accessibility service to provide functionality unrelated to accessibility.</string>
|
||||||
<string name="dialog_consent_accessibility_data_collection">I consent to µLauncher not collecting any data.</string>
|
<string name="dialog_consent_accessibility_data_collection">I consent to μLauncher not collecting any data.</string>
|
||||||
<string name="dialog_consent_accessibility_text"><![CDATA[You are about to activate the accessibility service. This will grant <strong>far-reaching privileges</strong> to µLauncher.<br/>µLauncher will use these privileges <strong>only to lock the screen</strong>. µLauncher <strong>will never collect any data</strong>. In particular, µLauncher does not use the accessibility service to collect any data.]]></string>
|
<string name="dialog_consent_accessibility_text"><![CDATA[You are about to activate the accessibility service. This will grant <strong>far-reaching privileges</strong> to μLauncher.<br/>μLauncher will use these privileges <strong>only to lock the screen</strong>. μLauncher <strong>will never collect any data</strong>. In particular, μLauncher does not use the accessibility service to collect any data.]]></string>
|
||||||
<string name="dialog_consent_accessibility_title">Activating the Accessibility Service</string>
|
<string name="dialog_consent_accessibility_title">Activating the Accessibility Service</string>
|
||||||
<string name="dialog_consent_accessibility_ok">Activate Accessibility Service</string>
|
<string name="dialog_consent_accessibility_ok">Activate Accessibility Service</string>
|
||||||
<string name="dialog_cancel">Cancel</string>
|
<string name="dialog_cancel">Cancel</string>
|
||||||
|
|
13
fastlane/metadata/android/en-US/changelogs/40.txt
Normal file
13
fastlane/metadata/android/en-US/changelogs/40.txt
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
* Pinned shortcuts can now be added to app list
|
||||||
|
* New action: adjust volume (thank you, zabrinu!)
|
||||||
|
* Added option to hide navigation bar (thank you, acanoe!)
|
||||||
|
* Added option to reverse the app list (thank you, spacefrogg!)
|
||||||
|
* Show question mark icon when an unknown app is bound to a gesture
|
||||||
|
|
||||||
|
* Improved German translation
|
||||||
|
* Improved Portuguese translation (thank you, "Vossa Excelencia"!)
|
||||||
|
|
||||||
|
* Fixed detection of long click gesture
|
||||||
|
* Fixed blurred text in dialogs
|
||||||
|
* Fixed a crash when private space is locked after app restarts (thank you, alexytomi!)
|
||||||
|
* Fixed some additional bugs
|
22
fastlane/metadata/android/ja-JP/full_description.txt
Normal file
22
fastlane/metadata/android/ja-JP/full_description.txt
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
µLauncherは、スワイプジェスチャとタップだけでアプリを起動できるホーム画面です。
|
||||||
|
必要最小限で、効率的で、気が散らない。
|
||||||
|
|
||||||
|
ホーム画面には日付、時刻、壁紙のみが表示されます。
|
||||||
|
戻るを押すか上にスワイプすると(これは設定可能)、
|
||||||
|
インストールされているすべてのアプリのリストが開き、効率的に検索できます。
|
||||||
|
|
||||||
|
|
||||||
|
このアプリは、Finn M Glas氏のアプリ <a href="https://f-droid.org/packages/com.finnmglas.launcher/">Launcher</a> のフォークです。
|
||||||
|
|
||||||
|
機能:
|
||||||
|
* 35種のジェスチャーにアクションを設定できます。
|
||||||
|
* アクションは以下のいずれかになります:
|
||||||
|
- アプリを起動
|
||||||
|
- アプリを表示
|
||||||
|
- お気に入りのアプリを表示
|
||||||
|
- ボリュームを上げる/下げる
|
||||||
|
- 音楽: 次/前の曲
|
||||||
|
- 画面をロック
|
||||||
|
- ライトの切り替え
|
||||||
|
- 通知 / クイック設定を表示
|
||||||
|
* 仕事用プロファイルに対応しているので、Shelterなどのアプリも使えます。
|
1
fastlane/metadata/android/ja-JP/short_description.txt
Normal file
1
fastlane/metadata/android/ja-JP/short_description.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
気が散らない、最小限の Android ホーム画面。
|
1
fastlane/metadata/android/ja-JP/title.txt
Normal file
1
fastlane/metadata/android/ja-JP/title.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
µLauncher
|
Loading…
Add table
Reference in a new issue