@@ -41,7 +41,7 @@ class SiteLocationPermissionDialog : DialogFragment() {
41
41
@Inject
42
42
lateinit var faviconManager: FaviconManager
43
43
44
- var faviconJob: Job ? = null
44
+ private var faviconJob: Job ? = null
45
45
46
46
interface SiteLocationPermissionDialogListener {
47
47
fun onSiteLocationPermissionSelected (domain : String , permission : LocationPermissionType )
@@ -71,6 +71,7 @@ class SiteLocationPermissionDialog : DialogFragment() {
71
71
val rootView = layoutInflater.inflate(R .layout.content_site_location_permission_dialog, null )
72
72
73
73
val title = rootView.find<TextView >(R .id.sitePermissionDialogTitle)
74
+ val subtitle = rootView.find<TextView >(R .id.sitePermissionDialogSubtitle)
74
75
val favicon = rootView.find<ImageView >(R .id.sitePermissionDialogFavicon)
75
76
val allowAlways = rootView.find<TextView >(R .id.siteAllowAlwaysLocationPermission)
76
77
val allowOnce = rootView.find<TextView >(R .id.siteAllowOnceLocationPermission)
@@ -84,6 +85,7 @@ class SiteLocationPermissionDialog : DialogFragment() {
84
85
85
86
validateBundleArguments()
86
87
populateTitle(title)
88
+ populateSubtitle(subtitle)
87
89
populateFavicon(favicon)
88
90
configureListeners(allowAlways, allowOnce, denyOnce, denyAlways)
89
91
hideExtraViews(allowOnce, denyOnce, extraDivider, anotherDivider)
@@ -97,28 +99,40 @@ class SiteLocationPermissionDialog : DialogFragment() {
97
99
super .onDetach()
98
100
}
99
101
102
+ private fun getOriginUrl (): String {
103
+ return requireArguments().getString(KEY_REQUEST_ORIGIN )!!
104
+ }
105
+
106
+ private fun getTabId (): String {
107
+ return requireArguments().getString(KEY_TAB_ID )!!
108
+ }
109
+
110
+ private fun isEditingPermissions (): Boolean {
111
+ return requireArguments().getBoolean(KEY_EDITING_PERMISSION )
112
+ }
113
+
100
114
private fun populateTitle (title : TextView ) {
101
- arguments?.let { args ->
102
- val originUrl = args.getString(KEY_REQUEST_ORIGIN )!!
103
- val dialogTitle = getString(R .string.preciseLocationSiteDialogTitle, originUrl.websiteFromGeoLocationsApiOrigin())
104
- title.text = dialogTitle
115
+ title.text = getString(R .string.preciseLocationSiteDialogTitle, getOriginUrl().websiteFromGeoLocationsApiOrigin())
116
+ }
117
+
118
+ private fun populateSubtitle (subtitle : TextView ) {
119
+ if (getOriginUrl().websiteFromGeoLocationsApiOrigin() == DDG_DOMAIN ) {
120
+ subtitle.text = getString(R .string.preciseLocationDDGDialogSubtitle)
121
+ } else {
122
+ subtitle.text = getString(R .string.preciseLocationSiteDialogSubtitle)
105
123
}
106
124
}
107
125
108
126
private fun populateFavicon (imageView : ImageView ) {
109
- arguments?.let { args ->
110
- val originUrl = args.getString(KEY_REQUEST_ORIGIN )
111
- val tabId = args.getString(KEY_TAB_ID , " " )
112
-
113
- originUrl?.let { url ->
114
- faviconJob?.cancel()
115
- faviconJob = this .lifecycleScope.launch {
116
- if (tabId.isNotBlank()) {
117
- faviconManager.loadToViewFromTemp(tabId, url, imageView)
118
- } else {
119
- faviconManager.loadToViewFromPersisted(url, imageView)
120
- }
121
- }
127
+ val originUrl = getOriginUrl()
128
+ val tabId = getTabId()
129
+
130
+ faviconJob?.cancel()
131
+ faviconJob = this .lifecycleScope.launch {
132
+ if (tabId.isNotBlank()) {
133
+ faviconManager.loadToViewFromTemp(tabId, originUrl, imageView)
134
+ } else {
135
+ faviconManager.loadToViewFromPersisted(originUrl, imageView)
122
136
}
123
137
}
124
138
}
@@ -129,25 +143,24 @@ class SiteLocationPermissionDialog : DialogFragment() {
129
143
denyOnce : TextView ,
130
144
denyAlways : TextView
131
145
) {
132
- arguments?.let { args ->
133
- val originUrl = args.getString(KEY_REQUEST_ORIGIN )!!
134
- allowAlways.setOnClickListener {
135
- dismiss()
136
- listener.onSiteLocationPermissionSelected(originUrl, LocationPermissionType .ALLOW_ALWAYS )
137
- }
138
- allowOnce.setOnClickListener {
139
- dismiss()
140
- listener.onSiteLocationPermissionSelected(originUrl, LocationPermissionType .ALLOW_ONCE )
141
- }
142
- denyOnce.setOnClickListener {
143
- dismiss()
144
- listener.onSiteLocationPermissionSelected(originUrl, LocationPermissionType .DENY_ONCE )
145
- }
146
- denyAlways.setOnClickListener {
147
- dismiss()
148
- listener.onSiteLocationPermissionSelected(originUrl, LocationPermissionType .DENY_ALWAYS )
149
- }
146
+ val originUrl = getOriginUrl()
147
+ allowAlways.setOnClickListener {
148
+ dismiss()
149
+ listener.onSiteLocationPermissionSelected(originUrl, LocationPermissionType .ALLOW_ALWAYS )
150
+ }
151
+ allowOnce.setOnClickListener {
152
+ dismiss()
153
+ listener.onSiteLocationPermissionSelected(originUrl, LocationPermissionType .ALLOW_ONCE )
154
+ }
155
+ denyOnce.setOnClickListener {
156
+ dismiss()
157
+ listener.onSiteLocationPermissionSelected(originUrl, LocationPermissionType .DENY_ONCE )
150
158
}
159
+ denyAlways.setOnClickListener {
160
+ dismiss()
161
+ listener.onSiteLocationPermissionSelected(originUrl, LocationPermissionType .DENY_ALWAYS )
162
+ }
163
+
151
164
}
152
165
153
166
private fun hideExtraViews (
@@ -156,23 +169,16 @@ class SiteLocationPermissionDialog : DialogFragment() {
156
169
dividerOne : View ,
157
170
dividerTwo : View
158
171
) {
159
- arguments?.let { args ->
160
-
161
- val isEditing = args.getBoolean(KEY_EDITING_PERMISSION )
162
- if (isEditing) {
163
- dividerOne.gone()
164
- dividerTwo.gone()
165
- allowOnce.gone()
166
- denyOnce.gone()
167
- }
172
+ if (isEditingPermissions()) {
173
+ dividerOne.gone()
174
+ dividerTwo.gone()
175
+ allowOnce.gone()
176
+ denyOnce.gone()
168
177
}
169
178
}
170
179
171
180
private fun makeCancellable () {
172
- arguments?.let { args ->
173
- val isEditing = args.getBoolean(KEY_EDITING_PERMISSION )
174
- isCancelable = isEditing
175
- }
181
+ isCancelable = isEditingPermissions()
176
182
}
177
183
178
184
private fun validateBundleArguments () {
@@ -181,6 +187,18 @@ class SiteLocationPermissionDialog : DialogFragment() {
181
187
if (! args.containsKey(KEY_REQUEST_ORIGIN )) {
182
188
throw IllegalArgumentException (" Bundle arguments required [KEY_REQUEST_ORIGIN" )
183
189
}
190
+ if (args.getString(KEY_REQUEST_ORIGIN ) == null ) {
191
+ throw IllegalArgumentException (" Bundle arguments can't be null [KEY_REQUEST_ORIGIN" )
192
+ }
193
+ if (! args.containsKey(KEY_TAB_ID )) {
194
+ throw IllegalArgumentException (" Bundle arguments required [KEY_TAB_ID" )
195
+ }
196
+ if (args.getString(KEY_TAB_ID ) == null ) {
197
+ throw IllegalArgumentException (" Bundle arguments can't be null [KEY_TAB_ID" )
198
+ }
199
+ if (! args.containsKey(KEY_EDITING_PERMISSION )) {
200
+ throw IllegalArgumentException (" Bundle arguments required [KEY_EDITING_PERMISSION" )
201
+ }
184
202
}
185
203
186
204
companion object {
@@ -190,6 +208,8 @@ class SiteLocationPermissionDialog : DialogFragment() {
190
208
private const val KEY_EDITING_PERMISSION = " KEY_SCREEN_FROM"
191
209
private const val KEY_TAB_ID = " TAB_ID"
192
210
211
+ private const val DDG_DOMAIN = " duckduckgo.com"
212
+
193
213
fun instance (origin : String , isEditingPermission : Boolean , tabId : String ): SiteLocationPermissionDialog {
194
214
return SiteLocationPermissionDialog ().also { fragment ->
195
215
val bundle = Bundle ()
0 commit comments