|
@@ -8,8 +8,6 @@ import android.os.UserManager
|
|
|
import android.provider.AlarmClock
|
|
import android.provider.AlarmClock
|
|
|
import android.provider.CalendarContract
|
|
import android.provider.CalendarContract
|
|
|
import android.provider.MediaStore
|
|
import android.provider.MediaStore
|
|
|
-import android.text.Editable
|
|
|
|
|
-import android.text.TextWatcher
|
|
|
|
|
import android.view.LayoutInflater
|
|
import android.view.LayoutInflater
|
|
|
import android.view.View
|
|
import android.view.View
|
|
|
import android.view.ViewGroup
|
|
import android.view.ViewGroup
|
|
@@ -17,6 +15,7 @@ import android.view.inputmethod.InputMethodManager
|
|
|
import androidx.constraintlayout.motion.widget.MotionLayout
|
|
import androidx.constraintlayout.motion.widget.MotionLayout
|
|
|
import androidx.constraintlayout.motion.widget.MotionLayout.TransitionListener
|
|
import androidx.constraintlayout.motion.widget.MotionLayout.TransitionListener
|
|
|
import androidx.lifecycle.Observer
|
|
import androidx.lifecycle.Observer
|
|
|
|
|
+import androidx.lifecycle.lifecycleScope
|
|
|
import androidx.navigation.Navigation
|
|
import androidx.navigation.Navigation
|
|
|
import com.jkuester.unlauncher.datastore.UnlauncherApp
|
|
import com.jkuester.unlauncher.datastore.UnlauncherApp
|
|
|
import com.sduduzog.slimlauncher.R
|
|
import com.sduduzog.slimlauncher.R
|
|
@@ -28,6 +27,7 @@ import com.sduduzog.slimlauncher.utils.BaseFragment
|
|
|
import com.sduduzog.slimlauncher.utils.OnLaunchAppListener
|
|
import com.sduduzog.slimlauncher.utils.OnLaunchAppListener
|
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
|
import kotlinx.android.synthetic.main.home_fragment.*
|
|
import kotlinx.android.synthetic.main.home_fragment.*
|
|
|
|
|
+import kotlinx.coroutines.launch
|
|
|
import java.text.DateFormat
|
|
import java.text.DateFormat
|
|
|
import java.text.SimpleDateFormat
|
|
import java.text.SimpleDateFormat
|
|
|
import java.util.*
|
|
import java.util.*
|
|
@@ -36,6 +36,7 @@ import java.util.*
|
|
|
class HomeFragment(private val viewModel: MainViewModel) : BaseFragment(), OnLaunchAppListener {
|
|
class HomeFragment(private val viewModel: MainViewModel) : BaseFragment(), OnLaunchAppListener {
|
|
|
|
|
|
|
|
private lateinit var receiver: BroadcastReceiver
|
|
private lateinit var receiver: BroadcastReceiver
|
|
|
|
|
+ private lateinit var appDrawerAdapter: AppDrawerAdapter
|
|
|
|
|
|
|
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
|
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
|
|
|
savedInstanceState: Bundle?): View {
|
|
savedInstanceState: Bundle?): View {
|
|
@@ -49,6 +50,8 @@ class HomeFragment(private val viewModel: MainViewModel) : BaseFragment(), OnLau
|
|
|
home_fragment_list.adapter = adapter1
|
|
home_fragment_list.adapter = adapter1
|
|
|
home_fragment_list_exp.adapter = adapter2
|
|
home_fragment_list_exp.adapter = adapter2
|
|
|
|
|
|
|
|
|
|
+ val unlauncherAppsRepo = getUnlauncherDataSource().unlauncherAppsRepo
|
|
|
|
|
+
|
|
|
viewModel.apps.observe(viewLifecycleOwner, Observer { list ->
|
|
viewModel.apps.observe(viewLifecycleOwner, Observer { list ->
|
|
|
list?.let { apps ->
|
|
list?.let { apps ->
|
|
|
adapter1.setItems(apps.filter {
|
|
adapter1.setItems(apps.filter {
|
|
@@ -57,40 +60,20 @@ class HomeFragment(private val viewModel: MainViewModel) : BaseFragment(), OnLau
|
|
|
adapter2.setItems(apps.filter {
|
|
adapter2.setItems(apps.filter {
|
|
|
it.sortingIndex >= 3
|
|
it.sortingIndex >= 3
|
|
|
})
|
|
})
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
-
|
|
|
|
|
- setEventListeners()
|
|
|
|
|
|
|
|
|
|
- val unlauncherAppRepo = getUnlauncherDataSource().unlauncherAppsRepo;
|
|
|
|
|
- app_drawer_fragment_list.adapter =
|
|
|
|
|
- AppDrawerAdapter(AppDrawerListener(), viewLifecycleOwner, unlauncherAppRepo)
|
|
|
|
|
- // Send the apps to Unlauncher data source
|
|
|
|
|
- viewModel.addAppViewModel.apps.observe(viewLifecycleOwner, Observer {
|
|
|
|
|
- it?.let { apps -> unlauncherAppRepo.setApps(apps) }
|
|
|
|
|
- })
|
|
|
|
|
- home_fragment.setTransitionListener(object : TransitionListener {
|
|
|
|
|
- override fun onTransitionCompleted(motionLayout: MotionLayout?, currentId: Int) {
|
|
|
|
|
- // hide the keyboard and remove focus from the EditText when swiping back up
|
|
|
|
|
- if (currentId == motionLayout?.startState) {
|
|
|
|
|
- resetAppDrawerEditText()
|
|
|
|
|
- val inputMethodManager = requireContext().getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
|
|
|
|
|
- inputMethodManager.hideSoftInputFromWindow(requireView().windowToken, 0)
|
|
|
|
|
|
|
+ // Set the home apps in the Unlauncher data
|
|
|
|
|
+ lifecycleScope.launch {
|
|
|
|
|
+ unlauncherAppsRepo.setHomeApps(apps)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ })
|
|
|
|
|
|
|
|
- override fun onTransitionTrigger(motionLayout: MotionLayout?, triggerId: Int, positive: Boolean, progress: Float) {
|
|
|
|
|
- // do nothing
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ appDrawerAdapter =
|
|
|
|
|
+ AppDrawerAdapter(AppDrawerListener(), viewLifecycleOwner, unlauncherAppsRepo)
|
|
|
|
|
|
|
|
- override fun onTransitionStarted(motionLayout: MotionLayout?, startId: Int, endId: Int) {
|
|
|
|
|
- // do nothing
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ setEventListeners()
|
|
|
|
|
|
|
|
- override fun onTransitionChange(motionLayout: MotionLayout?, startId: Int, endId: Int, progress: Float) {
|
|
|
|
|
- // do nothing
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ app_drawer_fragment_list.adapter = appDrawerAdapter
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
override fun onStart() {
|
|
override fun onStart() {
|
|
@@ -105,8 +88,12 @@ class HomeFragment(private val viewModel: MainViewModel) : BaseFragment(), OnLau
|
|
|
super.onResume()
|
|
super.onResume()
|
|
|
updateClock()
|
|
updateClock()
|
|
|
|
|
|
|
|
- viewModel.addAppViewModel.setInstalledApps(getInstalledApps())
|
|
|
|
|
- viewModel.addAppViewModel.filterApps("")
|
|
|
|
|
|
|
+ lifecycleScope.launch {
|
|
|
|
|
+ getUnlauncherDataSource().unlauncherAppsRepo.setApps(getInstalledApps())
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!::appDrawerAdapter.isInitialized) {
|
|
|
|
|
+ appDrawerAdapter.setAppFilter()
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
override fun onStop() {
|
|
override fun onStop() {
|
|
@@ -183,7 +170,30 @@ class HomeFragment(private val viewModel: MainViewModel) : BaseFragment(), OnLau
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
- app_drawer_edit_text.addTextChangedListener(onTextChangeListener)
|
|
|
|
|
|
|
+ app_drawer_edit_text.addTextChangedListener(appDrawerAdapter.searchBoxListener)
|
|
|
|
|
+
|
|
|
|
|
+ home_fragment.setTransitionListener(object : TransitionListener {
|
|
|
|
|
+ override fun onTransitionCompleted(motionLayout: MotionLayout?, currentId: Int) {
|
|
|
|
|
+ // hide the keyboard and remove focus from the EditText when swiping back up
|
|
|
|
|
+ if (currentId == motionLayout?.startState) {
|
|
|
|
|
+ resetAppDrawerEditText()
|
|
|
|
|
+ val inputMethodManager = requireContext().getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
|
|
|
|
|
+ inputMethodManager.hideSoftInputFromWindow(requireView().windowToken, 0)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onTransitionTrigger(motionLayout: MotionLayout?, triggerId: Int, positive: Boolean, progress: Float) {
|
|
|
|
|
+ // do nothing
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onTransitionStarted(motionLayout: MotionLayout?, startId: Int, endId: Int) {
|
|
|
|
|
+ // do nothing
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onTransitionChange(motionLayout: MotionLayout?, startId: Int, endId: Int, progress: Float) {
|
|
|
|
|
+ // do nothing
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
fun updateClock() {
|
|
fun updateClock() {
|
|
@@ -243,21 +253,6 @@ class HomeFragment(private val viewModel: MainViewModel) : BaseFragment(), OnLau
|
|
|
app_drawer_edit_text.clearFocus()
|
|
app_drawer_edit_text.clearFocus()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private val onTextChangeListener: TextWatcher = object : TextWatcher {
|
|
|
|
|
-
|
|
|
|
|
- override fun afterTextChanged(s: Editable?) {
|
|
|
|
|
- // Do nothing
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
|
|
|
|
|
- // Do nothing
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
|
|
|
|
|
- viewModel.addAppViewModel.filterApps(s.toString())
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
inner class AppDrawerListener {
|
|
inner class AppDrawerListener {
|
|
|
fun onAppClicked(app: UnlauncherApp) {
|
|
fun onAppClicked(app: UnlauncherApp) {
|
|
|
launchApp(app.packageName, app.className, app.userSerial)
|
|
launchApp(app.packageName, app.className, app.userSerial)
|