diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3eacae3..b9ce09f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,6 +6,7 @@
+
diff --git a/app/src/main/java/eu/ottop/yamlauncher/AppMenuAdapter.kt b/app/src/main/java/eu/ottop/yamlauncher/AppMenuAdapter.kt
index 5121eb2..e82c455 100644
--- a/app/src/main/java/eu/ottop/yamlauncher/AppMenuAdapter.kt
+++ b/app/src/main/java/eu/ottop/yamlauncher/AppMenuAdapter.kt
@@ -136,7 +136,7 @@ class AppMenuAdapter(
uiUtils.setItemSpacing(holder.textView)
- uiUtils.setTextFont(holder.textView)
+ uiUtils.setTextFont(holder.listItem)
holder.textView.setTextColor(sharedPreferenceManager.getTextColor())
// Update the application information (allows updating apps to work)
diff --git a/app/src/main/java/eu/ottop/yamlauncher/ContactsAdapter.kt b/app/src/main/java/eu/ottop/yamlauncher/ContactsAdapter.kt
new file mode 100644
index 0000000..639ca2a
--- /dev/null
+++ b/app/src/main/java/eu/ottop/yamlauncher/ContactsAdapter.kt
@@ -0,0 +1,77 @@
+package eu.ottop.yamlauncher
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.FrameLayout
+import android.widget.TextView
+import androidx.core.content.res.ResourcesCompat
+import androidx.recyclerview.widget.RecyclerView
+import eu.ottop.yamlauncher.settings.SharedPreferenceManager
+import eu.ottop.yamlauncher.utils.UIUtils
+
+class ContactsAdapter(
+ private val context: Context,
+ private var contacts: MutableList>,
+ private val contactClickListener: OnContactClickListener
+) :
+ RecyclerView.Adapter() {
+
+ private val uiUtils = UIUtils(context)
+ private val sharedPreferenceManager = SharedPreferenceManager(context)
+
+ interface OnContactClickListener {
+ fun onContactClick(contactId: Int)
+ }
+
+ inner class AppViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val listItem: FrameLayout = itemView.findViewById(R.id.listItem)
+ val textView: TextView = listItem.findViewById(R.id.appName)
+
+ init {
+ textView.setOnClickListener {
+ val position = bindingAdapterPosition
+ val contact = contacts[position]
+ contactClickListener.onContactClick(contact.second)
+
+ }
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AppViewHolder {
+ val view = LayoutInflater.from(parent.context)
+ .inflate(R.layout.app_item_layout, parent, false)
+ return AppViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: AppViewHolder, position: Int) {
+ val contact = contacts[position]
+ holder.textView.setCompoundDrawablesWithIntrinsicBounds(
+ ResourcesCompat.getDrawable(context.resources, R.drawable.ic_empty, null),null, ResourcesCompat.getDrawable(context.resources, R.drawable.ic_empty, null),null)
+
+ uiUtils.setAppAlignment(holder.textView)
+
+ uiUtils.setAppSize(holder.textView)
+
+ uiUtils.setItemSpacing(holder.textView)
+
+ uiUtils.setTextFont(holder.listItem)
+ holder.textView.setTextColor(sharedPreferenceManager.getTextColor())
+
+ holder.textView.text = contact.first
+
+ holder.textView.visibility = View.VISIBLE
+ }
+
+ override fun getItemCount(): Int {
+ return contacts.size
+ }
+
+ @SuppressLint("NotifyDataSetChanged")
+ fun updateContacts(newContacts: List>) {
+ contacts = newContacts.toMutableList()
+ notifyDataSetChanged()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt b/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt
index a9a9fd4..807a079 100644
--- a/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt
+++ b/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt
@@ -1,33 +1,44 @@
package eu.ottop.yamlauncher
+import android.Manifest
import android.annotation.SuppressLint
+import android.content.ContentResolver
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.content.pm.LauncherActivityInfo
import android.content.pm.LauncherApps
+import android.content.pm.PackageManager
+import android.database.Cursor
import android.graphics.BlendMode
import android.graphics.BlendModeColorFilter
+import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.os.UserHandle
import android.provider.AlarmClock
+import android.provider.ContactsContract
import android.text.Editable
import android.text.TextWatcher
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View
import android.view.inputmethod.InputMethodManager
+import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextClock
import android.widget.TextView
import android.widget.Toast
+import android.widget.ViewSwitcher
import androidx.activity.OnBackPressedCallback
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat
+import androidx.core.database.getStringOrNull
import androidx.core.view.ViewCompat
import androidx.core.view.marginLeft
import androidx.lifecycle.Lifecycle
@@ -49,6 +60,7 @@ import eu.ottop.yamlauncher.utils.GestureUtils
import eu.ottop.yamlauncher.utils.StringUtils
import eu.ottop.yamlauncher.utils.UIUtils
import eu.ottop.yamlauncher.utils.WeatherSystem
+import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
@@ -57,7 +69,7 @@ import java.lang.reflect.Method
import kotlin.math.abs
-class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener, AppMenuAdapter.OnItemClickListener, AppMenuAdapter.OnShortcutListener, AppMenuAdapter.OnItemLongClickListener {
+class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener, AppMenuAdapter.OnItemClickListener, AppMenuAdapter.OnShortcutListener, AppMenuAdapter.OnItemLongClickListener, ContactsAdapter.OnContactClickListener {
private lateinit var weatherSystem: WeatherSystem
private lateinit var appUtils: AppUtils
@@ -66,6 +78,7 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
private lateinit var gestureUtils: GestureUtils
private val appMenuLinearLayoutManager = AppMenuLinearLayoutManager(this@MainActivity)
+ private val contactMenuLinearLayoutManager = AppMenuLinearLayoutManager(this@MainActivity)
private val appMenuEdgeFactory = AppMenuEdgeFactory(this@MainActivity)
private lateinit var sharedPreferenceManager: SharedPreferenceManager
@@ -77,9 +90,13 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
private lateinit var dateText: TextClock
private var dateElements = mutableListOf()
- private lateinit var recyclerView: RecyclerView
+ private lateinit var menuView: ViewSwitcher
+ private lateinit var appRecycler: RecyclerView
+ private lateinit var contactRecycler: RecyclerView
+ private lateinit var searchSwitcher: ImageView
private lateinit var searchView: TextInputEditText
- private var adapter: AppMenuAdapter? = null
+ private var appAdapter: AppMenuAdapter? = null
+ private var contactAdapter: ContactsAdapter? = null
private var batteryReceiver: BatteryReceiver? = null
private lateinit var binding: ActivityMainBinding
@@ -105,6 +122,8 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
var returnAllowed = true
+ private val handler = Handler(Looper.getMainLooper())
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
@@ -154,15 +173,19 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
gestureDetector = GestureDetector(this, GestureListener())
shortcutGestureDetector = GestureDetector(this, TextGestureListener())
- clock = findViewById(R.id.textClock)
+ clock = binding.textClock
clockMargin = clock.marginLeft
- dateText = findViewById(R.id.textDate)
+ dateText = binding.textDate
dateElements = mutableListOf(dateText.format12Hour.toString(), dateText.format24Hour.toString(), "", "")
- searchView = findViewById(R.id.searchView)
+ menuView = binding.menuView
+
+ searchSwitcher = binding.searchSwitcher
+
+ searchView = binding.searchView
preferences = PreferenceManager.getDefaultSharedPreferences(this)
}
@@ -183,8 +206,6 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
else {
textView.visibility = View.VISIBLE
-
-
val savedView = sharedPreferenceManager.getShortcut(textView)
// Set the non-work profile drawable by default
@@ -217,7 +238,7 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
uiUtils.setMenuTitleAlignment(binding.menuTitle)
binding.menuTitle.visibility = View.VISIBLE
- adapter?.shortcutTextView = textView
+ appAdapter?.shortcutTextView = textView
toAppMenu()
true
}
@@ -236,7 +257,8 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
uiUtils.setMenuTitleAlignment(binding.menuTitle)
binding.menuTitle.visibility = View.VISIBLE
- adapter?.shortcutTextView = textView
+ appAdapter?.shortcutTextView = textView
+ searchSwitcher.visibility = View.GONE
toAppMenu()
return@setOnLongClickListener true
@@ -246,11 +268,12 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
private fun toAppMenu() {
try {
// The menu opens from the top
- recyclerView.scrollToPosition(0)
- }
- catch (_: UninitializedPropertyAccessException) {
-
+ appRecycler.scrollToPosition(0)
+ contactRecycler.scrollToPosition(0)
+ menuView.displayedChild = 0
+ searchSwitcher.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.contacts_24px, null))
}
+ catch (_: UninitializedPropertyAccessException) {}
animations.showApps(binding.homeView, binding.appView)
animations.backgroundIn(this@MainActivity)
if (sharedPreferenceManager.isAutoKeyboardEnabled()) {
@@ -293,7 +316,6 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
private fun setPreferences() {
uiUtils.setBackground(window)
-
uiUtils.setTextFont(binding.homeView)
uiUtils.setFont(searchView)
uiUtils.setFont(binding.menuTitle)
@@ -302,9 +324,11 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
uiUtils.setMenuItemColors(binding.menuTitle, "A9")
+ uiUtils.setImageColor(searchSwitcher)
+
uiUtils.setClockVisibility(clock)
uiUtils.setDateVisibility(dateText)
- uiUtils.setSearchVisibility(searchView, binding.searchReplacement)
+ uiUtils.setSearchVisibility(searchView, binding.searchLayout, binding.searchReplacement)
uiUtils.setClockAlignment(clock, dateText)
uiUtils.setSearchAlignment(searchView)
@@ -317,11 +341,10 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
uiUtils.setShortcutsSpacing(binding.homeView)
// This didn't work and somehow delaying it by 0 makes it work
- val handler = Handler(Looper.getMainLooper())
handler.postDelayed({
uiUtils.setStatusBar(window)
uiUtils.setMenuItemColors(searchView)
- }, 0)
+ }, 100)
clockApp = gestureUtils.getSwipeInfo(launcherApps, "clock")
dateApp = gestureUtils.getSwipeInfo(launcherApps, "date")
@@ -420,8 +443,9 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
}
private fun openAppMenu() {
- adapter?.shortcutTextView = null
+ appAdapter?.shortcutTextView = null
binding.menuTitle.visibility = View.GONE
+ uiUtils.setContactsVisibility(searchSwitcher, binding.searchLayout, binding.searchReplacement)
toAppMenu()
}
@@ -437,6 +461,7 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
uiUtils.setTextColors(binding.homeView)
uiUtils.setMenuItemColors(searchView)
uiUtils.setMenuItemColors(binding.menuTitle, "A9")
+ uiUtils.setImageColor(searchSwitcher)
}
"textFont" -> {
@@ -460,7 +485,14 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
}
"searchEnabled" -> {
- uiUtils.setSearchVisibility(searchView, binding.searchReplacement)
+ uiUtils.setSearchVisibility(searchView, binding.searchLayout, binding.searchReplacement)
+ }
+
+ "contactsEnabled" -> {
+ if (sharedPreferenceManager.areContactsEnabled()) {
+ checkContactsPermission()
+ }
+ uiUtils.setContactsVisibility(searchSwitcher, binding.searchLayout, binding.searchReplacement)
}
"clockAlignment" -> {
@@ -569,7 +601,6 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
// Delay app menu changes so that the user doesn't see them
- val handler = Handler(Looper.getMainLooper())
handler.postDelayed({
try {
searchView.setText(R.string.empty)
@@ -583,8 +614,6 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
handler.postDelayed({
lifecycleScope.launch {
refreshAppMenu()
-
-
}}, animSpeed + 50)
}
@@ -627,7 +656,7 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
private suspend fun updateMenu(updatedApps: List>) {
withContext(Dispatchers.Main) {
- adapter?.updateApps(updatedApps)
+ appAdapter?.updateApps(updatedApps)
}
}
@@ -660,39 +689,120 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
installedApps = appUtils.getInstalledApps()
val newApps = installedApps.toMutableList()
- setupRecyclerView(newApps)
+ setupAppRecycler(newApps)
setupSearch()
+ if (sharedPreferenceManager.areContactsEnabled()) {
+ setupContactRecycler()
+ }
}
}
- private suspend fun setupRecyclerView(newApps: MutableList>) {
- adapter = AppMenuAdapter(this@MainActivity, binding, newApps, this@MainActivity, this@MainActivity, this@MainActivity, launcherApps)
+ private suspend fun setupAppRecycler(newApps: MutableList>) {
+ appAdapter = AppMenuAdapter(this@MainActivity, binding, newApps, this@MainActivity, this@MainActivity, this@MainActivity, launcherApps)
appMenuLinearLayoutManager.stackFromEnd = true
- recyclerView = findViewById(R.id.recyclerView)
+ appRecycler = binding.appRecycler
withContext(Dispatchers.Main) {
- recyclerView.layoutManager = appMenuLinearLayoutManager
- recyclerView.edgeEffectFactory = appMenuEdgeFactory
- recyclerView.adapter = adapter
+ appRecycler.layoutManager = appMenuLinearLayoutManager
+ appRecycler.edgeEffectFactory = appMenuEdgeFactory
+ appRecycler.adapter = appAdapter
}
- setupRecyclerListener()
+ setupRecyclerListener(appRecycler, appMenuLinearLayoutManager)
}
// Inform the layout manager of scroll states to calculate whether the menu is on the top
- private fun setupRecyclerListener() {
- recyclerView.addOnScrollListener(object: RecyclerView.OnScrollListener() {
+ private fun setupRecyclerListener(recycler:RecyclerView, layoutManager: AppMenuLinearLayoutManager) {
+ recycler.addOnScrollListener(object: RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
- appMenuLinearLayoutManager.setScrollInfo()
+ layoutManager.setScrollInfo()
}
}
})
}
+ private suspend fun setupContactRecycler() {
+ contactAdapter = ContactsAdapter(this, mutableListOf(), this)
+ contactRecycler = binding.contactRecycler
+ withContext(Dispatchers.Main) {
+ contactRecycler.layoutManager = contactMenuLinearLayoutManager
+ contactRecycler.edgeEffectFactory = appMenuEdgeFactory
+ contactRecycler.adapter = contactAdapter
+ }
+ setupRecyclerListener(contactRecycler, contactMenuLinearLayoutManager)
+ }
+
+ private fun getContacts(filterString: String): MutableList> {
+ if (!checkContactsPermission()) {
+ return mutableListOf()
+ }
+
+ val contacts = mutableListOf>()
+
+ val contentResolver: ContentResolver = contentResolver
+
+ val projection = arrayOf(
+ ContactsContract.Contacts._ID,
+ ContactsContract.Contacts.DISPLAY_NAME
+ )
+
+ val selection = "${ContactsContract.Contacts.DISPLAY_NAME} LIKE ?"
+ val selectionArgs = arrayOf("%$filterString%")
+
+ val cursor: Cursor? = contentResolver.query(
+ ContactsContract.Contacts.CONTENT_URI,
+ projection,
+ selection,
+ selectionArgs,
+ "${ContactsContract.Contacts.DISPLAY_NAME} ASC"
+ )
+
+ cursor?.use {
+ val nameIndex = it.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)
+ val idIndex = it.getColumnIndex(ContactsContract.Contacts._ID)
+ while (it.moveToNext()) {
+ val name = it.getStringOrNull(nameIndex)
+ val id = it.getStringOrNull(idIndex)?.toInt()
+ if (name != null && id != null) {
+ contacts.add(Pair(name, id))
+ }
+ }
+ }
+ return contacts
+ }
+
+ private fun checkContactsPermission(): Boolean {
+ try {
+ if (ContextCompat.checkSelfPermission(
+ this,
+ Manifest.permission.READ_CONTACTS
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ ActivityCompat.requestPermissions(
+ this,
+ arrayOf(Manifest.permission.READ_CONTACTS),
+ 1
+ )
+ return false
+ }
+
+ return true
+ } catch(_: Exception) {
+ return false
+ }
+ }
+
+ private suspend fun updateContacts(filterString: String) {
+ val contacts = getContacts(filterString)
+ withContext(Dispatchers.Main) {
+ contactAdapter?.updateContacts(contacts)
+ }
+ }
+
private suspend fun setupSearch() {
binding.appView.addOnLayoutChangeListener { _, _, top, _, bottom, _, oldTop, _, oldBottom ->
@@ -718,6 +828,19 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
}
}
})
+
+ searchSwitcher.setOnClickListener {
+ menuView.showNext()
+ when (menuView.displayedChild) {
+ 0 -> searchSwitcher.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.contacts_24px, null))
+ 1 -> {
+ lifecycleScope.launch(Dispatchers.Default) {
+ updateContacts("")
+ }
+ searchSwitcher.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.apps_24px, null))}
+ }
+ }
+
}
private suspend fun filterItems(query: String?) {
@@ -727,6 +850,9 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
val updatedApps = appUtils.getInstalledApps()
getFilteredApps(cleanQuery, newFilteredApps, updatedApps)
+ if (sharedPreferenceManager.areContactsEnabled() && cleanQuery != null) {
+ updateContacts(cleanQuery)
+ }
}
private suspend fun getFilteredApps(cleanQuery: String?, newFilteredApps: MutableList>, updatedApps: List>) {
@@ -767,12 +893,12 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
fun disableAppMenuScroll() {
appMenuLinearLayoutManager.setScrollEnabled(false)
- recyclerView.layoutManager = appMenuLinearLayoutManager
+ appRecycler.layoutManager = appMenuLinearLayoutManager
}
fun enableAppMenuScroll() {
appMenuLinearLayoutManager.setScrollEnabled(true)
- recyclerView.layoutManager = appMenuLinearLayoutManager
+ appRecycler.layoutManager = appMenuLinearLayoutManager
}
// On home key or swipe, return to home screen
@@ -801,7 +927,7 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
backToHome(0)
}
returnAllowed = true
- adapter?.notifyDataSetChanged()
+ appAdapter?.notifyDataSetChanged()
}
override fun onItemClick(appInfo: LauncherActivityInfo, userHandle: UserHandle) {
@@ -932,4 +1058,15 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
}
}
+
+ override fun onContactClick(contactId: Int) {
+ val contactUri: Uri = Uri.withAppendedPath(
+ ContactsContract.Contacts.CONTENT_URI,
+ contactId.toString()
+ )
+
+ val intent = Intent(Intent.ACTION_VIEW, contactUri)
+ startActivity(intent)
+ returnAllowed = false
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt b/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt
index b303878..fe6e924 100644
--- a/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt
+++ b/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt
@@ -204,6 +204,10 @@ class SharedPreferenceManager (private val context: Context) {
return preferences.getBoolean("autoKeyboard", false)
}
+ fun areContactsEnabled(): Boolean {
+ return preferences.getBoolean("contactsEnabled", false)
+ }
+
// Hidden Apps
fun setAppHidden(packageName: String, profile: Int, hidden: Boolean) {
val editor = preferences.edit()
diff --git a/app/src/main/java/eu/ottop/yamlauncher/utils/UIUtils.kt b/app/src/main/java/eu/ottop/yamlauncher/utils/UIUtils.kt
index bf85eb4..6c81912 100644
--- a/app/src/main/java/eu/ottop/yamlauncher/utils/UIUtils.kt
+++ b/app/src/main/java/eu/ottop/yamlauncher/utils/UIUtils.kt
@@ -13,6 +13,7 @@ import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.view.Window
import android.view.WindowInsets
import android.view.WindowInsetsController
+import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.Space
import android.widget.TextClock
@@ -36,6 +37,10 @@ class UIUtils(private val context: Context) {
)
}
+ fun setImageColor(view: ImageView) {
+ view.setColorFilter(sharedPreferenceManager.getTextColor())
+ }
+
fun setTextColors(view: View) {
val color = sharedPreferenceManager.getTextColor()
when {
@@ -148,13 +153,31 @@ class UIUtils(private val context: Context) {
}
}
- fun setSearchVisibility(searchView: TextInputEditText, replacementView: View) {
+ fun setSearchVisibility(searchView: View, searchLayout: View, replacementView: View) {
+ setSearchLayoutVisibility(searchLayout, replacementView)
if (sharedPreferenceManager.isSearchEnabled()) {
searchView.visibility = View.VISIBLE
- replacementView.visibility = View.GONE
} else {
searchView.visibility = View.GONE
+ }
+ }
+
+ fun setContactsVisibility(contactsView: View, searchLayout: View, replacementView: View) {
+ setSearchLayoutVisibility(searchLayout, replacementView)
+ if (sharedPreferenceManager.areContactsEnabled()) {
+ contactsView.visibility = View.VISIBLE
+ } else {
+ contactsView.visibility = View.GONE
+ }
+ }
+
+ private fun setSearchLayoutVisibility(searchLayout: View, replacementView: View) {
+ if (!sharedPreferenceManager.isSearchEnabled() && !sharedPreferenceManager.areContactsEnabled()) {
+ searchLayout.visibility = View.GONE
replacementView.visibility = View.VISIBLE
+ } else {
+ replacementView.visibility = View.GONE
+ searchLayout.visibility = View.VISIBLE
}
}
diff --git a/app/src/main/res/drawable/apps_24px.xml b/app/src/main/res/drawable/apps_24px.xml
new file mode 100644
index 0000000..2004718
--- /dev/null
+++ b/app/src/main/res/drawable/apps_24px.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/close_24px.xml b/app/src/main/res/drawable/close_24px.xml
new file mode 100644
index 0000000..182489c
--- /dev/null
+++ b/app/src/main/res/drawable/close_24px.xml
@@ -0,0 +1,10 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/contacts_24px.xml b/app/src/main/res/drawable/contacts_24px.xml
new file mode 100644
index 0000000..2eb3607
--- /dev/null
+++ b/app/src/main/res/drawable/contacts_24px.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/delete_24px.xml b/app/src/main/res/drawable/delete_24px.xml
new file mode 100644
index 0000000..d724c2e
--- /dev/null
+++ b/app/src/main/res/drawable/delete_24px.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/edit_24px.xml b/app/src/main/res/drawable/edit_24px.xml
new file mode 100644
index 0000000..b253108
--- /dev/null
+++ b/app/src/main/res/drawable/edit_24px.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/info_24px.xml b/app/src/main/res/drawable/info_24px.xml
new file mode 100644
index 0000000..3186ebf
--- /dev/null
+++ b/app/src/main/res/drawable/info_24px.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/search_24px.xml b/app/src/main/res/drawable/search_24px.xml
new file mode 100644
index 0000000..3e235a7
--- /dev/null
+++ b/app/src/main/res/drawable/search_24px.xml
@@ -0,0 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/visibility_off_24px.xml b/app/src/main/res/drawable/visibility_off_24px.xml
new file mode 100644
index 0000000..6fa698a
--- /dev/null
+++ b/app/src/main/res/drawable/visibility_off_24px.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 5b9a518..061023e 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -36,38 +36,90 @@
android:textColor="#C1F3F3F3"
android:textSize="36sp" />
-
+ android:layout_weight="1.1"
+ android:clipToPadding="false">
-
+
-
+
+
+
+
+
+
+
+
+ android:orientation="horizontal"
+ app:layout_constraintEnd_toStartOf="@+id/searchSwitcher"
+ app:layout_constraintStart_toStartOf="@+id/searchSwitcher">
+
+
+
+
+
+
+ android:visibility="visible" />
+