summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTanuj <thetanuj@hotmail.com>2023-07-04 12:56:44 +0530
committerTanuj <thetanuj@hotmail.com>2023-07-04 12:56:44 +0530
commit369af33fda6bbda1981dca55cf0fdb218b63b726 (patch)
tree4d1a995596c40c700cc58dd5c1303957145d4d3d
parentaddcbc342f3a5977c2a78b51e47dfb6a7f78c815 (diff)
downloadSidePhOnelauncher-369af33fda6bbda1981dca55cf0fdb218b63b726.tar.gz
SidePhOnelauncher-369af33fda6bbda1981dca55cf0fdb218b63b726.tar.bz2
SidePhOnelauncher-369af33fda6bbda1981dca55cf0fdb218b63b726.zip
Merge fixes
-rw-r--r--app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt260
-rw-r--r--app/src/main/res/layout/fragment_app_drawer.xml37
-rw-r--r--app/src/main/res/values/strings.xml11
3 files changed, 148 insertions, 160 deletions
diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt
index 7c3352e..8f45c9a 100644
--- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt
+++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt
@@ -1,27 +1,18 @@
package app.olauncher.ui
-import android.app.AlertDialog
-import android.content.Intent
-import android.content.pm.PackageManager
-import android.content.pm.ResolveInfo
import android.os.Bundle
-import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.animation.AnimationUtils
-import android.widget.FrameLayout
-import android.widget.LinearLayout
import android.widget.TextView
import androidx.appcompat.widget.SearchView
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
-import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import app.olauncher.MainViewModel
import app.olauncher.R
-import app.olauncher.data.AppModel
import app.olauncher.data.Constants
import app.olauncher.data.Prefs
import app.olauncher.databinding.FragmentAppDrawerBinding
@@ -33,11 +24,11 @@ import app.olauncher.helper.showKeyboard
import app.olauncher.helper.showToast
import app.olauncher.helper.uninstall
-class AppDrawerFragment : Fragment(){
+class AppDrawerFragment : Fragment() {
private lateinit var prefs: Prefs
private lateinit var adapter: AppDrawerAdapter
-// private lateinit var layoutManager: LinearLayoutManagera
+
private var flag = Constants.FLAG_LAUNCH_APP
private var canRename = false
@@ -45,9 +36,7 @@ class AppDrawerFragment : Fragment(){
private var _binding: FragmentAppDrawerBinding? = null
private val binding get() = _binding!!
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
- ): View {
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentAppDrawerBinding.inflate(inflater, container, false)
return binding.root
}
@@ -79,44 +68,85 @@ class AppDrawerFragment : Fragment(){
}
}
-private fun initSearch() {
- binding.search.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
- override fun onQueryTextSubmit(query: String?): Boolean {
- if (query?.startsWith("!") == true) requireContext().openUrl(
- Constants.URL_DUCK_SEARCH + query.replace(
- " ",
- "%20"
- )
- )
- else adapter.launchFirstInList()
- return true
- }
-
- override fun onQueryTextChange(newText: String): Boolean {
- try {
- adapter.filter.filter(newText)
- binding.appDrawerTip.visibility = View.GONE
- binding.appRename.visibility =
- if (canRename && newText.isNotBlank()) View.VISIBLE else View.GONE
+ private fun initSearch() {
+ binding.search.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
+ override fun onQueryTextSubmit(query: String?): Boolean {
+ if (query?.startsWith("!") == true)
+ requireContext().openUrl(Constants.URL_DUCK_SEARCH + query.replace(" ", "%20"))
+ else
+ adapter.launchFirstInList()
return true
- } catch (e: Exception) {
- e.printStackTrace()
}
- return false
- }
- })
-}
-
-
+ override fun onQueryTextChange(newText: String): Boolean {
+ try {
+ adapter.filter.filter(newText)
+ binding.appDrawerTip.visibility = View.GONE
+ binding.appRename.visibility = if (canRename && newText.isNotBlank()) View.VISIBLE else View.GONE
+ return true
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ return false
+ }
+ })
+ }
private fun initAdapter() {
- adapter = AppDrawerAdapter(flag, prefs.appLabelAlignment, appClickListener = {
- if (it.appPackage.isEmpty()) return@AppDrawerAdapter
- viewModel.selectedApp(it, flag)
- if (flag == Constants.FLAG_LAUNCH_APP || flag == Constants.FLAG_HIDDEN_APPS) findNavController().popBackStack(
- R.id.mainFragment,
- false
+ adapter = AppDrawerAdapter(
+ flag,
+ prefs.appLabelAlignment,
+ appClickListener = {
+ if (it.appPackage.isEmpty())
+ return@AppDrawerAdapter
+ viewModel.selectedApp(it, flag)
+ if (flag == Constants.FLAG_LAUNCH_APP || flag == Constants.FLAG_HIDDEN_APPS)
+ findNavController().popBackStack(R.id.mainFragment, false)
+ else
+ findNavController().popBackStack()
+ },
+ appInfoListener = {
+ openAppInfo(
+ requireContext(),
+ it.user,
+ it.appPackage
+ )
+ findNavController().popBackStack(R.id.mainFragment, false)
+ },
+ appDeleteListener = {
+ requireContext().apply {
+ if (isSystemApp(it.appPackage))
+ showToast(getString(R.string.system_app_cannot_delete))
+ else
+ uninstall(it.appPackage)
+ }
+ },
+ appHideListener = { appModel, position ->
+ adapter.appFilteredList.removeAt(position)
+ adapter.notifyItemRemoved(position)
+ adapter.appsList.remove(appModel)
+
+ val newSet = mutableSetOf<String>()
+ newSet.addAll(prefs.hiddenApps)
+ if (flag == Constants.FLAG_HIDDEN_APPS) {
+ newSet.remove(appModel.appPackage) // for backward compatibility
+ newSet.remove(appModel.appPackage + "|" + appModel.user.toString())
+ } else
+ newSet.add(appModel.appPackage + "|" + appModel.user.toString())
+
+ prefs.hiddenApps = newSet
+ if (newSet.isEmpty())
+ findNavController().popBackStack()
+ if (prefs.firstHide) {
+ prefs.firstHide = false
+ viewModel.showMessageDialog(getString(R.string.hidden_apps_message))
+ findNavController().navigate(R.id.action_appListFragment_to_settingsFragment2)
+ }
+ },
+ appRenameListener = { appModel, renameLabel ->
+ prefs.setAppRenameLabel(appModel.appPackage, renameLabel)
+ viewModel.getAppList()
+ }
)
binding.recyclerView.adapter = adapter
binding.recyclerView.addOnScrollListener(getRecyclerViewOnScrollListener())
@@ -127,95 +157,65 @@ private fun initSearch() {
private fun initObservers() {
viewModel.firstOpen.observe(viewLifecycleOwner) {
+ if (it) binding.appDrawerTip.visibility = View.VISIBLE
+ binding.appDrawerTip.isSelected = true
if (it && flag == Constants.FLAG_LAUNCH_APP) {
binding.appDrawerTip.visibility = View.VISIBLE
binding.appDrawerTip.isSelected = true
}
}
- }, appHideListener = { appModel, position ->
- adapter.appFilteredList.removeAt(position)
- adapter.notifyItemRemoved(position)
- adapter.appsList.remove(appModel)
-
- val newSet = mutableSetOf<String>()
- newSet.addAll(prefs.hiddenApps)
- if (flag == Constants.FLAG_HIDDEN_APPS) {
- newSet.remove(appModel.appPackage) // for backward compatibility
- newSet.remove(appModel.appPackage + "|" + appModel.user.toString())
- } else newSet.add(appModel.appPackage + "|" + appModel.user.toString())
-
- prefs.hiddenApps = newSet
- if (newSet.isEmpty()) findNavController().popBackStack()
- if (prefs.firstHide) {
- prefs.firstHide = false
- viewModel.showMessageDialog(getString(R.string.hidden_apps_message))
- findNavController().navigate(R.id.action_appListFragment_to_settingsFragment2)
- }
- }, appRenameListener = { appModel, renameLabel ->
- prefs.setAppRenameLabel(appModel.appPackage, renameLabel)
- viewModel.getAppList()
- })
- binding.recyclerView.adapter = adapter
- binding.recyclerView.addOnScrollListener(getRecyclerViewOnScrollListener())
- binding.recyclerView.itemAnimator = null
- binding.recyclerView.layoutAnimation =
- AnimationUtils.loadLayoutAnimation(requireContext(), R.anim.layout_anim_from_bottom)
-}
-
-private fun initObservers() {
- viewModel.firstOpen.observe(viewLifecycleOwner) {
- if (it) binding.appDrawerTip.visibility = View.VISIBLE
- binding.appDrawerTip.isSelected = true
- }
- if (flag == Constants.FLAG_HIDDEN_APPS) viewModel.hiddenApps.observe(viewLifecycleOwner) {
- it?.let { adapter.setAppList(it.toMutableList()) }
- }
- else viewModel.appList.observe(viewLifecycleOwner) {
- it?.let { adapter.setAppList(it.toMutableList()) }
+ if (flag == Constants.FLAG_HIDDEN_APPS)
+ viewModel.hiddenApps.observe(viewLifecycleOwner) {
+ it?.let { adapter.setAppList(it.toMutableList()) }
+ }
+ else
+ viewModel.appList.observe(viewLifecycleOwner) {
+ it?.let { adapter.setAppList(it.toMutableList()) }
+ }
}
-}
-private fun initClickListeners() {
- binding.appDrawerTip.setOnClickListener {
- binding.appDrawerTip.isSelected = false
- binding.appDrawerTip.isSelected = true
- }
- binding.appRename.setOnClickListener {
- val name = binding.search.query.toString().trim()
- if (name.isEmpty()) {
- requireContext().showToast(getString(R.string.type_a_new_app_name_first))
- binding.search.showKeyboard()
- return@setOnClickListener
+ private fun initClickListeners() {
+ binding.appDrawerTip.setOnClickListener {
+ binding.appDrawerTip.isSelected = false
+ binding.appDrawerTip.isSelected = true
}
+ binding.appRename.setOnClickListener {
+ val name = binding.search.query.toString().trim()
+ if (name.isEmpty()) {
+ requireContext().showToast(getString(R.string.type_a_new_app_name_first))
+ binding.search.showKeyboard()
+ return@setOnClickListener
+ }
- when (flag) {
- Constants.FLAG_SET_HOME_APP_1 -> prefs.appName1 = name
- Constants.FLAG_SET_HOME_APP_2 -> prefs.appName2 = name
- Constants.FLAG_SET_HOME_APP_3 -> prefs.appName3 = name
- Constants.FLAG_SET_HOME_APP_4 -> prefs.appName4 = name
- Constants.FLAG_SET_HOME_APP_5 -> prefs.appName5 = name
- Constants.FLAG_SET_HOME_APP_6 -> prefs.appName6 = name
- Constants.FLAG_SET_HOME_APP_7 -> prefs.appName7 = name
- Constants.FLAG_SET_HOME_APP_8 -> prefs.appName8 = name
+ when (flag) {
+ Constants.FLAG_SET_HOME_APP_1 -> prefs.appName1 = name
+ Constants.FLAG_SET_HOME_APP_2 -> prefs.appName2 = name
+ Constants.FLAG_SET_HOME_APP_3 -> prefs.appName3 = name
+ Constants.FLAG_SET_HOME_APP_4 -> prefs.appName4 = name
+ Constants.FLAG_SET_HOME_APP_5 -> prefs.appName5 = name
+ Constants.FLAG_SET_HOME_APP_6 -> prefs.appName6 = name
+ Constants.FLAG_SET_HOME_APP_7 -> prefs.appName7 = name
+ Constants.FLAG_SET_HOME_APP_8 -> prefs.appName8 = name
+ }
+ findNavController().popBackStack()
}
- findNavController().popBackStack()
}
-}
-private fun getRecyclerViewOnScrollListener(): RecyclerView.OnScrollListener {
- return object : RecyclerView.OnScrollListener() {
+ private fun getRecyclerViewOnScrollListener(): RecyclerView.OnScrollListener {
+ return object : RecyclerView.OnScrollListener() {
- var onTop = false
+ var onTop = false
- override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
- super.onScrollStateChanged(recyclerView, newState)
- when (newState) {
+ override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
+ super.onScrollStateChanged(recyclerView, newState)
+ when (newState) {
- RecyclerView.SCROLL_STATE_DRAGGING -> {
- onTop = !recyclerView.canScrollVertically(-1)
- if (onTop) binding.search.hideKeyboard()
- if (onTop && !recyclerView.canScrollVertically(1)) findNavController().popBackStack()
- }
+ RecyclerView.SCROLL_STATE_DRAGGING -> {
+ onTop = !recyclerView.canScrollVertically(-1)
+ if (onTop) binding.search.hideKeyboard()
+ if (onTop && !recyclerView.canScrollVertically(1))
+ findNavController().popBackStack()
+ }
RecyclerView.SCROLL_STATE_IDLE -> {
if (!recyclerView.canScrollVertically(1)) {
@@ -229,21 +229,19 @@ private fun getRecyclerViewOnScrollListener(): RecyclerView.OnScrollListener {
}
}
}
-}
override fun onStart() {
super.onStart()
binding.search.showKeyboard(prefs.autoShowKeyboard)
}
-override fun onStop() {
- binding.search.hideKeyboard()
- super.onStop()
-}
-
-override fun onDestroyView() {
- super.onDestroyView()
- _binding = null
-}
+ override fun onStop() {
+ binding.search.hideKeyboard()
+ super.onStop()
+ }
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
} \ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_app_drawer.xml b/app/src/main/res/layout/fragment_app_drawer.xml
index 07928a1..a73ddd1 100644
--- a/app/src/main/res/layout/fragment_app_drawer.xml
+++ b/app/src/main/res/layout/fragment_app_drawer.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
android:animateLayoutChanges="true"
@@ -62,34 +61,16 @@
android:text="@string/app_drawer_tips"
android:visibility="gone" />
-
- <LinearLayout
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="vertical"
- android:layout_marginTop="180dp">
-
- <androidx.recyclerview.widget.RecyclerView
- android:id="@+id/recyclerView"
- android:layout_width="282dp"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:clipChildren="false"
- android:clipToPadding="false"
- android:fadingEdgeLength="24dp"
- android:requiresFadingEdge="vertical"
- app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
-
- <!-- AlphabetFastScroller -->
-
- </LinearLayout>
-<!-- <androidx.recyclerview.widget.RecyclerView-->
-<!-- android:id="@+id/alphabetRecyclerView"-->
-<!-- android:layout_width="wrap_content"-->
-<!-- android:layout_height="wrap_content"-->
-<!-- android:layout_gravity="end"-->
-<!-- android:layout_marginTop="180dp" />-->
-
-
+ android:layout_marginTop="180dp"
+ android:layout_marginBottom="24dp"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:fadingEdgeLength="24dp"
+ android:requiresFadingEdge="vertical"
+ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</FrameLayout> \ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 078d8b7..aab4f44 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,7 +1,9 @@
<resources>
<string name="app_name" translatable="false">Olauncher</string>
- <string name="app" translatable="false">App</string>
+ <string name="app">App</string>
<string name="set_as_default_launcher">Set as default launcher</string>
+ <string name="app_text_color">Text color</string>
+ <string name="double_tap_to_lock_screen">Double tap to lock</string>
<string name="admin_permission_message">Olauncher promises to use lock screen permission responsibly. Olauncher does not collect or share any data.</string>
<string name="about">About</string>
<string name="off">Off</string>
@@ -36,6 +38,7 @@
<string name="_7">7</string>
<string name="_8">8</string>
<string name="app_drawer_tips">Tip: Start typing an app name to auto-launch it</string>
+ <string name="okay">Okay</string>
<string name="cool">Cool!</string>
<string name="double_tap_lock_is_enabled_message">If double tap lock disables fingerprint or face unlock, open Olauncher settings, tap on \'experimental\' and follow the instructions. Thank you.</string>
<string name="auto_show_keyboard">Auto show keyboard</string>
@@ -49,6 +52,8 @@
<string name="system_default">System</string>
<string name="dark">Dark</string>
<string name="light">Light</string>
+ <string name="double_tap_lock_uninstall_message">Double tap to lock enabled.
+ \n\nNote: Turn this OFF first if you decide to delete Olauncher.</string>
<string name="welcome_to_olauncher_settings">Our About page on the bottom has answers to all your questions. Don\'t forget. :)
\n\nThank you.</string>
<string name="rate_us_message">Hey, if you find Olauncher useful, a 5-star rating will make us very happy. :)
@@ -59,7 +64,11 @@
<string name="accessibility_service_description">The accessibility permission is required to enable double tap to lock. Any data acquired by Olauncher via this service will not leave your device.</string>
<string name="lock_layout_description" translatable="false">lock layout description to be used a unique id to lock screen</string>
<string name="support_olauncher_for_free">Support Olauncher for free by using our Amazon affiliate link.</string>
+ <string name="support_olauncher_message">Every time you buy something using our link, we get a small commission. Please save the link and use it whenever you shop online.\nThank you!</string>
+ <string name="open">Open link</string>
+ <string name="copy">Copy</string>
<string name="close">Close</string>
+ <string name="not_now">Not now</string>
<string name="public_roadmap">Olauncher public roadmap</string>
<string name="instagram">Instagram</string>
<string name="twitter">Twitter</string>