• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 @file:Suppress("DEPRECATION")
17 
18 package com.android.permissioncontroller.permission.ui.auto
19 
20 import android.app.Application
21 import android.os.Bundle
22 import android.os.UserHandle
23 import androidx.preference.Preference
24 import androidx.preference.PreferenceCategory
25 import com.android.car.ui.utils.ViewUtils
26 import com.android.car.ui.utils.ViewUtils.LazyLayoutView
27 import com.android.permissioncontroller.R
28 import com.android.permissioncontroller.auto.AutoSettingsFrameFragment
29 import com.android.permissioncontroller.hibernation.isHibernationEnabled
30 import com.android.permissioncontroller.permission.ui.UnusedAppsFragment
31 import com.android.permissioncontroller.permission.ui.UnusedAppsFragment.Companion.INFO_MSG_CATEGORY
32 
33 /**
34  * Auto wrapper, with customizations, around [UnusedAppsFragment].
35  */
36 class AutoUnusedAppsFragment : AutoSettingsFrameFragment(),
37     UnusedAppsFragment.Parent<AutoUnusedAppsPreference> {
38 
39     companion object {
40         private const val UNUSED_PREFERENCE_KEY = "unused_pref_row_key"
41 
42         /** Create a new instance of this fragment.  */
43         @JvmStatic
newInstancenull44         fun newInstance(): AutoUnusedAppsFragment {
45             return AutoUnusedAppsFragment()
46         }
47     }
48 
onCreatePreferencesnull49     override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
50         // Preferences will be added via shared logic in [UnusedAppsFragment].
51     }
52 
onActivityCreatednull53     override fun onActivityCreated(savedInstanceState: Bundle?) {
54         super.onActivityCreated(savedInstanceState)
55         if (savedInstanceState == null) {
56             val fragment:
57                 UnusedAppsFragment<AutoUnusedAppsFragment, AutoUnusedAppsPreference> =
58                 UnusedAppsFragment.newInstance()
59             fragment.arguments = arguments
60             // child fragment does not have its own UI - it will add to the preferences of this
61             // parent fragment
62             childFragmentManager.beginTransaction()
63                 .add(fragment, null)
64                 .commit()
65         }
66 
67         // initially focus on focus parking view and then shift focus to recyclerview once it has
68         // loaded
69         ViewUtils.hideFocus(getCarUiRecyclerView().getView().getRootView())
70         val lazyLayoutView = getCarUiRecyclerView() as LazyLayoutView
71         ViewUtils.initFocus(lazyLayoutView)
72     }
73 
createFooterPreferencenull74     override fun createFooterPreference(): Preference {
75         val preference = Preference(context!!)
76         if (isHibernationEnabled()) {
77             preference.summary = getString(R.string.unused_apps_page_summary)
78         } else {
79             preference.summary = """
80             ${getString(R.string.auto_revoked_apps_page_summary)}
81             ${getString(R.string.auto_revoke_open_app_message)}
82             """.trimIndent()
83         }
84         preference.setIcon(R.drawable.ic_info_outline)
85         preference.isSelectable = false
86         return preference
87     }
88 
setLoadingStatenull89     override fun setLoadingState(loading: Boolean, animate: Boolean) {
90         setLoading(false)
91     }
92 
createUnusedAppPrefnull93     override fun createUnusedAppPref(
94         app: Application,
95         packageName: String,
96         user: UserHandle
97     ): AutoUnusedAppsPreference {
98         return AutoUnusedAppsPreference(app, packageName, user, requireContext())
99     }
100 
setTitlenull101     override fun setTitle(title: CharSequence) {
102         headerLabel = title
103     }
104 
setEmptyStatenull105     override fun setEmptyState(empty: Boolean) {
106         val infoMsgCategory =
107                 preferenceScreen.findPreference<PreferenceCategory>(INFO_MSG_CATEGORY)!!
108         val noUnusedAppsPreference: Preference? =
109                 infoMsgCategory.findPreference<Preference>(UNUSED_PREFERENCE_KEY)
110         if (empty && noUnusedAppsPreference == null) {
111             infoMsgCategory.addPreference(createNoUnusedAppsPreference())
112         } else if (noUnusedAppsPreference != null) {
113             noUnusedAppsPreference.setVisible(empty)
114         }
115     }
116 
createNoUnusedAppsPreferencenull117     private fun createNoUnusedAppsPreference(): Preference {
118         val preference = Preference(context!!)
119         preference.title = getString(R.string.zero_unused_apps)
120         preference.key = UNUSED_PREFERENCE_KEY
121         preference.isSelectable = false
122         preference.order = 0
123         return preference
124     }
125 }
126