Remove option to assign all Apps which were not assigned yet

This commit is contained in:
Jonas Lochmann 2020-10-26 01:00:00 +01:00
parent 8123fd691e
commit f8d0aa0dd9
No known key found for this signature in database
GPG key ID: 8B8C9AEE10FA5B36
7 changed files with 5 additions and 166 deletions

View file

@ -1,5 +1,5 @@
/* /*
* TimeLimit Copyright <C> 2019 Jonas Lochmann * TimeLimit Copyright <C> 2019 - 2020 Jonas Lochmann
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -33,7 +33,6 @@ class ChildAppsAdapter: RecyclerView.Adapter<ChildAppsHolder>() {
private const val TYPE_CATEGORY_HEADER = 0 private const val TYPE_CATEGORY_HEADER = 0
private const val TYPE_APP = 1 private const val TYPE_APP = 1
private const val TYPE_EMPTY = 2 private const val TYPE_EMPTY = 2
private const val TYPE_ASSIGN_ALL = 3
} }
var data: List<ChildAppsEntry> by Delegates.observable(emptyList()) { _, _, _ -> notifyDataSetChanged() } var data: List<ChildAppsEntry> by Delegates.observable(emptyList()) { _, _, _ -> notifyDataSetChanged() }
@ -48,7 +47,6 @@ class ChildAppsAdapter: RecyclerView.Adapter<ChildAppsHolder>() {
is ChildAppsCategoryHeader -> TYPE_CATEGORY_HEADER is ChildAppsCategoryHeader -> TYPE_CATEGORY_HEADER
is ChildAppsApp -> TYPE_APP is ChildAppsApp -> TYPE_APP
is ChildAppsEmptyCategory -> TYPE_EMPTY is ChildAppsEmptyCategory -> TYPE_EMPTY
is ChildAppsAssignAll -> TYPE_ASSIGN_ALL
} }
override fun getItemId(position: Int): Long { override fun getItemId(position: Int): Long {
@ -58,7 +56,6 @@ class ChildAppsAdapter: RecyclerView.Adapter<ChildAppsHolder>() {
is ChildAppsCategoryHeader -> (item.categoryId ?: "no category").hashCode().toLong() is ChildAppsCategoryHeader -> (item.categoryId ?: "no category").hashCode().toLong()
is ChildAppsApp -> item.app.packageName.hashCode().toLong() is ChildAppsApp -> item.app.packageName.hashCode().toLong()
is ChildAppsEmptyCategory -> (item.categoryId ?: "no category").hashCode().toLong() is ChildAppsEmptyCategory -> (item.categoryId ?: "no category").hashCode().toLong()
is ChildAppsAssignAll -> "assign all".hashCode().toLong()
} }
} }
@ -87,13 +84,6 @@ class ChildAppsAdapter: RecyclerView.Adapter<ChildAppsHolder>() {
executePendingBindings() executePendingBindings()
}.root }.root
) )
TYPE_ASSIGN_ALL -> {
AssignAllAppsViewHolder(
Button(parent.context).apply {
setText(R.string.child_apps_assign_all)
}
)
}
else -> throw IllegalArgumentException() else -> throw IllegalArgumentException()
} }
@ -127,15 +117,6 @@ class ChildAppsAdapter: RecyclerView.Adapter<ChildAppsHolder>() {
// nothing to do // nothing to do
} }
is ChildAppsAssignAll -> {
holder as AssignAllAppsViewHolder
holder.itemView.setOnClickListener {
handlers?.onAssignAppsClicked(item.packageNames)
}
null
}
}.let { /* require handling all paths */ } }.let { /* require handling all paths */ }
} }
} }
@ -148,5 +129,4 @@ class AssignAllAppsViewHolder(view: View): ChildAppsHolder(view)
interface Handlers { interface Handlers {
fun onAppClicked(app: App) fun onAppClicked(app: App)
fun onAssignAppsClicked(packageNames: List<String>)
} }

View file

@ -1,5 +1,5 @@
/* /*
* TimeLimit Copyright <C> 2019 Jonas Lochmann * TimeLimit Copyright <C> 2019 - 2020 Jonas Lochmann
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -30,7 +30,6 @@ import io.timelimit.android.databinding.ChildAppsFragmentBinding
import io.timelimit.android.ui.main.ActivityViewModel import io.timelimit.android.ui.main.ActivityViewModel
import io.timelimit.android.ui.main.ActivityViewModelHolder import io.timelimit.android.ui.main.ActivityViewModelHolder
import io.timelimit.android.ui.manage.child.ManageChildFragmentArgs import io.timelimit.android.ui.manage.child.ManageChildFragmentArgs
import io.timelimit.android.ui.manage.child.apps.assign.AssignAllAppsCategoryDialogFragment
import io.timelimit.android.ui.manage.child.apps.assign.AssignAppCategoryDialogFragment import io.timelimit.android.ui.manage.child.apps.assign.AssignAppCategoryDialogFragment
import io.timelimit.android.ui.view.AppFilterView import io.timelimit.android.ui.view.AppFilterView
@ -88,15 +87,6 @@ class ChildAppsFragment : Fragment() {
).show(fragmentManager!!) ).show(fragmentManager!!)
} }
} }
override fun onAssignAppsClicked(packageNames: List<String>) {
if (auth.requestAuthenticationOrReturnTrue()) {
AssignAllAppsCategoryDialogFragment.newInstance(
childId = args.childId,
appPackageNames = packageNames
).show(fragmentManager!!)
}
}
} }
return binding.root return binding.root

View file

@ -88,12 +88,6 @@ class ChildAppsModel(application: Application): AndroidViewModel(application) {
.distinctBy { it.packageName } .distinctBy { it.packageName }
.sortedBy { it.title.toLowerCase() } .sortedBy { it.title.toLowerCase() }
if (categoryId == null) {
result.add(ChildAppsAssignAll(
packageNames = sortedApps.map { it.packageName }
))
}
result.addAll( result.addAll(
sortedApps.map { app -> sortedApps.map { app ->
ChildAppsApp( ChildAppsApp(
@ -152,4 +146,3 @@ sealed class ChildAppsEntry
data class ChildAppsCategoryHeader(val title: String, val categoryId: String?): ChildAppsEntry() data class ChildAppsCategoryHeader(val title: String, val categoryId: String?): ChildAppsEntry()
data class ChildAppsApp(val app: App, val shownCategoryName: String?): ChildAppsEntry() data class ChildAppsApp(val app: App, val shownCategoryName: String?): ChildAppsEntry()
data class ChildAppsEmptyCategory(val categoryId: String?): ChildAppsEntry() data class ChildAppsEmptyCategory(val categoryId: String?): ChildAppsEntry()
data class ChildAppsAssignAll(val packageNames: List<String>): ChildAppsEntry()

View file

@ -1,121 +0,0 @@
/*
* TimeLimit Copyright <C> 2019 Jonas Lochmann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package io.timelimit.android.ui.manage.child.apps.assign
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.CheckedTextView
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import io.timelimit.android.R
import io.timelimit.android.data.Database
import io.timelimit.android.data.model.Category
import io.timelimit.android.data.model.UserType
import io.timelimit.android.databinding.BottomSheetSelectionListBinding
import io.timelimit.android.extensions.showSafe
import io.timelimit.android.logic.AppLogic
import io.timelimit.android.logic.DefaultAppLogic
import io.timelimit.android.sync.actions.AddCategoryAppsAction
import io.timelimit.android.ui.main.ActivityViewModel
import io.timelimit.android.ui.main.ActivityViewModelHolder
class AssignAllAppsCategoryDialogFragment: BottomSheetDialogFragment() {
companion object {
private const val EXTRA_CHILD_ID = "a"
private const val EXTRA_PACKAGE_NAMES = "b"
private const val TAG = "aaacdf"
fun newInstance(childId: String, appPackageNames: List<String>) = AssignAllAppsCategoryDialogFragment().apply {
arguments = Bundle().apply {
putString(EXTRA_CHILD_ID, childId)
putStringArray(EXTRA_PACKAGE_NAMES, appPackageNames.toTypedArray())
}
}
}
val childId: String by lazy { arguments!!.getString(EXTRA_CHILD_ID)!! }
val appPackageNames: Array<String> by lazy { arguments!!.getStringArray(EXTRA_PACKAGE_NAMES)!! }
val logic: AppLogic by lazy { DefaultAppLogic.with(context!!) }
val database: Database by lazy { logic.database }
val auth: ActivityViewModel by lazy { (activity as ActivityViewModelHolder).getActivityViewModel() }
val childCategoryEntries: LiveData<List<Category>> by lazy {
database.category().getCategoriesByChildId(childId)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
auth.authenticatedUser.observe(this, Observer {
if (it?.second?.type != UserType.Parent) {
dismissAllowingStateLoss()
}
})
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val binding = BottomSheetSelectionListBinding.inflate(inflater, container, false)
val list = binding.list
binding.title = resources.getQuantityString(R.plurals.generic_plural_app, appPackageNames.size, appPackageNames.size)
childCategoryEntries.observe(this, Observer { categories ->
fun buildRow(): CheckedTextView = LayoutInflater.from(context!!).inflate(
android.R.layout.simple_list_item_single_choice,
list,
false
) as CheckedTextView
categories.forEach { category ->
buildRow().let { row ->
row.text = category.title
row.setOnClickListener {
auth.tryDispatchParentAction(
AddCategoryAppsAction(
categoryId = category.id,
packageNames = appPackageNames.toList()
)
)
dismiss()
}
list.addView(row)
}
}
buildRow().let { row ->
row.setText(R.string.child_apps_unassigned)
row.isChecked = true
row.setOnClickListener {
dismiss()
}
list.addView(row)
}
})
return binding.root
}
fun show(fragmentManager: FragmentManager) = showSafe(fragmentManager, TAG)
}

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
TimeLimit Copyright <C> 2019 Jonas Lochmann TimeLimit Copyright <C> 2019 - 2020 Jonas Lochmann
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation version 3 of the License. the Free Software Foundation version 3 of the License.
@ -19,5 +19,4 @@
<string name="child_apps_sort_by_title">Nach Namen sortieren</string> <string name="child_apps_sort_by_title">Nach Namen sortieren</string>
<string name="child_apps_unassigned">ohne Kategorie</string> <string name="child_apps_unassigned">ohne Kategorie</string>
<string name="child_apps_empty_category">Diese Kategorie ist leer</string> <string name="child_apps_empty_category">Diese Kategorie ist leer</string>
<string name="child_apps_assign_all">Alle nicht zugeordneten Apps zuordnen, die der aktuellen Filterregel entsprechen</string>
</resources> </resources>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
TimeLimit Copyright <C> 2019 Jonas Lochmann TimeLimit Copyright <C> 2019 - 2020 Jonas Lochmann
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation version 3 of the License. the Free Software Foundation version 3 of the License.
@ -19,5 +19,4 @@
<string name="child_apps_sort_by_title">Ordenar por título</string> <string name="child_apps_sort_by_title">Ordenar por título</string>
<string name="child_apps_unassigned">sem categoria</string> <string name="child_apps_unassigned">sem categoria</string>
<string name="child_apps_empty_category">Esta categoria está vazia</string> <string name="child_apps_empty_category">Esta categoria está vazia</string>
<string name="child_apps_assign_all">Atribuir todos os Aplicativos não atribuídos que correspondam à configuração atual do filtro</string>
</resources> </resources>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
TimeLimit Copyright <C> 2019 Jonas Lochmann TimeLimit Copyright <C> 2019 - 2020 Jonas Lochmann
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation version 3 of the License. the Free Software Foundation version 3 of the License.
@ -19,5 +19,4 @@
<string name="child_apps_sort_by_title">Sort by title</string> <string name="child_apps_sort_by_title">Sort by title</string>
<string name="child_apps_unassigned">without category</string> <string name="child_apps_unassigned">without category</string>
<string name="child_apps_empty_category">This category is empty</string> <string name="child_apps_empty_category">This category is empty</string>
<string name="child_apps_assign_all">Assign all unassigned Apps which match the current filter setting</string>
</resources> </resources>