diff --git a/wear/protolayout/protolayout-proto/src/main/proto/trigger.proto b/wear/protolayout/protolayout-proto/src/main/proto/trigger.proto
index ef42469..f9cc1c5 100644
--- a/wear/protolayout/protolayout-proto/src/main/proto/trigger.proto
+++ b/wear/protolayout/protolayout-proto/src/main/proto/trigger.proto
@@ -21,9 +21,9 @@
 
 // Triggers *every time* the condition switches from false to true. If the
 // condition is true initially, that will fire the trigger on load.
-message OnConditionTrigger {
+message OnConditionMetTrigger {
   // Dynamic boolean used as trigger.
-  androidx.wear.protolayout.expression.proto.DynamicBool dynamic_bool = 1;
+  androidx.wear.protolayout.expression.proto.DynamicBool trigger = 1;
 }
 
 // The triggers that can be fired.
@@ -32,6 +32,6 @@
     OnVisibleTrigger on_visible_trigger = 1;
     OnVisibleOnceTrigger on_visible_once_trigger = 2;
     OnLoadTrigger on_load_trigger = 3;
-    OnConditionTrigger on_condition_trigger = 4;
+    OnConditionMetTrigger on_condition_met_trigger = 4;
   }
 }
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/TriggerBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/TriggerBuilders.java
index 675364c..959a62e 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/TriggerBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/TriggerBuilders.java
@@ -18,8 +18,6 @@
 
 import static androidx.wear.protolayout.expression.Preconditions.checkNotNull;
 
-import android.annotation.SuppressLint;
-
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
@@ -109,10 +107,10 @@
    * @since 1.2
    */
   public static final class OnConditionMetTrigger implements Trigger {
-    private final TriggerProto.OnConditionTrigger mImpl;
+    private final TriggerProto.OnConditionMetTrigger mImpl;
     @Nullable private final Fingerprint mFingerprint;
 
-    OnConditionMetTrigger(TriggerProto.OnConditionTrigger impl, @Nullable Fingerprint fingerprint) {
+    OnConditionMetTrigger(TriggerProto.OnConditionMetTrigger impl, @Nullable Fingerprint fingerprint) {
       this.mImpl = impl;
       this.mFingerprint = fingerprint;
     }
@@ -124,8 +122,8 @@
      */
     @Nullable
     public DynamicBool getTrigger() {
-      if (mImpl.hasDynamicBool()) {
-        return DynamicBuilders.dynamicBoolFromProto(mImpl.getDynamicBool());
+      if (mImpl.hasTrigger()) {
+        return DynamicBuilders.dynamicBoolFromProto(mImpl.getTrigger());
       } else {
         return null;
       }
@@ -140,12 +138,12 @@
     }
 
     @NonNull
-    static OnConditionMetTrigger fromProto(@NonNull TriggerProto.OnConditionTrigger proto) {
+    static OnConditionMetTrigger fromProto(@NonNull TriggerProto.OnConditionMetTrigger proto) {
       return new OnConditionMetTrigger(proto, null);
     }
 
     @NonNull
-    TriggerProto.OnConditionTrigger toProto() {
+    TriggerProto.OnConditionMetTrigger toProto() {
       return mImpl;
     }
 
@@ -154,13 +152,13 @@
     @RestrictTo(Scope.LIBRARY_GROUP)
     @NonNull
       public TriggerProto.Trigger toTriggerProto() {
-      return TriggerProto.Trigger.newBuilder().setOnConditionTrigger(mImpl).build();
+      return TriggerProto.Trigger.newBuilder().setOnConditionMetTrigger(mImpl).build();
     }
 
     /** Builder for {@link OnConditionMetTrigger}. */
     public static final class Builder implements Trigger.Builder {
-      private final TriggerProto.OnConditionTrigger.Builder mImpl =
-          TriggerProto.OnConditionTrigger.newBuilder();
+      private final TriggerProto.OnConditionMetTrigger.Builder mImpl =
+          TriggerProto.OnConditionMetTrigger.newBuilder();
       private final Fingerprint mFingerprint = new Fingerprint(1952746052);
 
       public Builder() {}
@@ -172,7 +170,7 @@
        */
       @NonNull
       public Builder setTrigger(@NonNull DynamicBool dynamicBool) {
-        mImpl.setDynamicBool(dynamicBool.toDynamicBoolProto());
+        mImpl.setTrigger(dynamicBool.toDynamicBoolProto());
         mFingerprint.recordPropertyUpdate(
             1, checkNotNull(dynamicBool.getFingerprint()).aggregateValueAsInt());
         return this;
@@ -229,8 +227,8 @@
     if (proto.hasOnLoadTrigger()) {
       return OnLoadTrigger.fromProto(proto.getOnLoadTrigger());
     }
-    if (proto.hasOnConditionTrigger()) {
-      return OnConditionMetTrigger.fromProto(proto.getOnConditionTrigger());
+    if (proto.hasOnConditionMetTrigger()) {
+      return OnConditionMetTrigger.fromProto(proto.getOnConditionMetTrigger());
     }
     throw new IllegalStateException("Proto was not a recognised instance of Trigger");
   }
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TriggerBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TriggerBuildersTest.java
index 5b3260e..cf36e4f 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TriggerBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TriggerBuildersTest.java
@@ -44,7 +44,7 @@
                 condition);
 
         assertThat(
-                onConditionMetTrigger.toTriggerProto().getOnConditionTrigger().getDynamicBool())
+                onConditionMetTrigger.toTriggerProto().getOnConditionMetTrigger().getTrigger())
                 .isEqualTo(condition.toDynamicBoolProto());
     }
 }
