소스 검색

Merge branch 'refs/heads/last-known-commit'

Beautus 6 년 전
부모
커밋
9243cfea66
46개의 변경된 파일830개의 추가작업 그리고 431개의 파일을 삭제
  1. 4 5
      .circleci/config.yml
  2. 11 5
      app/build.gradle
  3. 1 1
      app/src/androidTest/java/com/sduduzog/slimlauncher/DBTest.kt
  4. 2 2
      app/src/main/java/com/sduduzog/slimlauncher/adapters/CustomAppsAdapter.kt
  5. 2 2
      app/src/main/java/com/sduduzog/slimlauncher/adapters/HomeAdapter.kt
  6. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/data/BaseDao.kt
  7. 9 3
      app/src/main/java/com/sduduzog/slimlauncher/data/BaseDatabase.kt
  8. 10 4
      app/src/main/java/com/sduduzog/slimlauncher/data/model/App.kt
  9. 50 0
      app/src/main/java/com/sduduzog/slimlauncher/models/AddAppViewModel.kt
  10. 30 0
      app/src/main/java/com/sduduzog/slimlauncher/models/CustomiseAppsViewModel.kt
  11. 5 2
      app/src/main/java/com/sduduzog/slimlauncher/models/HomeApp.kt
  12. 1 5
      app/src/main/java/com/sduduzog/slimlauncher/models/MainViewModel.kt
  13. 3 2
      app/src/main/java/com/sduduzog/slimlauncher/models/Repository.kt
  14. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/ChangeThemeDialog.kt
  15. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/ChooseTimeFormatDialog.kt
  16. 35 0
      app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/RemoveAllAppsDialog.kt
  17. 9 8
      app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/RenameAppDialog.kt
  18. 15 20
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeFragment.kt
  19. 37 12
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/AddAppFragment.kt
  20. 10 10
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/CustomiseAppsFragment.kt
  21. 6 9
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/OptionsFragment.kt
  22. 1 0
      app/src/main/java/com/sduduzog/slimlauncher/utils/BaseFragment.kt
  23. 0 61
      app/src/main/java/com/sduduzog/slimlauncher/utils/LoadInstalledApps.kt
  24. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/utils/OnLaunchAppListener.kt
  25. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/utils/OnShitDoneToAppsListener.kt
  26. 0 9
      app/src/main/res/layout/home_fragment.xml
  27. 112 0
      app/src/main/res/layout/home_motion_01.xml
  28. 115 0
      app/src/main/res/layout/home_motion_02.xml
  29. 3 0
      app/src/main/res/menu/customise_apps_popup_menu.xml
  30. 20 0
      app/src/main/res/values-ru/strings.xml
  31. 20 0
      app/src/main/res/values-uk/strings.xml
  32. 14 12
      app/src/main/res/values/strings.xml
  33. 3 187
      app/src/main/res/xml/home_motion_scene.xml
  34. 2 2
      build.gradle
  35. BIN
      docs/assets/badge_get-it-on-en-us.png
  36. BIN
      docs/assets/favicon-16x16.png
  37. BIN
      docs/assets/favicon-32x32.png
  38. BIN
      docs/assets/google-play-badge.png
  39. BIN
      docs/assets/home-screen.png
  40. BIN
      docs/assets/ic_launcher-web.png
  41. BIN
      docs/assets/slim-logo.jpg
  42. BIN
      docs/favicon.ico
  43. 47 56
      docs/index.html
  44. 245 6
      docs/main.css
  45. 1 1
      gradle.properties
  46. 2 2
      gradle/wrapper/gradle-wrapper.properties

+ 4 - 5
.circleci/config.yml

@@ -2,13 +2,12 @@ version: 2
 jobs:
   build:
     working_directory: ~/code
-    filters:
-      tags:
-        only: /^v.*/
-      branches:
-        ignore: /[^(^master$)]/
     docker:
       - image: circleci/android:api-29
+    tags:
+      only: /^v.*/
+      branches:
+        ignore: /[^(^master$)]/
     environment:
       JVM_OPTS: -Xmx3200m
     steps:

+ 11 - 5
app/build.gradle

@@ -9,13 +9,16 @@ plugins{
 }
 
 android {
+    dataBinding {
+        enabled = true
+    }
     compileSdkVersion 29
     defaultConfig {
         applicationId "com.sduduzog.slimlauncher"
-        minSdkVersion 16
+        minSdkVersion 21
         targetSdkVersion 29
-        versionCode 40
-        versionName "2.3.5"
+        versionCode 41
+        versionName "2.4.6"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         vectorDrawables.useSupportLibrary = true
     }
@@ -36,6 +39,9 @@ android {
         sourceCompatibility = JavaVersion.VERSION_1_8
         targetCompatibility = JavaVersion.VERSION_1_8
     }
+    kotlinOptions {
+        jvmTarget = "1.8"
+    }
 }
 
 dependencies {
@@ -50,12 +56,12 @@ dependencies {
     implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
 
     // Arch Components
-    implementation 'androidx.core:core-ktx:1.2.0-alpha02'
+    implementation 'androidx.core:core-ktx:1.2.0-alpha03'
     implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
     implementation 'android.arch.navigation:navigation-fragment:1.0.0'
     implementation 'androidx.room:room-runtime:2.1.0'
+    implementation "androidx.lifecycle:lifecycle-common-java8:2.0.0"
     kapt "androidx.room:room-compiler:2.1.0"
-    kapt "androidx.lifecycle:lifecycle-compiler:2.0.0"
 
     //3rd party libs
     implementation 'com.intuit.sdp:sdp-android:1.0.6'

+ 1 - 1
app/src/androidTest/java/com/sduduzog/slimlauncher/DBTest.kt

@@ -7,7 +7,7 @@ import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner
 import androidx.test.platform.app.InstrumentationRegistry
 import com.sduduzog.slimlauncher.data.BaseDao
 import com.sduduzog.slimlauncher.data.BaseDatabase
-import com.sduduzog.slimlauncher.data.model.HomeApp
+import com.sduduzog.slimlauncher.models.HomeApp
 import org.hamcrest.CoreMatchers.equalTo
 import org.junit.After
 import org.junit.Assert.assertThat

+ 2 - 2
app/src/main/java/com/sduduzog/slimlauncher/adapters/CustomAppsAdapter.kt

@@ -10,7 +10,7 @@ import android.widget.TextView
 import androidx.recyclerview.widget.ItemTouchHelper
 import androidx.recyclerview.widget.RecyclerView
 import com.sduduzog.slimlauncher.R
-import com.sduduzog.slimlauncher.data.model.HomeApp
+import com.sduduzog.slimlauncher.models.HomeApp
 import com.sduduzog.slimlauncher.utils.OnItemActionListener
 import com.sduduzog.slimlauncher.utils.OnShitDoneToAppsListener
 
@@ -29,7 +29,7 @@ class CustomAppsAdapter(private val listener: OnShitDoneToAppsListener) : Recycl
     @SuppressLint("ClickableViewAccessibility")
     override fun onBindViewHolder(holder: ViewHolder, position: Int) {
         val item = apps[position]
-        holder.appName.text = item.appName
+        holder.appName.text = item.appNickname ?: item.appName
         holder.dragHandle.setOnTouchListener { _, motionEvent ->
             if (motionEvent.actionMasked == MotionEvent.ACTION_DOWN) {
                 touchHelper.startDrag(holder)

+ 2 - 2
app/src/main/java/com/sduduzog/slimlauncher/adapters/HomeAdapter.kt

@@ -6,7 +6,7 @@ import android.view.ViewGroup
 import android.widget.TextView
 import androidx.recyclerview.widget.RecyclerView
 import com.sduduzog.slimlauncher.R
-import com.sduduzog.slimlauncher.data.model.HomeApp
+import com.sduduzog.slimlauncher.models.HomeApp
 import com.sduduzog.slimlauncher.utils.OnLaunchAppListener
 
 
@@ -23,7 +23,7 @@ class HomeAdapter(private val listener: OnLaunchAppListener)
 
     override fun onBindViewHolder(holder: ViewHolder, position: Int) {
         val item = apps.elementAt(position)
-        holder.mLabelView.text = item.appName
+        holder.mLabelView.text = item.appNickname ?: item.appName
         holder.mLabelView.setOnClickListener {
             listener.onLaunch(item, it)
         }

+ 1 - 1
app/src/main/java/com/sduduzog/slimlauncher/data/BaseDao.kt

@@ -2,7 +2,7 @@ package com.sduduzog.slimlauncher.data
 
 import androidx.lifecycle.LiveData
 import androidx.room.*
-import com.sduduzog.slimlauncher.data.model.HomeApp
+import com.sduduzog.slimlauncher.models.HomeApp
 
 @Dao
 interface BaseDao {

+ 9 - 3
app/src/main/java/com/sduduzog/slimlauncher/data/BaseDatabase.kt

@@ -6,10 +6,10 @@ import androidx.room.Room
 import androidx.room.RoomDatabase
 import androidx.room.migration.Migration
 import androidx.sqlite.db.SupportSQLiteDatabase
-import com.sduduzog.slimlauncher.data.model.HomeApp
+import com.sduduzog.slimlauncher.models.HomeApp
 
 
-@Database(entities = [HomeApp::class], version = 6, exportSchema = false)
+@Database(entities = [HomeApp::class], version = 7, exportSchema = false)
 abstract class BaseDatabase : RoomDatabase() {
 
     abstract fun baseDao(): BaseDao
@@ -29,7 +29,8 @@ abstract class BaseDatabase : RoomDatabase() {
                                     MIGRATION_2_3,
                                     MIGRATION_3_4,
                                     MIGRATION_4_5,
-                                    MIGRATION_5_6
+                                    MIGRATION_5_6,
+                                    MIGRATION_6_7
                             )
                             .build()
                 }
@@ -80,5 +81,10 @@ abstract class BaseDatabase : RoomDatabase() {
                 database.execSQL("DROP TABLE IF EXISTS `tasks`")
             }
         }
+        private val MIGRATION_6_7 = object : Migration(6, 7){
+            override fun migrate(database: SupportSQLiteDatabase) {
+               database.execSQL("ALTER TABLE `home_apps` ADD COLUMN `app_nickname` TEXT")
+            }
+        }
     }
 }

+ 10 - 4
app/src/main/java/com/sduduzog/slimlauncher/data/model/App.kt

@@ -1,7 +1,13 @@
 package com.sduduzog.slimlauncher.data.model
 
+import com.sduduzog.slimlauncher.models.HomeApp
+
 data class App(
-        var appName: String,
-        var packageName: String,
-        var activityName: String
-)
+        val appName: String,
+        val packageName: String,
+        val activityName: String
+){
+    companion object{
+        fun from(homeApp: HomeApp) = App(homeApp.appName, homeApp.packageName, homeApp.activityName)
+    }
+}

+ 50 - 0
app/src/main/java/com/sduduzog/slimlauncher/models/AddAppViewModel.kt

@@ -0,0 +1,50 @@
+package com.sduduzog.slimlauncher.models
+
+import android.app.Application
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.Observer
+import com.sduduzog.slimlauncher.data.model.App
+
+class AddAppViewModel(application: Application) : AndroidViewModel(application) {
+    private val repository = Repository(application)
+    private var filterQuery = ""
+    private val _installedApps = mutableListOf<App>()
+    private val _homeApps = mutableListOf<App>()
+    private val homeAppsObserver = Observer<List<HomeApp>> {
+        this._homeApps.clear()
+        it.orEmpty().forEach { item -> this._homeApps.add(App.from(item)) }
+        if (it !== null) updateDisplayedApps()
+    }
+    val apps = MutableLiveData<List<App>>()
+
+    init {
+        repository.apps.observeForever(homeAppsObserver)
+    }
+
+    fun filterApps(query: String = "") {
+        this.filterQuery = query
+        this.updateDisplayedApps()
+    }
+
+    private fun updateDisplayedApps() {
+        val filteredApps = _installedApps.filterNot { _homeApps.contains(it) }
+        this.apps.postValue(filteredApps.filter { it.appName.contains(filterQuery) })
+    }
+
+    fun setInstalledApps(apps: List<App>) {
+        this.filterQuery = ""
+        this._installedApps.clear()
+        this._installedApps.addAll(apps)
+    }
+
+    fun addAppToHomeScreen(app: App) {
+        val index = _homeApps.size
+        repository.add(HomeApp.from(app, index))
+    }
+
+    override fun onCleared() {
+        super.onCleared()
+        repository.apps.removeObserver(homeAppsObserver)
+    }
+}

+ 30 - 0
app/src/main/java/com/sduduzog/slimlauncher/models/CustomiseAppsViewModel.kt

@@ -0,0 +1,30 @@
+package com.sduduzog.slimlauncher.models
+
+import android.app.Application
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+
+class CustomiseAppsViewModel(application: Application) : AndroidViewModel(application) {
+
+    private val repository = Repository(application)
+    private var _apps: LiveData<List<HomeApp>>
+
+    init {
+        _apps = repository.apps
+    }
+
+    val apps: LiveData<List<HomeApp>>
+        get() = _apps
+
+    fun update(vararg args: HomeApp) {
+        repository.update(*args)
+    }
+
+    fun reset(homeApp: HomeApp) {
+        homeApp.appNickname = null
+        update(homeApp)
+    }
+    fun remove(vararg app: HomeApp) {
+        repository.remove(*app)
+    }
+}

+ 5 - 2
app/src/main/java/com/sduduzog/slimlauncher/data/model/HomeApp.kt → app/src/main/java/com/sduduzog/slimlauncher/models/HomeApp.kt

@@ -1,8 +1,9 @@
-package com.sduduzog.slimlauncher.data.model
+package com.sduduzog.slimlauncher.models
 
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
+import com.sduduzog.slimlauncher.data.model.App
 
 @Entity(tableName = "home_apps")
 data class HomeApp(
@@ -14,7 +15,9 @@ data class HomeApp(
         @field:ColumnInfo(name = "activity_name")
         var activityName: String,
         @field:ColumnInfo(name = "sorting_index")
-        var sortingIndex: Int
+        var sortingIndex: Int,
+        @field:ColumnInfo(name = "app_nickname")
+        var appNickname: String? = null
 ) {
     companion object {
         fun from(app: App, sortingIndex: Int = 0): HomeApp {

+ 1 - 5
app/src/main/java/com/sduduzog/slimlauncher/data/MainViewModel.kt → app/src/main/java/com/sduduzog/slimlauncher/models/MainViewModel.kt

@@ -1,11 +1,9 @@
-package com.sduduzog.slimlauncher.data
+package com.sduduzog.slimlauncher.models
 
 import android.app.Application
 import androidx.lifecycle.AndroidViewModel
 import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
 import com.sduduzog.slimlauncher.data.model.App
-import com.sduduzog.slimlauncher.data.model.HomeApp
 
 class MainViewModel(application: Application) : AndroidViewModel(application) {
 
@@ -20,8 +18,6 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
     val apps: LiveData<List<HomeApp>>
         get() = _apps
 
-    val installedApps = MutableLiveData<List<App>>()
-
     fun add(app: App) {
         val index = _apps.value!!.size
         _baseRepository.add(HomeApp.from(app, index))

+ 3 - 2
app/src/main/java/com/sduduzog/slimlauncher/data/Repository.kt → app/src/main/java/com/sduduzog/slimlauncher/models/Repository.kt

@@ -1,9 +1,10 @@
-package com.sduduzog.slimlauncher.data
+package com.sduduzog.slimlauncher.models
 
 import android.app.Application
 import android.os.AsyncTask
 import androidx.lifecycle.LiveData
-import com.sduduzog.slimlauncher.data.model.HomeApp
+import com.sduduzog.slimlauncher.data.BaseDao
+import com.sduduzog.slimlauncher.data.BaseDatabase
 
 class Repository(application: Application) {
 

+ 1 - 1
app/src/main/java/com/sduduzog/slimlauncher/dialogs/ChangeThemeDialog.kt → app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/ChangeThemeDialog.kt

@@ -1,4 +1,4 @@
-package com.sduduzog.slimlauncher.dialogs
+package com.sduduzog.slimlauncher.ui.dialogs
 
 import android.app.AlertDialog
 import android.app.Dialog

+ 1 - 1
app/src/main/java/com/sduduzog/slimlauncher/dialogs/ChooseTimeFormatDialog.kt → app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/ChooseTimeFormatDialog.kt

@@ -1,4 +1,4 @@
-package com.sduduzog.slimlauncher.dialogs
+package com.sduduzog.slimlauncher.ui.dialogs
 
 import android.app.AlertDialog
 import android.app.Dialog

+ 35 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/RemoveAllAppsDialog.kt

@@ -0,0 +1,35 @@
+package com.sduduzog.slimlauncher.ui.dialogs
+
+import android.app.AlertDialog
+import android.app.Dialog
+import android.os.Bundle
+import androidx.fragment.app.DialogFragment
+import com.sduduzog.slimlauncher.R
+import com.sduduzog.slimlauncher.models.HomeApp
+import com.sduduzog.slimlauncher.models.CustomiseAppsViewModel
+
+class RemoveAllAppsDialog : DialogFragment(){
+
+    private lateinit var apps: List<HomeApp>
+    private lateinit var model: CustomiseAppsViewModel
+
+
+    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+        val builder = AlertDialog.Builder(context!!)
+        builder.setTitle(R.string.remove_all_apps_dialog_title)
+        builder.setMessage(R.string.remove_all_apps_dialog_message)
+        builder.setPositiveButton("OK") {_, _ ->
+            model.remove(*apps.toTypedArray())
+        }
+        return builder.create()
+    }
+
+    companion object{
+        fun getInstance(apps: List<HomeApp>, model: CustomiseAppsViewModel): RemoveAllAppsDialog{
+            return RemoveAllAppsDialog().apply {
+                this.apps = apps
+                this.model = model
+            }
+        }
+    }
+}

+ 9 - 8
app/src/main/java/com/sduduzog/slimlauncher/dialogs/RenameAppDialog.kt → app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/RenameAppDialog.kt

@@ -1,4 +1,4 @@
-package com.sduduzog.slimlauncher.dialogs
+package com.sduduzog.slimlauncher.ui.dialogs
 
 import android.app.Dialog
 import android.os.Bundle
@@ -8,21 +8,22 @@ import android.widget.Toast
 import androidx.appcompat.app.AlertDialog
 import androidx.fragment.app.DialogFragment
 import com.sduduzog.slimlauncher.R
-import com.sduduzog.slimlauncher.data.MainViewModel
-import com.sduduzog.slimlauncher.data.model.HomeApp
+import com.sduduzog.slimlauncher.models.HomeApp
+import com.sduduzog.slimlauncher.models.CustomiseAppsViewModel
 import kotlinx.android.synthetic.main.customise_apps_fragment.*
 
 class RenameAppDialog : DialogFragment() {
 
     private lateinit var app: HomeApp
-    private lateinit var model: MainViewModel
+    private lateinit var model: CustomiseAppsViewModel
 
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         val view = LayoutInflater.from(context).inflate(R.layout.rename_dialog_edit_text, customise_apps_fragment, false)
         val editText: EditText = view.findViewById(R.id.rename_editText)
-        editText.text.append(app.appName)
+        val appName: String = app.appNickname ?: app.appName
+        editText.text.append(appName)
         val builder = AlertDialog.Builder(context!!)
-        builder.setTitle("Rename ${app.appName}")
+        builder.setTitle("Rename $appName")
         builder.setView(view)
         builder.setPositiveButton("DONE") { _, _ ->
             val name = editText.text.toString()
@@ -39,7 +40,7 @@ class RenameAppDialog : DialogFragment() {
 
     private fun updateApp(newName: String) {
         if (newName.isNotEmpty()) {
-            app.appName = newName
+            app.appNickname = newName
             model.update(app)
         } else {
             Toast.makeText(context, "Couldn't save, App name shouldn't be empty", Toast.LENGTH_LONG).show()
@@ -47,7 +48,7 @@ class RenameAppDialog : DialogFragment() {
     }
 
     companion object {
-        fun getInstance(app: HomeApp, model: MainViewModel): RenameAppDialog {
+        fun getInstance(app: HomeApp, model: CustomiseAppsViewModel): RenameAppDialog {
             return RenameAppDialog().apply {
                 this.model = model
                 this.app = app

+ 15 - 20
app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeFragment.kt

@@ -1,7 +1,6 @@
 package com.sduduzog.slimlauncher.ui.main
 
 import android.content.*
-import android.os.Build
 import android.os.Bundle
 import android.provider.AlarmClock
 import android.provider.MediaStore
@@ -13,8 +12,8 @@ import androidx.lifecycle.ViewModelProviders
 import androidx.navigation.Navigation
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.adapters.HomeAdapter
-import com.sduduzog.slimlauncher.data.MainViewModel
-import com.sduduzog.slimlauncher.data.model.HomeApp
+import com.sduduzog.slimlauncher.models.MainViewModel
+import com.sduduzog.slimlauncher.models.HomeApp
 import com.sduduzog.slimlauncher.utils.BaseFragment
 import com.sduduzog.slimlauncher.utils.OnLaunchAppListener
 import kotlinx.android.synthetic.main.home_fragment.*
@@ -64,9 +63,7 @@ class HomeFragment : BaseFragment(), OnLaunchAppListener {
         activity?.registerReceiver(receiver, IntentFilter(Intent.ACTION_TIME_TICK))
     }
 
-    override fun getFragmentView(): ViewGroup {
-        return home_fragment
-    }
+    override fun getFragmentView(): ViewGroup = home_fragment
 
     override fun onResume() {
         super.onResume()
@@ -81,20 +78,18 @@ class HomeFragment : BaseFragment(), OnLaunchAppListener {
     private fun setEventListeners() {
 
         home_fragment_time.setOnClickListener { view ->
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
-                try {
-                    val pm = context?.packageManager!!
-                    val intent = Intent(AlarmClock.ACTION_SHOW_ALARMS)
-                    intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
-                    val componentName = intent.resolveActivity(pm)
-                    if (componentName == null) launchActivity(view, intent) else
-                        pm.getLaunchIntentForPackage(componentName.packageName)?.let {
-                            launchActivity(view, it)
-                        }
-                } catch (e: ActivityNotFoundException) {
-                    e.printStackTrace()
-                    // Do nothing, we've failed :(
-                }
+            try {
+                val pm = context?.packageManager!!
+                val intent = Intent(AlarmClock.ACTION_SHOW_ALARMS)
+                intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
+                val componentName = intent.resolveActivity(pm)
+                if (componentName == null) launchActivity(view, intent) else
+                    pm.getLaunchIntentForPackage(componentName.packageName)?.let {
+                        launchActivity(view, it)
+                    }
+            } catch (e: ActivityNotFoundException) {
+                e.printStackTrace()
+                // Do nothing, we've failed :(
             }
         }
 

+ 37 - 12
app/src/main/java/com/sduduzog/slimlauncher/ui/options/AddAppFragment.kt

@@ -1,5 +1,7 @@
 package com.sduduzog.slimlauncher.ui.options
 
+import android.content.Intent
+import android.content.pm.ResolveInfo
 import android.os.Bundle
 import android.text.Editable
 import android.text.TextWatcher
@@ -9,20 +11,21 @@ import android.view.ViewGroup
 import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProviders
 import androidx.navigation.Navigation
+import com.sduduzog.slimlauncher.BuildConfig
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.adapters.AddAppAdapter
-import com.sduduzog.slimlauncher.data.MainViewModel
 import com.sduduzog.slimlauncher.data.model.App
+import com.sduduzog.slimlauncher.models.AddAppViewModel
 import com.sduduzog.slimlauncher.utils.BaseFragment
-import com.sduduzog.slimlauncher.utils.LoadInstalledApps
 import com.sduduzog.slimlauncher.utils.OnAppClickedListener
 import kotlinx.android.synthetic.main.add_app_fragment.*
+import java.util.*
 
 class AddAppFragment : BaseFragment(), OnAppClickedListener {
 
     override fun getFragmentView(): ViewGroup = add_app_fragment
 
-    private lateinit var viewModel: MainViewModel
+    private lateinit var viewModel: AddAppViewModel
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
         return inflater.inflate(R.layout.add_app_fragment, container, false)
@@ -35,12 +38,11 @@ class AddAppFragment : BaseFragment(), OnAppClickedListener {
         add_app_fragment_list.adapter = adapter
 
         activity?.let {
-            viewModel = ViewModelProviders.of(it).get(MainViewModel::class.java)
+            viewModel = ViewModelProviders.of(it).get(AddAppViewModel::class.java)
         } ?: throw Error("How the fuck is this fragment alive while there's no activity?")
-        viewModel.installedApps.observe(this, Observer {
-            val homeApps = viewModel.apps.value.orEmpty()
+        viewModel.apps.observe(this, Observer {
             it?.let { apps ->
-                adapter.setItems(apps.filterNot { app -> homeApps.map { homeApp -> homeApp.packageName }.contains(app.packageName) })
+                adapter.setItems(apps)
                 add_app_fragment_progress_bar.visibility = View.GONE
             } ?: run {
                 add_app_fragment_progress_bar.visibility = View.VISIBLE
@@ -49,6 +51,11 @@ class AddAppFragment : BaseFragment(), OnAppClickedListener {
         add_app_fragment_edit_text.addTextChangedListener(onTextChangeListener)
     }
 
+    override fun onResume() {
+        super.onResume()
+        viewModel.setInstalledApps(getInstalledApps())
+    }
+
     override fun onDestroy() {
         super.onDestroy()
         add_app_fragment_edit_text?.removeTextChangedListener(onTextChangeListener)
@@ -64,16 +71,34 @@ class AddAppFragment : BaseFragment(), OnAppClickedListener {
             // Do nothing
         }
 
-        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
-            s?.let {
-                LoadInstalledApps(viewModel, s.toString()).execute(context!!.packageManager)
-            }
+        override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
+            viewModel.filterApps(s.toString())
         }
     }
 
     override fun onAppClicked(app: App) {
-        viewModel.add(app)
+        viewModel.addAppToHomeScreen(app)
         Navigation.findNavController(add_app_fragment).popBackStack()
     }
 
+    private fun getInstalledApps(): List<App> {
+        val pm = activity!!.packageManager
+        val list = mutableListOf<App>()
+        val main = Intent(Intent.ACTION_MAIN, null)
+        main.addCategory(Intent.CATEGORY_LAUNCHER)
+        val activitiesList = pm.queryIntentActivities(main, 0)
+        Collections.sort(activitiesList, ResolveInfo.DisplayNameComparator(pm))
+        activitiesList.indices.forEach {
+            val item = activitiesList[it]
+            val activity = item.activityInfo
+            val app = App(
+                    activitiesList[it].loadLabel(pm).toString(),
+                    activity.applicationInfo.packageName, activity.name
+            )
+            list.add(app)
+        }
+        val filter = mutableListOf<String>()
+        filter.add(BuildConfig.APPLICATION_ID)
+        return list.filterNot { filter.contains(it.packageName) }
+    }
 }

+ 10 - 10
app/src/main/java/com/sduduzog/slimlauncher/ui/options/CustomiseAppsFragment.kt

@@ -13,11 +13,11 @@ import androidx.recyclerview.widget.ItemTouchHelper
 import androidx.recyclerview.widget.RecyclerView
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.adapters.CustomAppsAdapter
-import com.sduduzog.slimlauncher.data.MainViewModel
-import com.sduduzog.slimlauncher.data.model.HomeApp
-import com.sduduzog.slimlauncher.dialogs.RenameAppDialog
+import com.sduduzog.slimlauncher.models.HomeApp
+import com.sduduzog.slimlauncher.models.CustomiseAppsViewModel
+import com.sduduzog.slimlauncher.ui.dialogs.RemoveAllAppsDialog
+import com.sduduzog.slimlauncher.ui.dialogs.RenameAppDialog
 import com.sduduzog.slimlauncher.utils.BaseFragment
-import com.sduduzog.slimlauncher.utils.LoadInstalledApps
 import com.sduduzog.slimlauncher.utils.OnItemActionListener
 import com.sduduzog.slimlauncher.utils.OnShitDoneToAppsListener
 import kotlinx.android.synthetic.main.customise_apps_fragment.*
@@ -27,7 +27,7 @@ class CustomiseAppsFragment : BaseFragment(), OnShitDoneToAppsListener {
 
     override fun getFragmentView(): ViewGroup = customise_apps_fragment
 
-    private lateinit var viewModel: MainViewModel
+    private lateinit var viewModel: CustomiseAppsViewModel
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
         return inflater.inflate(R.layout.customise_apps_fragment, container, false)
@@ -38,7 +38,7 @@ class CustomiseAppsFragment : BaseFragment(), OnShitDoneToAppsListener {
 
         val adapter = CustomAppsAdapter(this)
         activity?.let {
-            viewModel = ViewModelProviders.of(it).get(MainViewModel::class.java)
+            viewModel = ViewModelProviders.of(it).get(CustomiseAppsViewModel::class.java)
         } ?: throw Error("Activity null, something here is fucked up")
 
         viewModel.apps.observe(this, Observer {
@@ -55,11 +55,8 @@ class CustomiseAppsFragment : BaseFragment(), OnShitDoneToAppsListener {
             } ?: adapter.setItems(listOf())
         })
         customise_apps_fragment_remove_all.setOnClickListener {
-            viewModel.apps.value?.let {
-                viewModel.remove(*it.toTypedArray())
-            }
+            RemoveAllAppsDialog.getInstance(viewModel.apps.value!!, viewModel).show(fragmentManager, "REMOVE_APPS")
         }
-        LoadInstalledApps(viewModel).execute(context!!.packageManager)
 
         customise_apps_fragment_list.adapter = adapter
         val listener: OnItemActionListener = adapter
@@ -128,6 +125,9 @@ class CustomiseAppsFragment : BaseFragment(), OnShitDoneToAppsListener {
                 R.id.ca_menu_remove -> {
                     viewModel.remove(app)
                 }
+                R.id.ca_menu_reset -> {
+                    viewModel.reset(app)
+                }
             }
             true
         }

+ 6 - 9
app/src/main/java/com/sduduzog/slimlauncher/ui/options/OptionsFragment.kt

@@ -3,7 +3,6 @@ package com.sduduzog.slimlauncher.ui.options
 import android.content.Context.MODE_PRIVATE
 import android.content.Intent
 import android.net.Uri
-import android.os.Build
 import android.os.Bundle
 import android.provider.Settings
 import android.view.LayoutInflater
@@ -12,8 +11,8 @@ import android.view.ViewGroup
 import androidx.core.content.edit
 import androidx.navigation.Navigation
 import com.sduduzog.slimlauncher.R
-import com.sduduzog.slimlauncher.dialogs.ChangeThemeDialog
-import com.sduduzog.slimlauncher.dialogs.ChooseTimeFormatDialog
+import com.sduduzog.slimlauncher.ui.dialogs.ChangeThemeDialog
+import com.sduduzog.slimlauncher.ui.dialogs.ChooseTimeFormatDialog
 import com.sduduzog.slimlauncher.utils.BaseFragment
 import kotlinx.android.synthetic.main.options_fragment.*
 
@@ -34,12 +33,10 @@ class OptionsFragment : BaseFragment() {
             val intent = Intent(Settings.ACTION_SETTINGS)
             launchActivity(it, intent)
         }
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            options_fragment_device_settings.setOnLongClickListener {
-                val intent = Intent(Settings.ACTION_HOME_SETTINGS)
-                launchActivity(it, intent)
-                true
-            }
+        options_fragment_device_settings.setOnLongClickListener {
+            val intent = Intent(Settings.ACTION_HOME_SETTINGS)
+            launchActivity(it, intent)
+            true
         }
         options_fragment_change_theme.setOnClickListener {
             val changeThemeDialog = ChangeThemeDialog.getThemeChooser()

+ 1 - 0
app/src/main/java/com/sduduzog/slimlauncher/utils/BaseFragment.kt

@@ -34,6 +34,7 @@ abstract class BaseFragment : Fragment() {
             context!!.theme.resolveAttribute(R.attr.colorPrimary, value, true)
             activity!!.window.statusBarColor = value.data
         }
+
     }
 
     override fun onStart() {

+ 0 - 61
app/src/main/java/com/sduduzog/slimlauncher/utils/LoadInstalledApps.kt

@@ -1,61 +0,0 @@
-package com.sduduzog.slimlauncher.utils
-
-import android.content.Intent
-import android.content.pm.PackageManager
-import android.content.pm.ResolveInfo
-import android.os.AsyncTask
-import android.os.Build
-import android.provider.AlarmClock
-import android.provider.MediaStore
-import com.sduduzog.slimlauncher.BuildConfig
-import com.sduduzog.slimlauncher.data.MainViewModel
-import com.sduduzog.slimlauncher.data.model.App
-import java.util.*
-
-class LoadInstalledApps(private val viewModel: MainViewModel?, private val filterString: String = "") : AsyncTask<PackageManager, Unit, List<App>>() {
-
-    private lateinit var packageManager: PackageManager
-
-    override fun doInBackground(vararg params: PackageManager): List<App> {
-        val pm = params[0]
-        packageManager = pm
-        val list = mutableListOf<App>()
-        val main = Intent(Intent.ACTION_MAIN, null)
-        main.addCategory(Intent.CATEGORY_LAUNCHER)
-        val activitiesList = pm.queryIntentActivities(main, 0)
-        Collections.sort(activitiesList, ResolveInfo.DisplayNameComparator(pm))
-        for (i in activitiesList.indices) {
-            val item = activitiesList[i]
-            val activity = item.activityInfo
-            val app = App(activitiesList[i].loadLabel(pm).toString(), activity.applicationInfo.packageName, activity.name)
-            list.add(app)
-        }
-
-        val filter = mutableListOf<String>()
-
-        Intent(Intent.ACTION_DIAL).resolveActivity(packageManager)?.let {
-            filter.add(it.packageName)
-        }
-        Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_APP_CALENDAR).resolveActivity(packageManager)?.let {
-            filter.add(it.packageName)
-        }
-
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
-            Intent(AlarmClock.ACTION_SHOW_ALARMS).resolveActivity(packageManager)?.let {
-                filter.add(it.packageName)
-            }
-        }
-
-        Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA).resolveActivity(packageManager)?.let {
-            filter.add(it.packageName)
-        }
-
-        filter.add(BuildConfig.APPLICATION_ID)
-
-        return list.filterNot { filter.contains(it.packageName) }
-    }
-
-    override fun onPostExecute(result: List<App>) {
-        viewModel?.installedApps?.value = result.filter { it.appName.contains(filterString, true) }
-    }
-}

+ 1 - 1
app/src/main/java/com/sduduzog/slimlauncher/utils/OnLaunchAppListener.kt

@@ -1,7 +1,7 @@
 package com.sduduzog.slimlauncher.utils
 
 import android.view.View
-import com.sduduzog.slimlauncher.data.model.HomeApp
+import com.sduduzog.slimlauncher.models.HomeApp
 
 interface OnLaunchAppListener{
     fun onLaunch(app: HomeApp, view: View)

+ 1 - 1
app/src/main/java/com/sduduzog/slimlauncher/utils/OnShitDoneToAppsListener.kt

@@ -1,7 +1,7 @@
 package com.sduduzog.slimlauncher.utils
 
 import android.view.View
-import com.sduduzog.slimlauncher.data.model.HomeApp
+import com.sduduzog.slimlauncher.models.HomeApp
 
 interface OnShitDoneToAppsListener {
     fun onAppsUpdated(list: List<HomeApp>)

+ 0 - 9
app/src/main/res/layout/home_fragment.xml

@@ -50,15 +50,6 @@
         android:textAppearance="@style/TextAppearance.AppCompat"
         android:textSize="@dimen/_18ssp" />
 
-    <TextView
-        android:id="@+id/home_fragment_notes"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:padding="8dp"
-        android:text="@string/main_fragment_notes"
-        android:textAppearance="@style/TextAppearance.AppCompat"
-        android:textSize="@dimen/_18ssp" />
-
     <ImageView
         android:id="@+id/home_fragment_call"
         android:layout_width="wrap_content"

+ 112 - 0
app/src/main/res/layout/home_motion_01.xml

@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.motion.widget.MotionLayout 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:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:id="@+id/home_fragment_time"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/_42sdp"
+        android:text="@string/main_placeholder_clock"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        android:textSize="@dimen/_40ssp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.506"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/home_fragment_date"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:padding="@dimen/_4sdp"
+        android:text="@string/main_placeholder_date"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        android:textSize="@dimen/_12sdp"
+        app:layout_constraintEnd_toEndOf="@+id/home_fragment_time"
+        app:layout_constraintStart_toStartOf="@+id/home_fragment_time"
+        app:layout_constraintTop_toBottomOf="@+id/home_fragment_time" />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/home_fragment_list"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/_16sdp"
+        android:layout_marginLeft="@dimen/_16sdp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="@dimen/_16sdp"
+        android:layout_marginRight="@dimen/_16sdp"
+        android:layout_marginBottom="@dimen/_8sdp"
+        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.0"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintVertical_bias="0.55"
+        tools:itemCount="4"
+        tools:listitem="@layout/main_fragment_list_item" />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/home_fragment_list_exp"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/_16sdp"
+        android:layout_marginLeft="@dimen/_16sdp"
+        android:layout_marginTop="@dimen/_16sdp"
+        android:layout_marginEnd="@dimen/_16sdp"
+        android:layout_marginRight="@dimen/_16sdp"
+        android:layout_marginBottom="@dimen/_8sdp"
+        android:alpha="-2"
+        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="parent"
+        tools:itemCount="3"
+        tools:listitem="@layout/main_fragment_list_item" />
+
+    <TextView
+        android:id="@+id/home_fragment_options"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:alpha="-3"
+        android:padding="@dimen/_8sdp"
+        android:text="@string/main_fragment_options"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        android:textSize="@dimen/_18ssp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="@+id/home_fragment_list_exp"
+        app:layout_constraintTop_toBottomOf="@+id/home_fragment_list_exp" />
+
+    <ImageView
+        android:id="@+id/home_fragment_call"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/_8sdp"
+        android:layout_marginLeft="@dimen/_8sdp"
+        android:layout_marginBottom="@dimen/_8sdp"
+        android:padding="@dimen/_8sdp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:srcCompat="@drawable/ic_call"
+        tools:ignore="ContentDescription" />
+
+
+    <ImageView
+        android:id="@+id/home_fragment_camera"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="@dimen/_8sdp"
+        android:layout_marginRight="@dimen/_8sdp"
+        android:layout_marginBottom="@dimen/_8sdp"
+        android:padding="@dimen/_8sdp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:srcCompat="@drawable/ic_photo_camera"
+        tools:ignore="ContentDescription" />
+
+</androidx.constraintlayout.motion.widget.MotionLayout>

+ 115 - 0
app/src/main/res/layout/home_motion_02.xml

@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.motion.widget.MotionLayout 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:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:id="@+id/home_fragment_time"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/_64sdp"
+        android:alpha="-1"
+        android:text="@string/main_placeholder_clock"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        android:textSize="@dimen/_40ssp"
+        app:layout_constraintBottom_toTopOf="@+id/home_fragment_date"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toStartOf="parent" />
+
+    <TextView
+        android:id="@+id/home_fragment_date"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:alpha="-1"
+        android:padding="@dimen/_4sdp"
+        android:text="@string/main_placeholder_date"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        android:textSize="@dimen/_12sdp"
+        app:layout_constraintBottom_toTopOf="parent"
+        app:layout_constraintEnd_toEndOf="@+id/home_fragment_time"
+        app:layout_constraintStart_toStartOf="@+id/home_fragment_time" />
+
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/home_fragment_list"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/_16sdp"
+        android:layout_marginLeft="@dimen/_16sdp"
+        android:layout_marginEnd="@dimen/_16sdp"
+        android:layout_marginRight="@dimen/_16sdp"
+        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+        app:layout_constraintBottom_toTopOf="@+id/home_fragment_list_exp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/home_fragment_date"
+        app:layout_constraintVertical_chainStyle="packed"
+        tools:itemCount="4"
+        tools:listitem="@layout/main_fragment_list_item" />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/home_fragment_list_exp"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/_16sdp"
+        android:layout_marginLeft="@dimen/_16sdp"
+        android:layout_marginEnd="@dimen/_16sdp"
+        android:layout_marginRight="@dimen/_16sdp"
+        android:layout_marginBottom="@dimen/_32sdp"
+        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.5"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/home_fragment_list"
+        tools:itemCount="3"
+        tools:listitem="@layout/main_fragment_list_item" />
+
+
+    <TextView
+        android:id="@+id/home_fragment_options"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/_16sdp"
+        android:layout_marginLeft="@dimen/_16sdp"
+        android:layout_marginBottom="@dimen/_16sdp"
+        android:padding="@dimen/_8sdp"
+        android:text="@string/main_fragment_options"
+        android:textAppearance="@style/TextAppearance.AppCompat"
+        android:textSize="@dimen/_18ssp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="@+id/home_fragment_list_exp" />
+
+
+    <ImageView
+        android:id="@+id/home_fragment_call"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/_8sdp"
+        android:layout_marginLeft="@dimen/_8sdp"
+        android:alpha="-1"
+        android:padding="@dimen/_8sdp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="parent"
+        app:srcCompat="@drawable/ic_call"
+        tools:ignore="ContentDescription" />
+
+    <ImageView
+        android:id="@+id/home_fragment_camera"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="@dimen/_8sdp"
+        android:layout_marginRight="@dimen/_8sdp"
+        android:alpha="-1"
+        android:padding="@dimen/_8sdp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toBottomOf="parent"
+        app:srcCompat="@drawable/ic_photo_camera"
+        tools:ignore="ContentDescription" />
+
+</androidx.constraintlayout.motion.widget.MotionLayout>
+

+ 3 - 0
app/src/main/res/menu/customise_apps_popup_menu.xml

@@ -7,4 +7,7 @@
     <item
         android:id="@+id/ca_menu_remove"
         android:title="@string/menu_remove" />
+    <item
+        android:id="@+id/ca_menu_reset"
+        android:title="@string/menu_reset"/>
 </menu>

+ 20 - 0
app/src/main/res/values-ru/strings.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="choose_theme_dialog_title">Выбрать тему</string>
+    <string name="choose_time_format_dialog_title">Выбрать формат времени</string>
+    <string name="customise_apps_fragment_add">Добавить</string>
+    <string name="customise_apps_fragment_remove_all">Удалить все</string>
+    <string name="main_fragment_options">Настройки</string>
+    <string name="options_fragment_about_slim">О Slim</string>
+    <string name="menu_remove">Удалить</string>
+    <string name="menu_rename">Переименовать</string>
+    <string name="options_fragment_change_theme">Изменить тему</string>
+    <string name="options_fragment_choose_time_format">Изменить формат времени</string>
+    <string name="options_fragment_customise_apps">Настроить приложения</string>
+    <string name="options_fragment_device_settings">Настройки устройства</string>
+    <string name="add_apps_fragment_search_apps">Поиск приложений</string>
+    <string name="options_fragment_toggle_status_bar">Вкл\\выкл строку состояния</string>
+    <string name="options_fragment_hide_status_bar">Скрыть строку состояния</string>
+    <string name="options_fragment_show_status_bar">Показать строку состояния</string>
+    <string name="menu_reset">Сброс</string>
+</resources>

+ 20 - 0
app/src/main/res/values-uk/strings.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="add_apps_fragment_search_apps">Пошук застосунків</string>
+    <string name="choose_time_format_dialog_title">Обрати формат часу</string>
+    <string name="customise_apps_fragment_add">Додати</string>
+    <string name="customise_apps_fragment_remove_all">Видалити всі</string>
+    <string name="main_fragment_options">Налаштування</string>
+    <string name="menu_remove">Видалити</string>
+    <string name="menu_rename">Перейменувати</string>
+    <string name="options_fragment_about_slim">Про Slim</string>
+    <string name="options_fragment_choose_time_format">Обрати формат часу</string>
+    <string name="options_fragment_customise_apps">Налаштування програм</string>
+    <string name="options_fragment_device_settings">Налаштування пристрою</string>
+    <string name="choose_theme_dialog_title">Обрати тему</string>
+    <string name="options_fragment_change_theme">Змінити тему</string>
+    <string name="options_fragment_toggle_status_bar">Вкл\\вимк смужку стану</string>
+    <string name="options_fragment_hide_status_bar">Сховати рядок стану</string>
+    <string name="options_fragment_show_status_bar">Показати рядок стану</string>
+    <string name="menu_reset">Ясно</string>
+</resources>

+ 14 - 12
app/src/main/res/values/strings.xml

@@ -1,8 +1,8 @@
 <resources>
-    <string name="app_name">Slim Launcher</string>
-    <string name="slim_url">http://sduduzog.github.io/slim-launcher/</string>
-    <string name="main_placeholder_clock">00:00</string>
-    <string name="main_placeholder_date">Sat, Apr 20</string>
+    <string name="app_name" translatable="false">Slim Launcher</string>
+    <string name="slim_url" translatable="false">http://sduduzog.github.io/slim-launcher/</string>
+    <string name="main_placeholder_clock" translatable="false">00:00</string>
+    <string name="main_placeholder_date" translatable="false">Sat, Apr 20</string>
 
     <string-array name="themes_array">
         <item>Default</item>
@@ -18,12 +18,10 @@
         <item>12 Hour</item>
     </string-array>
 
-    <string name="home_fragment_tasks">Tasks</string>
-
-    <string name="prefs_settings">settings</string>
-    <string name="prefs_settings_key_theme">key_theme</string>
-    <string name="prefs_settings_key_time_format">clock_type</string>
-    <string name="prefs_settings_key_toggle_status_bar">hide_status_bar</string>
+    <string name="prefs_settings" translatable="false">settings</string>
+    <string name="prefs_settings_key_theme" translatable="false">key_theme</string>
+    <string name="prefs_settings_key_time_format" translatable="false">clock_type</string>
+    <string name="prefs_settings_key_toggle_status_bar" translatable="false">hide_status_bar</string>
     <string name="choose_time_format_dialog_title">Choose Time Format</string>
     <string name="main_fragment_options">Options</string>
     <string name="options_fragment_about_slim">About Slim</string>
@@ -32,13 +30,17 @@
     <string name="options_fragment_choose_time_format">Choose Time Format</string>
     <string name="options_fragment_customise_apps">Customise Apps</string>
     <string name="options_fragment_toggle_status_bar">Toggle Status Bar</string>
-    <string name="main_fragment_notes">Notes</string>
+    <string name="options_fragment_hide_status_bar">Hide Status Bar</string>
+    <string name="options_fragment_show_status_bar">Show Status Bar</string>
     <string name="customise_apps_fragment_add">Add</string>
     <string name="menu_rename">Rename</string>
     <string name="menu_remove">Remove</string>
     <string name="choose_theme_dialog_title">Choose Theme</string>
     <string name="add_apps_fragment_search_apps">Search apps</string>
-    <string name="tasks_fragment_enter_a_new_task">Enter a new task</string>
     <string name="customise_apps_fragment_remove_all">Remove all</string>
+    <string name="menu_reset">Reset</string>
+    <string name="remove_all_apps_dialog_title" translatable="false">Remove All Apps</string>
+    <string name="remove_all_apps_dialog_message" translatable="false">"This action will not uninstall your apps."
+    "It is just to confirm if you're clearing this list on purpose"</string>
 
 </resources>

+ 3 - 187
app/src/main/res/xml/home_motion_scene.xml

@@ -1,9 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
-<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:motion="http://schemas.android.com/apk/res-auto">
+<MotionScene xmlns:motion="http://schemas.android.com/apk/res-auto">
     <Transition
-        motion:constraintSetEnd="@+id/end"
-        motion:constraintSetStart="@+id/start"
+        motion:constraintSetEnd="@layout/home_motion_02"
+        motion:constraintSetStart="@layout/home_motion_01"
         motion:duration="250">
         <OnSwipe
             motion:dragDirection="dragUp"
@@ -11,187 +10,4 @@
             motion:touchAnchorSide="bottom" />
     </Transition>
 
-    <ConstraintSet android:id="@+id/start">
-        <Constraint
-            android:id="@+id/home_fragment_time"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/_42sdp"
-            motion:layout_constraintEnd_toEndOf="parent"
-            motion:layout_constraintHorizontal_bias="0.506"
-            motion:layout_constraintStart_toStartOf="parent"
-            motion:layout_constraintTop_toTopOf="parent" />
-
-        <Constraint
-            android:id="@+id/home_fragment_time_format"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/_10sdp"
-            motion:layout_constraintStart_toEndOf="@+id/home_fragment_time"
-            motion:layout_constraintTop_toTopOf="@+id/home_fragment_time" />
-
-        <Constraint
-            android:id="@+id/home_fragment_date"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:padding="@dimen/_4sdp"
-            android:text="@string/main_placeholder_date"
-            motion:layout_constraintEnd_toEndOf="@+id/home_fragment_time"
-            motion:layout_constraintStart_toStartOf="@+id/home_fragment_time"
-            motion:layout_constraintTop_toBottomOf="@+id/home_fragment_time" />
-
-        <Constraint
-            android:id="@+id/home_fragment_list"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/_16sdp"
-            android:layout_marginLeft="@dimen/_16sdp"
-            android:layout_marginTop="8dp"
-            android:layout_marginEnd="@dimen/_16sdp"
-            android:layout_marginRight="@dimen/_16sdp"
-            android:layout_marginBottom="@dimen/_8sdp"
-            motion:layout_constraintBottom_toBottomOf="parent"
-            motion:layout_constraintEnd_toEndOf="parent"
-            motion:layout_constraintHorizontal_bias="0.0"
-            motion:layout_constraintStart_toStartOf="parent"
-            motion:layout_constraintTop_toTopOf="parent"
-            motion:layout_constraintVertical_bias="0.55" />
-
-        <Constraint
-            android:id="@+id/home_fragment_list_exp"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/_16sdp"
-            android:layout_marginLeft="@dimen/_16sdp"
-            android:layout_marginTop="@dimen/_16sdp"
-            android:layout_marginEnd="@dimen/_16sdp"
-            android:layout_marginRight="@dimen/_16sdp"
-            android:layout_marginBottom="@dimen/_8sdp"
-            android:alpha="-2"
-            motion:layout_constraintEnd_toEndOf="parent"
-            motion:layout_constraintHorizontal_bias="0.5"
-            motion:layout_constraintStart_toStartOf="parent"
-            motion:layout_constraintTop_toBottomOf="parent" />
-
-        <Constraint
-            android:id="@+id/home_fragment_options"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:alpha="-3"
-            motion:layout_constraintBottom_toBottomOf="parent"
-            motion:layout_constraintStart_toStartOf="@+id/home_fragment_list_exp"
-            motion:layout_constraintTop_toBottomOf="@+id/home_fragment_list_exp" />
-
-        <Constraint
-            android:id="@+id/home_fragment_notes"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:alpha="-3"
-            motion:layout_constraintBottom_toBottomOf="parent"
-            motion:layout_constraintEnd_toEndOf="@+id/home_fragment_list_exp"
-            motion:layout_constraintTop_toBottomOf="@+id/home_fragment_list_exp" />
-
-        <Constraint
-            android:id="@+id/home_fragment_call"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/_8sdp"
-            android:layout_marginLeft="@dimen/_8sdp"
-            android:layout_marginBottom="@dimen/_8sdp"
-            motion:layout_constraintBottom_toBottomOf="parent"
-            motion:layout_constraintStart_toStartOf="parent" />
-
-        <Constraint
-            android:id="@+id/home_fragment_camera"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginEnd="@dimen/_8sdp"
-            android:layout_marginRight="@dimen/_8sdp"
-            android:layout_marginBottom="@dimen/_8sdp"
-            motion:layout_constraintBottom_toBottomOf="parent"
-            motion:layout_constraintEnd_toEndOf="parent" />
-    </ConstraintSet>
-
-    <ConstraintSet android:id="@+id/end">
-
-        <Constraint
-            android:id="@+id/home_fragment_time"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:alpha="-1"
-            motion:layout_constraintBottom_toTopOf="@+id/home_fragment_date"
-            motion:layout_constraintEnd_toEndOf="parent"
-            motion:layout_constraintHorizontal_bias="0.5"
-            motion:layout_constraintStart_toStartOf="parent" />
-
-        <Constraint
-            android:id="@+id/home_fragment_date"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:alpha="-1"
-            motion:layout_constraintBottom_toTopOf="parent"
-            motion:layout_constraintEnd_toEndOf="@+id/home_fragment_time"
-            motion:layout_constraintStart_toStartOf="@+id/home_fragment_time" />
-
-        <Constraint
-            android:id="@+id/home_fragment_list"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/_16sdp"
-            android:layout_marginLeft="@dimen/_16sdp"
-            android:layout_marginEnd="@dimen/_16sdp"
-            android:layout_marginRight="@dimen/_16sdp"
-            motion:layout_constraintBottom_toTopOf="@+id/home_fragment_list_exp"
-            motion:layout_constraintEnd_toEndOf="parent"
-            motion:layout_constraintHorizontal_bias="0.5"
-            motion:layout_constraintStart_toStartOf="parent"
-            motion:layout_constraintTop_toBottomOf="@+id/home_fragment_date"
-            motion:layout_constraintVertical_chainStyle="packed" />
-
-        <Constraint
-            android:id="@+id/home_fragment_list_exp"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/_16sdp"
-            android:layout_marginLeft="@dimen/_16sdp"
-            android:layout_marginEnd="@dimen/_16sdp"
-            android:layout_marginRight="@dimen/_16sdp"
-            android:layout_marginBottom="@dimen/_32sdp"
-            motion:layout_constraintBottom_toBottomOf="parent"
-            motion:layout_constraintEnd_toEndOf="parent"
-            motion:layout_constraintHorizontal_bias="0.5"
-            motion:layout_constraintStart_toStartOf="parent"
-            motion:layout_constraintTop_toBottomOf="@+id/home_fragment_list" />
-
-        <Constraint
-            android:id="@+id/home_fragment_options"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/_16sdp"
-            android:layout_marginLeft="@dimen/_16sdp"
-            android:layout_marginBottom="@dimen/_16sdp"
-            motion:layout_constraintBottom_toBottomOf="parent"
-            motion:layout_constraintStart_toStartOf="@+id/home_fragment_list_exp" />
-
-        <Constraint
-            android:id="@+id/home_fragment_call"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/_8sdp"
-            android:layout_marginLeft="@dimen/_8sdp"
-            android:alpha="-1"
-            motion:layout_constraintStart_toStartOf="parent"
-            motion:layout_constraintTop_toBottomOf="parent" />
-
-        <Constraint
-            android:id="@+id/home_fragment_camera"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginEnd="@dimen/_8sdp"
-            android:layout_marginRight="@dimen/_8sdp"
-            android:alpha="-1"
-            motion:layout_constraintEnd_toEndOf="parent"
-            motion:layout_constraintTop_toBottomOf="parent" />
-
-    </ConstraintSet>
 </MotionScene>

+ 2 - 2
build.gradle

@@ -1,13 +1,13 @@
 // Top-level build file where you can add configuration options common to all sub-projects/modules.
 
 buildscript {
-    ext.kotlin_version = '1.3.31'
+    ext.kotlin_version = '1.3.41'
     repositories {
         google()
         jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.4.2'
+        classpath 'com.android.tools.build:gradle:3.5.0'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
 
         // NOTE: Do not place your application dependencies here; they belong

BIN
docs/assets/badge_get-it-on-en-us.png


BIN
docs/assets/favicon-16x16.png


BIN
docs/assets/favicon-32x32.png


BIN
docs/assets/google-play-badge.png


BIN
docs/assets/home-screen.png


BIN
docs/assets/ic_launcher-web.png


BIN
docs/assets/slim-logo.jpg


BIN
docs/favicon.ico


+ 47 - 56
docs/index.html

@@ -1,68 +1,59 @@
 <!DOCTYPE html>
+<!--suppress HtmlFormInputWithoutLabel, HtmlUnknownTag -->
 <html lang="en">
 
 <head>
-    <meta charset="UTF-8"/>
-    <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
-    <meta content="ie=edge" http-equiv="X-UA-Compatible"/>
-    <link href="./main.css" rel="stylesheet">
-    <title>Slim Launcher - Fewer distraction, more life</title>
+  <meta charset="UTF-8"/>
+  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
+  <meta content="ie=edge" http-equiv="X-UA-Compatible"/>
+  <link href="https://fonts.googleapis.com/css?family=Ubuntu&display=swap" rel="stylesheet">
+  <link href="./main.css" rel="stylesheet">
+  <link rel="icon" type="image/png" href="./assets/favicon-32x32.png" sizes="32x32"/>
+  <link rel="icon" type="image/png" href="./assets/favicon-16x16.png" sizes="16x16"/>
+  <title>Slim</title>
 </head>
 
 <body>
-<header>
-    <h1>Slim Launcher</h1>
-    <h3>v2.3</h3>
+<header class="site-header">
+  <a href="/slim-launcher/">
+    <img src="./assets/slim-logo.jpg" class="site-header__logo" alt="Slim logo">
+  </a>
+  <h2 class="site-header__title">Slim Launcher</h2>
+  <nav class="header-nav">
+    <input type="checkbox" class="nav-trigger" name="nav-trigger" id="nav-trigger"/>
+    <label for="nav-trigger">
+      <div class="menu-icon">
+        <span class="menu-icon__elem"></span>
+        <span class="menu-icon__elem"></span>
+        <span class="menu-icon__elem"></span>
+      </div>
+    </label>
+    <div class="trigger">
+      <a href="https://github.com/sduduzog/slim-launcher" class="header-nav__elem">Github Repo</a>
+    </div>
+  </nav>
 </header>
-<main>
-    <article>
-        <h2>Frequently Asked Questions (FAQs)</h2>
-        <ol>
-            <li><h3>Where is the app drawer?</h3></li>
-            <span>There is no app drawer! You don't need an app drawer when all the apps you need fit in one screen.</span>
-            <li><h3>Why can't I access all the other apps on my phone?</h3></li>
-            <span>Clearly you didn't understand the whole idea of this app.
-                The whole point of this app is to stop you from doing exactly that. Google 'minimalism'</span>
-            <li><h3>How do I get to my other apps?</h3></li>
-            <span>Well simple! Swipe up from your home screen &gt; Go to Options &gt; Tap Customise apps. have fun!</span>
-            <li><h3>You should add a google search bar and a way to access all the other apps.</h3></li>
-            <span>First of all this is not a question! Secondly, I do appreciate the feedback but
-                let it not be against the reason why the app exists in the first place</span>
-            <li><h3>Why can't I set a wallpaper?</h3></li>
-            <span>Well why do you want a wallpaper? You want to look at your phone? for how long? for what? For who?
-            Read a book instead.</span>
-            <li><h3>Hey, your app sucks!</h3></li>
-            <span>Where's yours that doesn't suck?!?</span>
-            <li><h3>Is it possible to change the apps on the home screen?</h3></li>
-            <span>Yes, you can. If you have the latest version installed, you'll find that adding, renaming
-            and exchanging apps has been made easier.</span>
-            <li><h3>WHAT ABOUT OTHER APPS?</h3></li>
-            <span><i>Where's Thanos when you need him the most?...</i> Did you even read the description of the app?</span>
-            <li><h3>Does it support other languages?</h3></li>
-            <span>No, unfortunately. I would love for the app to be accessible no matter the language.
-                But the app is free, I can't afford to pay for translation services as of yet. If you know
-            a language that you would like this app to support and you are fluent in it, please shoot me an email and we'll make magic happen</span>
-            <li><h3>I have a youtube channel, can I review your app for a small fee? I have many subscribers and
-            my videos have millions of views</h3></li>
-            <span>Like I said! I'm broke</span>
-            <li><h3>Is the app free forever?</h3></li>
-            <span>Yes. I made the app because I needed it myself. Then I decided to share it with the world.
-                I see no reason why I should make other people pay for it.
-                Fun fact! I actually made this because I didn't want to pay for something I can create myself</span>
-            <li><h3>How do I support the project</h3></li>
-            <span>You can become a tester. Shoot me an email if you need more info regarding this.
-                This way, you can give feedback that will shape the direction of the app and make a better experience for everyone.
-            You can contribute on the project on GitHub.
-                The most of the work has been put in to make the code more modular and readable
-                so that it's easy for other people to add in their input as PRs. You can also
-                <a href="https://buymeacoff.ee/sduduzog">buy me a coffee</a>.
-                I will probably buy a big mac with the cash or go watch a movie to reward myself.
-                I will however spend it on the project if stated otherwise. I wouldn't be able to live with myself if I don't</span>
-            <li><h3>Why does this website look like crap?</h3></li>
-            <span>I hit a designers block.</span>
-        </ol>
-    </article>
+<main role="main">
+  <section role="banner" class="banner">
+    <div class="wrapper">
+      <h1>A minimalist launcher that only allows you to use fewer apps on your phone</h1>
+      <img src="./assets/home-screen.png" class="screenshot" alt="Home screen screenshot">
+      <a href="https://play.google.com/store/apps/details?id=com.sduduzog.slimlauncher">
+        <img class="badge g-play"
+             src="./assets/google-play-badge.png"
+             alt="Google Play badge">
+      </a>
+      <a href="https://f-droid.org/en/packages/com.sduduzog.slimlauncher">
+        <img class="badge f-droid"
+             src="./assets/badge_get-it-on-en-us.png"
+             alt="F-droid badge">
+      </a>
+    </div>
+  </section>
 </main>
+<footer>
+  <p>Made with ❤ by <a href="https://sduduzog.github.io">Sdu</a></p>
+</footer>
 </body>
 
 </html>

+ 245 - 6
docs/main.css

@@ -1,16 +1,255 @@
-*{
+:root{
+  --max-width: 1280px;
+}
+* {
   box-sizing: border-box;
 }
-body{
+
+body {
   margin: 0;
-  font-family: monospace;
+  font-family: 'Ubuntu', sans-serif;
 }
 
-header{
-  padding: 20px;
+.site-header{
+  display: flex;
+  padding: 5px 50px;
+  margin: 30px auto;
+  max-width: var(--max-width);
+}
+
+.site-header__title{
+  margin: 0;
+  padding: 10px;
+}
+
+.site-header__logo{
+  height: 50px;
+  width: 50px;
+  display: block;
+  flex-shrink: 0;
+}
+.header-nav{
+  flex-grow: 1;
+  display: flex;
+  justify-content: flex-end;
+}
+
+.nav-trigger{
+  display: none;
+}
+
+.menu-icon{
+  display: none;
+}
+
+.header-nav__elem{
+  color: #000000;
+  display: inline-block;
+  margin: 15px;
+  text-transform: capitalize;
+  cursor: pointer;
+  text-decoration: none;
+}
+
+.header-nav__elem:hover{
+  text-decoration: underline;
+}
+main {
+  margin: auto;
+}
+
+main section > * {
+  max-width: var(--max-width);
 }
 
-main{
+.wrapper {
+  padding: 80px 100px;
   margin: auto;
+}
+
+.banner .wrapper {
+  display: grid;
+  gap: 20px;
+  grid-template-columns: 1fr 1fr 300px;
+  grid-template-rows: max-content;
+}
+
+.banner h1 {
+  grid-column: 1 / 3;
+  margin: 100px 0 0;
+  font-weight: lighter;
+  font-size: xx-large;
+  text-align: center;
+  padding: 20px;
+}
+
+.banner img {
+  width: 100%;
+  height: auto;
+  display: block;
+}
+
+.banner .screenshot {
+  box-shadow: 0 12px 30px 8px #363636;
+  grid-column: 3 / 4;
+  grid-row: 1 / 3;
+}
+
+.banner .badge {
   padding: 20px;
+  max-width: 260px;
+  margin: 20px auto auto;
+}
+
+.banner .g-play {
+  margin-left: auto;
+  margin-right: 0;
+}
+
+.banner .f-droid {
+  margin-left: 0;
+}
+
+footer{
+  text-align: center;
+}
+
+@media screen and (max-width: 768px) {
+  .banner .wrapper {
+    grid-template-columns: 1fr 250px;
+  }
+
+  .banner h1 {
+    margin: 0;
+    grid-column: 1 /2;
+  }
+
+  .banner a {
+    grid-column: 1 / 3;
+    grid-row: 2 /3;
+  }
+
+  .banner .screenshot {
+    grid-column: 2 / 3;
+    grid-row: 1 / 4;
+  }
+
+  .banner a:nth-child(3), .banner a:nth-child(4){
+    grid-column: 1 / 2;
+  }
+
+  .banner a:nth-child(4){
+    grid-row: 3 / 4;
+  }
+
+  .banner .g-play, .banner .f-droid {
+    margin: 0 auto;
+    padding: 0;
+    width: 180px;
+  }
+}
+
+@media screen and (max-width: 450px) {
+
+  .site-header{
+    padding: 5px;
+    margin: 0;
+  }
+
+  label[for=nav-trigger]{
+    display: block;
+    width: 40px;
+    margin: 5px;
+    height: 38px;
+    z-index: 2;
+    cursor: pointer;
+  }
+
+  .header-nav{
+    position: absolute;
+    /*border: 1px solid black;*/
+    border-radius: 5px;
+    box-shadow: 0 0 5px 1px #cccccc;
+    background-color: white;
+  }
+
+  .header-nav{
+    position: absolute;
+    right: 5px;
+    display: flex;
+    flex-wrap: wrap;
+    max-width: 130px;
+  }
+
+  .menu-icon{
+    right: 0;
+    display: block;
+  }
+
+  .menu-icon__elem{
+    display: block;
+    height: 3px;
+    width: 20px;
+    border-radius: 4px;
+    margin: 7px 10px;
+    background-color: black;
+  }
+  input ~ .trigger{
+    display: none;
+  }
+
+  input:checked ~ .trigger{
+    display: block;
+    flex-basis: 100%;
+    padding: 5px;
+  }
+
+  .header-nav__elem{
+    text-align: right;
+    margin: 0;
+    padding: 10px 5px;
+    display: block;
+  }
+  .wrapper {
+    padding: 0;
+  }
+
+  .banner .wrapper {
+    grid-template-columns: 1fr;
+    padding: 20px;
+    gap: 0;
+  }
+
+  .banner h1 {
+    text-align: center;
+    grid-column: 1 / 2;
+    grid-row: 2 / 3;
+    font-size: x-large;
+  }
+
+  .banner .screenshot {
+    width: 230px;
+    margin: auto;
+    display: block;
+    grid-column: 1 / 2;
+  }
+
+  .banner .screenshot {
+    margin: 50px auto;
+    grid-row: 1 / 2;
+  }
+
+  .banner a:nth-child(3){
+    grid-row: 3 / 4;
+  }
+
+  .banner a:nth-child(4){
+    grid-row: 4 / 5;
+  }
+}
+
+@media screen and (max-width: 375px) {
+  .banner h1 {
+    font-size: larger;
+  }
 }

+ 1 - 1
gradle.properties

@@ -6,7 +6,7 @@
 # http://www.gradle.org/docs/current/userguide/build_environment.html
 # Specifies the JVM arguments used for the daemon process.
 # The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx4096m
+org.gradle.jvmargs=-Xmx6114m
 android.useAndroidX=true
 android.enableJetifier=true
 android.enableR8=true

+ 2 - 2
gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
-#Thu Apr 18 16:23:43 CAT 2019
+#Sat Aug 24 16:44:55 CAT 2019
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip