Skip to content

Commit 28f6fdc

Browse files
Merge pull request #5924 from nextcloud/fix/noid/geocodingPolicy
Comply with Nominatim Usage Policy (aka Geocoding Policy)
2 parents cafa8f3 + d16d5cf commit 28f6fdc

2 files changed

Lines changed: 34 additions & 8 deletions

File tree

app/src/main/java/com/nextcloud/talk/location/components/GeocodingScreen.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
package com.nextcloud.talk.location.components
88

99
import android.content.res.Configuration
10+
import androidx.compose.foundation.isSystemInDarkTheme
1011
import androidx.compose.foundation.layout.WindowInsets
1112
import androidx.compose.foundation.layout.fillMaxSize
1213
import androidx.compose.foundation.layout.padding
@@ -18,6 +19,8 @@ import androidx.compose.material3.IconButton
1819
import androidx.compose.material3.MaterialTheme
1920
import androidx.compose.material3.Scaffold
2021
import androidx.compose.material3.TopAppBar
22+
import androidx.compose.material3.darkColorScheme
23+
import androidx.compose.material3.lightColorScheme
2124
import androidx.compose.runtime.Composable
2225
import androidx.compose.runtime.LaunchedEffect
2326
import androidx.compose.runtime.getValue
@@ -48,9 +51,11 @@ fun GeocodingScreen(viewModel: GeoCodingViewModel, onBack: () -> Unit, onAddress
4851
mutableStateOf(TextFieldValue(initialQuery, TextRange(initialQuery.length)))
4952
}
5053
val keyboardController = LocalSoftwareKeyboardController.current
54+
var autoSearchDone by rememberSaveable { mutableStateOf(false) }
5155

5256
LaunchedEffect(Unit) {
53-
if (viewModel.getQuery().isNotEmpty() && results.isEmpty()) {
57+
if (!autoSearchDone && viewModel.getQuery().isNotEmpty() && results.isEmpty()) {
58+
autoSearchDone = true
5459
viewModel.searchLocation()
5560
}
5661
}
@@ -129,7 +134,8 @@ private fun GeocodingScreenContent(
129134
@Preview(name = "Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
130135
@Composable
131136
private fun PreviewGeocodingScreen() {
132-
MaterialTheme {
137+
val colorScheme = if (isSystemInDarkTheme()) darkColorScheme() else lightColorScheme()
138+
MaterialTheme(colorScheme = colorScheme) {
133139
GeocodingScreenContent(
134140
query = TextFieldValue("Berlin", TextRange("Berlin".length)),
135141
results = listOf(

app/src/main/java/fr/dudie/nominatim/client/TalkJsonNominatimClient.java

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.google.gson.Gson;
1414
import com.google.gson.GsonBuilder;
1515
import com.google.gson.reflect.TypeToken;
16+
import com.nextcloud.talk.utils.ApiUtils;
1617

1718
import java.io.IOException;
1819
import java.io.UnsupportedEncodingException;
@@ -147,16 +148,22 @@ public List<Address> search(final NominatimSearchRequest search) throws IOExcept
147148

148149
Request requesthttp = new Request.Builder()
149150
.addHeader("accept", "application/json")
151+
.addHeader("User-Agent", ApiUtils.getUserAgent())
150152
.url(apiCall)
151153
.build();
152154

153155
Response response = httpClient.newCall(requesthttp).execute();
156+
ResponseBody responseBody = response.body();
154157
if (response.isSuccessful()) {
155-
ResponseBody responseBody = response.body();
156158
if (responseBody != null) {
157159
return gson.fromJson(responseBody.string(), new TypeToken<List<Address>>() {
158160
}.getType());
159161
}
162+
} else {
163+
if (responseBody != null) {
164+
Log.w(TAG, "search failed: " + response.code() + " " + responseBody);
165+
}
166+
Log.w(TAG, "search failed with HTTP-code: " + response.code());
160167
}
161168

162169
return new ArrayList<>();
@@ -174,16 +181,22 @@ public Address getAddress(final NominatimReverseRequest reverse) throws IOExcept
174181
Log.d(TAG, "reverse geocoding url: " + apiCall);
175182

176183
Request requesthttp = new Request.Builder()
177-
.addHeader("accept", "application/json")
178-
.url(apiCall)
179-
.build();
184+
.addHeader("accept", "application/json")
185+
.addHeader("User-Agent", ApiUtils.getUserAgent())
186+
.url(apiCall)
187+
.build();
180188

181189
Response response = httpClient.newCall(requesthttp).execute();
190+
ResponseBody responseBody = response.body();
182191
if (response.isSuccessful()) {
183-
ResponseBody responseBody = response.body();
184192
if (responseBody != null) {
185193
return gson.fromJson(responseBody.string(), Address.class);
186194
}
195+
} else {
196+
if (responseBody != null) {
197+
Log.w(TAG, "get address failed: " + response.code() + " " + responseBody);
198+
}
199+
Log.w(TAG, "get address failed with HTTP-code: " + response.code());
187200
}
188201

189202
return null;
@@ -199,18 +212,25 @@ public List<Address> lookupAddress(final NominatimLookupRequest lookup) throws I
199212

200213
final String apiCall = String.format("%s&%s", lookupUrl, lookup.getQueryString());
201214
Log.d(TAG, "lookup url: " + apiCall);
215+
202216
Request requesthttp = new Request.Builder()
203217
.addHeader("accept", "application/json")
218+
.addHeader("User-Agent", ApiUtils.getUserAgent())
204219
.url(apiCall)
205220
.build();
206221

207222
Response response = httpClient.newCall(requesthttp).execute();
223+
ResponseBody responseBody = response.body();
208224
if (response.isSuccessful()) {
209-
ResponseBody responseBody = response.body();
210225
if (responseBody != null) {
211226
return gson.fromJson(responseBody.string(), new TypeToken<List<Address>>() {
212227
}.getType());
213228
}
229+
} else {
230+
if (responseBody != null) {
231+
Log.w(TAG, "address lookup failed: " + response.code() + " " + responseBody);
232+
}
233+
Log.w(TAG, "address lookup failed with HTTP-code: " + response.code());
214234
}
215235

216236
return new ArrayList<>();

0 commit comments

Comments
 (0)