• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2023 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  package com.android.intentresolver.data.repository
17  
18  import android.app.admin.DevicePolicyManager
19  import android.app.admin.DevicePolicyResources.Strings.Core.FORWARD_INTENT_TO_PERSONAL
20  import android.app.admin.DevicePolicyResources.Strings.Core.FORWARD_INTENT_TO_WORK
21  import android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_CANT_ACCESS_PERSONAL
22  import android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_CANT_ACCESS_WORK
23  import android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_CANT_SHARE_WITH_PERSONAL
24  import android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_CANT_SHARE_WITH_WORK
25  import android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_CROSS_PROFILE_BLOCKED_TITLE
26  import android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_NO_PERSONAL_APPS
27  import android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_NO_WORK_APPS
28  import android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_PERSONAL_TAB
29  import android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_PERSONAL_TAB_ACCESSIBILITY
30  import android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_WORK_PROFILE_NOT_SUPPORTED
31  import android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_WORK_TAB
32  import android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_WORK_TAB_ACCESSIBILITY
33  import android.content.res.Resources
34  import androidx.annotation.OpenForTesting
35  import com.android.intentresolver.R
36  import com.android.intentresolver.inject.ApplicationOwned
37  import javax.inject.Inject
38  import javax.inject.Singleton
39  
40  @OpenForTesting
41  @Singleton
42  open class DevicePolicyResources
43  @Inject
44  constructor(
45      @ApplicationOwned private val resources: Resources,
46      devicePolicyManager: DevicePolicyManager,
47  ) {
48      private val policyResources = devicePolicyManager.resources
49  
<lambda>null50      val personalTabLabel by lazy {
51          requireNotNull(
52              policyResources.getString(RESOLVER_PERSONAL_TAB) {
53                  resources.getString(R.string.resolver_personal_tab)
54              }
55          )
56      }
57  
<lambda>null58      val workTabLabel by lazy {
59          requireNotNull(
60              policyResources.getString(RESOLVER_WORK_TAB) {
61                  resources.getString(R.string.resolver_work_tab)
62              }
63          )
64      }
65  
<lambda>null66      val personalTabAccessibilityLabel by lazy {
67          requireNotNull(
68              policyResources.getString(RESOLVER_PERSONAL_TAB_ACCESSIBILITY) {
69                  resources.getString(R.string.resolver_personal_tab_accessibility)
70              }
71          )
72      }
73  
<lambda>null74      val workTabAccessibilityLabel by lazy {
75          requireNotNull(
76              policyResources.getString(RESOLVER_WORK_TAB_ACCESSIBILITY) {
77                  resources.getString(R.string.resolver_work_tab_accessibility)
78              }
79          )
80      }
81  
82      val forwardToPersonalMessage: String? =
<lambda>null83          devicePolicyManager.resources.getString(FORWARD_INTENT_TO_PERSONAL) {
84              resources.getString(R.string.forward_intent_to_owner)
85          }
86  
<lambda>null87      val forwardToWorkMessage by lazy {
88          requireNotNull(
89              policyResources.getString(FORWARD_INTENT_TO_WORK) {
90                  resources.getString(R.string.forward_intent_to_work)
91              }
92          )
93      }
94  
<lambda>null95      val noPersonalApps by lazy {
96          requireNotNull(
97              policyResources.getString(RESOLVER_NO_PERSONAL_APPS) {
98                  resources.getString(R.string.resolver_no_personal_apps_available)
99              }
100          )
101      }
102  
<lambda>null103      val noWorkApps by lazy {
104          requireNotNull(
105              policyResources.getString(RESOLVER_NO_WORK_APPS) {
106                  resources.getString(R.string.resolver_no_work_apps_available)
107              }
108          )
109      }
110  
<lambda>null111      open val crossProfileBlocked by lazy {
112          requireNotNull(
113              policyResources.getString(RESOLVER_CROSS_PROFILE_BLOCKED_TITLE) {
114                  resources.getString(R.string.resolver_cross_profile_blocked)
115              }
116          )
117      }
118  
toPersonalBlockedByPolicyMessagenull119      open fun toPersonalBlockedByPolicyMessage(share: Boolean): String {
120          return requireNotNull(if (share) {
121              policyResources.getString(RESOLVER_CANT_SHARE_WITH_PERSONAL) {
122                  resources.getString(R.string.resolver_cant_share_with_personal_apps_explanation)
123              }
124          } else {
125              policyResources.getString(RESOLVER_CANT_ACCESS_PERSONAL) {
126                  resources.getString(R.string.resolver_cant_access_personal_apps_explanation)
127              }
128          })
129      }
130  
toWorkBlockedByPolicyMessagenull131      open fun toWorkBlockedByPolicyMessage(share: Boolean): String {
132          return requireNotNull(if (share) {
133              policyResources.getString(RESOLVER_CANT_SHARE_WITH_WORK) {
134                  resources.getString(R.string.resolver_cant_share_with_work_apps_explanation)
135              }
136          } else {
137              policyResources.getString(RESOLVER_CANT_ACCESS_WORK) {
138                  resources.getString(R.string.resolver_cant_access_work_apps_explanation)
139              }
140          })
141      }
142  
toPrivateBlockedByPolicyMessagenull143      open fun toPrivateBlockedByPolicyMessage(share: Boolean): String {
144          return if (share) {
145              resources.getString(R.string.resolver_cant_share_with_private_apps_explanation)
146          } else {
147              resources.getString(R.string.resolver_cant_access_private_apps_explanation)
148          }
149      }
150  
getWorkProfileNotSupportedMessagenull151      fun getWorkProfileNotSupportedMessage(launcherName: String): String {
152          return requireNotNull(
153              policyResources.getString(
154                  RESOLVER_WORK_PROFILE_NOT_SUPPORTED,
155                  {
156                      resources.getString(
157                          R.string.activity_resolver_work_profiles_support,
158                          launcherName
159                      )
160                  },
161                  launcherName
162              )
163          )
164      }
165  }
166