diff --git a/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt b/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt index 8ce3796..5b95127 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt @@ -8,7 +8,6 @@ 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 @@ -35,8 +34,6 @@ 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 @@ -61,7 +58,6 @@ import eu.ottop.yamlauncher.utils.PermissionUtils 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 @@ -183,12 +179,12 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh dateElements = mutableListOf(dateText.format12Hour.toString(), dateText.format24Hour.toString(), "", "") + searchView = binding.searchView + menuView = binding.menuView searchSwitcher = binding.searchSwitcher - searchView = binding.searchView - preferences = PreferenceManager.getDefaultSharedPreferences(this) } @@ -271,9 +267,11 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh try { // The menu opens from the top appRecycler.scrollToPosition(0) - contactRecycler.scrollToPosition(0) - menuView.displayedChild = 0 - searchSwitcher.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.contacts_24px, null)) + if (sharedPreferenceManager.areContactsEnabled()) { + contactRecycler.scrollToPosition(0) + searchSwitcher.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.contacts_24px, null)) + menuView.displayedChild = 0 + } } catch (_: UninitializedPropertyAccessException) {} animations.showApps(binding.homeView, binding.appView) @@ -326,8 +324,6 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh uiUtils.setMenuItemColors(binding.menuTitle, "A9") - uiUtils.setImageColor(searchSwitcher) - uiUtils.setClockVisibility(clock) uiUtils.setDateVisibility(dateText) uiUtils.setSearchVisibility(searchView, binding.searchLayout, binding.searchReplacement) @@ -491,7 +487,11 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh } "contactsEnabled" -> { - uiUtils.setContactsVisibility(searchSwitcher, binding.searchLayout, binding.searchReplacement) + try{ + contactRecycler + } catch(_: UninitializedPropertyAccessException) { + setupContactRecycler() + } } "clockAlignment" -> { @@ -691,8 +691,9 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh setupAppRecycler(newApps) setupSearch() - setupContactRecycler() - + if (sharedPreferenceManager.areContactsEnabled()) { + setupContactRecycler() + } } } @@ -723,15 +724,28 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh }) } - private suspend fun setupContactRecycler() { + private fun setupContactRecycler() { + uiUtils.setImageColor(searchSwitcher) + contactAdapter = ContactsAdapter(this, mutableListOf(), this) + contactMenuLinearLayoutManager.stackFromEnd = true contactRecycler = binding.contactRecycler - withContext(Dispatchers.Main) { - contactRecycler.layoutManager = contactMenuLinearLayoutManager - contactRecycler.edgeEffectFactory = appMenuEdgeFactory - contactRecycler.adapter = contactAdapter - } + contactRecycler.layoutManager = contactMenuLinearLayoutManager + contactRecycler.edgeEffectFactory = appMenuEdgeFactory + contactRecycler.adapter = contactAdapter setupRecyclerListener(contactRecycler, contactMenuLinearLayoutManager) + + searchSwitcher.setOnClickListener { + menuView.showNext() + when (menuView.displayedChild) { + 0 -> searchSwitcher.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.contacts_24px, null)) + 1 -> { + lifecycleScope.launch(Dispatchers.Default) { + filterItems(searchView.text.toString()) + } + searchSwitcher.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.apps_24px, null))} + } + } } private fun getContacts(filterString: String): MutableList> { @@ -803,19 +817,6 @@ 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?) { diff --git a/app/src/main/java/eu/ottop/yamlauncher/settings/AboutFragment.kt b/app/src/main/java/eu/ottop/yamlauncher/settings/AboutFragment.kt index 78c9368..b5b7fee 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/settings/AboutFragment.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/settings/AboutFragment.kt @@ -1,9 +1,9 @@ package eu.ottop.yamlauncher.settings -import android.content.Intent -import android.net.Uri +import android.content.ComponentName +import android.content.Context +import android.content.pm.LauncherApps import android.os.Bundle -import android.provider.Settings import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -26,6 +26,8 @@ class AboutFragment : Fragment(), TitleProvider { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + val launcherApps = requireActivity().getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps + // Set up about page links stringUtils.setLink(requireActivity().findViewById(R.id.creditText), getString(R.string.my_website_link)) stringUtils.setLink(requireActivity().findViewById(R.id.codebergLink), getString(R.string.codeberg_link)) @@ -35,10 +37,12 @@ class AboutFragment : Fragment(), TitleProvider { stringUtils.setLink(requireActivity().findViewById(R.id.weatherLink), getString(R.string.weather_link)) requireActivity().findViewById(R.id.iconView).setOnClickListener { - val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { - data = Uri.parse("package:${requireContext().packageName}") - } - startActivity(intent) + launcherApps.startAppDetailsActivity( + ComponentName(requireContext(), this::class.java), + launcherApps.profiles[0], + null, + null + ) } } diff --git a/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsActivity.kt b/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsActivity.kt index 2766cf2..c6415ed 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsActivity.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsActivity.kt @@ -12,14 +12,17 @@ import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat -import androidx.core.content.ContextCompat import androidx.preference.PreferenceManager import eu.ottop.yamlauncher.R import eu.ottop.yamlauncher.databinding.ActivitySettingsBinding +import eu.ottop.yamlauncher.utils.PermissionUtils import org.json.JSONObject class SettingsActivity : AppCompatActivity() { + private val permissionUtils = PermissionUtils() + + private lateinit var sharedPreferenceManager: SharedPreferenceManager private lateinit var preferences: SharedPreferences private lateinit var binding: ActivitySettingsBinding private lateinit var performBackup: ActivityResultLauncher @@ -28,6 +31,8 @@ class SettingsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + sharedPreferenceManager = SharedPreferenceManager(this@SettingsActivity) + preferences = PreferenceManager.getDefaultSharedPreferences(this@SettingsActivity) binding = ActivitySettingsBinding.inflate(layoutInflater) @@ -37,10 +42,12 @@ class SettingsActivity : AppCompatActivity() { supportActionBar?.title = "Launcher Settings" supportActionBar?.setDisplayShowTitleEnabled(true) - supportFragmentManager - .beginTransaction() - .replace(R.id.settingsLayout, SettingsFragment()) - .commit() + if (supportFragmentManager.backStackEntryCount == 0) { + supportFragmentManager + .beginTransaction() + .replace(R.id.settingsLayout, SettingsFragment()) + .commit() + } supportFragmentManager.addOnBackStackChangedListener { updateActionBarTitle() @@ -209,4 +216,11 @@ class SettingsActivity : AppCompatActivity() { } } + override fun onResume() { + super.onResume() + if (!permissionUtils.hasContactsPermission(this@SettingsActivity, Manifest.permission.READ_CONTACTS)) { + sharedPreferenceManager.setContactsEnabled(false) + } + } + } \ No newline at end of file diff --git a/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsFragment.kt b/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsFragment.kt index eada624..6cde41c 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsFragment.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsFragment.kt @@ -6,7 +6,6 @@ import android.provider.Settings import android.widget.Toast import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat -import androidx.preference.SwitchPreference import eu.ottop.yamlauncher.R import eu.ottop.yamlauncher.utils.UIUtils diff --git a/app/src/main/java/eu/ottop/yamlauncher/utils/AppUtils.kt b/app/src/main/java/eu/ottop/yamlauncher/utils/AppUtils.kt index 2d4f2ab..ba8e5a1 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/utils/AppUtils.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/utils/AppUtils.kt @@ -1,14 +1,11 @@ package eu.ottop.yamlauncher.utils -import android.Manifest import android.content.Context import android.content.pm.ApplicationInfo import android.content.pm.LauncherActivityInfo import android.content.pm.LauncherApps -import android.content.pm.PackageManager import android.os.UserHandle import android.widget.Toast -import androidx.core.content.ContextCompat import eu.ottop.yamlauncher.settings.SharedPreferenceManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext diff --git a/app/src/main/res/drawable/apps_24px.xml b/app/src/main/res/drawable/apps_24px.xml index 2004718..b4dd3a9 100644 --- a/app/src/main/res/drawable/apps_24px.xml +++ b/app/src/main/res/drawable/apps_24px.xml @@ -2,9 +2,8 @@ android:width="24dp" android:height="24dp" android:viewportWidth="960" - android:viewportHeight="960" - android:tint="?attr/colorControlNormal"> + android:viewportHeight="960"> - + \ No newline at end of file diff --git a/app/src/main/res/drawable/close_24px.xml b/app/src/main/res/drawable/close_24px.xml index 182489c..c824270 100644 --- a/app/src/main/res/drawable/close_24px.xml +++ b/app/src/main/res/drawable/close_24px.xml @@ -2,9 +2,8 @@ android:width="24dp" android:height="24dp" android:viewportWidth="960" - android:viewportHeight="960" - android:tint="?attr/colorControlNormal"> + android:viewportHeight="960"> \ 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 index 2eb3607..d9d8113 100644 --- a/app/src/main/res/drawable/contacts_24px.xml +++ b/app/src/main/res/drawable/contacts_24px.xml @@ -2,9 +2,8 @@ android:width="24dp" android:height="24dp" android:viewportWidth="960" - android:viewportHeight="960" - android:tint="?attr/colorControlNormal"> + android:viewportHeight="960"> - + \ No newline at end of file diff --git a/app/src/main/res/drawable/delete_24px.xml b/app/src/main/res/drawable/delete_24px.xml index d724c2e..255af75 100644 --- a/app/src/main/res/drawable/delete_24px.xml +++ b/app/src/main/res/drawable/delete_24px.xml @@ -2,9 +2,8 @@ android:width="24dp" android:height="24dp" android:viewportWidth="960" - android:viewportHeight="960" - android:tint="?attr/colorControlNormal"> + android:viewportHeight="960"> - + \ No newline at end of file diff --git a/app/src/main/res/drawable/edit_24px.xml b/app/src/main/res/drawable/edit_24px.xml index b253108..aed3495 100644 --- a/app/src/main/res/drawable/edit_24px.xml +++ b/app/src/main/res/drawable/edit_24px.xml @@ -2,9 +2,8 @@ android:width="24dp" android:height="24dp" android:viewportWidth="960" - android:viewportHeight="960" - android:tint="?attr/colorControlNormal"> + android:viewportHeight="960"> - + \ No newline at end of file diff --git a/app/src/main/res/drawable/info_24px.xml b/app/src/main/res/drawable/info_24px.xml index 3186ebf..9253aed 100644 --- a/app/src/main/res/drawable/info_24px.xml +++ b/app/src/main/res/drawable/info_24px.xml @@ -2,9 +2,8 @@ android:width="24dp" android:height="24dp" android:viewportWidth="960" - android:viewportHeight="960" - android:tint="?attr/colorControlNormal"> + android:viewportHeight="960"> - + \ 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 index 6fa698a..f14ba12 100644 --- a/app/src/main/res/drawable/visibility_off_24px.xml +++ b/app/src/main/res/drawable/visibility_off_24px.xml @@ -2,9 +2,8 @@ android:width="24dp" android:height="24dp" android:viewportWidth="960" - android:viewportHeight="960" - android:tint="?attr/colorControlNormal"> + android:viewportHeight="960"> - + \ No newline at end of file diff --git a/app/src/main/res/layout/app_item_layout.xml b/app/src/main/res/layout/app_item_layout.xml index 79490b5..6d11f8c 100644 --- a/app/src/main/res/layout/app_item_layout.xml +++ b/app/src/main/res/layout/app_item_layout.xml @@ -90,7 +90,7 @@ android:text="@string/info" android:textAlignment="center" android:textAppearance="@android:style/TextAppearance.DeviceDefault" - android:textColor="#F3F3F3FF" + android:textColor="#E3F3F3F3" app:drawableTopCompat="@drawable/info_24px" />