IntentSanitizer.Builder

Added in 1.9.0

public final class IntentSanitizer.Builder


General strategy of building is to only offer additive “or” operations that are chained together. Any more complex operations can be performed by the developer providing their own custom Predicate.

Summary

Public constructors

Public methods

@NonNull IntentSanitizer.Builder

Add an action to the list of allowed actions.

@NonNull IntentSanitizer.Builder

Add a filter for allowed actions.

@NonNull IntentSanitizer.Builder

Allow any components.

@NonNull IntentSanitizer.Builder

Add a category to the allowed category list.

@NonNull IntentSanitizer.Builder

Add a filter for allowed categories.

@NonNull IntentSanitizer.Builder

Allows clipData that passes the given filter.

@NonNull IntentSanitizer.Builder

Allows clipData that contains text. overwrite each other.

@NonNull IntentSanitizer.Builder

Allows clipData whose items URIs pass the given URI filter.

@NonNull IntentSanitizer.Builder

Allows clipData whose items URIs authorities match the given authority.

@NonNull IntentSanitizer.Builder

Add a component to the allowed components list.

@NonNull IntentSanitizer.Builder

Add a filter for allowed components.

@NonNull IntentSanitizer.Builder

Allow any component under the specified package.

@NonNull IntentSanitizer.Builder

Allow data that passes the filter test.

@NonNull IntentSanitizer.Builder

Convenient method to allow all data whose URI authority equals to the given.

@NonNull IntentSanitizer.Builder

Allows an extra member whose key and type of value matches the given.

@NonNull IntentSanitizer.Builder

Allows an extra member whose key matches the given key and whose value passes the filter test.

@NonNull IntentSanitizer.Builder
<T> allowExtra(
    @NonNull String key,
    @NonNull Class<T> clazz,
    @NonNull Predicate<T> valueFilter
)

Allows an extra member whose key matches the given key and whose value is of the type of the given clazz and passes the value filter.

@NonNull IntentSanitizer.Builder

Allows an extra member with the key MediaStore.EXTRA_OUTPUT.

@NonNull IntentSanitizer.Builder

Allows an extra member with the key MediaStore.EXTRA_OUTPUT.

@NonNull IntentSanitizer.Builder

Allows an extra member with the key Intent.EXTRA_STREAM.

@NonNull IntentSanitizer.Builder

Allows an extra member with the key Intent.EXTRA_STREAM.

@NonNull IntentSanitizer.Builder
allowFlags(int flags)

Sets allowed flags.

@NonNull IntentSanitizer.Builder

Adds all history stack flags into the allowed flags set.

@NonNull IntentSanitizer.Builder

Allows any identifier.

@NonNull IntentSanitizer.Builder

Add a filter for allowed packages.

@NonNull IntentSanitizer.Builder
allowPackage(@NonNull String packageName)

Add a package to the allowed packages.

@NonNull IntentSanitizer.Builder

Adds all receiver flags into the allowed flags set.

@NonNull IntentSanitizer.Builder

Allow any selector.

@NonNull IntentSanitizer.Builder

Allow any source bounds.

@NonNull IntentSanitizer.Builder

Add a filter for allowed data types.

@NonNull IntentSanitizer.Builder

Add a data type to the allowed type list.

@NonNull IntentSanitizer

Build the IntentSanitizer.

Public constructors

Builder

Added in 1.9.0
public Builder()

Public methods

allowAction

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowAction(@NonNull String action)

Add an action to the list of allowed actions. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull String action

the name of an action.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowAction

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowAction(@NonNull Predicate<String> filter)

Add a filter for allowed actions. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull Predicate<String> filter

a filter that tests if an action is allowed.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowAnyComponent

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowAnyComponent()

Allow any components. Be cautious to call this method. When this method is called, you should definitely disallow the 4 grant URI permission flags. This method is useful in case the redirected intent is designed to support implicit intent. This method is made mutually exclusive to the 4 methods that allow components or packages.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowCategory

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowCategory(@NonNull String category)

Add a category to the allowed category list. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull String category

the allowed category.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowCategory

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowCategory(@NonNull Predicate<String> filter)

Add a filter for allowed categories. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull Predicate<String> filter

the category filter.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowClipData

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowClipData(@NonNull Predicate<ClipData> filter)

Allows clipData that passes the given filter. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull Predicate<ClipData> filter

the given clipData filter.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowClipDataText

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowClipDataText()

Allows clipData that contains text. overwrite each other.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowClipDataUri

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowClipDataUri(@NonNull Predicate<Uri> filter)

Allows clipData whose items URIs pass the given URI filter. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull Predicate<Uri> filter

the given URI filter.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowClipDataUriWithAuthority

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowClipDataUriWithAuthority(@NonNull String authority)

Allows clipData whose items URIs authorities match the given authority. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull String authority

the given authority.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowComponent

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowComponent(@NonNull ComponentName component)

Add a component to the allowed components list. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull ComponentName component

the allowed component.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowComponent

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowComponent(@NonNull Predicate<ComponentName> filter)

Add a filter for allowed components. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull Predicate<ComponentName> filter

the component filter.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowComponentWithPackage

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowComponentWithPackage(@NonNull String packageName)

Allow any component under the specified package. Note this does not allow the package itself. If the intent contains a package, call allowPackage method. This method can be called multiple times and the result is additive. They will not overwrite each other.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowData

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowData(@NonNull Predicate<Uri> filter)

Allow data that passes the filter test. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull Predicate<Uri> filter

data filter.

allowDataWithAuthority

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowDataWithAuthority(@NonNull String authority)

Convenient method to allow all data whose URI authority equals to the given. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull String authority

the URI's authority.

Returns
@NonNull IntentSanitizer.Builder

this builder

allowExtra

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowExtra(@NonNull String key, @NonNull Class<Object> clazz)

Allows an extra member whose key and type of value matches the given. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull String key

the given extra key.

@NonNull Class<Object> clazz

the given class of the extra value.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowExtra

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowExtra(@NonNull String key, @NonNull Predicate<Object> filter)

Allows an extra member whose key matches the given key and whose value passes the filter test. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull String key

the extra key.

@NonNull Predicate<Object> filter

the filter for the extra value.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowExtra

Added in 1.9.0
public @NonNull IntentSanitizer.Builder <T> allowExtra(
    @NonNull String key,
    @NonNull Class<T> clazz,
    @NonNull Predicate<T> valueFilter
)

Allows an extra member whose key matches the given key and whose value is of the type of the given clazz and passes the value filter. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull String key

given extra key.

@NonNull Class<T> clazz

given type of the extra value.

@NonNull Predicate<T> valueFilter

the extra value filter.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowExtraOutput

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowExtraOutput(@NonNull Predicate<Uri> filter)

Allows an extra member with the key MediaStore.EXTRA_OUTPUT. The value type has to be URI and the value also passes the given filter test. In order to use this method, user has to be explicitly allow the FLAG_GRANT_READ_URI_PERMISSION and FLAG_GRANT_WRITE_URI_PERMISSION flags. Otherwise, it will trigger penalty during sanitization. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull Predicate<Uri> filter

the given URI authority.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowExtraOutput

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowExtraOutput(@NonNull String uriAuthority)

Allows an extra member with the key MediaStore.EXTRA_OUTPUT. The value type has to be URI and the authority matches the given parameter. In order to use this method, user has to be explicitly allow the FLAG_GRANT_READ_URI_PERMISSION and FLAG_GRANT_WRITE_URI_PERMISSION flags. Otherwise, it will trigger penalty during sanitization. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull String uriAuthority

the given URI authority.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowExtraStream

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowExtraStream(@NonNull Predicate<Uri> filter)

Allows an extra member with the key Intent.EXTRA_STREAM. The value type has to be URI and the value also passes the given filter test. In order to use this method, user has to be explicitly allow the FLAG_GRANT_READ_URI_PERMISSION flag. Otherwise, it will trigger penalty during sanitization. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull Predicate<Uri> filter

the given URI authority.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowExtraStreamUriWithAuthority

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowExtraStreamUriWithAuthority(@NonNull String uriAuthority)

Allows an extra member with the key Intent.EXTRA_STREAM. The value type has to be URI and the authority matches the given parameter. In order to use this method, user has to be explicitly allow the FLAG_GRANT_READ_URI_PERMISSION flag. Otherwise, it will trigger penalty during sanitization. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull String uriAuthority

the given URI authority.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowFlags

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowFlags(int flags)

Sets allowed flags. This method can be called multiple times and the result is additive. They will not overwrite each other. In most cases following grant URI permission related flags should not be allowed:

  • FLAG_GRANT_PERSISTABLE_URI_PERMISSION
  • FLAG_GRANT_PREFIX_URI_PERMISSION
  • FLAG_GRANT_READ_URI_PERMISSION
  • FLAG_GRANT_WRITE_URI_PERMISSION
Setting these flags would allow others to access URIs only your app has permission to access. These URIs could be set in intent's data, clipData and/or, in certain circumstances, extras with key of EXTRA_STREAM or EXTRA_OUTPUT. When these flags are allowed, you should sanitize URIs. See allowDataWithAuthority, allowData, allowClipDataUriWithAuthority, allowClipDataUri, allowExtraStreamUriWithAuthority, allowExtraStream, allowExtraOutput, allowExtraOutput
Parameters
int flags

allowed flags.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowHistoryStackFlags

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowHistoryStackFlags()

Adds all history stack flags into the allowed flags set. They are:

  • FLAG_ACTIVITY_BROUGHT_TO_FRONT
  • FLAG_ACTIVITY_CLEAR_TASK
  • FLAG_ACTIVITY_CLEAR_TOP
  • FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
  • FLAG_ACTIVITY_LAUNCH_ADJACENT
  • FLAG_ACTIVITY_MULTIPLE_TASK
  • FLAG_ACTIVITY_NEW_DOCUMENT
  • FLAG_ACTIVITY_NEW_TASK
  • FLAG_ACTIVITY_NO_ANIMATION
  • FLAG_ACTIVITY_NO_HISTORY
  • FLAG_ACTIVITY_PREVIOUS_IS_TOP
  • FLAG_ACTIVITY_REORDER_TO_FRONT
  • FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
  • FLAG_ACTIVITY_RETAIN_IN_RECENTS
  • FLAG_ACTIVITY_SINGLE_TOP
  • FLAG_ACTIVITY_TASK_ON_HOME
Returns
@NonNull IntentSanitizer.Builder

this builder.

allowIdentifier

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowIdentifier()

Allows any identifier.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowPackage

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowPackage(@NonNull Predicate<String> filter)

Add a filter for allowed packages. This does not imply the intent can contain a component from the allowed package; instead, this value will be compared against the result returned from the Intent's getPackage method. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull Predicate<String> filter

the package name filter.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowPackage

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowPackage(@NonNull String packageName)

Add a package to the allowed packages. This does not imply the intent can contain a component from the allowed package; instead, this value will be compared against the result returned from the Intent's getPackage method. This method can be called multiple times and the result is additive. They will not overwrite each other.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowReceiverFlags

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowReceiverFlags()

Adds all receiver flags into the allowed flags set. They are

  • FLAG_RECEIVER_FOREGROUND
  • FLAG_RECEIVER_NO_ABORT
  • FLAG_RECEIVER_REGISTERED_ONLY
  • FLAG_RECEIVER_REPLACE_PENDING
  • FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS
Returns
@NonNull IntentSanitizer.Builder

this builder.

allowSelector

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowSelector()

Allow any selector.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowSourceBounds

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowSourceBounds()

Allow any source bounds.

Returns
@NonNull IntentSanitizer.Builder

this builder.

allowType

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowType(@NonNull Predicate<String> filter)

Add a filter for allowed data types. This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull Predicate<String> filter

the data type filter.

allowType

Added in 1.9.0
public @NonNull IntentSanitizer.Builder allowType(@NonNull String type)

Add a data type to the allowed type list. Exact match is used to check the allowed types. For example, if you pass in "image/*" here, it won't allow an intent with type of "image/png". This method can be called multiple times and the result is additive. They will not overwrite each other.

Parameters
@NonNull String type

the data type that is allowed

Returns
@NonNull IntentSanitizer.Builder

this builder

build

Added in 1.9.0
public @NonNull IntentSanitizer build()

Build the IntentSanitizer.

Returns
@NonNull IntentSanitizer

the IntentSanitizer