diff --git a/android-location-search/.gitignore b/android-location-search/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/android-location-search/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/android-location-search/app/.gitignore b/android-location-search/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/android-location-search/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/android-location-search/app/build.gradle.kts b/android-location-search/app/build.gradle.kts new file mode 100644 index 0000000..1cb0784 --- /dev/null +++ b/android-location-search/app/build.gradle.kts @@ -0,0 +1,81 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) +} + +android { + namespace = "com.example.androidlocationsearch" + compileSdk = 35 + + defaultConfig { + applicationId = "com.example.androidlocationsearch" + minSdk = 24 + targetSdk = 34 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + vectorDrawables { + useSupportLibrary = true + } + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } + buildFeatures { + compose = true + } + composeOptions { + kotlinCompilerExtensionVersion = "1.5.1" + } + packaging { + resources { + excludes += "/META-INF/{AL2.0,LGPL2.1}" + } + } +} + +dependencies { + // Search SDK dependencies + implementation("com.mapbox.search:autofill:2.14.0-beta.1") + implementation("com.mapbox.search:discover:2.14.0-beta.1") + implementation("com.mapbox.search:place-autocomplete:2.14.0-beta.1") + implementation("com.mapbox.search:offline:2.14.0-beta.1") + implementation("com.mapbox.search:mapbox-search-android:2.14.0-beta.1") + implementation("com.mapbox.search:mapbox-search-android-ui:2.14.0-beta.1") + // If you're using compose also add the compose extension + implementation(platform(libs.androidx.compose.bom)) + implementation("com.mapbox.extension:maps-compose:11.13.3") + implementation("com.mapbox.maps:android:11.13.3") + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.activity.compose) + implementation(platform(libs.androidx.compose.bom)) + implementation("androidx.compose.foundation:foundation:1.6.4") + implementation("androidx.compose.ui:ui-text:1.6.4") + implementation(libs.androidx.ui) + implementation(libs.androidx.ui.graphics) + implementation(libs.androidx.ui.tooling.preview) + implementation(libs.androidx.material3) + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) + androidTestImplementation(platform(libs.androidx.compose.bom)) + androidTestImplementation(libs.androidx.ui.test.junit4) + debugImplementation(libs.androidx.ui.tooling) + debugImplementation(libs.androidx.ui.test.manifest) +} \ No newline at end of file diff --git a/android-location-search/app/proguard-rules.pro b/android-location-search/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/android-location-search/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/android-location-search/app/src/androidTest/java/com/example/androidlocationsearch/ExampleInstrumentedTest.kt b/android-location-search/app/src/androidTest/java/com/example/androidlocationsearch/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..e2ed53d --- /dev/null +++ b/android-location-search/app/src/androidTest/java/com/example/androidlocationsearch/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.example.androidlocationsearch + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.example.mapsinstallguide", appContext.packageName) + } +} \ No newline at end of file diff --git a/android-location-search/app/src/main/AndroidManifest.xml b/android-location-search/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e0b3643 --- /dev/null +++ b/android-location-search/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android-location-search/app/src/main/java/com/example/androidlocationsearch/MainActivity.kt b/android-location-search/app/src/main/java/com/example/androidlocationsearch/MainActivity.kt new file mode 100644 index 0000000..817386a --- /dev/null +++ b/android-location-search/app/src/main/java/com/example/androidlocationsearch/MainActivity.kt @@ -0,0 +1,73 @@ +package com.example.androidlocationsearch + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.layout.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.zIndex + +import com.mapbox.geojson.Point +import com.mapbox.maps.extension.compose.MapboxMap +import com.mapbox.maps.extension.compose.animation.viewport.rememberMapViewportState +import com.mapbox.maps.extension.compose.annotation.generated.PointAnnotation +import com.mapbox.maps.extension.compose.annotation.rememberIconImage +import com.mapbox.search.autocomplete.PlaceAutocomplete +import com.mapbox.search.result.SearchResult + +@OptIn(ExperimentalComposeUiApi::class) + +class MainActivity : ComponentActivity() { + + private lateinit var placeAutocomplete: PlaceAutocomplete + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + placeAutocomplete = PlaceAutocomplete.create() + + setContent { + val selectedResult = remember { mutableStateOf(null) } + val mapViewportState = rememberMapViewportState { + setCameraOptions { + center(Point.fromLngLat(-98.0, 39.5)) + zoom(2.0) + } + } + + Box(Modifier.fillMaxSize()) { + MapboxMap( + Modifier.fillMaxSize(), + mapViewportState = mapViewportState, + scaleBar = {}, // disables the scale bar by rendering nothing + compass = {} // disable the compass + ) { + + selectedResult.value?.coordinate?.let { coord -> + val marker = rememberIconImage( + key = R.drawable.map_marker, + painter = painterResource(id = R.drawable.map_marker) + ) + PointAnnotation(point = coord) { + iconImage = marker + } + } + } + + SearchScreen( + mapViewportState = mapViewportState, + onSuggestionSelected = { result -> + selectedResult.value = result + }, + modifier = Modifier + .align(Alignment.TopCenter) + .zIndex(1f) + ) + } + } + } +} \ No newline at end of file diff --git a/android-location-search/app/src/main/java/com/example/androidlocationsearch/SearchScreen.kt b/android-location-search/app/src/main/java/com/example/androidlocationsearch/SearchScreen.kt new file mode 100644 index 0000000..01cef6e --- /dev/null +++ b/android-location-search/app/src/main/java/com/example/androidlocationsearch/SearchScreen.kt @@ -0,0 +1,249 @@ +package com.example.androidlocationsearch + +import android.util.Log +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.mapbox.common.location.LocationServiceFactory +import com.mapbox.geojson.BoundingBox +import com.mapbox.geojson.Point +import com.mapbox.maps.dsl.cameraOptions +import com.mapbox.maps.extension.compose.animation.viewport.MapViewportState +import com.mapbox.maps.plugin.animation.MapAnimationOptions +import com.mapbox.search.ApiType +import com.mapbox.search.ResponseInfo +import com.mapbox.search.SearchEngine +import com.mapbox.search.SearchEngineSettings +import com.mapbox.search.SearchOptions +import com.mapbox.search.SearchSelectionCallback +import com.mapbox.search.result.SearchResult +import com.mapbox.search.result.SearchSuggestion + + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun SearchScreen( + mapViewportState: MapViewportState, + modifier: Modifier = Modifier, + onSuggestionSelected: (SearchResult) -> Unit +) { + val context = LocalContext.current; + var query by remember { mutableStateOf("") } + var suggestions by remember { mutableStateOf>(emptyList()) } + + val locationProvider = LocationServiceFactory.getOrCreate() + .getDeviceLocationProvider(null) + .value + + val searchEngineSettings = SearchEngineSettings( + locationProvider = locationProvider + ) + + // Get SearchEngine instance + val searchEngine = remember { + SearchEngine.createSearchEngine( + ApiType.SEARCH_BOX, + searchEngineSettings + ) + } + + Column( + modifier = modifier + .fillMaxWidth() + .padding(16.dp) + ) { + // Inline SearchInput UI + OutlinedTextField( + value = query, + onValueChange = { newQuery -> + query = newQuery + if (newQuery.length >= 2) { + searchEngine.search( + newQuery, + SearchOptions( + //proximity = Point.fromLngLat(-79.35954, 43.65050), // Proximity to Toronto's Distillery District + limit = 10, + // boundingBox = BoundingBox.fromPoints( + // Point.fromLngLat(-79.49555, 43.60698), + // Point.fromLngLat(-79.29422, 43.75953) + // ) // Bounding Box of the Greater Toronto Area + ), + callback = object : com.mapbox.search.SearchSuggestionsCallback { + override fun onSuggestions( + list: List, + responseInfo: ResponseInfo + ) { + suggestions = list + } + + override fun onError(e: Exception) { + Log.e("SearchScreen", "Search error", e) + } + } + ) + } else { + suggestions = emptyList() + } + }, + + label = { Text("Search") }, + singleLine = true, + modifier = Modifier + .fillMaxWidth() + .padding(8.dp), + colors = TextFieldDefaults.outlinedTextFieldColors( + containerColor = Color.White, // White background + focusedBorderColor = Color.Gray, // Grey border when focused + unfocusedBorderColor = Color.LightGray // Grey border when unfocused (lighter) + ), + shape = RoundedCornerShape(8.dp) + ) + + Spacer(modifier = Modifier.height(16.dp)) + + // Suggestions list anchored right below the TextField + if (suggestions.isNotEmpty()) { + Surface( + color = Color.White, + shadowElevation = 4.dp, + shape = RoundedCornerShape(8.dp), + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp) + .heightIn(max = 500.dp) + ) { + val scrollState = rememberScrollState() + Column( + modifier = Modifier + .padding(16.dp) + .verticalScroll(scrollState) + ) { + suggestions.forEachIndexed { index, suggestion -> + + val distanceKm = suggestion.distanceMeters?.div(1000.0) + val addressText = suggestion.fullAddress + ?: listOfNotNull(suggestion.address?.region, suggestion.address?.country).joinToString(", ") + + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { + suggestions = emptyList() + handleSuggestionSelection(suggestion, searchEngine, mapViewportState, onSuggestionSelected) + } + .padding(vertical = 12.dp, horizontal = 8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + painter = painterResource(id = R.drawable.search_result_marker), + contentDescription = "Mapbox Marker", + tint = Color.Unspecified, // Use this if your vector defines its own fill color + modifier = Modifier + .size(24.dp) + ) + + Column( + modifier = Modifier.padding(start = 16.dp) + ) { + Text( + text = suggestion.name, + fontWeight = FontWeight.Bold, + fontSize = 16.sp + ) + + Text( + text = addressText, + fontSize = 14.sp, + color = Color.Gray, + modifier = Modifier.padding(top = 4.dp) + ) + + distanceKm?.let { km -> + Text( + text = String.format("%.1f km", km), + fontSize = 12.sp, + color = Color.Gray, + modifier = Modifier.padding(top = 4.dp) + ) + } + + } + } + if (index < suggestions.lastIndex) { + Divider(color = Color.LightGray) + } + } + + } + } + } + } +} + +fun handleSuggestionSelection( + suggestion: SearchSuggestion, + searchEngine: SearchEngine, + mapViewportState: MapViewportState, + onSuggestionSelected: (SearchResult) -> Unit + +) { + searchEngine.select(suggestion, object: SearchSelectionCallback { + override fun onResult( + suggestion: SearchSuggestion, + result: SearchResult, + responseInfo: ResponseInfo + ) { + // When user selects a suggestion: + onSuggestionSelected(result) + val coordinate = result.coordinate + if (coordinate != null) { + val camera = cameraOptions { + center(coordinate) + zoom(14.0) + } + + val animationOptions = MapAnimationOptions.Builder() + .duration(3000L) // 3 seconds + .build() + + mapViewportState.flyTo(camera, animationOptions) + } else { + Log.w("Search", "No coordinate found for result.") + } + } + + override fun onResults( + suggestion: SearchSuggestion, + results: List, + responseInfo: ResponseInfo + ) { + // handle multiple results (category, brand, etc.) + } + + + override fun onSuggestions( + suggestions: List, + responseInfo: ResponseInfo + ) { + // override if needed + } + + override fun onError(e: Exception) { + Log.e("Search", "Selection error", e) + } + }) +} + + diff --git a/android-location-search/app/src/main/java/com/example/androidlocationsearch/ui/theme/Color.kt b/android-location-search/app/src/main/java/com/example/androidlocationsearch/ui/theme/Color.kt new file mode 100644 index 0000000..dff5bcb --- /dev/null +++ b/android-location-search/app/src/main/java/com/example/androidlocationsearch/ui/theme/Color.kt @@ -0,0 +1,11 @@ +package com.example.androidlocationsearch.ui.theme + +import androidx.compose.ui.graphics.Color + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val Purple40 = Color(0xFF6650a4) +val PurpleGrey40 = Color(0xFF625b71) +val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/android-location-search/app/src/main/java/com/example/androidlocationsearch/ui/theme/Theme.kt b/android-location-search/app/src/main/java/com/example/androidlocationsearch/ui/theme/Theme.kt new file mode 100644 index 0000000..c8368f5 --- /dev/null +++ b/android-location-search/app/src/main/java/com/example/androidlocationsearch/ui/theme/Theme.kt @@ -0,0 +1,57 @@ +package com.example.androidlocationsearch.ui.theme + +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext + +private val DarkColorScheme = darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80 +) + +private val LightColorScheme = lightColorScheme( + primary = Purple40, + secondary = PurpleGrey40, + tertiary = Pink40 + + /* Other default colors to override + background = Color(0xFFFFFBFE), + surface = Color(0xFFFFFBFE), + onPrimary = Color.White, + onSecondary = Color.White, + onTertiary = Color.White, + onBackground = Color(0xFF1C1B1F), + onSurface = Color(0xFF1C1B1F), + */ +) + +@Composable +fun MapsInstallGuideTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) +} \ No newline at end of file diff --git a/android-location-search/app/src/main/java/com/example/androidlocationsearch/ui/theme/Type.kt b/android-location-search/app/src/main/java/com/example/androidlocationsearch/ui/theme/Type.kt new file mode 100644 index 0000000..3cbccdf --- /dev/null +++ b/android-location-search/app/src/main/java/com/example/androidlocationsearch/ui/theme/Type.kt @@ -0,0 +1,34 @@ +package com.example.androidlocationsearch.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ) + /* Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) + */ +) \ No newline at end of file diff --git a/android-location-search/app/src/main/res/drawable/ic_launcher_background.xml b/android-location-search/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/android-location-search/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android-location-search/app/src/main/res/drawable/ic_launcher_foreground.xml b/android-location-search/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/android-location-search/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/android-location-search/app/src/main/res/drawable/map_marker.png b/android-location-search/app/src/main/res/drawable/map_marker.png new file mode 100644 index 0000000..be782e1 Binary files /dev/null and b/android-location-search/app/src/main/res/drawable/map_marker.png differ diff --git a/android-location-search/app/src/main/res/drawable/search_result_marker.xml b/android-location-search/app/src/main/res/drawable/search_result_marker.xml new file mode 100644 index 0000000..cfcf5ca --- /dev/null +++ b/android-location-search/app/src/main/res/drawable/search_result_marker.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/android-location-search/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android-location-search/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/android-location-search/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/android-location-search/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android-location-search/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/android-location-search/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/android-location-search/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/android-location-search/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..c209e78 Binary files /dev/null and b/android-location-search/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/android-location-search/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/android-location-search/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..b2dfe3d Binary files /dev/null and b/android-location-search/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/android-location-search/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/android-location-search/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..4f0f1d6 Binary files /dev/null and b/android-location-search/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/android-location-search/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/android-location-search/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..62b611d Binary files /dev/null and b/android-location-search/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/android-location-search/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/android-location-search/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..948a307 Binary files /dev/null and b/android-location-search/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/android-location-search/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/android-location-search/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..1b9a695 Binary files /dev/null and b/android-location-search/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/android-location-search/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/android-location-search/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..28d4b77 Binary files /dev/null and b/android-location-search/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/android-location-search/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/android-location-search/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9287f50 Binary files /dev/null and b/android-location-search/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/android-location-search/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/android-location-search/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..aa7d642 Binary files /dev/null and b/android-location-search/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/android-location-search/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/android-location-search/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9126ae3 Binary files /dev/null and b/android-location-search/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/android-location-search/app/src/main/res/values/colors.xml b/android-location-search/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/android-location-search/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/android-location-search/app/src/main/res/values/mapbox_access_token.xml b/android-location-search/app/src/main/res/values/mapbox_access_token.xml new file mode 100644 index 0000000..2996603 --- /dev/null +++ b/android-location-search/app/src/main/res/values/mapbox_access_token.xml @@ -0,0 +1,4 @@ + + + pk.eyJ1IjoiYW5kcmV3c2VwaWMxIiwiYSI6ImNsbzV0NzQwNTAzYjQyd3MwbHVjaXR1cWUifQ.1Puj3xOeBUWw0cITO38elg + \ No newline at end of file diff --git a/android-location-search/app/src/main/res/values/strings.xml b/android-location-search/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..93b7380 --- /dev/null +++ b/android-location-search/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Android Location Search + \ No newline at end of file diff --git a/android-location-search/app/src/main/res/values/themes.xml b/android-location-search/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..9721d54 --- /dev/null +++ b/android-location-search/app/src/main/res/values/themes.xml @@ -0,0 +1,5 @@ + + + +