Add setScreenOrientation in TWAIntentBuilder

1. Adds the setScreenOrientation in TrustedWebActivityIntentBuilder
to support screenOrientation.

2. Changes the default value for mScreenOrientation to be ScreenOrientation.DEFAULT
and changes the input type for the setScreenOrientation method from String to int

3. Changes the ScreenOrientation constants to match the order in
https://source.chromium.org/chromium/chromium/src/+/master:out/android-Debug/gen/content/public/android/content_java/generated_java/input_srcjars/org/chromium/content_public/common/ScreenOrientationValues.java?originalUrl=https:%2F%2Fcs.chromium.org%2F

4. Adds screenOrientation class to handle screen orientation constants and
add comments for each constant

5. Changes annotations for ScreenOrientation and getDisplayMode

Relnote: "1. Adds a setScreenOrientation method in TrustedWebActivityIntentBuilder.
          2. Adds an @intDef for ScreenOrientation.LockType to represent a lock type"

Test: manual test with android device and add test class later.
Change-Id: I802d2f0365a944cb9a4c651d470dbaf847a9e897
diff --git a/browser/browser/api/1.3.0-alpha05.txt b/browser/browser/api/1.3.0-alpha05.txt
index df79b5a..e2b4865 100644
--- a/browser/browser/api/1.3.0-alpha05.txt
+++ b/browser/browser/api/1.3.0-alpha05.txt
@@ -254,6 +254,18 @@
 
 package androidx.browser.trusted {
 
+  public final class ScreenOrientation {
+    field public static final int ANY = 5; // 0x5
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int LANDSCAPE = 6; // 0x6
+    field public static final int LANDSCAPE_PRIMARY = 3; // 0x3
+    field public static final int LANDSCAPE_SECONDARY = 4; // 0x4
+    field public static final int NATURAL = 8; // 0x8
+    field public static final int PORTRAIT = 7; // 0x7
+    field public static final int PORTRAIT_PRIMARY = 1; // 0x1
+    field public static final int PORTRAIT_SECONDARY = 2; // 0x2
+  }
+
   public final class Token {
     method public static androidx.browser.trusted.Token? create(String, android.content.pm.PackageManager);
     method public static androidx.browser.trusted.Token deserialize(byte[]);
@@ -304,7 +316,7 @@
     ctor public TrustedWebActivityIntentBuilder(android.net.Uri);
     method public androidx.browser.trusted.TrustedWebActivityIntent build(androidx.browser.customtabs.CustomTabsSession);
     method public androidx.browser.customtabs.CustomTabsIntent buildCustomTabsIntent();
-    method public androidx.browser.trusted.TrustedWebActivityDisplayMode? getDisplayMode();
+    method public androidx.browser.trusted.TrustedWebActivityDisplayMode getDisplayMode();
     method public android.net.Uri getUri();
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setAdditionalTrustedOrigins(java.util.List<java.lang.String!>);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorScheme(int);
@@ -312,11 +324,13 @@
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarDividerColor(@ColorInt int);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setScreenOrientation(int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setShareParams(androidx.browser.trusted.sharing.ShareTarget, androidx.browser.trusted.sharing.ShareData);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setSplashScreenParams(android.os.Bundle);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setToolbarColor(@ColorInt int);
     field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
     field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
+    field public static final String EXTRA_SCREEN_ORIENTATION = "androidx.browser.trusted.extra.SCREEN_ORIENTATION";
     field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
     field public static final String EXTRA_SHARE_TARGET = "androidx.browser.trusted.extra.SHARE_TARGET";
     field public static final String EXTRA_SPLASH_SCREEN_PARAMS = "androidx.browser.trusted.EXTRA_SPLASH_SCREEN_PARAMS";
diff --git a/browser/browser/api/current.txt b/browser/browser/api/current.txt
index df79b5a..e2b4865 100644
--- a/browser/browser/api/current.txt
+++ b/browser/browser/api/current.txt
@@ -254,6 +254,18 @@
 
 package androidx.browser.trusted {
 
+  public final class ScreenOrientation {
+    field public static final int ANY = 5; // 0x5
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int LANDSCAPE = 6; // 0x6
+    field public static final int LANDSCAPE_PRIMARY = 3; // 0x3
+    field public static final int LANDSCAPE_SECONDARY = 4; // 0x4
+    field public static final int NATURAL = 8; // 0x8
+    field public static final int PORTRAIT = 7; // 0x7
+    field public static final int PORTRAIT_PRIMARY = 1; // 0x1
+    field public static final int PORTRAIT_SECONDARY = 2; // 0x2
+  }
+
   public final class Token {
     method public static androidx.browser.trusted.Token? create(String, android.content.pm.PackageManager);
     method public static androidx.browser.trusted.Token deserialize(byte[]);
@@ -304,7 +316,7 @@
     ctor public TrustedWebActivityIntentBuilder(android.net.Uri);
     method public androidx.browser.trusted.TrustedWebActivityIntent build(androidx.browser.customtabs.CustomTabsSession);
     method public androidx.browser.customtabs.CustomTabsIntent buildCustomTabsIntent();
-    method public androidx.browser.trusted.TrustedWebActivityDisplayMode? getDisplayMode();
+    method public androidx.browser.trusted.TrustedWebActivityDisplayMode getDisplayMode();
     method public android.net.Uri getUri();
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setAdditionalTrustedOrigins(java.util.List<java.lang.String!>);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorScheme(int);
@@ -312,11 +324,13 @@
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarDividerColor(@ColorInt int);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setScreenOrientation(int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setShareParams(androidx.browser.trusted.sharing.ShareTarget, androidx.browser.trusted.sharing.ShareData);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setSplashScreenParams(android.os.Bundle);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setToolbarColor(@ColorInt int);
     field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
     field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
+    field public static final String EXTRA_SCREEN_ORIENTATION = "androidx.browser.trusted.extra.SCREEN_ORIENTATION";
     field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
     field public static final String EXTRA_SHARE_TARGET = "androidx.browser.trusted.extra.SHARE_TARGET";
     field public static final String EXTRA_SPLASH_SCREEN_PARAMS = "androidx.browser.trusted.EXTRA_SPLASH_SCREEN_PARAMS";
diff --git a/browser/browser/api/public_plus_experimental_1.3.0-alpha05.txt b/browser/browser/api/public_plus_experimental_1.3.0-alpha05.txt
index df79b5a..e2b4865 100644
--- a/browser/browser/api/public_plus_experimental_1.3.0-alpha05.txt
+++ b/browser/browser/api/public_plus_experimental_1.3.0-alpha05.txt
@@ -254,6 +254,18 @@
 
 package androidx.browser.trusted {
 
+  public final class ScreenOrientation {
+    field public static final int ANY = 5; // 0x5
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int LANDSCAPE = 6; // 0x6
+    field public static final int LANDSCAPE_PRIMARY = 3; // 0x3
+    field public static final int LANDSCAPE_SECONDARY = 4; // 0x4
+    field public static final int NATURAL = 8; // 0x8
+    field public static final int PORTRAIT = 7; // 0x7
+    field public static final int PORTRAIT_PRIMARY = 1; // 0x1
+    field public static final int PORTRAIT_SECONDARY = 2; // 0x2
+  }
+
   public final class Token {
     method public static androidx.browser.trusted.Token? create(String, android.content.pm.PackageManager);
     method public static androidx.browser.trusted.Token deserialize(byte[]);
@@ -304,7 +316,7 @@
     ctor public TrustedWebActivityIntentBuilder(android.net.Uri);
     method public androidx.browser.trusted.TrustedWebActivityIntent build(androidx.browser.customtabs.CustomTabsSession);
     method public androidx.browser.customtabs.CustomTabsIntent buildCustomTabsIntent();
-    method public androidx.browser.trusted.TrustedWebActivityDisplayMode? getDisplayMode();
+    method public androidx.browser.trusted.TrustedWebActivityDisplayMode getDisplayMode();
     method public android.net.Uri getUri();
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setAdditionalTrustedOrigins(java.util.List<java.lang.String!>);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorScheme(int);
@@ -312,11 +324,13 @@
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarDividerColor(@ColorInt int);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setScreenOrientation(int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setShareParams(androidx.browser.trusted.sharing.ShareTarget, androidx.browser.trusted.sharing.ShareData);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setSplashScreenParams(android.os.Bundle);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setToolbarColor(@ColorInt int);
     field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
     field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
+    field public static final String EXTRA_SCREEN_ORIENTATION = "androidx.browser.trusted.extra.SCREEN_ORIENTATION";
     field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
     field public static final String EXTRA_SHARE_TARGET = "androidx.browser.trusted.extra.SHARE_TARGET";
     field public static final String EXTRA_SPLASH_SCREEN_PARAMS = "androidx.browser.trusted.EXTRA_SPLASH_SCREEN_PARAMS";
diff --git a/browser/browser/api/public_plus_experimental_current.txt b/browser/browser/api/public_plus_experimental_current.txt
index df79b5a..e2b4865 100644
--- a/browser/browser/api/public_plus_experimental_current.txt
+++ b/browser/browser/api/public_plus_experimental_current.txt
@@ -254,6 +254,18 @@
 
 package androidx.browser.trusted {
 
+  public final class ScreenOrientation {
+    field public static final int ANY = 5; // 0x5
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int LANDSCAPE = 6; // 0x6
+    field public static final int LANDSCAPE_PRIMARY = 3; // 0x3
+    field public static final int LANDSCAPE_SECONDARY = 4; // 0x4
+    field public static final int NATURAL = 8; // 0x8
+    field public static final int PORTRAIT = 7; // 0x7
+    field public static final int PORTRAIT_PRIMARY = 1; // 0x1
+    field public static final int PORTRAIT_SECONDARY = 2; // 0x2
+  }
+
   public final class Token {
     method public static androidx.browser.trusted.Token? create(String, android.content.pm.PackageManager);
     method public static androidx.browser.trusted.Token deserialize(byte[]);
@@ -304,7 +316,7 @@
     ctor public TrustedWebActivityIntentBuilder(android.net.Uri);
     method public androidx.browser.trusted.TrustedWebActivityIntent build(androidx.browser.customtabs.CustomTabsSession);
     method public androidx.browser.customtabs.CustomTabsIntent buildCustomTabsIntent();
-    method public androidx.browser.trusted.TrustedWebActivityDisplayMode? getDisplayMode();
+    method public androidx.browser.trusted.TrustedWebActivityDisplayMode getDisplayMode();
     method public android.net.Uri getUri();
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setAdditionalTrustedOrigins(java.util.List<java.lang.String!>);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorScheme(int);
@@ -312,11 +324,13 @@
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarDividerColor(@ColorInt int);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setScreenOrientation(int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setShareParams(androidx.browser.trusted.sharing.ShareTarget, androidx.browser.trusted.sharing.ShareData);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setSplashScreenParams(android.os.Bundle);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setToolbarColor(@ColorInt int);
     field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
     field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
+    field public static final String EXTRA_SCREEN_ORIENTATION = "androidx.browser.trusted.extra.SCREEN_ORIENTATION";
     field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
     field public static final String EXTRA_SHARE_TARGET = "androidx.browser.trusted.extra.SHARE_TARGET";
     field public static final String EXTRA_SPLASH_SCREEN_PARAMS = "androidx.browser.trusted.EXTRA_SPLASH_SCREEN_PARAMS";
diff --git a/browser/browser/api/restricted_1.3.0-alpha05.txt b/browser/browser/api/restricted_1.3.0-alpha05.txt
index 1504743..dd61597 100644
--- a/browser/browser/api/restricted_1.3.0-alpha05.txt
+++ b/browser/browser/api/restricted_1.3.0-alpha05.txt
@@ -265,6 +265,18 @@
 
 package androidx.browser.trusted {
 
+  public final class ScreenOrientation {
+    field public static final int ANY = 5; // 0x5
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int LANDSCAPE = 6; // 0x6
+    field public static final int LANDSCAPE_PRIMARY = 3; // 0x3
+    field public static final int LANDSCAPE_SECONDARY = 4; // 0x4
+    field public static final int NATURAL = 8; // 0x8
+    field public static final int PORTRAIT = 7; // 0x7
+    field public static final int PORTRAIT_PRIMARY = 1; // 0x1
+    field public static final int PORTRAIT_SECONDARY = 2; // 0x2
+  }
+
   public final class Token {
     method public static androidx.browser.trusted.Token? create(String, android.content.pm.PackageManager);
     method public static androidx.browser.trusted.Token deserialize(byte[]);
@@ -315,7 +327,7 @@
     ctor public TrustedWebActivityIntentBuilder(android.net.Uri);
     method public androidx.browser.trusted.TrustedWebActivityIntent build(androidx.browser.customtabs.CustomTabsSession);
     method public androidx.browser.customtabs.CustomTabsIntent buildCustomTabsIntent();
-    method public androidx.browser.trusted.TrustedWebActivityDisplayMode? getDisplayMode();
+    method public androidx.browser.trusted.TrustedWebActivityDisplayMode getDisplayMode();
     method public android.net.Uri getUri();
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setAdditionalTrustedOrigins(java.util.List<java.lang.String!>);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorScheme(int);
@@ -323,11 +335,13 @@
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarDividerColor(@ColorInt int);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setScreenOrientation(int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setShareParams(androidx.browser.trusted.sharing.ShareTarget, androidx.browser.trusted.sharing.ShareData);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setSplashScreenParams(android.os.Bundle);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setToolbarColor(@ColorInt int);
     field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
     field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
+    field public static final String EXTRA_SCREEN_ORIENTATION = "androidx.browser.trusted.extra.SCREEN_ORIENTATION";
     field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
     field public static final String EXTRA_SHARE_TARGET = "androidx.browser.trusted.extra.SHARE_TARGET";
     field public static final String EXTRA_SPLASH_SCREEN_PARAMS = "androidx.browser.trusted.EXTRA_SPLASH_SCREEN_PARAMS";
diff --git a/browser/browser/api/restricted_current.txt b/browser/browser/api/restricted_current.txt
index 1504743..dd61597 100644
--- a/browser/browser/api/restricted_current.txt
+++ b/browser/browser/api/restricted_current.txt
@@ -265,6 +265,18 @@
 
 package androidx.browser.trusted {
 
+  public final class ScreenOrientation {
+    field public static final int ANY = 5; // 0x5
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int LANDSCAPE = 6; // 0x6
+    field public static final int LANDSCAPE_PRIMARY = 3; // 0x3
+    field public static final int LANDSCAPE_SECONDARY = 4; // 0x4
+    field public static final int NATURAL = 8; // 0x8
+    field public static final int PORTRAIT = 7; // 0x7
+    field public static final int PORTRAIT_PRIMARY = 1; // 0x1
+    field public static final int PORTRAIT_SECONDARY = 2; // 0x2
+  }
+
   public final class Token {
     method public static androidx.browser.trusted.Token? create(String, android.content.pm.PackageManager);
     method public static androidx.browser.trusted.Token deserialize(byte[]);
@@ -315,7 +327,7 @@
     ctor public TrustedWebActivityIntentBuilder(android.net.Uri);
     method public androidx.browser.trusted.TrustedWebActivityIntent build(androidx.browser.customtabs.CustomTabsSession);
     method public androidx.browser.customtabs.CustomTabsIntent buildCustomTabsIntent();
-    method public androidx.browser.trusted.TrustedWebActivityDisplayMode? getDisplayMode();
+    method public androidx.browser.trusted.TrustedWebActivityDisplayMode getDisplayMode();
     method public android.net.Uri getUri();
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setAdditionalTrustedOrigins(java.util.List<java.lang.String!>);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorScheme(int);
@@ -323,11 +335,13 @@
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarDividerColor(@ColorInt int);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setScreenOrientation(int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setShareParams(androidx.browser.trusted.sharing.ShareTarget, androidx.browser.trusted.sharing.ShareData);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setSplashScreenParams(android.os.Bundle);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setToolbarColor(@ColorInt int);
     field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
     field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
+    field public static final String EXTRA_SCREEN_ORIENTATION = "androidx.browser.trusted.extra.SCREEN_ORIENTATION";
     field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
     field public static final String EXTRA_SHARE_TARGET = "androidx.browser.trusted.extra.SHARE_TARGET";
     field public static final String EXTRA_SPLASH_SCREEN_PARAMS = "androidx.browser.trusted.EXTRA_SPLASH_SCREEN_PARAMS";
diff --git a/browser/browser/src/main/java/androidx/browser/trusted/ScreenOrientation.java b/browser/browser/src/main/java/androidx/browser/trusted/ScreenOrientation.java
new file mode 100644
index 0000000..9ebe400
--- /dev/null
+++ b/browser/browser/src/main/java/androidx/browser/trusted/ScreenOrientation.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.browser.trusted;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.RestrictTo;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Represents screenOrientationLock type value of a Trusted Web Activity:
+ * https://www.w3.org/TR/screen-orientation/#screenorientation-interface
+ */
+public final class ScreenOrientation {
+
+    private ScreenOrientation() {}
+
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @IntDef({
+            DEFAULT, PORTRAIT_PRIMARY, PORTRAIT_SECONDARY, LANDSCAPE_PRIMARY, LANDSCAPE_SECONDARY,
+            ANY, LANDSCAPE, PORTRAIT, NATURAL
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface LockType {}
+
+    /**
+     * The default screen orientation is the set of orientations to which the screen is locked when
+     * there is no current orientation lock.
+     */
+    public static final int DEFAULT = 0;
+
+    /**
+     *  Portrait-primary is an orientation where the screen width is less than or equal to the
+     *  screen height. If the device's natural orientation is portrait, then it is in
+     *  portrait-primary when held in that position.
+     */
+    public static final int PORTRAIT_PRIMARY = 1;
+
+    /**
+     * Portrait-secondary is an orientation where the screen width is less than or equal to the
+     * screen height. If the device's natural orientation is portrait, then it is in
+     * portrait-secondary when rotated 180° from its natural position.
+     */
+    public static final int PORTRAIT_SECONDARY = 2;
+
+    /**
+     * Landscape-primary is an orientation where the screen width is greater than the screen height.
+     * If the device's natural orientation is landscape, then it is in landscape-primary when held
+     * in that position.
+     */
+    public static final int LANDSCAPE_PRIMARY = 3;
+
+    /**
+     * Landscape-secondary is an orientation where the screen width is greater than the
+     * screen height. If the device's natural orientation is landscape, it is in
+     * landscape-secondary when rotated 180° from its natural orientation.
+     */
+    public static final int LANDSCAPE_SECONDARY = 4;
+
+    /**
+     * Any is an orientation that means the screen can be locked to any one of portrait-primary,
+     * portrait-secondary, landscape-primary and landscape-secondary.
+     */
+    public static final int ANY = 5;
+
+    /**
+     * Landscape is an orientation where the screen width is greater than the screen height and
+     * depending on platform convention locking the screen to landscape can represent
+     * landscape-primary, landscape-secondary or both.
+     */
+    public static final int LANDSCAPE = 6;
+
+    /**
+     * Portrait is an orientation where the screen width is less than or equal to the screen height
+     * and depending on platform convention locking the screen to portrait can represent
+     * portrait-primary, portrait-secondary or both.
+     */
+    public static final int PORTRAIT = 7;
+
+    /**
+     * Natural is an orientation that refers to either portrait-primary or landscape-primary
+     * depending on the device's usual orientation. This orientation is usually provided by
+     * the underlying operating system.
+     */
+    public static final int NATURAL = 8;
+}
diff --git a/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityIntentBuilder.java b/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityIntentBuilder.java
index f0ca580..3f96417 100644
--- a/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityIntentBuilder.java
+++ b/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityIntentBuilder.java
@@ -72,20 +72,35 @@
     /** Extra for the {@link TrustedWebActivityDisplayMode}, see {@link #setDisplayMode}. */
     public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
 
-    @NonNull private final Uri mUri;
-    @NonNull private final CustomTabsIntent.Builder mIntentBuilder = new CustomTabsIntent.Builder();
+    /** Extra for the screenOrientation, see {@link #setScreenOrientation}. */
+    public static final String EXTRA_SCREEN_ORIENTATION =
+            "androidx.browser.trusted.extra.SCREEN_ORIENTATION";
 
-    @Nullable private List<String> mAdditionalTrustedOrigins;
-    @Nullable private Bundle mSplashScreenParams;
+    @NonNull
+    private final Uri mUri;
+    @NonNull
+    private final CustomTabsIntent.Builder mIntentBuilder = new CustomTabsIntent.Builder();
 
-    @Nullable private ShareData mShareData;
-    @Nullable private ShareTarget mShareTarget;
+    @Nullable
+    private List<String> mAdditionalTrustedOrigins;
+    @Nullable
+    private Bundle mSplashScreenParams;
 
-    @NonNull private TrustedWebActivityDisplayMode mDisplayMode =
+    @Nullable
+    private ShareData mShareData;
+    @Nullable
+    private ShareTarget mShareTarget;
+
+    @NonNull
+    private TrustedWebActivityDisplayMode mDisplayMode =
             new TrustedWebActivityDisplayMode.DefaultMode();
 
+    @ScreenOrientation.LockType
+    private int mScreenOrientation = ScreenOrientation.DEFAULT;
+
     /**
      * Creates a Builder given the required parameters.
+     *
      * @param uri The web page to launch as Trusted Web Activity.
      */
     public TrustedWebActivityIntentBuilder(@NonNull Uri uri) {
@@ -131,7 +146,8 @@
      * menus.
      *
      * @param colorScheme Must be one of {@link CustomTabsIntent#COLOR_SCHEME_SYSTEM},
-     * {@link CustomTabsIntent#COLOR_SCHEME_LIGHT}, and {@link CustomTabsIntent#COLOR_SCHEME_DARK}.
+     *                    {@link CustomTabsIntent#COLOR_SCHEME_LIGHT}, and
+     *                    {@link CustomTabsIntent#COLOR_SCHEME_DARK}.
      */
     @NonNull
     public TrustedWebActivityIntentBuilder setColorScheme(int colorScheme) {
@@ -151,6 +167,7 @@
         mIntentBuilder.setColorSchemeParams(colorScheme, params);
         return this;
     }
+
     /**
      * Sets a list of additional trusted origins that the user may navigate or be redirected to
      * from the starting uri.
@@ -196,8 +213,8 @@
      * Sets the parameters for delivering data to a Web Share Target via a Trusted Web Activity.
      *
      * @param shareTarget A {@link ShareTarget} object describing the Web Share Target.
-     * @param shareData A {@link ShareData} object containing the data to be sent to the Web Share
-     * Target.
+     * @param shareData   A {@link ShareData} object containing the data to be sent to the Web Share
+     *                    Target.
      */
     @NonNull
     public TrustedWebActivityIntentBuilder setShareParams(@NonNull ShareTarget shareTarget,
@@ -220,6 +237,20 @@
     }
 
     /**
+     * Sets a screenOrientation. This can be used e.g. to enable the locking of an orientation
+     * lock type {@link ScreenOrientation}.
+     *
+     * @param orientation A {@link ScreenOrientation} lock type for a Trusted Web Activity.
+     *                    Not setting it means {@link ScreenOrientation#DEFAULT} will be used.
+     */
+    @NonNull
+    public TrustedWebActivityIntentBuilder setScreenOrientation(
+            @ScreenOrientation.LockType int orientation) {
+        mScreenOrientation = orientation;
+        return this;
+    }
+
+    /**
      * Builds an instance of {@link TrustedWebActivityIntent].
      *
      * @param session The {@link CustomTabsSession} to use for launching a Trusted Web Activity.
@@ -251,6 +282,7 @@
             }
         }
         intent.putExtra(EXTRA_DISPLAY_MODE, mDisplayMode.toBundle());
+        intent.putExtra(EXTRA_SCREEN_ORIENTATION, mScreenOrientation);
         return new TrustedWebActivityIntent(intent, sharedUris);
     }
 
@@ -275,7 +307,7 @@
     /**
      * Returns {@link TrustedWebActivityDisplayMode} set on this Builder.
      */
-    @Nullable
+    @NonNull
     public TrustedWebActivityDisplayMode getDisplayMode() {
         return mDisplayMode;
     }