Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Ctors](https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#pubctors) \| [Methods](https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#inhmethods)

# SetSchemaRequest.Builder

*** ** * ** ***

` public static final class SetSchemaRequest.Builder `   
` extends https://developer.android.com/reference/java/lang/Object ` ` `

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | android.app.appsearch.SetSchemaRequest.Builder |

<br />

*** ** * ** ***

Builder for `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest` objects.

## Summary

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#Builder()() ` Creates a new `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder`. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#Builder(android.app.appsearch.SetSchemaRequest)(https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest request) ` Creates a `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` from the given `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest`. |

| ### Public methods ||
|---|---|
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility(java.lang.String,%20java.util.Set<java.lang.Integer>)(https://developer.android.com/reference/java/lang/String schemaType, https://developer.android.com/reference/java/util/Set<https://developer.android.com/reference/java/lang/Integer> permissions) ` Adds a set of required Android `https://developer.android.com/reference/android/Manifest.permission` combination to the given schema type. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#addSchemaTypeVisibleToConfig(java.lang.String,%20android.app.appsearch.SchemaVisibilityConfig)(https://developer.android.com/reference/java/lang/String schemaType, https://developer.android.com/reference/android/app/appsearch/SchemaVisibilityConfig schemaVisibilityConfig) ` Sets the documents from the provided `schemaType` can be read by the caller if they match the ALL visibility requirements set in `https://developer.android.com/reference/android/app/appsearch/SchemaVisibilityConfig`. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#addSchemas(java.util.Collection<android.app.appsearch.AppSearchSchema>)(https://developer.android.com/reference/java/util/Collection<https://developer.android.com/reference/android/app/appsearch/AppSearchSchema> schemas) ` Adds a collection of `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema` objects to the schema. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#addSchemas(android.app.appsearch.AppSearchSchema[])(https://developer.android.com/reference/android/app/appsearch/AppSearchSchema schemas) ` Adds one or more `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema` types to the schema. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#build()() ` Builds a new `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest` object. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#clearMigrators()() ` Clears all `https://developer.android.com/reference/android/app/appsearch/Migrator`s. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#clearRequiredPermissionsForSchemaTypeVisibility(java.lang.String)(https://developer.android.com/reference/java/lang/String schemaType) ` Clears all required permissions combinations for the given schema type. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#clearSchemaTypeVisibleToConfigs(java.lang.String)(https://developer.android.com/reference/java/lang/String schemaType) ` Clears all visible to `https://developer.android.com/reference/android/app/appsearch/SchemaVisibilityConfig` for the given schema type. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#clearSchemas()() ` Clears all `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema`s from the list of schemas. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setForceOverride(boolean)(boolean forceOverride) ` Sets whether or not to override the current schema in the `https://developer.android.com/reference/android/app/appsearch/AppSearchSession` database. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setMigrator(java.lang.String,%20android.app.appsearch.Migrator)(https://developer.android.com/reference/java/lang/String schemaType, https://developer.android.com/reference/android/app/appsearch/Migrator migrator) ` Sets the `https://developer.android.com/reference/android/app/appsearch/Migrator` associated with the given SchemaType. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setMigrators(java.util.Map<java.lang.String,android.app.appsearch.Migrator>)(https://developer.android.com/reference/java/util/Map<https://developer.android.com/reference/java/lang/String, https://developer.android.com/reference/android/app/appsearch/Migrator> migrators) ` Sets a Map of `https://developer.android.com/reference/android/app/appsearch/Migrator`s. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setPubliclyVisibleSchema(java.lang.String,%20android.app.appsearch.PackageIdentifier)(https://developer.android.com/reference/java/lang/String schema, https://developer.android.com/reference/android/app/appsearch/PackageIdentifier packageIdentifier) ` Specify that the schema should be publicly available, to packages which already have visibility to `packageIdentifier`. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setSchemaTypeDisplayedBySystem(java.lang.String,%20boolean)(https://developer.android.com/reference/java/lang/String schemaType, boolean displayed) ` Sets whether or not documents from the provided `schemaType` will be displayed and visible on any system UI surface. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setSchemaTypeVisibilityForPackage(java.lang.String,%20boolean,%20android.app.appsearch.PackageIdentifier)(https://developer.android.com/reference/java/lang/String schemaType, boolean visible, https://developer.android.com/reference/android/app/appsearch/PackageIdentifier packageIdentifier) ` Sets whether or not documents from the provided `schemaType` can be read by the specified package. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setSchemaTypeWipeoutAccountPropertyPaths(java.lang.String,%20java.util.Set<android.app.appsearch.PropertyPath>,%20boolean)(https://developer.android.com/reference/java/lang/String schemaType, https://developer.android.com/reference/java/util/Set<https://developer.android.com/reference/android/app/appsearch/PropertyPath> accountPropertyPaths, boolean autoWipeout) ` Configures the property paths within a specific schema type that are associated with a account, enabling AppSearch to automatically wipe out `https://developer.android.com/reference/android/app/appsearch/GenericDocument`s when that account is removed. |
| ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | ` https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setVersion(int)(int version) ` Sets the version number of the overall `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema` in the database. |

### Inherited methods

From class ` https://developer.android.com/reference/java/lang/Object ` ` https://developer.android.com/reference/java/lang/Object` ` https://developer.android.com/reference/java/lang/Object#clone()() `

Creates and returns a copy of this object.
` boolean` ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) `

Indicates whether some other object is "equal to" this one.
` void` ` https://developer.android.com/reference/java/lang/Object#finalize()() `

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
` final https://developer.android.com/reference/java/lang/Class<?>` ` https://developer.android.com/reference/java/lang/Object#getClass()() `

Returns the runtime class of this `Object`.
` int` ` https://developer.android.com/reference/java/lang/Object#hashCode()() `

Returns a hash code value for the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#notify()() `

Wakes up a single thread that is waiting on this object's monitor.
` final void` ` https://developer.android.com/reference/java/lang/Object#notifyAll()() `

Wakes up all threads that are waiting on this object's monitor.
` https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/java/lang/Object#toString()() `

Returns a string representation of the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait()() `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*.

## Public constructors

### Builder

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 17](https://developer.android.com/sdkExtensions)

```
public Builder ()
```

Creates a new `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder`.

<br />

### Builder

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 17](https://developer.android.com/sdkExtensions)

```
public Builder (SetSchemaRequest request)
```

Creates a `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` from the given `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest`.

<br />

| Parameters ||
|---|---|
| `request` | `SetSchemaRequest`: This value cannot be `null`. <br /> |

## Public methods

### addRequiredPermissionsForSchemaTypeVisibility

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 3](https://developer.android.com/sdkExtensions)

```
public SetSchemaRequest.Builder addRequiredPermissionsForSchemaTypeVisibility (String schemaType, 
                Set<Integer> permissions)
```

Adds a set of required Android `https://developer.android.com/reference/android/Manifest.permission` combination to the given schema type.

If the querier holds ALL of the required permissions in this combination, they will have access to read `https://developer.android.com/reference/android/app/appsearch/GenericDocument` objects of the given schema type.

You can call this method to add multiple permission combinations, and the querier will have access if they holds ANY of the combinations.

The supported Permissions are `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest#READ_SMS`, `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest#READ_CALENDAR`, `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest#READ_CONTACTS`, `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest#READ_EXTERNAL_STORAGE`, `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest#READ_HOME_APP_SEARCH_DATA` and `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest#READ_ASSISTANT_APP_SEARCH_DATA`.

The relationship between permissions added in this method and package visibility setting `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setSchemaTypeVisibilityForPackage(java.lang.String,%20boolean,%20android.app.appsearch.PackageIdentifier)` is "OR". The caller could access the schema if they match ANY requirements. If you want to set "AND" requirements like a caller must hold required permissions AND it is a specified package, please use `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#addSchemaTypeVisibleToConfig(java.lang.String,%20android.app.appsearch.SchemaVisibilityConfig)`.

<br />

| Parameters ||
|---|---|
| `schemaType` | `String`: The schema type to set visibility on. This value cannot be `null`. <br /> |
| `permissions` | `Set`: A set of required Android permissions the caller need to hold to access `https://developer.android.com/reference/android/app/appsearch/GenericDocument` objects that under the given schema. Value is one of the following: - `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest#READ_SMS` - `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest#READ_CALENDAR` - `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest#READ_CONTACTS` - `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest#READ_EXTERNAL_STORAGE` - `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest#READ_HOME_APP_SEARCH_DATA` - `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest#READ_ASSISTANT_APP_SEARCH_DATA` - `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest#PRIVATE_COMPUTE_CORE_UID_ACCESS` . This value cannot be `null`. |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | \\u2013 if input unsupported permission. |

**See also:**

- `https://developer.android.com/reference/android/Manifest.permission#READ_SMS`
- `https://developer.android.com/reference/android/Manifest.permission#READ_CALENDAR`
- `https://developer.android.com/reference/android/Manifest.permission#READ_CONTACTS`
- `https://developer.android.com/reference/android/Manifest.permission#READ_EXTERNAL_STORAGE`
- `https://developer.android.com/reference/android/Manifest.permission#READ_HOME_APP_SEARCH_DATA`
- `https://developer.android.com/reference/android/Manifest.permission#READ_ASSISTANT_APP_SEARCH_DATA`

### addSchemaTypeVisibleToConfig

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 13](https://developer.android.com/sdkExtensions)

```
public SetSchemaRequest.Builder addSchemaTypeVisibleToConfig (String schemaType, 
                SchemaVisibilityConfig schemaVisibilityConfig)
```

Sets the documents from the provided `schemaType` can be read by the caller if they match the ALL visibility requirements set in `https://developer.android.com/reference/android/app/appsearch/SchemaVisibilityConfig`.

The requirements in a `https://developer.android.com/reference/android/app/appsearch/SchemaVisibilityConfig` is "AND" relationship. A caller must match ALL requirements to access the schema. For example, a caller must hold required permissions AND it is a specified package.

You can call this method repeatedly to add multiple `https://developer.android.com/reference/android/app/appsearch/SchemaVisibilityConfig`s, and the querier will have access if they match ANY of the `https://developer.android.com/reference/android/app/appsearch/SchemaVisibilityConfig`.

<br />

| Parameters ||
|---|---|
| `schemaType` | `String`: The schema type to set visibility on. This value cannot be `null`. <br /> |
| `schemaVisibilityConfig` | `SchemaVisibilityConfig`: The `https://developer.android.com/reference/android/app/appsearch/SchemaVisibilityConfig` holds all requirements that a call must to match to access the schema. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

### addSchemas

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public SetSchemaRequest.Builder addSchemas (Collection<AppSearchSchema> schemas)
```

Adds a collection of `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema` objects to the schema.

An `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema` object represents one type of structured data.

<br />

| Parameters ||
|---|---|
| `schemas` | `Collection`: This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

### addSchemas

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public SetSchemaRequest.Builder addSchemas (AppSearchSchema... schemas)
```

Adds one or more `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema` types to the schema.

An `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema` object represents one type of structured data.

Any documents of these types will be displayed on system UI surfaces by default.

<br />

| Parameters ||
|---|---|
| `schemas` | `AppSearchSchema`: This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

### build

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public SetSchemaRequest build ()
```

Builds a new `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest` object.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest` | This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if schema types were referenced, but the corresponding `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema` type was never added. |

### clearMigrators

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 17](https://developer.android.com/sdkExtensions)

```
public SetSchemaRequest.Builder clearMigrators ()
```

Clears all `https://developer.android.com/reference/android/app/appsearch/Migrator`s.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

### clearRequiredPermissionsForSchemaTypeVisibility

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 3](https://developer.android.com/sdkExtensions)

```
public SetSchemaRequest.Builder clearRequiredPermissionsForSchemaTypeVisibility (String schemaType)
```

Clears all required permissions combinations for the given schema type.

<br />

| Parameters ||
|---|---|
| `schemaType` | `String`: This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

### clearSchemaTypeVisibleToConfigs

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 13](https://developer.android.com/sdkExtensions)

```
public SetSchemaRequest.Builder clearSchemaTypeVisibleToConfigs (String schemaType)
```

Clears all visible to `https://developer.android.com/reference/android/app/appsearch/SchemaVisibilityConfig` for the given schema type.

<br />

| Parameters ||
|---|---|
| `schemaType` | `String`: This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

### clearSchemas

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 17](https://developer.android.com/sdkExtensions)

```
public SetSchemaRequest.Builder clearSchemas ()
```

Clears all `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema`s from the list of schemas.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

### setForceOverride

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public SetSchemaRequest.Builder setForceOverride (boolean forceOverride)
```

Sets whether or not to override the current schema in the `https://developer.android.com/reference/android/app/appsearch/AppSearchSession` database.

Call this method whenever backward incompatible changes need to be made by setting `forceOverride` to `true`. As a result, during execution of the setSchema operation, all documents that are incompatible with the new schema will be deleted and the new schema will be saved and persisted.

By default, this is `false`.

<br />

| Parameters ||
|---|---|
| `forceOverride` | `boolean` <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

### setMigrator

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public SetSchemaRequest.Builder setMigrator (String schemaType, 
                Migrator migrator)
```

Sets the `https://developer.android.com/reference/android/app/appsearch/Migrator` associated with the given SchemaType.

The `https://developer.android.com/reference/android/app/appsearch/Migrator` migrates all `https://developer.android.com/reference/android/app/appsearch/GenericDocument`s under given schema type from the current version number stored in AppSearch to the final version set via `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setVersion(int)`.

A `https://developer.android.com/reference/android/app/appsearch/Migrator` will be invoked if the current version number stored in AppSearch is different from the final version set via `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setVersion(int)` and `https://developer.android.com/reference/android/app/appsearch/Migrator#shouldMigrate(int,%20int)` returns `true`.

The target schema type of the output `https://developer.android.com/reference/android/app/appsearch/GenericDocument` of `https://developer.android.com/reference/android/app/appsearch/Migrator#onUpgrade(int,%20int,%20android.app.appsearch.GenericDocument)` or `https://developer.android.com/reference/android/app/appsearch/Migrator#onDowngrade(int,%20int,%20android.app.appsearch.GenericDocument)` must exist in this `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest`.

<br />

| Parameters ||
|---|---|
| `schemaType` | `String`: The schema type to set migrator on. This value cannot be `null`. <br /> |
| `migrator` | `Migrator`: The migrator translates a document from its current version to the final version set via `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setVersion(int)`. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

**See also:**

- `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setVersion(int)`
- `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#addSchemas(android.app.appsearch.AppSearchSchema[])`
- `https://developer.android.com/reference/android/app/appsearch/AppSearchSession#setSchema(android.app.appsearch.SetSchemaRequest,%20java.util.concurrent.Executor,%20java.util.concurrent.Executor,%20java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.SetSchemaResponse>>)`

### setMigrators

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public SetSchemaRequest.Builder setMigrators (Map<String, Migrator> migrators)
```

Sets a Map of `https://developer.android.com/reference/android/app/appsearch/Migrator`s.

The key of the map is the schema type that the `https://developer.android.com/reference/android/app/appsearch/Migrator` value applies to.

The `https://developer.android.com/reference/android/app/appsearch/Migrator` migrates all `https://developer.android.com/reference/android/app/appsearch/GenericDocument`s under given schema type from the current version number stored in AppSearch to the final version set via `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setVersion(int)`.

A `https://developer.android.com/reference/android/app/appsearch/Migrator` will be invoked if the current version number stored in AppSearch is different from the final version set via `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setVersion(int)` and `https://developer.android.com/reference/android/app/appsearch/Migrator#shouldMigrate(int,%20int)` returns `true`.

The target schema type of the output `https://developer.android.com/reference/android/app/appsearch/GenericDocument` of `https://developer.android.com/reference/android/app/appsearch/Migrator#onUpgrade(int,%20int,%20android.app.appsearch.GenericDocument)` or `https://developer.android.com/reference/android/app/appsearch/Migrator#onDowngrade(int,%20int,%20android.app.appsearch.GenericDocument)` must exist in this `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest`.

<br />

| Parameters ||
|---|---|
| `migrators` | `Map`: A `https://developer.android.com/reference/java/util/Map` of migrators that translate a document from its current version to the final version set via `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setVersion(int)`. The key of the map is the schema type that the `https://developer.android.com/reference/android/app/appsearch/Migrator` value applies to. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

**See also:**

- `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setVersion(int)`
- `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#addSchemas(android.app.appsearch.AppSearchSchema[])`
- `https://developer.android.com/reference/android/app/appsearch/AppSearchSession#setSchema(android.app.appsearch.SetSchemaRequest,%20java.util.concurrent.Executor,%20java.util.concurrent.Executor,%20java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.SetSchemaResponse>>)`

### setPubliclyVisibleSchema

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 13](https://developer.android.com/sdkExtensions)

```
public SetSchemaRequest.Builder setPubliclyVisibleSchema (String schema, 
                PackageIdentifier packageIdentifier)
```

Specify that the schema should be publicly available, to packages which already have visibility to `packageIdentifier`. This visibility is determined by the result of `https://developer.android.com/reference/android/content/pm/PackageManager#canPackageQuery(java.lang.String,%20java.lang.String)`.

It is possible for the packageIdentifier parameter to be different from the package performing the indexing. This might happen in the case of an on-device indexer processing information about various packages. The visibility will be the same regardless of which package indexes the document, as the visibility is based on the packageIdentifier parameter.

If this is called repeatedly with the same schema, the `https://developer.android.com/reference/android/app/appsearch/PackageIdentifier` in the last call will be used as the "from" package for that schema.

Calling this with packageIdentifier set to null is valid, and will remove public visibility for the schema.

<br />

| Parameters ||
|---|---|
| `schema` | `String`: the schema to make publicly accessible. This value cannot be `null`. <br /> |
| `packageIdentifier` | `PackageIdentifier`: if an app can see this package via PackageManager#canPackageQuery, it will be able to see the documents of type `schema`. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | <br /> |

### setSchemaTypeDisplayedBySystem

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public SetSchemaRequest.Builder setSchemaTypeDisplayedBySystem (String schemaType, 
                boolean displayed)
```

Sets whether or not documents from the provided `schemaType` will be displayed and visible on any system UI surface.

This setting applies to the provided `schemaType` only, and does not persist across `https://developer.android.com/reference/android/app/appsearch/AppSearchSession#setSchema(android.app.appsearch.SetSchemaRequest,%20java.util.concurrent.Executor,%20java.util.concurrent.Executor,%20java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.SetSchemaResponse>>)` calls.

The default behavior, if this method is not called, is to allow types to be displayed on system UI surfaces.

<br />

| Parameters ||
|---|---|
| `schemaType` | `String`: The name of an `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema` within the same `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest`, which will be configured. This value cannot be `null`. <br /> |
| `displayed` | `boolean`: Whether documents of this type will be displayed on system UI surfaces. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

### setSchemaTypeVisibilityForPackage

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public SetSchemaRequest.Builder setSchemaTypeVisibilityForPackage (String schemaType, 
                boolean visible, 
                PackageIdentifier packageIdentifier)
```

Sets whether or not documents from the provided `schemaType` can be read by the specified package.

Each package is represented by a `https://developer.android.com/reference/android/app/appsearch/PackageIdentifier`, containing a package name and a byte array of type `https://developer.android.com/reference/android/content/pm/PackageManager#CERT_INPUT_SHA256`.

To opt into one-way data sharing with another application, the developer will need to explicitly grant the other application\\u2019s package name and certificate Read access to its data.

For two-way data sharing, both applications need to explicitly grant Read access to one another.

By default, data sharing between applications is disabled.

The relationship between permissions added in this method and package visibility setting `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setSchemaTypeVisibilityForPackage(java.lang.String,%20boolean,%20android.app.appsearch.PackageIdentifier)` is "OR". The caller could access the schema if they match ANY requirements. If you want to set "AND" requirements like a caller must hold required permissions AND it is a specified package, please use `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#addSchemaTypeVisibleToConfig(java.lang.String,%20android.app.appsearch.SchemaVisibilityConfig)`.

<br />

| Parameters ||
|---|---|
| `schemaType` | `String`: The schema type to set visibility on. This value cannot be `null`. <br /> |
| `visible` | `boolean`: Whether the `schemaType` will be visible or not. <br /> |
| `packageIdentifier` | `PackageIdentifier`: Represents the package that will be granted visibility. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

### setSchemaTypeWipeoutAccountPropertyPaths

Added in [API level 37](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 22](https://developer.android.com/sdkExtensions)

```
public SetSchemaRequest.Builder setSchemaTypeWipeoutAccountPropertyPaths (String schemaType, 
                Set<PropertyPath> accountPropertyPaths, 
                boolean autoWipeout)
```

Configures the property paths within a specific schema type that are associated with a account, enabling AppSearch to automatically wipe out `https://developer.android.com/reference/android/app/appsearch/GenericDocument`s when that account is removed.

To enable AppSearch to automatically wipe out documents when an account is removed, you must use this API to configure the account property paths for the relevant schema type. If this configuration is not set for a schema type, AppSearch will not automatically delete any `https://developer.android.com/reference/android/app/appsearch/GenericDocument`s of that type, even if the account associated with the document is removed from the system. Documents will only be deleted if the app explicitly calls for their removal.

The property path must point to a `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema.DocumentPropertyConfig` which is AppSearch built-in account. The property path could point to the nested document.

When putting a `https://developer.android.com/reference/android/app/appsearch/GenericDocument` into AppSearch, all accounts identified by the given `accountPropertyPaths` within that document must already exist. AppSearch will reject the document if any account specified by these paths is not recognized.

Subsequent calls for the same `schemaType` are additive. When `autoWipeout` is `true`, new paths are merged into the existing configuration; when `false`, the specified paths are removed. This allows you to incrementally manage multiple account-associated fields within a single schema.

<br />

| Parameters ||
|---|---|
| `schemaType` | `String`: The name of the schema type being configured (e.g., "Email"). This value cannot be `null`. <br /> |
| `accountPropertyPaths` | `Set`: A Set of property paths (e.g., "sender.account") point to the field containing the account identifier. This value cannot be `null`. <br /> |
| `autoWipeout` | `boolean`: If `true`, enables automatic account wipeout for the given paths. If `false`, disables it. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This `Builder` instance. This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/NullPointerException` | if `schemaType` or `accountPropertyPaths` is null. |

### setVersion

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public SetSchemaRequest.Builder setVersion (int version)
```

Sets the version number of the overall `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema` in the database.

The `https://developer.android.com/reference/android/app/appsearch/AppSearchSession` database can only ever hold documents for one version at a time.

Setting a version number that is different from the version number currently stored in AppSearch will result in AppSearch calling the `https://developer.android.com/reference/android/app/appsearch/Migrator`s provided to `https://developer.android.com/reference/android/app/appsearch/AppSearchSession#setSchema(android.app.appsearch.SetSchemaRequest,%20java.util.concurrent.Executor,%20java.util.concurrent.Executor,%20java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.SetSchemaResponse>>)` to migrate the documents already in AppSearch from the previous version to the one set in this request. The version number can be updated without any other changes to the set of schemas.

The version number can stay the same, increase, or decrease relative to the current version number that is already stored in the `https://developer.android.com/reference/android/app/appsearch/AppSearchSession` database.

The version of an empty database will always be 0. You cannot set version to the `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest`, if it doesn't contains any `https://developer.android.com/reference/android/app/appsearch/AppSearchSchema`.

<br />

| Parameters ||
|---|---|
| `version` | `int`: A positive integer representing the version of the entire set of schemas represents the version of the whole schema in the `https://developer.android.com/reference/android/app/appsearch/AppSearchSession` database, default version is 1. Value is 1 or greater <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder` | This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if the version is negative. |

**See also:**

- `https://developer.android.com/reference/android/app/appsearch/AppSearchSession#setSchema(android.app.appsearch.SetSchemaRequest,%20java.util.concurrent.Executor,%20java.util.concurrent.Executor,%20java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.SetSchemaResponse>>)`
- `https://developer.android.com/reference/android/app/appsearch/Migrator`
- `https://developer.android.com/reference/android/app/appsearch/SetSchemaRequest.Builder#setMigrator(java.lang.String,%20android.app.appsearch.Migrator)`