Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
[android] Adding builder pattern for LocationComponent activation (#1…
Browse files Browse the repository at this point in the history
…3941)

* initial additions of activation builder

* [android] refactoring LocationComponentActivationOptions based on code review

* [android] initial addition of LocationComponentActivationOptionsTest unit tests

* [android] more refactoring based on code review

* [android] refactoring test app location examples

* [android] espresso test refactor with LocationComponentActivationOptions usage

* [android] locationComponent builder instrumentation test tweaks and log removal

* [android] method and docs refactoring based @LukasPaczos 's review

* [android] locationEngine setting logic refactor

* [android] add null locationEngine to stillStaleAfterResuming test

* added .locationEngine(null) to other tests

* [android] javadocs, method, and test adjustments based on @LukasPaczos review

* [android] test tweaks based on Lukasz review
  • Loading branch information
Langston Smith committed Mar 5, 2019
1 parent b29704c commit 7e48249
Show file tree
Hide file tree
Showing 14 changed files with 984 additions and 147 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -217,8 +217,10 @@ public LocationComponent(@NonNull MapboxMap mapboxMap) {
*
* @param context the context
* @param style the proxy object for current map style. More info at {@link Style}
* @deprecated use {@link LocationComponentActivationOptions.Builder} instead
*/
@RequiresPermission(anyOf = {ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION})
@Deprecated
public void activateLocationComponent(@NonNull Context context, @NonNull Style style) {
activateLocationComponent(context, style,
LocationComponentOptions.createFromAttributes(context, R.style.mapbox_LocationComponent));
Expand All @@ -232,8 +234,10 @@ public void activateLocationComponent(@NonNull Context context, @NonNull Style s
* @param style the proxy object for current map style. More info at {@link Style}
* @param useDefaultLocationEngine true if you want to initialize and use the built-in location engine or false if
* there should be no location engine initialized
* @deprecated use {@link LocationComponentActivationOptions.Builder} instead
*/
@RequiresPermission(anyOf = {ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION})
@Deprecated
public void activateLocationComponent(@NonNull Context context, @NonNull Style style,
boolean useDefaultLocationEngine) {
if (useDefaultLocationEngine) {
Expand All @@ -252,8 +256,10 @@ public void activateLocationComponent(@NonNull Context context, @NonNull Style s
* @param useDefaultLocationEngine true if you want to initialize and use the built-in location engine or false if
* there should be no location engine initialized
* @param locationEngineRequest the location request
* @deprecated use {@link LocationComponentActivationOptions.Builder} instead
*/
@RequiresPermission(anyOf = {ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION})
@Deprecated
public void activateLocationComponent(@NonNull Context context, @NonNull Style style,
boolean useDefaultLocationEngine,
@NonNull LocationEngineRequest locationEngineRequest) {
Expand All @@ -275,8 +281,10 @@ public void activateLocationComponent(@NonNull Context context, @NonNull Style s
* there should be no location engine initialized
* @param locationEngineRequest the location request
* @param options the options
* @deprecated use {@link LocationComponentActivationOptions.Builder} instead
*/
@RequiresPermission(anyOf = {ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION})
@Deprecated
public void activateLocationComponent(@NonNull Context context, @NonNull Style style,
boolean useDefaultLocationEngine,
@NonNull LocationEngineRequest locationEngineRequest,
Expand All @@ -298,8 +306,10 @@ public void activateLocationComponent(@NonNull Context context, @NonNull Style s
* @param context the context
* @param style the proxy object for current map style. More info at {@link Style}
* @param styleRes the LocationComponent style res
* @deprecated use {@link LocationComponentActivationOptions.Builder} instead
*/
@RequiresPermission(anyOf = {ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION})
@Deprecated
public void activateLocationComponent(@NonNull Context context, @NonNull Style style, @StyleRes int styleRes) {
activateLocationComponent(context, style, LocationComponentOptions.createFromAttributes(context, styleRes));
}
Expand All @@ -314,8 +324,10 @@ public void activateLocationComponent(@NonNull Context context, @NonNull Style s
* @param context the context
* @param style the proxy object for current map style. More info at {@link Style}
* @param options the options
* @deprecated use {@link LocationComponentActivationOptions.Builder} instead
*/
@RequiresPermission(anyOf = {ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION})
@Deprecated
public void activateLocationComponent(@NonNull Context context, @NonNull Style style,
@NonNull LocationComponentOptions options) {
initialize(context, style, options);
Expand All @@ -331,8 +343,10 @@ public void activateLocationComponent(@NonNull Context context, @NonNull Style s
* @param style the proxy object for current map style. More info at {@link Style}
* @param locationEngine the engine, or null if you'd like to only force location updates
* @param styleRes the LocationComponent style res
* @deprecated use {@link LocationComponentActivationOptions.Builder} instead
*/
@RequiresPermission(anyOf = {ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION})
@Deprecated
public void activateLocationComponent(@NonNull Context context, @NonNull Style style,
@Nullable LocationEngine locationEngine, @StyleRes int styleRes) {
activateLocationComponent(context, style, locationEngine,
Expand All @@ -348,8 +362,10 @@ public void activateLocationComponent(@NonNull Context context, @NonNull Style s
* @param locationEngine the engine, or null if you'd like to only force location updates
* @param locationEngineRequest the location request
* @param styleRes the LocationComponent style res
* @deprecated use {@link LocationComponentActivationOptions.Builder} instead
*/
@RequiresPermission(anyOf = {ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION})
@Deprecated
public void activateLocationComponent(@NonNull Context context, @NonNull Style style,
@Nullable LocationEngine locationEngine,
@NonNull LocationEngineRequest locationEngineRequest, @StyleRes int styleRes) {
Expand All @@ -363,8 +379,10 @@ public void activateLocationComponent(@NonNull Context context, @NonNull Style s
* @param context the context
* @param style the proxy object for current map style. More info at {@link Style}
* @param locationEngine the engine
* @deprecated use {@link LocationComponentActivationOptions.Builder} instead
*/
@RequiresPermission(anyOf = {ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION})
@Deprecated
public void activateLocationComponent(@NonNull Context context, @NonNull Style style,
@Nullable LocationEngine locationEngine) {
activateLocationComponent(context, style, locationEngine, R.style.mapbox_LocationComponent);
Expand All @@ -377,8 +395,10 @@ public void activateLocationComponent(@NonNull Context context, @NonNull Style s
* @param style the proxy object for current map style. More info at {@link Style}
* @param locationEngine the engine
* @param locationEngineRequest the location request
* @deprecated use {@link LocationComponentActivationOptions.Builder} instead
*/
@RequiresPermission(anyOf = {ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION})
@Deprecated
public void activateLocationComponent(@NonNull Context context, @NonNull Style style,
@Nullable LocationEngine locationEngine,
@NonNull LocationEngineRequest locationEngineRequest) {
Expand All @@ -392,8 +412,10 @@ public void activateLocationComponent(@NonNull Context context, @NonNull Style s
* @param locationEngine the engine, or null if you'd like to only force location updates
* @param style the proxy object for current map style. More info at {@link Style}
* @param options the options
* @deprecated use {@link LocationComponentActivationOptions.Builder} instead
*/
@RequiresPermission(anyOf = {ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION})
@Deprecated
public void activateLocationComponent(@NonNull Context context, @NonNull Style style,
@Nullable LocationEngine locationEngine,
@NonNull LocationComponentOptions options) {
Expand All @@ -411,7 +433,9 @@ public void activateLocationComponent(@NonNull Context context, @NonNull Style s
* @param locationEngine the engine, or null if you'd like to only force location updates
* @param locationEngineRequest the location request
* @param options the options
* @deprecated use {@link LocationComponentActivationOptions.Builder} instead
*/
@Deprecated
public void activateLocationComponent(@NonNull Context context, @NonNull Style style,
@Nullable LocationEngine locationEngine,
@NonNull LocationEngineRequest locationEngineRequest,
Expand All @@ -422,6 +446,50 @@ public void activateLocationComponent(@NonNull Context context, @NonNull Style s
applyStyle(options);
}

/**
* This method initializes the component and needs to be called before any other operations are performed.
* Afterwards, you can manage component's visibility by {@link #setLocationComponentEnabled(boolean)}.
*
* @param activationOptions a fully built {@link LocationComponentActivationOptions} object
*/
public void activateLocationComponent(@NonNull LocationComponentActivationOptions
activationOptions) {
LocationComponentOptions options = activationOptions.locationComponentOptions();
if (options == null) {
int styleRes = activationOptions.styleRes();
if (styleRes == 0) {
styleRes = R.style.mapbox_LocationComponent;
}
options = LocationComponentOptions.createFromAttributes(activationOptions.context(), styleRes);
}

// Initialize the LocationComponent with Context, the map's `Style`, and either custom LocationComponentOptions
// or backup options created from default/custom attributes
initialize(activationOptions.context(), activationOptions.style(), options);

// Apply the LocationComponent styling
// TODO avoid doubling style initialization
applyStyle(options);

// Set the LocationEngine request if one was given to LocationComponentActivationOptions
LocationEngineRequest locationEngineRequest = activationOptions.locationEngineRequest();
if (locationEngineRequest != null) {
setLocationEngineRequest(locationEngineRequest);
}

// Set the LocationEngine if one was given to LocationComponentActivationOptions
LocationEngine locationEngine = activationOptions.locationEngine();
if (locationEngine != null) {
setLocationEngine(locationEngine);
} else {
if (activationOptions.useDefaultLocationEngine()) {
initializeLocationEngine(activationOptions.context());
} else {
setLocationEngine(null);
}
}
}

/**
* Manage component's visibility after activation.
*
Expand Down
Loading

0 comments on commit 7e48249

Please sign in to comment.