diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e312f9b..6f26569 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -46,6 +46,7 @@ dependencies { implementation("androidx.constraintlayout:constraintlayout:2.1.4") implementation("androidx.navigation:navigation-fragment-ktx:2.6.0") implementation("androidx.navigation:navigation-ui-ktx:2.6.0") + implementation("com.google.code.gson:gson:2.10") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84bb871..4a10807 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ + >>() + shownApps = listOf() searchView = findViewById(R.id.searchView) container = findViewById(R.id.container) @@ -62,7 +58,7 @@ class AppMenuActivity : AppCompatActivity() { }) - binding.root.addOnLayoutChangeListener { view, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom -> + binding.root.addOnLayoutChangeListener { _, _, top, _, bottom, _, oldTop, _, oldBottom -> if (bottom - top > oldBottom - oldTop) { searchView.clearFocus() } @@ -70,45 +66,6 @@ class AppMenuActivity : AppCompatActivity() { } - override fun onStop() { - super.onStop() - checkApps?.cancel() - } - - override fun onStart() { - super.onStart() - startTask() - } - - private fun startTask() { - checkApps = GlobalScope.launch { - while (true) { - if (!listsEqual(shownApps, getInstalledPersonalApps())) { - Log.d("AHAHHAHAA","AHJAHAHA") - shownApps = getInstalledPersonalApps() - runOnUiThread { - deleteAppMenuContents() - createPersonalAppMenu() - } - - } - delay(1000) - } - } - } - - private fun listsEqual(list1: List>>, list2: List>>): Boolean { - if (list1.size != list2.size) return false - - for (i in list1.indices) { - if (list1[i].first.componentName != list2[i].first.componentName || list1[i].second.first != list2[i].second.first) { - return false - } - } - - return true - } - private fun filterItems(query: String?) { val cleanQuery = query?.replace("[^a-zA-Z0-9]".toRegex(), "") @@ -128,30 +85,101 @@ class AppMenuActivity : AppCompatActivity() { } } + override fun onStop() { + super.onStop() + checkApps?.cancel() + } + + override fun onStart() { + super.onStart() + startTask() + } + + private fun startTask() { + checkApps = GlobalScope.launch { + while (true) { + if (!listsEqual(shownApps, getInstalledApps())) { + shownApps = getInstalledApps() + runOnUiThread { + refreshAppMenu() + } + + } + delay(1000) + } + } + } + + private fun listsEqual( + list1: List>>, + list2: List>> + ): Boolean { + if (list1.size != list2.size) return false + + for (i in list1.indices) { + if (list1[i].first.componentName != list2[i].first.componentName || list1[i].second.first != list2[i].second.first) { + return false + } + } + + return true + } + + private fun refreshAppMenu() { + deleteAppMenuContents() + createAppMenu() + } + + private fun deleteAppMenuContents(): Boolean { + binding.container.removeAllViewsInLayout() + return true + } + + private fun createAppMenu(): Boolean { + val apps = getInstalledApps() + apps.forEach { appInfo -> + createAppText(appInfo.first, appInfo.second.first, appInfo.second.second) + } + return true + } + private fun getInstalledApps(): List>> { val allApps = mutableListOf>>() val launcherApps = this.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps for (i in launcherApps.profiles.indices) { launcherApps.getActivityList(null, launcherApps.profiles[i]).forEach { app -> - allApps.add(Pair(app, Pair(launcherApps.profiles[i], i))) + if (!isAppHidden(app.activityInfo.applicationInfo.packageName, i)) { + allApps.add(Pair(app, Pair(launcherApps.profiles[i], i))) + } } - } - return allApps.sortedBy { it.first.label.toString().lowercase() } + return allApps.sortedBy { + it.first.applicationInfo.loadLabel(packageManager).toString().lowercase() + } } - private fun getInstalledPersonalApps(): List>> { - return getInstalledApps() - } - - private fun getInstalledWorkApps(): List>> { - return getInstalledApps() - } - - private fun createAppMenu(appInfo: LauncherActivityInfo, userHandle: UserHandle, workProfile: Int): Boolean { + private fun createAppText( + appInfo: LauncherActivityInfo, + userHandle: UserHandle, + workProfile: Int + ): Boolean { val appInfo = appInfo.activityInfo.applicationInfo - val textView = TextView(this) + val textView = TextView(this) + val launcherApps = getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps + val mainActivity = + launcherApps.getActivityList(appInfo.packageName, userHandle).firstOrNull() + + setupTextView(textView, appInfo, workProfile) + + setupTextListeners(textView, appInfo, userHandle, workProfile, launcherApps, mainActivity) + + binding.container.addView(textView) + + return true + } + + private fun setupTextView(textView: TextView, appInfo: ApplicationInfo, workProfile: Int) { val states = arrayOf( intArrayOf(-android.R.attr.state_pressed), intArrayOf(android.R.attr.state_pressed) @@ -164,57 +192,136 @@ class AppMenuActivity : AppCompatActivity() { with(textView) { textSize = 28f - setPadding(0,0,0,50) + setPadding(0, 10, 0, 80) isClickable = true focusable = View.FOCUSABLE gravity = Gravity.START - if (workProfile != 0) { - text = "*"+appInfo.loadLabel(packageManager) - } - else { - text = appInfo.loadLabel(packageManager) + text = if (workProfile != 0) { + "*" + appInfo.loadLabel(packageManager) + } else { + appInfo.loadLabel(packageManager) } setTextColor(ColorStateList(states, colors)) } + } - + private fun setupTextListeners( + textView: TextView, + appInfo: ApplicationInfo, + userHandle: UserHandle, + workProfile: Int, + launcherApps: LauncherApps, + mainActivity: LauncherActivityInfo? + ) { textView.setOnLongClickListener { - Toast.makeText(this, "Long press detected on ${appInfo.loadLabel(packageManager)}", Toast.LENGTH_SHORT).show() - - true + appActionMenu(textView, appInfo, userHandle, workProfile, launcherApps, mainActivity) } textView.setOnClickListener { - val launcherApps = getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps - val packageName = appInfo.packageName - - val mainActivity = launcherApps.getActivityList(packageName, userHandle).firstOrNull() - if (mainActivity != null) { launcherApps.startMainActivity(mainActivity.componentName, userHandle, null, null) } else { - Toast.makeText(this, "Unable to launch ${appInfo.loadLabel(packageManager)}", Toast.LENGTH_SHORT).show() + Toast.makeText( + this, + "Unable to launch ${appInfo.loadLabel(packageManager)}", + Toast.LENGTH_SHORT + ).show() + } + } + } + + private fun appActionMenu( + textView: TextView, + appInfo: ApplicationInfo, + userHandle: UserHandle, + workProfile: Int, + launcherApps: LauncherApps, + mainActivity: LauncherActivityInfo? + ): Boolean { + val inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + val popupView = inflater.inflate(R.layout.app_action_menu, null) + + val popupWindow = PopupWindow( + popupView, + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT + ) + + popupWindow.isOutsideTouchable = true + popupWindow.isFocusable = true + + popupWindow.animationStyle = android.R.style.Animation_Translucent + + if (appInfo.flags and ApplicationInfo.FLAG_SYSTEM != 0) { + popupView.findViewById(R.id.uninstall).visibility = View.GONE + } + + textView.visibility = View.INVISIBLE + + popupWindow.showAsDropDown(textView, 0, -textView.height) + + popupWindow.setOnDismissListener { + textView.visibility = View.VISIBLE + } + + popupView.findViewById(R.id.info).setOnClickListener { + if (mainActivity != null) { + launcherApps.startAppDetailsActivity( + mainActivity.componentName, + userHandle, + null, + null + ) } + popupWindow.dismiss() } - // Add the button to the LinearLayout - binding.container.addView(textView) + popupView.findViewById(R.id.uninstall).setOnClickListener { + val intent = Intent(Intent.ACTION_DELETE) + intent.data = Uri.parse("package:${appInfo.packageName}") + intent.putExtra(Intent.EXTRA_USER, userHandle) + startActivity(intent) - return true - } - - private fun createPersonalAppMenu(): Boolean { - val pApps = getInstalledPersonalApps() - pApps.forEach { appInfo -> - createAppMenu(appInfo.first, appInfo.second.first, appInfo.second.second) + popupWindow.dismiss() } - return true + + popupView.findViewById(R.id.rename).setOnClickListener { + // Handle rename action + popupWindow.dismiss() + } + + popupView.findViewById(R.id.hide).setOnClickListener { + setAppHidden(appInfo.packageName, workProfile, true) + refreshAppMenu() + + popupWindow.dismiss() + } + + return true // Indicate that the long click event is consumed} } - private fun deleteAppMenuContents(): Boolean { - binding.container.removeAllViewsInLayout() - return true + private fun setAppHidden(packageName: String, profile: Int, hidden: Boolean) { + // Get the shared preferences editor + val editor = getSharedPreferences("app_data", MODE_PRIVATE).edit() + val key = "$packageName-${profile}" + editor.putBoolean(key, hidden) + editor.apply() } -} + + private fun isAppHidden(packageName: String, profile: Int): Boolean { + // Get the shared preferences object + val sharedPref = getSharedPreferences("app_data", MODE_PRIVATE) + val key = "$packageName-${profile}" + return sharedPref.getBoolean(key, false) // Default to false (visible) + } + + private fun setAppVisible(packageName: String, profile: Int) { + // Get the shared preferences editor + val editor = getSharedPreferences("app_data", MODE_PRIVATE).edit() + val key = "$packageName-${profile}" + editor.remove(key) + editor.apply() + } +} \ 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 fa72616..ae84924 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt @@ -1,24 +1,9 @@ package eu.ottop.yamlauncher import android.content.Intent -import android.content.res.ColorStateList -import android.graphics.Color import android.os.Bundle -import android.view.Gravity -import android.view.Menu -import android.view.MenuItem -import android.view.MotionEvent import android.view.View -import android.view.View.FOCUSABLE -import android.view.View.OnFocusChangeListener -import android.widget.LinearLayout -import android.widget.SearchView -import android.widget.TextView -import android.widget.Toast import androidx.appcompat.app.AppCompatActivity -import androidx.navigation.findNavController -import androidx.navigation.ui.AppBarConfiguration -import androidx.navigation.ui.navigateUp import eu.ottop.yamlauncher.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { diff --git a/app/src/main/java/eu/ottop/yamlauncher/PersonalAppsFragment.kt b/app/src/main/java/eu/ottop/yamlauncher/PersonalAppsFragment.kt deleted file mode 100644 index 4e70ec3..0000000 --- a/app/src/main/java/eu/ottop/yamlauncher/PersonalAppsFragment.kt +++ /dev/null @@ -1,241 +0,0 @@ -package eu.ottop.yamlauncher - -import android.content.Context -import android.content.pm.LauncherActivityInfo -import android.content.pm.LauncherApps -import android.content.res.ColorStateList -import android.graphics.Color -import android.os.Bundle -import android.os.UserHandle -import android.util.Log -import android.view.Gravity -import androidx.fragment.app.Fragment -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.LinearLayout -import android.widget.SearchView -import android.widget.TextView -import android.widget.Toast -import androidx.core.content.getSystemService -import com.google.android.material.tabs.TabLayout -import com.google.android.material.tabs.TabLayoutMediator -import eu.ottop.yamlauncher.databinding.ActivityAppMenuBinding -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.Job -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch - -// TODO: Rename parameter arguments, choose names that match -// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER -private const val ARG_PARAM1 = "param1" -private const val ARG_PARAM2 = "param2" - -/** - * A simple [Fragment] subclass. - * Use the [PersonalAppsFragment.newInstance] factory method to - * create an instance of this fragment. - */ -class PersonalAppsFragment : Fragment() { - - private lateinit var binding: ActivityAppMenuBinding - private lateinit var searchView: SearchView - private lateinit var container: LinearLayout - private lateinit var tabLayout: TabLayout - private var checkApps: Job? = null - private lateinit var shownApps: List - - - override fun onCreateView( - inflater: LayoutInflater, viewContainer: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - val view = inflater.inflate(R.layout.fragment_personal_apps, viewContainer, false) - - // Initialize views from the fragment layout - container = view.findViewById(R.id.container) - searchView = requireActivity().findViewById(R.id.searchView) - - shownApps = listOf() - - searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { - override fun onQueryTextSubmit(query: String?): Boolean { - searchView.clearFocus() - return true - } - - override fun onQueryTextChange(newText: String?): Boolean { - // Filter items based on the search query - filterItems(newText) - return true - } - - }) - - return view - } - - override fun onPause() { - super.onPause() - checkApps?.cancel() - searchView.setOnQueryTextListener(null) - } - - override fun onStart() { - super.onStart() - startTask() - } - - private fun filterItems(query: String?) { - val cleanQuery = query?.replace("[^a-zA-Z0-9]".toRegex(), "") - - for (i in 0 until container.childCount) { - val view = container.getChildAt(i) - - if (view is TextView) { - val itemText = view.text.toString() - val cleanItemText = itemText.replace("[^a-zA-Z0-9]".toRegex(), "") - - if (cleanItemText.contains(cleanQuery ?: "", ignoreCase = true)) { - view.visibility = View.VISIBLE - } else { - view.visibility = View.GONE - } - } - } - } - - private fun startTask() { - checkApps = GlobalScope.launch { - while (true) { - Log.d("APPSITUATION", "Ahahahaha") - if (!listsEqual(shownApps, getInstalledPersonalApps())) { - shownApps = getInstalledPersonalApps() - requireActivity().runOnUiThread { - deleteAppMenuContents() - createPersonalAppMenu() - } - - } - delay(1000) - } - } - } - - private fun listsEqual( - list1: List, - list2: List - ): Boolean { - if (list1.size != list2.size) return false - - for (i in list1.indices) { - if (list1[i].label != list2[i].label) { - return false - } - } - - return true - } - - private fun getInstalledApps(profile: Int): List { - val allApps = mutableListOf() - val launcherApps = - requireActivity().getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps - - allApps.addAll(launcherApps.getActivityList(null, launcherApps.profiles[profile])) - - return allApps.sortedWith(compareBy { - it.applicationInfo.loadLabel(requireActivity().packageManager).toString().lowercase() - }) - } - - private fun getInstalledPersonalApps(): List { - return getInstalledApps(0) - } - - private fun createAppMenu( - appInfo: LauncherActivityInfo, - userHandle: UserHandle, - workProfile: Boolean - ): Boolean { - val appInfo = appInfo.activityInfo.applicationInfo - val textView = TextView(requireContext()) - textView.textSize = 28f - textView.setPadding(0, 0, 0, 50) - - val states = arrayOf( - intArrayOf(-android.R.attr.state_pressed), - intArrayOf(android.R.attr.state_pressed) - ) - - val colors = intArrayOf( - Color.parseColor("#f3f3f3"), // Default text color - Color.parseColor("#c3c3c3") // Text color when pressed - ) - - textView.setTextColor(ColorStateList(states, colors)) - - textView.isClickable = true - textView.focusable = View.FOCUSABLE - textView.gravity = Gravity.START - textView.text = appInfo.loadLabel(requireActivity().packageManager) - - textView.setOnLongClickListener { - Toast.makeText( - requireContext(), - "Long press detected on ${appInfo.loadLabel(requireActivity().packageManager)}", - Toast.LENGTH_SHORT - ).show() - - true - } - - textView.setOnClickListener { - val launcherApps = - requireActivity().getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps - val packageName = appInfo.packageName - - val mainActivity = launcherApps.getActivityList(packageName, userHandle).firstOrNull() - - if (mainActivity != null) { - launcherApps.startMainActivity(mainActivity.componentName, userHandle, null, null) - } else { - Toast.makeText( - requireContext(), - "Unable to launch ${appInfo.loadLabel(requireActivity().packageManager)}", - Toast.LENGTH_SHORT - ).show() - } - - } - - // Add the button to the LinearLayout - container.addView(textView) - - return true - } - - private fun createPersonalAppMenu(): Boolean { - val pApps = getInstalledPersonalApps() - pApps.forEach { appInfo -> - createAppMenu(appInfo, pApps.first().user, false) - } - return true - } - - private fun deleteAppMenuContents(): Boolean { - binding.container.removeAllViewsInLayout() - return true - - } - - fun setActivityReferences(binding: ActivityAppMenuBinding) { - this.binding = binding - } - - companion object { - fun newInstance(binding: ActivityAppMenuBinding) = PersonalAppsFragment().apply { - this.binding = binding - } - } -} \ No newline at end of file diff --git a/app/src/main/java/eu/ottop/yamlauncher/WorkAppsFragment.kt b/app/src/main/java/eu/ottop/yamlauncher/WorkAppsFragment.kt deleted file mode 100644 index 1cefc46..0000000 --- a/app/src/main/java/eu/ottop/yamlauncher/WorkAppsFragment.kt +++ /dev/null @@ -1,237 +0,0 @@ -package eu.ottop.yamlauncher - -import android.content.Context -import android.content.pm.LauncherActivityInfo -import android.content.pm.LauncherApps -import android.content.res.ColorStateList -import android.graphics.Color -import android.os.Bundle -import android.os.UserHandle -import android.util.Log -import android.view.Gravity -import androidx.fragment.app.Fragment -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.LinearLayout -import android.widget.SearchView -import android.widget.TextView -import android.widget.Toast -import com.google.android.material.tabs.TabLayout -import eu.ottop.yamlauncher.databinding.ActivityAppMenuBinding -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.Job -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch - -// TODO: Rename parameter arguments, choose names that match -// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER -private const val ARG_PARAM1 = "param1" -private const val ARG_PARAM2 = "param2" - -/** - * A simple [Fragment] subclass. - * Use the [WorkAppsFragment.newInstance] factory method to - * create an instance of this fragment. - */ -class WorkAppsFragment : Fragment() { - private lateinit var binding: ActivityAppMenuBinding - private lateinit var searchView: SearchView - private lateinit var container: LinearLayout - private lateinit var tabLayout: TabLayout - private var checkApps: Job? = null - private lateinit var shownApps: List - - - override fun onCreateView( - inflater: LayoutInflater, viewContainer: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - val view = inflater.inflate(R.layout.fragment_personal_apps, viewContainer, false) - - // Initialize views from the fragment layout - container = view.findViewById(R.id.container) - searchView = requireActivity().findViewById(R.id.searchView) - - shownApps = listOf() - - searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { - override fun onQueryTextSubmit(query: String?): Boolean { - searchView.clearFocus() - return true - } - - override fun onQueryTextChange(newText: String?): Boolean { - - filterItems(newText) - return true - } - - }) - - return view - } - - override fun onPause() { - super.onPause() - checkApps?.cancel() - } - - override fun onStart() { - super.onStart() - startTask() - } - - private fun filterItems(query: String?) { - val cleanQuery = query?.replace("[^a-zA-Z0-9]".toRegex(), "") - - for (i in 0 until container.childCount) { - val view = container.getChildAt(i) - - if (view is TextView) { - val itemText = view.text.toString() - val cleanItemText = itemText.replace("[^a-zA-Z0-9]".toRegex(), "") - - if (cleanItemText.contains(cleanQuery ?: "", ignoreCase = true)) { - view.visibility = View.VISIBLE - } else { - view.visibility = View.GONE - } - } - } - } - - private fun startTask() { - checkApps = GlobalScope.launch { - while (true) { - Log.d("APPSITUATION1234", "Ahahahaha") - if (!listsEqual(shownApps, getInstalledWorkApps())) { - shownApps = getInstalledWorkApps() - requireActivity().runOnUiThread { - deleteAppMenuContents() - createWorkAppMenu() - } - - } - delay(1000) - } - } - } - - private fun listsEqual( - list1: List, - list2: List - ): Boolean { - if (list1.size != list2.size) return false - - for (i in list1.indices) { - if (list1[i].label != list2[i].label) { - return false - } - } - - return true - } - - private fun getInstalledApps(profile: Int): List { - val allApps = mutableListOf() - val launcherApps = - requireActivity().getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps - - allApps.addAll(launcherApps.getActivityList(null, launcherApps.profiles[profile])) - - return allApps.sortedWith(compareBy { - it.applicationInfo.loadLabel(requireActivity().packageManager).toString().lowercase() - }) - } - - private fun getInstalledWorkApps(): List { - return getInstalledApps(1) - } - - private fun createAppMenu( - appInfo: LauncherActivityInfo, - userHandle: UserHandle, - workProfile: Boolean - ): Boolean { - val appInfo = appInfo.activityInfo.applicationInfo - val textView = TextView(requireContext()) - textView.textSize = 28f - textView.setPadding(0, 0, 0, 50) - - val states = arrayOf( - intArrayOf(-android.R.attr.state_pressed), - intArrayOf(android.R.attr.state_pressed) - ) - - val colors = intArrayOf( - Color.parseColor("#f3f3f3"), // Default text color - Color.parseColor("#c3c3c3") // Text color when pressed - ) - - textView.setTextColor(ColorStateList(states, colors)) - - textView.isClickable = true - textView.focusable = View.FOCUSABLE - textView.gravity = Gravity.START - textView.text = appInfo.loadLabel(requireActivity().packageManager) - - textView.setOnLongClickListener { - Toast.makeText( - requireContext(), - "Long press detected on ${appInfo.loadLabel(requireActivity().packageManager)}", - Toast.LENGTH_SHORT - ).show() - - true - } - - textView.setOnClickListener { - val launcherApps = - requireActivity().getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps - val packageName = appInfo.packageName - - val mainActivity = launcherApps.getActivityList(packageName, userHandle).firstOrNull() - - if (mainActivity != null) { - launcherApps.startMainActivity(mainActivity.componentName, userHandle, null, null) - } else { - Toast.makeText( - requireContext(), - "Unable to launch ${appInfo.loadLabel(requireActivity().packageManager)}", - Toast.LENGTH_SHORT - ).show() - } - - } - - // Add the button to the LinearLayout - container.addView(textView) - - return true - } - - private fun createWorkAppMenu(): Boolean { - val pApps = getInstalledWorkApps() - pApps.forEach { appInfo -> - createAppMenu(appInfo, pApps.first().user, false) - } - return true - } - - private fun deleteAppMenuContents(): Boolean { - binding.container.removeAllViewsInLayout() - return true - - } - - fun setActivityReferences(binding: ActivityAppMenuBinding) { - this.binding = binding - } - - companion object { - fun newInstance(binding: ActivityAppMenuBinding) = WorkAppsFragment().apply { - this.binding = binding - } - } -} \ No newline at end of file diff --git a/app/src/main/res/drawable/app_action_foreground.xml b/app/src/main/res/drawable/app_action_foreground.xml new file mode 100644 index 0000000..5373e2e --- /dev/null +++ b/app/src/main/res/drawable/app_action_foreground.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/app_action_menu.xml b/app/src/main/res/layout/app_action_menu.xml new file mode 100644 index 0000000..09edb44 --- /dev/null +++ b/app/src/main/res/layout/app_action_menu.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_personal_apps.xml b/app/src/main/res/layout/fragment_personal_apps.xml deleted file mode 100644 index df57df5..0000000 --- a/app/src/main/res/layout/fragment_personal_apps.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_work_apps.xml b/app/src/main/res/layout/fragment_work_apps.xml deleted file mode 100644 index e37d527..0000000 --- a/app/src/main/res/layout/fragment_work_apps.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - \ No newline at end of file