mirror of
https://github.com/jrpie/Launcher.git
synced 2025-02-23 06:21:31 +01:00
Merge pull request #13 from finnmglas/fix/black-screen
Clean up code and translate
This commit is contained in:
commit
3379df5f11
18 changed files with 589 additions and 575 deletions
Binary file not shown.
Binary file not shown.
|
@ -1,6 +1,5 @@
|
|||
package com.finnmglas.launcher
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
|
@ -18,11 +17,8 @@ class ChooseActivity : AppCompatActivity() {
|
|||
|
||||
val UNINSTALL_REQUEST_CODE = 1
|
||||
|
||||
fun backHome(view: View) {
|
||||
finish()
|
||||
}
|
||||
/** Activity Lifecycle functions */
|
||||
|
||||
@SuppressLint("SetTextI18n") // I do not care
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
|
@ -36,13 +32,13 @@ class ChooseActivity : AppCompatActivity() {
|
|||
val forApp = bundle.getString("forApp") // which app we choose
|
||||
|
||||
if (action == "launch")
|
||||
heading.text = "Launch Apps"
|
||||
heading.text = getString(R.string.choose_title_launch)
|
||||
else if (action == "pick") {
|
||||
heading.text = "Choose App"
|
||||
subheading.text = forApp
|
||||
heading.text = getString(R.string.choose_title)
|
||||
subheading.text = forApp // TODO: make translatable
|
||||
}
|
||||
else if (action == "uninstall")
|
||||
heading.text = "Uninstall Apps"
|
||||
heading.text = getString(R.string.choose_title_remove)
|
||||
|
||||
/* Build Layout */
|
||||
|
||||
|
@ -95,28 +91,21 @@ class ChooseActivity : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onActivityResult(
|
||||
requestCode: Int,
|
||||
resultCode: Int,
|
||||
data: Intent?
|
||||
) {
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
if (requestCode == UNINSTALL_REQUEST_CODE) {
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
Toast.makeText(
|
||||
this,
|
||||
"Removed the selected application",
|
||||
Toast.LENGTH_LONG
|
||||
).show()
|
||||
Toast.makeText(this, getString(R.string.choose_removed_toast), Toast.LENGTH_LONG).show()
|
||||
finish()
|
||||
} else if (resultCode == Activity.RESULT_FIRST_USER) {
|
||||
Toast.makeText(
|
||||
this,
|
||||
"Can't remove this app",
|
||||
Toast.LENGTH_LONG
|
||||
).show()
|
||||
Toast.makeText(this, getString(R.string.choose_not_removed_toast), Toast.LENGTH_LONG).show()
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** onClick functions */
|
||||
|
||||
fun backHome(view: View) { finish() }
|
||||
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.finnmglas.launcher
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.os.Bundle
|
||||
|
@ -30,12 +29,13 @@ fun View.blink(
|
|||
|
||||
class FirstStartupActivity : AppCompatActivity(){
|
||||
|
||||
var menuNumber = 0
|
||||
var defaultApps = mutableListOf<String>()
|
||||
/** Variables for this activity */
|
||||
|
||||
/* Overrides */
|
||||
private var menuNumber = 0
|
||||
private var defaultApps = mutableListOf<String>()
|
||||
|
||||
/** Activity Lifecycle functions */
|
||||
|
||||
@SuppressLint("SetTextI18n") // I do not care
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
|
@ -48,14 +48,14 @@ class FirstStartupActivity : AppCompatActivity(){
|
|||
|
||||
setContentView(R.layout.activity_firststartup)
|
||||
|
||||
continue_text.blink() // animate
|
||||
hintText.blink() // animate
|
||||
loadMenu(this)
|
||||
|
||||
val sharedPref = this.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE)
|
||||
defaultApps = resetSettings(sharedPref, this) // UP, DOWN, RIGHT, LEFT, VOLUME_UP, VOLUME_DOWN
|
||||
}
|
||||
|
||||
fun clickAnywhere(view: View){
|
||||
menuNumber++
|
||||
loadMenu(this)
|
||||
}
|
||||
/** Touch- and Key-related functions to navigate */
|
||||
|
||||
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
|
||||
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){
|
||||
|
@ -73,68 +73,30 @@ class FirstStartupActivity : AppCompatActivity(){
|
|||
return true
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n") // I don't care! (Yet)
|
||||
fun loadMenu(context :Context) { // Context needed for packageManager
|
||||
fun clickAnywhere(view: View){
|
||||
menuNumber++
|
||||
loadMenu(this)
|
||||
}
|
||||
|
||||
val sharedPref = this.getSharedPreferences(
|
||||
getString(R.string.preference_file_key), Context.MODE_PRIVATE)
|
||||
/** Touch- and Key-related functions to navigate */
|
||||
|
||||
// Intro
|
||||
if (menuNumber == 0){
|
||||
heading.text = ""
|
||||
description.text = "Take a few seconds to learn how to use this Launcher!\n\n"
|
||||
continue_text.text = "-- Tap anywhere to continue --"
|
||||
private fun loadMenu(context :Context) { // Context needed for packageManager
|
||||
|
||||
val intro = resources.getStringArray(R.array.intro)
|
||||
|
||||
if (menuNumber < intro.size){
|
||||
val entry = intro[menuNumber].split("|").toTypedArray() //heading|infoText|hintText|size
|
||||
|
||||
heading.text = entry[0]
|
||||
if (entry[4] == "1")infoText.text = String.format(entry[1],
|
||||
defaultApps[0], defaultApps[1], defaultApps[2], defaultApps[3], defaultApps[4], defaultApps[5])
|
||||
else infoText.text = entry[1]
|
||||
hintText.text = entry[2]
|
||||
infoText.setTextSize(TypedValue.COMPLEX_UNIT_SP, entry[3].toFloat())
|
||||
|
||||
} else { // End intro
|
||||
val sharedPref = this.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE)
|
||||
|
||||
defaultApps = resetSettings(sharedPref, context) // UP, DOWN, RIGHT, LEFT, VOLUME_UP, VOLUME_DOWN
|
||||
}
|
||||
// Concept
|
||||
else if (menuNumber == 1){
|
||||
heading.text = "Concept"
|
||||
description.text = "It is designed to be minimal, efficient and free of distraction."
|
||||
}
|
||||
else if (menuNumber == 2){
|
||||
heading.text = "Concept"
|
||||
description.text = "It is free of payments, ads and tracking services."
|
||||
continue_text.text = "-- Tap anywhere to continue --"
|
||||
}
|
||||
// Usage
|
||||
else if (menuNumber == 3){
|
||||
heading.text = "Usage"
|
||||
description.text = "Your home screen contains the local date and time. No distraction."
|
||||
continue_text.text = "-- Use volume keys to navigate --"
|
||||
}
|
||||
else if (menuNumber == 4){
|
||||
heading.text = "Usage"
|
||||
description.text = "You can open your apps with a single swipe or button press."
|
||||
}
|
||||
// Setup
|
||||
else if (menuNumber == 5){
|
||||
heading.text = "Setup"
|
||||
description.setTextSize(TypedValue.COMPLEX_UNIT_SP,36F)
|
||||
description.text = "We have set up some default actions for you..."
|
||||
}
|
||||
else if (menuNumber == 6){
|
||||
description.setTextSize(TypedValue.COMPLEX_UNIT_SP,18F)
|
||||
description.text = "Swipe Up: Open a Browser (" + defaultApps[0] + ")\n\n" +
|
||||
"Swipe Down: Open internal Search App (" + defaultApps[1] + ")\n\n" +
|
||||
"Swipe Right: Open Mail (" + defaultApps[2] + ")\n\n" +
|
||||
"Swipe Left: Open Calendar (" + defaultApps[3] + ")\n\n" +
|
||||
"Volume Up: Open a messenger (" + defaultApps[4] + ")\n\n" +
|
||||
"Volume Down: Open Utilities (" + defaultApps[5] + ")"
|
||||
}
|
||||
else if (menuNumber == 7){
|
||||
heading.text = "Setup"
|
||||
description.setTextSize(TypedValue.COMPLEX_UNIT_SP,36F)
|
||||
description.text = "You can choose your own apps:\n\nOpen settings by tapping and holding the home screen."
|
||||
continue_text.text = "-- Use volume keys to navigate --"
|
||||
}
|
||||
else if (menuNumber == 8){
|
||||
heading.text = ""
|
||||
description.text = "You are ready to get started!\n\n I hope this provides great value to you!\n\n- Finn M Glas\n\n"
|
||||
continue_text.text = "-- Launcher by Finn M Glas --"
|
||||
}
|
||||
// End Intro
|
||||
else {
|
||||
val editor: SharedPreferences.Editor = sharedPref.edit()
|
||||
editor.putBoolean("startedBefore", true) // never run this again
|
||||
editor.putLong("firstStartup", System.currentTimeMillis() / 1000L) // record first startup timestamp
|
||||
|
@ -142,6 +104,5 @@ class FirstStartupActivity : AppCompatActivity(){
|
|||
|
||||
finish()
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
package com.finnmglas.launcher;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Typeface;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class FontAwesome extends androidx.appcompat.widget.AppCompatTextView {
|
||||
|
||||
public FontAwesome(Context context, AttributeSet attrs, int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
init();
|
||||
}
|
||||
|
||||
public FontAwesome(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public FontAwesome(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
|
||||
//Font name should not contain "/".
|
||||
Typeface tf = Typeface.createFromAsset(getContext().getAssets(),
|
||||
"fonts/fa-solid-900.ttf");
|
||||
setTypeface(tf);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
package com.finnmglas.launcher;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Typeface;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
public class FontAwesomeBrand extends androidx.appcompat.widget.AppCompatTextView {
|
||||
|
||||
public FontAwesomeBrand(Context context, AttributeSet attrs, int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
init();
|
||||
}
|
||||
|
||||
public FontAwesomeBrand(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public FontAwesomeBrand(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
|
||||
//Font name should not contain "/".
|
||||
Typeface tf = Typeface.createFromAsset(getContext().getAssets(),
|
||||
"fonts/fa-brand-400.ttf");
|
||||
setTypeface(tf);
|
||||
}
|
||||
|
||||
}
|
156
app/src/main/java/com/finnmglas/launcher/Functions.kt
Normal file
156
app/src/main/java/com/finnmglas/launcher/Functions.kt
Normal file
|
@ -0,0 +1,156 @@
|
|||
package com.finnmglas.launcher
|
||||
|
||||
import android.app.Activity
|
||||
import android.app.AlertDialog
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.widget.Toast
|
||||
|
||||
/** Parsing functions */
|
||||
|
||||
// Related question: https://stackoverflow.com/q/3013655/12787264
|
||||
fun parseStringMap(stringArrayResourceId: Int, context: Context): HashMap<String, String>? {
|
||||
val stringArray: Array<String> =
|
||||
context.resources.getStringArray(stringArrayResourceId)
|
||||
val outputArray = HashMap<String, String>(stringArray.size)
|
||||
for (entry in stringArray) {
|
||||
val splitResult = entry.split("|").toTypedArray()
|
||||
outputArray.put(splitResult[0], splitResult[1])
|
||||
}
|
||||
return outputArray
|
||||
}
|
||||
|
||||
/** Activity related */
|
||||
|
||||
fun isInstalled(uri: String, context: Context): Boolean {
|
||||
try {
|
||||
context.packageManager.getPackageInfo(uri, PackageManager.GET_ACTIVITIES)
|
||||
return true
|
||||
} catch (e: PackageManager.NameNotFoundException) {
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
private fun getIntent(packageName: String, context: Context): Intent? {
|
||||
val intent: Intent? = context.packageManager.getLaunchIntentForPackage(packageName)
|
||||
intent?.addCategory(Intent.CATEGORY_LAUNCHER)
|
||||
return intent
|
||||
}
|
||||
|
||||
fun launchApp(packageName: String, context: Context) {
|
||||
val intent1 = getIntent(packageName, context)
|
||||
|
||||
if (intent1 != null) {
|
||||
context.startActivity(intent1)
|
||||
|
||||
if (context is Activity) {
|
||||
context.overridePendingTransition(0, 0)
|
||||
}
|
||||
} else {
|
||||
if (isInstalled(packageName, context)){
|
||||
|
||||
AlertDialog.Builder(context)
|
||||
.setTitle(context.getString(R.string.alert_cant_open_title))
|
||||
.setMessage(context.getString(R.string.alert_cant_open_message))
|
||||
.setPositiveButton(android.R.string.yes,
|
||||
DialogInterface.OnClickListener { dialog, which ->
|
||||
openAppSettings(packageName, context)
|
||||
})
|
||||
.setNegativeButton(android.R.string.no, null)
|
||||
.setIcon(android.R.drawable.ic_dialog_info)
|
||||
.show()
|
||||
} else {
|
||||
Toast.makeText( context, context.getString(R.string.toast_cant_open_message), Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun openNewTabWindow(urls: String, context : Context) {
|
||||
val uris = Uri.parse(urls)
|
||||
val intents = Intent(Intent.ACTION_VIEW, uris)
|
||||
val b = Bundle()
|
||||
b.putBoolean("new_window", true)
|
||||
intents.putExtras(b)
|
||||
context.startActivity(intents)
|
||||
}
|
||||
|
||||
/** Settings related functions */
|
||||
|
||||
fun openAppSettings(pkg :String, context:Context){
|
||||
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
||||
intent.data = Uri.parse("package:$pkg")
|
||||
context.startActivity(intent)
|
||||
}
|
||||
|
||||
fun loadSettings(sharedPref : SharedPreferences){
|
||||
upApp = sharedPref.getString("action_upApp", "").toString()
|
||||
downApp = sharedPref.getString("action_downApp", "").toString()
|
||||
rightApp = sharedPref.getString("action_rightApp", "").toString()
|
||||
leftApp = sharedPref.getString("action_leftApp", "").toString()
|
||||
volumeUpApp = sharedPref.getString("action_volumeUpApp", "").toString()
|
||||
volumeDownApp = sharedPref.getString("action_volumeDownApp", "").toString()
|
||||
|
||||
calendarApp = sharedPref.getString("action_calendarApp", "").toString()
|
||||
clockApp = sharedPref.getString("action_clockApp", "").toString()
|
||||
}
|
||||
|
||||
fun resetSettings(sharedPref : SharedPreferences, context: Context) : MutableList<String>{
|
||||
val defaultList :MutableList<String> = mutableListOf<String>()
|
||||
|
||||
val editor: SharedPreferences.Editor = sharedPref.edit()
|
||||
|
||||
val (chosenUpName, chosenUpPackage) = pickDefaultApp("action_upApp", context)
|
||||
editor.putString("action_upApp", chosenUpPackage)
|
||||
defaultList.add(chosenUpName)
|
||||
|
||||
val (chosenDownName, chosenDownPackage) = pickDefaultApp("action_downApp", context)
|
||||
editor.putString("action_downApp", chosenDownPackage)
|
||||
defaultList.add(chosenDownName)
|
||||
|
||||
val (chosenRightName, chosenRightPackage) = pickDefaultApp("action_rightApp", context)
|
||||
editor.putString("action_rightApp", chosenRightPackage)
|
||||
defaultList.add(chosenRightName)
|
||||
|
||||
val (chosenLeftName, chosenLeftPackage) = pickDefaultApp("action_leftApp", context)
|
||||
editor.putString("action_leftApp", chosenLeftPackage)
|
||||
editor.putString("action_calendarApp", chosenLeftPackage)
|
||||
defaultList.add(chosenLeftName)
|
||||
|
||||
val (chosenVolumeUpName, chosenVolumeUpPackage) = pickDefaultApp("action_volumeUpApp", context)
|
||||
editor.putString("action_volumeUpApp", chosenVolumeUpPackage)
|
||||
defaultList.add(chosenVolumeUpName)
|
||||
|
||||
val (chosenVolumeDownName, chosenVolumeDownPackage) = pickDefaultApp("action_volumeDownApp", context)
|
||||
editor.putString("action_volumeDownApp", chosenVolumeDownPackage)
|
||||
defaultList.add(chosenVolumeDownName)
|
||||
|
||||
val (_, chosenClockPackage) = pickDefaultApp("action_clockApp", context)
|
||||
editor.putString("action_clockApp", chosenClockPackage)
|
||||
|
||||
editor.apply()
|
||||
|
||||
return defaultList // UP, DOWN, RIGHT, LEFT, VOLUME_UP, VOLUME_DOWN
|
||||
}
|
||||
|
||||
fun pickDefaultApp(action: String, context: Context) : Pair<String, String>{
|
||||
val arrayResource = when (action) {
|
||||
"action_upApp" -> R.array.default_up
|
||||
"action_downApp" -> R.array.default_down
|
||||
"action_rightApp" -> R.array.default_right
|
||||
"action_leftApp" -> R.array.default_left
|
||||
"action_volumeUpApp" -> R.array.default_volume_up
|
||||
"action_volumeDownApp" -> R.array.default_volume_down
|
||||
"action_clockApp" -> R.array.default_clock
|
||||
else -> return Pair(context.getString(R.string.none_found), "") // just prevent crashing on unknown input
|
||||
}
|
||||
|
||||
val defaultAppsMap = parseStringMap(arrayResource, context)
|
||||
for (item in defaultAppsMap!!) if (isInstalled(item.key, context)) return Pair(item.value, item.key)
|
||||
return Pair(context.getString(R.string.none_found), "")
|
||||
}
|
|
@ -1,15 +1,10 @@
|
|||
package com.finnmglas.launcher
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.AlertDialog
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.DisplayMetrics
|
||||
import android.view.*
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.GestureDetectorCompat
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
|
@ -18,7 +13,7 @@ import java.util.*
|
|||
import kotlin.concurrent.fixedRateTimer
|
||||
import kotlin.math.abs
|
||||
|
||||
// App Launch Actions
|
||||
/** Variables for all of the app */
|
||||
var upApp = ""
|
||||
var downApp = ""
|
||||
var rightApp = ""
|
||||
|
@ -30,91 +25,16 @@ var calendarApp = ""
|
|||
var clockApp = ""
|
||||
|
||||
class MainActivity : AppCompatActivity(),
|
||||
GestureDetector.OnGestureListener,
|
||||
GestureDetector.OnDoubleTapListener {
|
||||
GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {
|
||||
|
||||
/** Variables for this activity */
|
||||
private lateinit var mDetector: GestureDetectorCompat
|
||||
|
||||
// get device dimensions
|
||||
private val displayMetrics = DisplayMetrics()
|
||||
private var clockTimer = Timer()
|
||||
|
||||
private fun getIntent(packageName: String): Intent? {
|
||||
val intent: Intent? = packageManager.getLaunchIntentForPackage(packageName)
|
||||
intent?.addCategory(Intent.CATEGORY_LAUNCHER)
|
||||
return intent
|
||||
}
|
||||
|
||||
private fun launchApp(packageName: String) {
|
||||
val intent1 = getIntent(packageName)
|
||||
|
||||
if (intent1 != null) {
|
||||
applicationContext.startActivity(intent1)
|
||||
overridePendingTransition(0, 0)
|
||||
} else {
|
||||
if (isInstalled(packageName, this)){
|
||||
|
||||
AlertDialog.Builder(this)
|
||||
.setTitle("Can't open app")
|
||||
.setMessage("Want to change its settings ('add it to the apps screen')?")
|
||||
.setPositiveButton(android.R.string.yes,
|
||||
DialogInterface.OnClickListener { dialog, which ->
|
||||
openAppSettings(packageName, this)
|
||||
})
|
||||
.setNegativeButton(android.R.string.no, null)
|
||||
.setIcon(android.R.drawable.ic_dialog_info)
|
||||
.show()
|
||||
} else {
|
||||
Toast.makeText(
|
||||
this,
|
||||
"Open settings to choose an app for this action",
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun launchCalendar(v: View) {
|
||||
launchApp(calendarApp)
|
||||
}
|
||||
|
||||
fun launchClock(v: View) {
|
||||
launchApp(clockApp)
|
||||
}
|
||||
|
||||
fun launchUpApp() {
|
||||
launchApp(upApp)
|
||||
}
|
||||
|
||||
fun launchDownApp() {
|
||||
launchApp(downApp)
|
||||
}
|
||||
|
||||
fun lauchLeftApp() {
|
||||
launchApp(leftApp)
|
||||
}
|
||||
|
||||
fun lauchRightApp() {
|
||||
launchApp(rightApp)
|
||||
}
|
||||
|
||||
fun lauchVolumeUpApp() {
|
||||
launchApp(volumeUpApp)
|
||||
}
|
||||
|
||||
fun lauchVolumeDownApp() {
|
||||
launchApp(volumeDownApp)
|
||||
}
|
||||
|
||||
/* Overrides */
|
||||
|
||||
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
|
||||
if (keyCode == KeyEvent.KEYCODE_BACK) return true
|
||||
else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) lauchVolumeUpApp()
|
||||
else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) lauchVolumeDownApp()
|
||||
return true
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n") // I do not care
|
||||
/** Activity Lifecycle functions */
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
|
@ -126,8 +46,6 @@ GestureDetector.OnDoubleTapListener {
|
|||
if (!sharedPref.getBoolean("startedBefore", false))
|
||||
startActivity(Intent(this, FirstStartupActivity::class.java))
|
||||
|
||||
loadSettings(sharedPref)
|
||||
|
||||
// Flags
|
||||
window.setFlags(
|
||||
WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
||||
|
@ -135,40 +53,54 @@ GestureDetector.OnDoubleTapListener {
|
|||
)
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
|
||||
val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
|
||||
val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault())
|
||||
|
||||
fixedRateTimer("timer", false, 0L, 1000) {
|
||||
this@MainActivity.runOnUiThread {
|
||||
dateView.text = dateFormat.format(Date())
|
||||
timeView.text = timeFormat.format(Date()) // not " GMT"
|
||||
}
|
||||
}
|
||||
|
||||
setContentView(R.layout.activity_main)
|
||||
}
|
||||
|
||||
override fun onStart(){
|
||||
super.onStart()
|
||||
|
||||
// Preferences
|
||||
val sharedPref = this.getSharedPreferences(
|
||||
getString(R.string.preference_file_key), Context.MODE_PRIVATE)
|
||||
|
||||
loadSettings(sharedPref)
|
||||
|
||||
mDetector = GestureDetectorCompat(this, this)
|
||||
mDetector.setOnDoubleTapListener(this)
|
||||
}
|
||||
|
||||
override fun onTouchEvent(event: MotionEvent): Boolean {
|
||||
return if (mDetector.onTouchEvent(event)) {
|
||||
true
|
||||
} else {
|
||||
super.onTouchEvent(event)
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
|
||||
val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault())
|
||||
|
||||
clockTimer = fixedRateTimer("timer", true, 0L, 1000) {
|
||||
this@MainActivity.runOnUiThread {
|
||||
dateView.text = dateFormat.format(Date())
|
||||
timeView.text = timeFormat.format(Date())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDown(event: MotionEvent): Boolean {
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
clockTimer.cancel()
|
||||
}
|
||||
|
||||
/** Touch- and Key-related functions to start activities */
|
||||
|
||||
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
|
||||
if (keyCode == KeyEvent.KEYCODE_BACK) return true
|
||||
else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) launchApp(volumeUpApp, this)
|
||||
else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) launchApp(volumeDownApp, this)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onFling(
|
||||
e1: MotionEvent,
|
||||
e2: MotionEvent,
|
||||
differenceX: Float,
|
||||
differenceY: Float
|
||||
): Boolean {
|
||||
fun dateViewOnTouch(v: View) { launchApp(calendarApp, this) }
|
||||
fun timeViewOnTouch(v: View) { launchApp(clockApp, this) }
|
||||
|
||||
override fun onFling(e1: MotionEvent, e2: MotionEvent, dX: Float, dY: Float): Boolean {
|
||||
|
||||
windowManager.defaultDisplay.getMetrics(displayMetrics)
|
||||
val width = displayMetrics.widthPixels
|
||||
|
@ -177,55 +109,33 @@ GestureDetector.OnDoubleTapListener {
|
|||
val diffX = e1.x - e2.x
|
||||
val diffY = e1.y - e2.y
|
||||
|
||||
val strictness = 4 // of direction
|
||||
val strictness = 4 // how distinguished the swipe has to be to be accepted
|
||||
|
||||
/* Decide for an action */
|
||||
|
||||
if (diffY > height / 8 && abs(diffY) > strictness * abs(diffX)) launchUpApp()
|
||||
// Only open if the swipe was not from the phone edge
|
||||
else if (diffY < -height / 8 && abs(diffY) > strictness * abs(diffX) && e1.y > 100) launchDownApp()
|
||||
else if (diffX > width / 4 && abs(diffX) > strictness * abs(diffY)) lauchLeftApp()
|
||||
else if (diffX < -width / 4 && abs(diffX) > strictness * abs(diffY)) lauchRightApp()
|
||||
// Only open if the swipe was not from the phones top edge
|
||||
if (diffY < -height / 8 && abs(diffY) > strictness * abs(diffX) && e1.y > 100) launchApp(downApp, this)
|
||||
else if (diffY > height / 8 && abs(diffY) > strictness * abs(diffX)) launchApp(upApp, this)
|
||||
else if (diffX > width / 4 && abs(diffX) > strictness * abs(diffY)) launchApp(leftApp, this)
|
||||
else if (diffX < -width / 4 && abs(diffX) > strictness * abs(diffY)) launchApp(rightApp, this)
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
// Open Settings
|
||||
// Open Settings Activity
|
||||
override fun onLongPress(event: MotionEvent) {
|
||||
startActivity(Intent(this, SettingsActivity::class.java))
|
||||
}
|
||||
|
||||
override fun onScroll(
|
||||
e1: MotionEvent,
|
||||
e2: MotionEvent,
|
||||
diffX: Float,
|
||||
diffY: Float
|
||||
): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onShowPress(event: MotionEvent) {
|
||||
|
||||
}
|
||||
|
||||
override fun onSingleTapUp(event: MotionEvent): Boolean {
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onDoubleTap(event: MotionEvent): Boolean {
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onDoubleTapEvent(event: MotionEvent): Boolean {
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onSingleTapConfirmed(event: MotionEvent): Boolean {
|
||||
|
||||
return true
|
||||
override fun onTouchEvent(event: MotionEvent): Boolean {
|
||||
return if (mDetector.onTouchEvent(event)) { true } else { super.onTouchEvent(event) }
|
||||
}
|
||||
|
||||
/* TODO: Remove those. For now they are necessary
|
||||
* because this inherits from GestureDetector.OnGestureListener */
|
||||
override fun onDoubleTap(event: MotionEvent): Boolean { return true }
|
||||
override fun onDoubleTapEvent(event: MotionEvent): Boolean { return true }
|
||||
override fun onDown(event: MotionEvent): Boolean { return true }
|
||||
override fun onScroll(e1: MotionEvent, e2: MotionEvent, dX: Float, dY: Float): Boolean { return true }
|
||||
override fun onShowPress(event: MotionEvent) {}
|
||||
override fun onSingleTapUp(event: MotionEvent): Boolean { return true }
|
||||
override fun onSingleTapConfirmed(event: MotionEvent): Boolean { return true }
|
||||
}
|
||||
|
|
|
@ -1,154 +0,0 @@
|
|||
package com.finnmglas.launcher
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import android.provider.Settings
|
||||
import androidx.core.content.ContextCompat.startActivity
|
||||
|
||||
val none_msg = "None found"
|
||||
|
||||
fun isInstalled(uri: String, context: Context): Boolean {
|
||||
try {
|
||||
context.packageManager.getPackageInfo(uri, PackageManager.GET_ACTIVITIES)
|
||||
return true
|
||||
} catch (e: PackageManager.NameNotFoundException) {
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fun openAppSettings(pkg :String, context:Context){
|
||||
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
||||
intent.data = Uri.parse("package:$pkg")
|
||||
context.startActivity(intent)
|
||||
}
|
||||
|
||||
fun loadSettings(sharedPref : SharedPreferences){
|
||||
upApp = sharedPref.getString("action_upApp", "").toString()
|
||||
downApp = sharedPref.getString("action_downApp", "").toString()
|
||||
rightApp = sharedPref.getString("action_rightApp", "").toString()
|
||||
leftApp = sharedPref.getString("action_leftApp", "").toString()
|
||||
volumeUpApp = sharedPref.getString("action_volumeUpApp", "").toString()
|
||||
volumeDownApp = sharedPref.getString("action_volumeDownApp", "").toString()
|
||||
|
||||
calendarApp = sharedPref.getString("action_calendarApp", "").toString()
|
||||
clockApp = sharedPref.getString("action_clockApp", "").toString()
|
||||
}
|
||||
|
||||
// Default settings are set here.
|
||||
fun resetSettings(sharedPref : SharedPreferences, context: Context) : MutableList<String>{
|
||||
|
||||
val defaultList :MutableList<String> = mutableListOf<String>()
|
||||
|
||||
val editor: SharedPreferences.Editor = sharedPref.edit()
|
||||
|
||||
val (chosenUpName, chosenUpPackage) = pickDefaultUpApp(context)
|
||||
editor.putString("action_upApp", chosenUpPackage)
|
||||
defaultList.add(chosenUpName)
|
||||
|
||||
val (chosenDownName, chosenDownPackage) = pickDefaultDownApp(context)
|
||||
editor.putString("action_downApp", chosenDownPackage)
|
||||
defaultList.add(chosenDownName)
|
||||
|
||||
val (chosenRightName, chosenRightPackage) = pickDefaultRightApp(context)
|
||||
editor.putString("action_rightApp", chosenRightPackage)
|
||||
defaultList.add(chosenRightName)
|
||||
|
||||
val (chosenLeftName, chosenLeftPackage) = pickDefaultLeftApp(context)
|
||||
editor.putString("action_leftApp", chosenLeftPackage)
|
||||
editor.putString("action_calendarApp", chosenLeftPackage)
|
||||
defaultList.add(chosenLeftName)
|
||||
|
||||
val (chosenVolumeUpName, chosenVolumeUpPackage) = pickDefaultVolumeUpApp(context)
|
||||
editor.putString("action_volumeUpApp", chosenVolumeUpPackage)
|
||||
defaultList.add(chosenVolumeUpName)
|
||||
|
||||
val (chosenVolumeDownName, chosenVolumeDownPackage) = pickDefaultVolumeDownApp(context)
|
||||
editor.putString("action_volumeDownApp", chosenVolumeDownPackage)
|
||||
defaultList.add(chosenVolumeDownName)
|
||||
|
||||
// clockApp default
|
||||
editor.putString("action_clockApp", "com.sec.android.app.clockpackage")
|
||||
|
||||
editor.apply()
|
||||
|
||||
return defaultList // UP, DOWN, RIGHT, LEFT, VOLUME_UP, VOLUME_DOWN
|
||||
}
|
||||
|
||||
// Default upApps are Browsers
|
||||
fun pickDefaultUpApp(context :Context) : Pair<String, String>{
|
||||
if(isInstalled("org.mozilla.firefox", context))
|
||||
return Pair("Firefox", "org.mozilla.firefox")
|
||||
else if(isInstalled("com.android.chrome", context))
|
||||
return Pair("Chrome", "com.android.chrome")
|
||||
else if(isInstalled("com.sec.android.app.sbrowser", context))
|
||||
return Pair("Samsung Internet", "com.sec.android.app.sbrowser")
|
||||
else
|
||||
return Pair("None, as we were unable to find one.", "")
|
||||
}
|
||||
|
||||
// Default downApps are Internal Search Apps
|
||||
fun pickDefaultDownApp(context :Context) : Pair<String, String>{
|
||||
if(isInstalled("com.samsung.android.app.galaxyfinder", context))
|
||||
return Pair("GalaxyFinder", "com.samsung.android.app.galaxyfinder")
|
||||
else if(isInstalled("com.prometheusinteractive.voice_launcher", context))
|
||||
return Pair("VoiceSearch", "com.prometheusinteractive.voice_launcher")
|
||||
else
|
||||
return Pair(none_msg, "")
|
||||
}
|
||||
|
||||
// Default rightApps are Mailing Applications
|
||||
fun pickDefaultRightApp(context :Context) : Pair<String, String>{
|
||||
if(isInstalled("de.web.mobile.android.mail", context))
|
||||
return Pair("WebMail", "de.web.mobile.android.mail")
|
||||
else if(isInstalled("com.samsung.android.email.provider", context))
|
||||
return Pair("Samsung Mail", "com.samsung.android.email.provider")
|
||||
else if(isInstalled("com.google.android.gm", context))
|
||||
return Pair("Google Mail", "com.google.android.gm")
|
||||
else
|
||||
return Pair(none_msg, "")
|
||||
}
|
||||
|
||||
// Default leftApps are Calendar Applications
|
||||
fun pickDefaultLeftApp(context :Context) : Pair<String, String>{
|
||||
if(isInstalled("com.google.android.calendar", context))
|
||||
return Pair("Google Calendar", "com.google.android.calendar")
|
||||
else if(isInstalled("com.samsung.android.calendar", context))
|
||||
return Pair("Samsung Calendar", "com.samsung.android.calendar")
|
||||
else
|
||||
return Pair(none_msg, "")
|
||||
}
|
||||
|
||||
// Default volumeUpApps are Messengers
|
||||
fun pickDefaultVolumeUpApp(context: Context) : Pair<String, String>{
|
||||
if(isInstalled("com.whatsapp", context))
|
||||
return Pair("WhatsApp", "com.whatsapp")
|
||||
else if(isInstalled("com.facebook.orca", context))
|
||||
return Pair("Facebook Messenger", "com.facebook.orca")
|
||||
else if(isInstalled("com.viber.voip", context))
|
||||
return Pair("Viber", "com.viber.voip")
|
||||
else if(isInstalled("com.skype.raider", context))
|
||||
return Pair("Skype", "com.skype.raider")
|
||||
else if(isInstalled("com.snapchat.android", context))
|
||||
return Pair("Snapchat", "com.snapchat.android")
|
||||
else if(isInstalled("com.instagram.android", context))
|
||||
return Pair("Instagram", "com.instagram.android")
|
||||
else if(isInstalled("com.samsung.android.messaging", context))
|
||||
return Pair("Samsung SMS", "com.samsung.android.messaging")
|
||||
else
|
||||
return Pair(none_msg, "")
|
||||
}
|
||||
|
||||
// Default volumeDownApps are Utilities
|
||||
fun pickDefaultVolumeDownApp(context: Context) : Pair<String, String>{
|
||||
if(isInstalled("com.github.android", context))
|
||||
return Pair("GitHub", "com.github.android")
|
||||
else if(isInstalled("com.soundbrenner.pulse", context))
|
||||
return Pair("Soundbrenner Metronome", "com.soundbrenner.pulse")
|
||||
else if(isInstalled("com.sec.android.app.popupcalculator", context))
|
||||
return Pair("Calculator", "com.sec.android.app.popupcalculator")
|
||||
else
|
||||
return Pair(none_msg, "")
|
||||
}
|
|
@ -1,21 +1,29 @@
|
|||
package com.finnmglas.launcher
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.AlertDialog
|
||||
import android.content.*
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
|
||||
|
||||
//TODO Make Settings scrollable as soon as more are added
|
||||
|
||||
class SettingsActivity : AppCompatActivity() {
|
||||
|
||||
/** Activity Lifecycle functions */
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
|
||||
setContentView(R.layout.activity_settings)
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
if(requestCode == 5000)
|
||||
{
|
||||
|
@ -37,6 +45,7 @@ class SettingsActivity : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
/** onClick functions for Settings */
|
||||
fun chooseDownApp(view: View) {chooseApp("downApp")}
|
||||
fun chooseUpApp(view: View) {chooseApp("upApp")}
|
||||
fun chooseLeftApp(view: View) {chooseApp("leftApp")}
|
||||
|
@ -63,26 +72,9 @@ class SettingsActivity : AppCompatActivity() {
|
|||
startActivity(intent)
|
||||
}
|
||||
|
||||
fun openNewTabWindow(urls: String, context : Context) {
|
||||
val uris = Uri.parse(urls)
|
||||
val intents = Intent(Intent.ACTION_VIEW, uris)
|
||||
val b = Bundle()
|
||||
b.putBoolean("new_window", true)
|
||||
intents.putExtras(b)
|
||||
context.startActivity(intents)
|
||||
}
|
||||
|
||||
fun openFinnWebsite(view: View) {
|
||||
openNewTabWindow("https://www.finnmglas.com/", this)
|
||||
}
|
||||
|
||||
fun openGithubRepo(view: View) {
|
||||
openNewTabWindow("https://github.com/finnmglas/Launcher#en", this)
|
||||
}
|
||||
|
||||
fun backHome(view: View) {
|
||||
finish()
|
||||
}
|
||||
fun openFinnWebsite(view: View) { openNewTabWindow(getString(R.string.settings_footer_web), this) }
|
||||
fun openGithubRepo(view: View) { openNewTabWindow(getString(R.string.settings_footer_repo), this) }
|
||||
fun backHome(view: View) { finish() }
|
||||
|
||||
fun setLauncher(view: View) {
|
||||
// on newer sdk: choose launcher
|
||||
|
@ -93,8 +85,8 @@ class SettingsActivity : AppCompatActivity() {
|
|||
// on older sdk: manage app details
|
||||
else {
|
||||
AlertDialog.Builder(this)
|
||||
.setTitle("App Info")
|
||||
.setMessage("Your device does not support this feature. Manage application details instead?")
|
||||
.setTitle(getString(R.string.alert_cant_choose_launcher))
|
||||
.setMessage(getString(R.string.alert_cant_choose_launcher_message))
|
||||
.setPositiveButton(android.R.string.yes,
|
||||
DialogInterface.OnClickListener { dialog, which ->
|
||||
try {
|
||||
|
@ -113,8 +105,8 @@ class SettingsActivity : AppCompatActivity() {
|
|||
// Show a dialog prompting for confirmation
|
||||
fun resetSettingsClick(view: View) {
|
||||
AlertDialog.Builder(this)
|
||||
.setTitle("Reset Settings")
|
||||
.setMessage("This will discard all your App Choices. Sure you want to continue?")
|
||||
.setTitle(getString(R.string.settings_reset))
|
||||
.setMessage(getString(R.string.settings_reset_message))
|
||||
.setPositiveButton(android.R.string.yes,
|
||||
DialogInterface.OnClickListener { dialog, which ->
|
||||
resetSettings(this.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE), this)
|
||||
|
@ -124,14 +116,4 @@ class SettingsActivity : AppCompatActivity() {
|
|||
.setIcon(android.R.drawable.ic_dialog_alert)
|
||||
.show()
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n") // I do not care
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
|
||||
setContentView(R.layout.activity_settings)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
android:id="@+id/heading"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Choose App"
|
||||
android:text="@string/choose_title"
|
||||
android:textColor="#cccccc"
|
||||
android:textSize="36sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
|
@ -55,11 +55,10 @@
|
|||
</ScrollView>
|
||||
|
||||
<Button
|
||||
android:id="@+id/button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:onClick="backHome"
|
||||
android:text="Back to Settings"
|
||||
android:text="@string/choose_back_settings"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
app:layout_constraintVertical_bias="0.100000024" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
android:id="@+id/infoText"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginStart="32dp"
|
||||
|
@ -43,7 +43,7 @@
|
|||
app:layout_constraintTop_toBottomOf="@id/heading" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/continue_text"
|
||||
android:id="@+id/hintText"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginStart="32dp"
|
||||
|
@ -60,6 +60,6 @@
|
|||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.6"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/description" />
|
||||
app:layout_constraintTop_toBottomOf="@id/infoText" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -13,7 +13,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="left|center_vertical"
|
||||
android:onClick="launchCalendar"
|
||||
android:onClick="dateViewOnTouch"
|
||||
android:textColor="#ccc"
|
||||
android:textSize="30sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
|
@ -27,7 +27,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="left|center_vertical"
|
||||
android:onClick="launchClock"
|
||||
android:onClick="timeViewOnTouch"
|
||||
android:textColor="#ccc"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
android:id="@+id/heading"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Settings"
|
||||
android:text="@string/settings_title"
|
||||
android:textColor="#cccccc"
|
||||
android:textSize="36sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
|
@ -24,7 +24,7 @@
|
|||
android:id="@+id/sub_head_1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Applications"
|
||||
android:text="@string/settings_sub_title1"
|
||||
android:textColor="#999"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
|
@ -54,7 +54,9 @@
|
|||
android:id="@+id/text_up"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Swipe Up"
|
||||
android:paddingLeft="10sp"
|
||||
android:paddingRight="10sp"
|
||||
android:text="@string/settings_choose_up"
|
||||
android:textColor="#ccc"
|
||||
android:textSize="24sp" />
|
||||
|
||||
|
@ -64,7 +66,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:alpha=".8"
|
||||
android:onClick="chooseUpApp"
|
||||
android:text="Choose App" />
|
||||
android:text="@string/settings_choose_btn" />
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
|
@ -75,7 +77,9 @@
|
|||
android:id="@+id/text_down"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Swipe Down"
|
||||
android:paddingLeft="10sp"
|
||||
android:paddingRight="10sp"
|
||||
android:text="@string/settings_choose_down"
|
||||
android:textColor="#ccc"
|
||||
android:textSize="24sp" />
|
||||
|
||||
|
@ -85,7 +89,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:alpha=".8"
|
||||
android:onClick="chooseDownApp"
|
||||
android:text="Choose App" />
|
||||
android:text="@string/settings_choose_btn" />
|
||||
|
||||
</TableRow>
|
||||
|
||||
|
@ -97,7 +101,9 @@
|
|||
android:id="@+id/text_left"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Swipe Left"
|
||||
android:paddingLeft="10sp"
|
||||
android:paddingRight="10sp"
|
||||
android:text="@string/settings_choose_left"
|
||||
android:textColor="#ccc"
|
||||
android:textSize="24sp" />
|
||||
|
||||
|
@ -107,7 +113,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:alpha=".8"
|
||||
android:onClick="chooseLeftApp"
|
||||
android:text="Choose App" />
|
||||
android:text="@string/settings_choose_btn" />
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
|
@ -118,7 +124,9 @@
|
|||
android:id="@+id/text_right"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Swipe Right"
|
||||
android:paddingLeft="10sp"
|
||||
android:paddingRight="10sp"
|
||||
android:text="@string/settings_choose_right"
|
||||
android:textColor="#ccc"
|
||||
android:textSize="24sp" />
|
||||
|
||||
|
@ -128,7 +136,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:alpha=".8"
|
||||
android:onClick="chooseRightApp"
|
||||
android:text="Choose App" />
|
||||
android:text="@string/settings_choose_btn" />
|
||||
|
||||
</TableRow>
|
||||
|
||||
|
@ -140,7 +148,9 @@
|
|||
android:id="@+id/text_vol_up"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Volume Up"
|
||||
android:paddingLeft="10sp"
|
||||
android:paddingRight="10sp"
|
||||
android:text="@string/settings_choose_vol_up"
|
||||
android:textColor="#ccc"
|
||||
android:textSize="24sp" />
|
||||
|
||||
|
@ -150,7 +160,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:alpha=".8"
|
||||
android:onClick="chooseVolumeUpApp"
|
||||
android:text="Choose App" />
|
||||
android:text="@string/settings_choose_btn" />
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
|
@ -161,7 +171,9 @@
|
|||
android:id="@+id/text_vol_down"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Volume Down "
|
||||
android:paddingLeft="10sp"
|
||||
android:paddingRight="10sp"
|
||||
android:text="@string/settings_choose_vol_down"
|
||||
android:textColor="#ccc"
|
||||
android:textSize="24sp" />
|
||||
|
||||
|
@ -171,7 +183,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:alpha=".8"
|
||||
android:onClick="chooseVolumeDownApp"
|
||||
android:text="Choose App" />
|
||||
android:text="@string/settings_choose_btn" />
|
||||
|
||||
</TableRow>
|
||||
|
||||
|
@ -181,7 +193,7 @@
|
|||
android:id="@+id/sub_head_2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Actions"
|
||||
android:text="@string/settings_sub_title2"
|
||||
android:textColor="#999"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintBottom_toBottomOf="@id/buttons"
|
||||
|
@ -193,7 +205,7 @@
|
|||
|
||||
<TableLayout
|
||||
android:id="@+id/buttons"
|
||||
android:layout_width="0dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
@ -207,18 +219,20 @@
|
|||
android:gravity="center">
|
||||
|
||||
<Button
|
||||
style="@style/Widget.AppCompat.Button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:alpha=".3"
|
||||
android:onClick="setLauncher"
|
||||
android:text="Select Launcher" />
|
||||
android:text="@string/settings_select_launcher" />
|
||||
|
||||
<Button
|
||||
style="@style/Widget.AppCompat.Button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:alpha=".3"
|
||||
android:onClick="resetSettingsClick"
|
||||
android:text="Reset Settings" />
|
||||
android:text="@string/settings_reset" />
|
||||
|
||||
</TableRow>
|
||||
|
||||
|
@ -228,18 +242,20 @@
|
|||
android:gravity="center">
|
||||
|
||||
<Button
|
||||
style="@style/Widget.AppCompat.Button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:alpha=".3"
|
||||
android:onClick="chooseLaunchApp"
|
||||
android:text="Launch Apps" />
|
||||
android:text="@string/settings_launch" />
|
||||
|
||||
<Button
|
||||
style="@style/Widget.AppCompat.Button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:alpha=".3"
|
||||
android:onClick="chooseUninstallApp"
|
||||
android:text="Uninstall Apps" />
|
||||
android:text="@string/settings_uninstall" />
|
||||
|
||||
</TableRow>
|
||||
|
||||
|
@ -252,30 +268,25 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:onClick="backHome"
|
||||
android:text="Back Home" />
|
||||
android:text="@string/settings_home" />
|
||||
</TableRow>
|
||||
|
||||
</TableLayout>
|
||||
|
||||
<TableLayout
|
||||
android:id="@+id/about_footer"
|
||||
android:layout_width="0dp"
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/actionschooser"
|
||||
app:layout_constraintVertical_bias="0.9">
|
||||
|
||||
<TableRow
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center">
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.98">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="By "
|
||||
android:text="@string/settings_footer_by"
|
||||
android:textColor="#999"
|
||||
android:textSize="18sp" />
|
||||
|
||||
|
@ -285,14 +296,16 @@
|
|||
android:onClick="openFinnWebsite"
|
||||
android:text=" Finn M Glas"
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:textSize="18sp" />
|
||||
android:textSize="18sp"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text=" | "
|
||||
android:textColor="#999"
|
||||
android:textSize="18sp" />
|
||||
android:textSize="18sp"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -300,9 +313,8 @@
|
|||
android:onClick="openGithubRepo"
|
||||
android:text="Open Source"
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:textSize="18sp" />
|
||||
</TableRow>
|
||||
|
||||
</TableLayout>
|
||||
android:textSize="18sp"
|
||||
tools:ignore="HardcodedText" />
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
62
app/src/main/res/values-de/strings.xml
Normal file
62
app/src/main/res/values-de/strings.xml
Normal file
|
@ -0,0 +1,62 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Errors, Exceptions (Alerts, Toasts ...) -->
|
||||
<string name="none_found">Nicht gefunden</string>
|
||||
<string name="alert_cant_open_title">App kann nicht geöffnet werden</string>
|
||||
<string name="alert_cant_open_message">Willst du ihre Einstellungen anpassen (\'app zum Startbildschirm hinzufügen\')?</string>
|
||||
<string name="toast_cant_open_message">Öffne die Einstellungen um für diese Aktion eine App zu wählen</string>
|
||||
|
||||
<string name="alert_cant_choose_launcher">App Info</string>
|
||||
<string name="alert_cant_choose_launcher_message">Dein Gerät unterstützt diese Funktion nicht. Stattdessen die App Details bearbeiten?</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="settings_title">Einstellungen</string>
|
||||
<string name="settings_sub_title1">Anwendungen</string>
|
||||
<string name="settings_sub_title2">Aktionen</string>
|
||||
|
||||
<string name="settings_choose_up">Hochwischen</string>
|
||||
<string name="settings_choose_down">Runterwischen</string>
|
||||
<string name="settings_choose_left">Linkswischen</string>
|
||||
<string name="settings_choose_right">Rechtswischen</string>
|
||||
<string name="settings_choose_vol_up">Lautstärke +</string>
|
||||
<string name="settings_choose_vol_down">Lautstärke -</string>
|
||||
|
||||
<string name="settings_choose_btn">App wählen</string>
|
||||
<string name="settings_select_launcher">Launcher wählen</string>
|
||||
<string name="settings_reset">Zurücksetzen</string>
|
||||
<string name="settings_reset_message">All deine Einstellungen gehen verloren. Weitermachen?</string>
|
||||
<string name="settings_launch">Apps öffnen</string>
|
||||
<string name="settings_uninstall">Apps entfernen</string>
|
||||
<string name="settings_home">Zurück</string>
|
||||
|
||||
<string name="settings_footer_by">Von</string>
|
||||
<string name="settings_footer_repo">https://github.com/finnmglas/Launcher#de</string>
|
||||
<string name="settings_footer_web">https://www.finnmglas.com/de/</string>
|
||||
|
||||
<!-- Choose Activity -->
|
||||
<string name="choose_title">App wählen</string>
|
||||
<string name="choose_title_launch">Apps öffnen</string>
|
||||
<string name="choose_title_remove">Apps entfernen</string>
|
||||
|
||||
<string name="choose_back_settings">Zurück</string>
|
||||
|
||||
<string name="choose_removed_toast">Die App wurde entfernt</string>
|
||||
<string name="choose_not_removed_toast">Die App konnte nicht entfernt werden</string>
|
||||
|
||||
<!-- FirstStartup Activity -->
|
||||
<string-array name="intro">
|
||||
<!--item> heading | infoText | hintText | size | format </item-->
|
||||
<item>|Nimm dir kurz Zeit und lerne, wie du diesen Launcher verwendest!\n\n|— Tippe um weiterzukommen —|36F|0</item>
|
||||
<item>Konzept|Er bietet dir eine minimalistische, effiziente und ablenkungsfreie digitale Umgebung.|— Tippe um weiterzukommen —|36F|0</item>
|
||||
<item>Konzept|Er kostet dich nichts, enthält keine Werbung, sammelt keine persönlichen Daten.|— Tippe um weiterzukommen —|36F|0</item>
|
||||
<item>Benutzung|Auf deinem Homescreen siehst du nur das Datum und die Uhrzeit. Keine Ablenkung.|— Tippe um weiterzukommen —|36F|0</item>
|
||||
<item>Benutzung|Du öffnest Apps indem du über den Bildschirm wischt oder die Lautstärketasten drückst.|— Tippe um weiterzukommen —|36F|0</item>
|
||||
<item>Einrichtung|Wir haben dir ein paar Standardaktionen eingerichtet…|— Zurück = Lautstärke Runter —|36F|0</item>
|
||||
<item>Einrichtung|Hochwischen: Browser öffnen (%1$s)\n\nRunterwischen: Interne Such-app öffnen (%2$s)\n\n
|
||||
Rechtswischen: Mails öffnen (%3$s)\n\nLinkswischen: Kalendar öffnen (%4$s)\n\n
|
||||
Lautstärke Hoch: Messenger öffnen (%5$s)\n\nLautstärke Runter: Tools öffnen (%6$s)|— Zurück = Lautstärke Runter —|18F|1
|
||||
</item>
|
||||
<item>Einrichtung|Du kannst auch eigene Apps auswählen:\n\nÖffne die Einstellungen durch langes tippen auf den Startbildschirm.|— Zurück = Lautstärke Runter —|36F|0</item>
|
||||
<item>|Du bist bereit loszulegen!\n\nIch hoffe diese App ist sehr wertvoll für dich!\n\n- Finn M Glas\n\n|— Launcher von Finn M Glas —|36F|0</item>
|
||||
</string-array>
|
||||
</resources>
|
62
app/src/main/res/values-fr/strings.xml
Normal file
62
app/src/main/res/values-fr/strings.xml
Normal file
|
@ -0,0 +1,62 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Errors, Exceptions (Alerts, Toasts ...) -->
|
||||
<string name="none_found">Rien trouvé</string>
|
||||
<string name="alert_cant_open_title">Impossible d\'ouvrir l\'application</string>
|
||||
<string name="alert_cant_open_message">Vous souhaitez modifier ses paramètres («l\'ajouter à l\'écran des applications»)?</string>
|
||||
<string name="toast_cant_open_message">Ouvrez les paramètres pour choisir une application pour cette action</string>
|
||||
|
||||
<string name="alert_cant_choose_launcher">Informations sur l\'application</string>
|
||||
<string name="alert_cant_choose_launcher_message">Votre appareil ne prend pas en charge cette fonctionnalité. Gérez plutôt les détails de l\'application?</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="settings_title">Réglages</string>
|
||||
<string name="settings_sub_title1">Applications</string>
|
||||
<string name="settings_sub_title2">Actions</string>
|
||||
|
||||
<string name="settings_choose_up">Balayez haut</string>
|
||||
<string name="settings_choose_down">Balayez bas</string>
|
||||
<string name="settings_choose_left">Balayez gauche</string>
|
||||
<string name="settings_choose_right">Balayez droit</string>
|
||||
<string name="settings_choose_vol_up">Monter volume</string>
|
||||
<string name="settings_choose_vol_down">Baisser volume</string>
|
||||
|
||||
<string name="settings_choose_btn">Choisir App</string>
|
||||
<string name="settings_select_launcher">Choisir Launcher</string>
|
||||
<string name="settings_reset">Réinitialiser</string>
|
||||
<string name="settings_reset_message">Vous allez supprimer toutes vos préférences. Continuer?</string>
|
||||
<string name="settings_launch">Lancer applications</string>
|
||||
<string name="settings_uninstall">Désinstaller applications</string>
|
||||
<string name="settings_home">Retourner</string>
|
||||
|
||||
<string name="settings_footer_by">Par</string>
|
||||
<string name="settings_footer_web">https://www.finnmglas.com/fr/</string>
|
||||
<string name="settings_footer_repo">https://github.com/finnmglas/Launcher</string>
|
||||
|
||||
<!-- Choose Activity -->
|
||||
<string name="choose_title">Choisir App</string>
|
||||
<string name="choose_title_launch">Lancer Apps</string>
|
||||
<string name="choose_title_remove">Désinstaller Apps</string>
|
||||
|
||||
<string name="choose_back_settings">Retourner</string>
|
||||
|
||||
<string name="choose_removed_toast">Application supprimée</string>
|
||||
<string name="choose_not_removed_toast">Impossible de supprimer l\'application</string>
|
||||
|
||||
<!-- FirstStartup Activity -->
|
||||
<string-array name="intro">
|
||||
<!--item> heading | infoText | hintText | size | format </item-->
|
||||
<item>|Prenez un moment et apprenez à utiliser ce lanceur!\n\n|— Appuyez pour continuer —|36F|0</item>
|
||||
<item>Concept|Il vous offre un environnement minimaliste, efficace et sans distraction.|— Appuyez pour continuer —|36F|0</item>
|
||||
<item>Concept|Il ne vous coûte rien, ne contient aucune publicité, ne recueille pas de données personnelles.|— Appuyez pour continuer —|36F|0</item>
|
||||
<item>Utilisation|Vous ne voyez que la date et l\'heure sur votre écran d\'accueil. Aucune distraction.|— Appuyez pour continuer —|36F|0</item>
|
||||
<item>Utilisation|Vous ouvrez des applications en faisant glisser l\'écran ou en appuyant sur les touches de volume.|— Appuyez pour continuer —|36F|0</item>
|
||||
<item>Installer|Nous avons mis en place quelques promotions standards pour vous…|— Retour = volume en baisse —|36F|0</item>
|
||||
<item>Installer|Balayez haut: Ouvrir le navigateur (%1$s)\n\nBalayez bas: Ouvrir l\'application de recherche interne (%2$s)\n\n
|
||||
Balayez droit: Ouvrir Mail (%3$s)\n\nBalayez gauche: Ouvrir le Calendrier (%4$s)\n\n
|
||||
Monter volume: Ouvrir Messenger (%5$s)\n\nBaisser volume: Ouvrir utilitaires (%6$s)|— Retour = volume en baisse —|18F|1
|
||||
</item>
|
||||
<item>Installer|Vous pouvez choisir vos applications:\n\nOuvrez les paramètres en appuyant longuement sur l\'écran d\'accueil.|— Retour = volume en baisse —|36F|0</item>
|
||||
<item>|Vous êtes prêt à commencer!\n\nJ\'espère que cette application vous sera très précieuse!\n\n- Finn M Glas\n\n|— Launcher par Finn M Glas —|36F|0</item>
|
||||
</string-array>
|
||||
</resources>
|
|
@ -1,6 +0,0 @@
|
|||
<resources>
|
||||
<string name="fa_icon_calendar"></string>
|
||||
<string name="fa_icon_home"></string>
|
||||
<string name="fa_icon_globe"></string>
|
||||
<string name="fa_icon_bars"></string>
|
||||
</resources>
|
|
@ -1,4 +1,110 @@
|
|||
<resources>
|
||||
<string name="app_name">Launcher</string>
|
||||
<string name ="preference_file_key">V3RYR4ND0MK3YCR4P</string>
|
||||
<!-- General -->
|
||||
<string name="app_name" translatable="false">Launcher</string>
|
||||
<string name="preference_file_key" translatable="false">V3RYR4ND0MK3YCR4P</string>
|
||||
|
||||
<!-- Errors, Exceptions (Alerts, Toasts ...) -->
|
||||
<string name="none_found">None found</string>
|
||||
|
||||
<string name="alert_cant_open_title">Can\'t open app</string>
|
||||
<string name="alert_cant_open_message">Want to change its settings (\'add it to the apps screen\')?</string>
|
||||
<string name="toast_cant_open_message">Open settings to choose an app for this action</string>
|
||||
|
||||
<string name="alert_cant_choose_launcher">App Info</string>
|
||||
<string name="alert_cant_choose_launcher_message">Your device does not support this feature. Manage application details instead?</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="settings_title">Settings</string>
|
||||
<string name="settings_sub_title1">Applications</string>
|
||||
<string name="settings_sub_title2">Actions</string>
|
||||
|
||||
<string name="settings_choose_up">Swipe Up</string>
|
||||
<string name="settings_choose_down">Swipe Down</string>
|
||||
<string name="settings_choose_left">Swipe Left</string>
|
||||
<string name="settings_choose_right">Swipe Right</string>
|
||||
<string name="settings_choose_vol_up">Volume Up</string>
|
||||
<string name="settings_choose_vol_down">Volume Down</string>
|
||||
<string name="settings_choose_btn">Choose App</string>
|
||||
|
||||
<string name="settings_select_launcher">Select Launcher</string>
|
||||
<string name="settings_reset">Reset Settings</string>
|
||||
<string name="settings_reset_message">You are going to discard all your preferences. Continue?</string>
|
||||
<string name="settings_launch">Launch Apps</string>
|
||||
<string name="settings_uninstall">Uninstall Apps</string>
|
||||
<string name="settings_home">Back Home</string>
|
||||
|
||||
<string name="settings_footer_by">By</string>
|
||||
<string name="settings_footer_repo">https://github.com/finnmglas/Launcher#en</string>
|
||||
<string name="settings_footer_web">https://www.finnmglas.com</string>
|
||||
|
||||
<!-- Choose Activity -->
|
||||
<string name="choose_title">Choose App</string>
|
||||
<string name="choose_title_launch">Launch Apps</string>
|
||||
<string name="choose_title_remove">Uninstall Apps</string>
|
||||
|
||||
<string name="choose_back_settings">Back to Settings</string>
|
||||
|
||||
<string name="choose_removed_toast">Removed the selected application</string>
|
||||
<string name="choose_not_removed_toast">Unable to remove application</string>
|
||||
|
||||
<!-- FirstStartup Activity -->
|
||||
<string-array name="intro">
|
||||
<!--item> heading | infoText | hintText | size | format </item-->
|
||||
<item>|Take a few seconds to learn how to use this Launcher!\n\n|— Tap anywhere to continue —|36F|0</item>
|
||||
<item>Concept|It is designed to be minimal, efficient and free of distraction.|— Tap anywhere to continue —|36F|0</item>
|
||||
<item>Concept|It is free of payments, ads and tracking services.|— Tap anywhere to continue —|36F|0</item>
|
||||
<item>Usage|Your home screen contains the local date and time. No distraction.|— Tap anywhere to continue —|36F|0</item>
|
||||
<item>Usage|You can open your apps with a single swipe or button press.|— Tap anywhere to continue —|36F|0</item>
|
||||
<item>Setup|We have set up some default actions for you…|— Use volume keys to navigate —|36F|0</item>
|
||||
<item>Setup|Swipe Up: Open a Browser (%1$s)\n\nSwipe Down: Open internal Search App (%2$s)\n\n
|
||||
Swipe Right: Open Mail (%3$s)\n\nSwipe Left: Open Calendar (%4$s)\n\n
|
||||
Volume Up: Open a messenger (%5$s)\n\nVolume Down: Open Utilities (%6$s)|— Use volume keys to navigate —|18F|1
|
||||
</item>
|
||||
<item>Setup|You can choose your own apps:\n\nOpen settings by tapping and holding the home screen.|— Use volume keys to navigate —|36F|0</item>
|
||||
<item>|You are ready to get started!\n\n I hope this provides great value to you!\n\n- Finn M Glas\n\n|— Launcher by Finn M Glas —|36F|0</item>
|
||||
</string-array>
|
||||
|
||||
<!-- Default Apps for different actions (button-press, swipes ...) -->
|
||||
<string-array name="default_up">
|
||||
<item>org.mozilla.firefox|Firefox</item>
|
||||
<item>com.sec.android.app.sbrowser|Samsung Internet</item>
|
||||
<item>com.android.chrome|Chrome</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="default_down">
|
||||
<item>com.samsung.android.app.galaxyfinder|GalaxyFinder</item>
|
||||
<item>com.prometheusinteractive.voice_launcher|VoiceSearch</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="default_right">
|
||||
<item>de.web.mobile.android.mail|WebMail</item>
|
||||
<item>com.samsung.android.email.provider|Samsung Mail</item>
|
||||
<item>com.google.android.gm|Google Mail</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="default_left">
|
||||
<item>com.google.android.calendar|Google Calendar</item>
|
||||
<item>com.samsung.android.calendar|Samsung Calendar</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="default_volume_up">
|
||||
<item>com.whatsapp|WhatsApp</item>
|
||||
<item>com.facebook.orca|Facebook Messenger</item>
|
||||
<item>com.viber.voip|Viber</item>
|
||||
<item>com.skype.raider|Skype</item>
|
||||
<item>com.snapchat.android|Snapchat</item>
|
||||
<item>com.instagram.android|Instagram</item>
|
||||
<item>com.samsung.android.messaging|Samsung SMS</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="default_volume_down">
|
||||
<item>com.github.android|GitHub</item>
|
||||
<item>com.soundbrenner.pulse|Soundbrenner Metronome</item>
|
||||
<item>com.sec.android.app.popupcalculator|Calculator</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="default_clock">
|
||||
<item>com.sec.android.app.clockpackage|Android Clock</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
||||
|
|
Loading…
Add table
Reference in a new issue