diff --git a/res/values/evolution_strings.xml b/res/values/evolution_strings.xml index 34874255a2a..0e1ccec9094 100644 --- a/res/values/evolution_strings.xml +++ b/res/values/evolution_strings.xml @@ -204,4 +204,8 @@ Hide developer status Hide developer status from apps + + + Search + Search apps diff --git a/src/com/android/settings/security/HideDeveloperStatusSettings.kt b/src/com/android/settings/security/HideDeveloperStatusSettings.kt index 13e56539297..3704de597eb 100644 --- a/src/com/android/settings/security/HideDeveloperStatusSettings.kt +++ b/src/com/android/settings/security/HideDeveloperStatusSettings.kt @@ -60,10 +60,7 @@ class HideDeveloperStatusSettings: Fragment(R.layout.hide_developer_status_layou private lateinit var userManager: UserManager private lateinit var userInfos: List - private val appBarLayout: AppBarLayout by lazy{ - requireActivity().findViewById(R.id.app_bar) - } - + private var appBarLayout: AppBarLayout? = null private var searchText = "" private var customFilter: ((PackageInfo) -> Boolean)? = null private var comparator: ((PackageInfo, PackageInfo) -> Int)? = null @@ -85,7 +82,8 @@ class HideDeveloperStatusSettings: Fragment(R.layout.hide_developer_status_layou super.onCreate(savedInstanceState) setHasOptionsMenu(true) requireActivity().setTitle(getTitle()) - activityManager = requireContext().getSystemService(ActivityManager::class.java) + appBarLayout = requireActivity().findViewById(R.id.app_bar) + activityManager = requireContext().getSystemService(ActivityManager::class.java) as ActivityManager packageManager = requireContext().packageManager packageList = packageManager.getInstalledPackages(PackageManager.MATCH_ANY_USER) userManager = UserManager.get(requireContext()) @@ -102,9 +100,9 @@ class HideDeveloperStatusSettings: Fragment(R.layout.hide_developer_status_layou override fun onViewCreated(view: View, savedInstanceState: Bundle?) { adapter = AppListAdapter() recyclerView = view.findViewById(R.id.apps_list).also { - it.layoutManager = LinearLayoutManager(context) - it.adapter = adapter - } + it!!.layoutManager = LinearLayoutManager(context) + it!!.adapter = adapter + } as RecyclerView refreshList() } @@ -135,7 +133,7 @@ class HideDeveloperStatusSettings: Fragment(R.layout.hide_developer_status_layou searchMenuItem.setOnActionExpandListener(object: MenuItem.OnActionExpandListener { override fun onMenuItemActionExpand(item: MenuItem): Boolean { // To prevent a large space on tool bar. - appBarLayout.setExpanded(false /*expanded*/, false /*animate*/) + appBarLayout!!.setExpanded(false /*expanded*/, false /*animate*/) // To prevent user can expand the collapsing tool bar view. ViewCompat.setNestedScrollingEnabled(recyclerView, false) return true @@ -143,7 +141,7 @@ class HideDeveloperStatusSettings: Fragment(R.layout.hide_developer_status_layou override fun onMenuItemActionCollapse(item: MenuItem): Boolean { // We keep the collapsed status after user cancel the search function. - appBarLayout.setExpanded(false /*expanded*/, false /*animate*/) + appBarLayout!!.setExpanded(false /*expanded*/, false /*animate*/) ViewCompat.setNestedScrollingEnabled(recyclerView, true) return true } @@ -207,7 +205,7 @@ class HideDeveloperStatusSettings: Fragment(R.layout.hide_developer_status_layou } } try { - activityManager.forceStopPackage(packageName); + activityManager.forceStopPackage(packageName) } catch (ignored: Exception) { } } @@ -219,17 +217,17 @@ class HideDeveloperStatusSettings: Fragment(R.layout.hide_developer_status_layou private fun refreshList() { var list = packageList.filter { if (!showSystem) { - !it.applicationInfo.isSystemApp() + !it.applicationInfo!!.isSystemApp() && !resources.getStringArray( R.array.hide_developer_status_hidden_apps) - .asList().contains(it.applicationInfo.packageName) - && !it.applicationInfo.packageName.contains("android.settings") + .asList().contains(it.applicationInfo!!.packageName) + && !it.applicationInfo!!.packageName.contains("android.settings") } else { !resources.getStringArray( R.array.hide_developer_status_hidden_apps) - .asList().contains(it.applicationInfo.packageName) - && !it.applicationInfo.packageName.contains("android.settings") - && !it.applicationInfo.isResourceOverlay() + .asList().contains(it.applicationInfo!!.packageName) + && !it.applicationInfo!!.packageName.contains("android.settings") + && !it.applicationInfo!!.isResourceOverlay() } }.filter { getLabel(it).contains(searchText, true) @@ -251,11 +249,11 @@ class HideDeveloperStatusSettings: Fragment(R.layout.hide_developer_status_layou AppInfo( packageInfo.packageName, getLabel(packageInfo), - packageInfo.applicationInfo.loadIcon(packageManager), + packageInfo.applicationInfo!!.loadIcon(packageManager), ) private fun getLabel(packageInfo: PackageInfo) = - packageInfo.applicationInfo.loadLabel(packageManager).toString() + packageInfo.applicationInfo!!.loadLabel(packageManager).toString() private inner class AppListAdapter: ListAdapter(itemCallback) { private val selectedIndices = mutableSetOf() @@ -267,16 +265,16 @@ class HideDeveloperStatusSettings: Fragment(R.layout.hide_developer_status_layou override fun onBindViewHolder(holder: AppListViewHolder, position: Int) { getItem(position).let { - holder.label.text = it.label - holder.packageName.text = it.packageName - holder.icon.setImageDrawable(it.icon) - holder.itemView.setOnClickListener { + holder.label!!.text = it.label + holder.packageName!!.text = it.packageName + holder.icon!!.setImageDrawable(it.icon) + holder.itemView!!.setOnClickListener { if (selectedIndices.contains(position)) { selectedIndices.remove(position) - onListUpdate(holder.packageName.text.toString(), false) + onListUpdate(holder.packageName!!.text.toString(), false) } else { selectedIndices.add(position) - onListUpdate(holder.packageName.text.toString(), true) + onListUpdate(holder.packageName!!.text.toString(), true) } notifyItemChanged(position) } @@ -284,7 +282,7 @@ class HideDeveloperStatusSettings: Fragment(R.layout.hide_developer_status_layou initialList.remove(it.packageName) selectedIndices.add(position) } - holder.checkBox.isChecked = selectedIndices.contains(position) + holder.checkBox!!.isChecked = selectedIndices.contains(position) } } @@ -296,10 +294,10 @@ class HideDeveloperStatusSettings: Fragment(R.layout.hide_developer_status_layou } private class AppListViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) { - val icon: ImageView = itemView.findViewById(R.id.icon) - val label: TextView = itemView.findViewById(R.id.label) - val packageName: TextView = itemView.findViewById(R.id.packageName) - val checkBox: CheckBox = itemView.findViewById(R.id.checkBox) + val icon: ImageView? = itemView.findViewById(R.id.icon) + val label: TextView? = itemView.findViewById(R.id.label) + val packageName: TextView? = itemView.findViewById(R.id.packageName) + val checkBox: CheckBox? = itemView.findViewById(R.id.checkBox) } private data class AppInfo(