Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add custom signals support in Remote Config. #6539

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

tusharkhandelwal8
Copy link

@tusharkhandelwal8 tusharkhandelwal8 commented Nov 27, 2024

feat(rc): Add support to set custom signals for Remote Config Custom targeting

Reflects expanded functionality to store both metadata and custom
signals in shared preferences.
Copy link
Contributor

github-actions bot commented Nov 27, 2024

Javadoc Changes:
--- /home/runner/diff/original/firebase-kotlindoc/android/client/firebase-config/_toc.yaml	2024-12-16 17:18:59.254231380 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/client/firebase-config/_toc.yaml	2024-12-16 17:16:01.994306088 +0000
@@ -20,6 +20,10 @@
     section:
     - title: "ConfigUpdate"
       path: "/docs/reference/android/com/google/firebase/remoteconfig/ConfigUpdate.html"
+    - title: "CustomSignals"
+      path: "/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html"
+    - title: "CustomSignals.Builder"
+      path: "/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html"
     - title: "FirebaseRemoteConfig"
       path: "/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html"
     - title: "FirebaseRemoteConfigSettings"
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html	2024-12-16 17:16:01.998306087 +0000
@@ -0,0 +1,276 @@
+<html devsite="true">
+  <head>
+    <title>CustomSignals.Builder</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/android/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>CustomSignals.Builder</h1>
+    <p>
+      <pre>public class <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></pre>
+    </p>
+    <hr>
+    <p>Builder for constructing <code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code> instances.</p>
+    <h2>Summary</h2>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public constructors</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html#Builder()">Builder</a>()</code></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public methods</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html#build()">build</a>()</code></div>
+              <p>Creates a <code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code> instance with the added custom signals.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html#put(java.lang.String,java.lang.String)">put</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;key,&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/Nullable.html">Nullable</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;value)</code></div>
+              <p>Adds a custom signal with a value that can be a string or null to the builder.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html#put(java.lang.String,long)">put</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;key,&nbsp;long&nbsp;value)</code></div>
+              <p>Adds a custom signal with a long value to the builder.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html#put(java.lang.String,double)">put</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;key,&nbsp;double&nbsp;value)</code></div>
+              <p>Adds a custom signal with a double value to the builder.</p>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="list">
+      <h2>Public constructors</h2>
+      <div class="api-item"><a name="Builder--"></a><a name="builder"></a>
+        <h3 class="api-name" id="Builder()">Builder</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;<a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html#Builder()">Builder</a>()</pre>
+      </div>
+    </div>
+    <div class="list">
+      <h2>Public methods</h2>
+      <div class="api-item"><a name="build--"></a><a name="build"></a>
+        <h3 class="api-name" id="build()">build</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html#build()">build</a>()</pre>
+        <p>Creates a <code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code> instance with the added custom signals.</p>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Returns</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code></td>
+                <td>
+                  <p>The constructed <code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code> instance.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <div class="api-item"><a name="put(java.lang.String, java.lang.String)"></a><a name="put-java.lang.String-java.lang.String-"></a><a name="put"></a>
+        <h3 class="api-name" id="put(java.lang.String,java.lang.String)">put</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html#put(java.lang.String,java.lang.String)">put</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;key,&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/Nullable.html">Nullable</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;value)</pre>
+        <p>Adds a custom signal with a value that can be a string or null to the builder.</p>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Parameters</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;key</code></td>
+                <td>
+                  <p>The key for the custom signal.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/Nullable.html">Nullable</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;value</code></td>
+                <td>
+                  <p>The string value associated with the key. Can be null.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Returns</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+                <td>
+                  <p>This Builder instance to allow chaining of method calls.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <div class="api-item"><a name="put(java.lang.String, long)"></a><a name="put-java.lang.String-long-"></a><a name="put"></a>
+        <h3 class="api-name" id="put(java.lang.String,long)">put</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html#put(java.lang.String,long)">put</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;key,&nbsp;long&nbsp;value)</pre>
+        <p>Adds a custom signal with a long value to the builder.</p>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Parameters</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;key</code></td>
+                <td>
+                  <p>The key for the custom signal.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code>long&nbsp;value</code></td>
+                <td>
+                  <p>The long value for the custom signal.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Returns</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+                <td>
+                  <p>This Builder instance to allow chaining of method calls.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <div class="api-item"><a name="put(java.lang.String, double)"></a><a name="put-java.lang.String-double-"></a><a name="put"></a>
+        <h3 class="api-name" id="put(java.lang.String,double)">put</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html#put(java.lang.String,double)">put</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;key,&nbsp;double&nbsp;value)</pre>
+        <p>Adds a custom signal with a double value to the builder.</p>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Parameters</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;key</code></td>
+                <td>
+                  <p>The key for the custom signal.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code>double&nbsp;value</code></td>
+                <td>
+                  <p>The double value for the custom signal.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Returns</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+                <td>
+                  <p>This Builder instance to allow chaining of method calls.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
+
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/remoteconfig/CustomSignals.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/remoteconfig/CustomSignals.html	2024-12-16 17:16:01.998306087 +0000
@@ -0,0 +1,39 @@
+<html devsite="true">
+  <head>
+    <title>CustomSignals</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/android/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>CustomSignals</h1>
+    <p>
+      <pre>public class <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></pre>
+    </p>
+    <hr>
+    <p>A container type to represent key/value pairs of heterogeneous types to be set as custom signals in <code><a href="/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html#setCustomSignals(com.google.firebase.remoteconfig.CustomSignals)">setCustomSignals</a></code>.</p>
+    <h2>Summary</h2>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Nested types</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td>
+              <div><code>public class <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></div>
+              <p>Builder for constructing <code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code> instances.</p>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+  </body>
+</html>
+
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html	2024-12-16 17:18:59.254231380 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html	2024-12-16 17:16:01.998306087 +0000
@@ -254,6 +254,13 @@
           <tr>
             <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developers.google.com/android/reference/com/google/android/gms/tasks/Task.html">Task</a>&lt;<a href="https://developer.android.com/reference/kotlin/java/lang/Void.html">Void</a>&gt;</code></td>
             <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html#setCustomSignals(com.google.firebase.remoteconfig.CustomSignals)">setCustomSignals</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a>&nbsp;customSignals)</code></div>
+              <p>Asynchronously changes the custom signals for this <code><a href="/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html">FirebaseRemoteConfig</a></code> instance.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developers.google.com/android/reference/com/google/android/gms/tasks/Task.html">Task</a>&lt;<a href="https://developer.android.com/reference/kotlin/java/lang/Void.html">Void</a>&gt;</code></td>
+            <td>
               <div><code><a href="/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html#setDefaultsAsync(java.util.Map&lt;java.lang.String,java.lang.Object&gt;)">setDefaultsAsync</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/Map.html">Map</a>&lt;<a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>,&nbsp;<a href="https://developer.android.com/reference/kotlin/java/lang/Object.html">Object</a>&gt;&nbsp;defaults)</code></div>
               <p>Asynchronously sets default configs using the given <code><a href="https://developer.android.com/reference/kotlin/java/util/Map.html">Map</a></code>.</p>
             </td>
@@ -973,6 +980,34 @@
                 </td>
               </tr>
             </tbody>
+          </table>
+        </div>
+      </div>
+      <div class="api-item"><a name="setCustomSignals-com.google.firebase.remoteconfig.CustomSignals-"></a><a name="setcustomsignals"></a>
+        <h3 class="api-name" id="setCustomSignals(com.google.firebase.remoteconfig.CustomSignals)">setCustomSignals</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developers.google.com/android/reference/com/google/android/gms/tasks/Task.html">Task</a>&lt;<a href="https://developer.android.com/reference/kotlin/java/lang/Void.html">Void</a>&gt;&nbsp;<a href="/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html#setCustomSignals(com.google.firebase.remoteconfig.CustomSignals)">setCustomSignals</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a>&nbsp;customSignals)</pre>
+        <p>Asynchronously changes the custom signals for this <code><a href="/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html">FirebaseRemoteConfig</a></code> instance. </p>
+        <p>The <code>customSignals</code> parameter should be an instance of <code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code>. </p>
+        <p>Custom signals are subject to limits on the size of key/value pairs and the total number of signals. Any calls that exceed these limits will be discarded.</p>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Parameters</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a>&nbsp;customSignals</code></td>
+                <td>
+                  <p>A dictionary of keys and the values of the custom signals to be set for the app instance</p>
+                </td>
+              </tr>
+            </tbody>
           </table>
         </div>
       </div>
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/remoteconfig/RemoteConfigKt.html	2024-12-16 17:18:59.258231378 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/remoteconfig/RemoteConfigKt.html	2024-12-16 17:16:01.998306087 +0000
@@ -53,6 +53,12 @@
         </thead>
         <tbody class="list">
           <tr>
+            <td><code>static&nbsp;final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/remoteconfig/RemoteConfigKt.html#customSignals(kotlin.Function1)">customSignals</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-extension-function-type/index.html">ExtensionFunctionType</a> @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> Function1&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a>,&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>&gt;&nbsp;builder<br>)</code></div>
+            </td>
+          </tr>
+          <tr>
             <td><code>static&nbsp;final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfigValue.html">FirebaseRemoteConfigValue</a></code></td>
             <td>
               <div><code><a href="/docs/reference/android/com/google/firebase/remoteconfig/RemoteConfigKt.html">RemoteConfigKt</a>.<a href="/docs/reference/android/com/google/firebase/remoteconfig/RemoteConfigKt.html#(com.google.firebase.remoteconfig.FirebaseRemoteConfig).get(kotlin.String)">get</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html">FirebaseRemoteConfig</a>&nbsp;receiver,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;key<br>)</code></div>
@@ -98,6 +104,10 @@
     </div>
     <div class="list">
       <h2>Public methods</h2>
+      <div class="api-item"><a name="customSignals-kotlin.Function1-"></a><a name="customsignals"></a>
+        <h3 class="api-name" id="customSignals(kotlin.Function1)">customSignals</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;static&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/remoteconfig/RemoteConfigKt.html#customSignals(kotlin.Function1)">customSignals</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-extension-function-type/index.html">ExtensionFunctionType</a> @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> Function1&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a>,&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>&gt;&nbsp;builder<br>)</pre>
+      </div>
       <div class="api-item"><a name="-com.google.firebase.remoteconfig.FirebaseRemoteConfig-.get-kotlin.String-"></a><a name="get"></a>
         <h3 class="api-name" id="(com.google.firebase.remoteconfig.FirebaseRemoteConfig).get(kotlin.String)">RemoteConfigKt.get</h3>
         <pre class="api-signature no-pretty-print">public&nbsp;static&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfigValue.html">FirebaseRemoteConfigValue</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/remoteconfig/RemoteConfigKt.html">RemoteConfigKt</a>.<a href="/docs/reference/android/com/google/firebase/remoteconfig/RemoteConfigKt.html#(com.google.firebase.remoteconfig.FirebaseRemoteConfig).get(kotlin.String)">get</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html">FirebaseRemoteConfig</a>&nbsp;receiver,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;key<br>)</pre>
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/remoteconfig/package-summary.html	2024-12-16 17:18:59.254231380 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/remoteconfig/package-summary.html	2024-12-16 17:16:01.998306087 +0000
@@ -56,6 +56,18 @@
             </td>
           </tr>
           <tr>
+            <td><code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code></td>
+            <td>
+              <p>A container type to represent key/value pairs of heterogeneous types to be set as custom signals in <code><a href="/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html#setCustomSignals(com.google.firebase.remoteconfig.CustomSignals)">setCustomSignals</a></code>.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+            <td>
+              <p>Builder for constructing <code><a href="/docs/reference/android/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code> instances.</p>
+            </td>
+          </tr>
+          <tr>
             <td><code><a href="/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html">FirebaseRemoteConfig</a></code></td>
             <td>
               <p>Entry point for the Firebase Remote Config API.</p>
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/client/firebase-config/_toc.yaml	2024-12-16 17:18:59.250231382 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/client/firebase-config/_toc.yaml	2024-12-16 17:16:01.986306092 +0000
@@ -20,6 +20,10 @@
     section:
     - title: "ConfigUpdate"
       path: "/docs/reference/kotlin/com/google/firebase/remoteconfig/ConfigUpdate.html"
+    - title: "CustomSignals"
+      path: "/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html"
+    - title: "CustomSignals.Builder"
+      path: "/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html"
     - title: "FirebaseRemoteConfig"
       path: "/docs/reference/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html"
     - title: "FirebaseRemoteConfigSettings"
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html	2024-12-16 17:16:01.986306092 +0000
@@ -0,0 +1,276 @@
+<html devsite="true">
+  <head>
+    <title>CustomSignals.Builder</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/kotlin/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>CustomSignals.Builder</h1>
+    <p>
+      <pre>class <a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></pre>
+    </p>
+    <hr>
+    <p>Builder for constructing <code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code> instances.</p>
+    <h2>Summary</h2>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public constructors</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html#Builder()">Builder</a>()</code></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public functions</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html#build()">build</a>()</code></div>
+              <p>Creates a <code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code> instance with the added custom signals.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html#put(java.lang.String,java.lang.String)">put</a>(key:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;value:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?)</code></div>
+              <p>Adds a custom signal with a value that can be a string or null to the builder.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html#put(java.lang.String,long)">put</a>(key:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;value:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>)</code></div>
+              <p>Adds a custom signal with a long value to the builder.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html#put(java.lang.String,double)">put</a>(key:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;value:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-double/index.html">Double</a>)</code></div>
+              <p>Adds a custom signal with a double value to the builder.</p>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="list">
+      <h2>Public constructors</h2>
+      <div class="api-item"><a name="Builder--"></a><a name="builder"></a>
+        <h3 class="api-name" id="Builder()">Builder</h3>
+        <pre class="api-signature no-pretty-print"><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html#Builder()">Builder</a>()</pre>
+      </div>
+    </div>
+    <div class="list">
+      <h2>Public functions</h2>
+      <div class="api-item"><a name="build--"></a><a name="build"></a>
+        <h3 class="api-name" id="build()">build</h3>
+        <pre class="api-signature no-pretty-print">fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html#build()">build</a>():&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></pre>
+        <p>Creates a <code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code> instance with the added custom signals.</p>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Returns</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code></td>
+                <td>
+                  <p>The constructed <code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code> instance.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <div class="api-item"><a name="put(java.lang.String, java.lang.String)"></a><a name="put-java.lang.String-java.lang.String-"></a><a name="put"></a>
+        <h3 class="api-name" id="put(java.lang.String,java.lang.String)">put</h3>
+        <pre class="api-signature no-pretty-print">fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html#put(java.lang.String,java.lang.String)">put</a>(key:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;value:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?):&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></pre>
+        <p>Adds a custom signal with a value that can be a string or null to the builder.</p>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Parameters</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code>key:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></code></td>
+                <td>
+                  <p>The key for the custom signal.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code>value:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?</code></td>
+                <td>
+                  <p>The string value associated with the key. Can be null.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Returns</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+                <td>
+                  <p>This Builder instance to allow chaining of method calls.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <div class="api-item"><a name="put(java.lang.String, long)"></a><a name="put-java.lang.String-long-"></a><a name="put"></a>
+        <h3 class="api-name" id="put(java.lang.String,long)">put</h3>
+        <pre class="api-signature no-pretty-print">fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html#put(java.lang.String,long)">put</a>(key:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;value:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>):&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></pre>
+        <p>Adds a custom signal with a long value to the builder.</p>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Parameters</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code>key:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></code></td>
+                <td>
+                  <p>The key for the custom signal.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code>value:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a></code></td>
+                <td>
+                  <p>The long value for the custom signal.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Returns</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+                <td>
+                  <p>This Builder instance to allow chaining of method calls.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <div class="api-item"><a name="put(java.lang.String, double)"></a><a name="put-java.lang.String-double-"></a><a name="put"></a>
+        <h3 class="api-name" id="put(java.lang.String,double)">put</h3>
+        <pre class="api-signature no-pretty-print">fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html#put(java.lang.String,double)">put</a>(key:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;value:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-double/index.html">Double</a>):&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></pre>
+        <p>Adds a custom signal with a double value to the builder.</p>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Parameters</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code>key:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></code></td>
+                <td>
+                  <p>The key for the custom signal.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code>value:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-double/index.html">Double</a></code></td>
+                <td>
+                  <p>The double value for the custom signal.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Returns</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+                <td>
+                  <p>This Builder instance to allow chaining of method calls.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
+
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/remoteconfig/CustomSignals.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/remoteconfig/CustomSignals.html	2024-12-16 17:16:01.986306092 +0000
@@ -0,0 +1,39 @@
+<html devsite="true">
+  <head>
+    <title>CustomSignals</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/kotlin/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>CustomSignals</h1>
+    <p>
+      <pre>class <a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></pre>
+    </p>
+    <hr>
+    <p>A container type to represent key/value pairs of heterogeneous types to be set as custom signals in <code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html#setCustomSignals(com.google.firebase.remoteconfig.CustomSignals)">setCustomSignals</a></code>.</p>
+    <h2>Summary</h2>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Nested types</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td>
+              <div><code>class <a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></div>
+              <p>Builder for constructing <code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code> instances.</p>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+  </body>
+</html>
+
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html	2024-12-16 17:18:59.254231380 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html	2024-12-16 17:16:01.986306092 +0000
@@ -254,6 +254,13 @@
           <tr>
             <td><code><a href="https://developers.google.com/android/reference/com/google/android/gms/tasks/Task.html">Task</a>&lt;<a href="https://developer.android.com/reference/kotlin/java/lang/Void.html">Void</a>!&gt;</code></td>
             <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html#setCustomSignals(com.google.firebase.remoteconfig.CustomSignals)">setCustomSignals</a>(customSignals:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a>)</code></div>
+              <p>Asynchronously changes the custom signals for this <code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html">FirebaseRemoteConfig</a></code> instance.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code><a href="https://developers.google.com/android/reference/com/google/android/gms/tasks/Task.html">Task</a>&lt;<a href="https://developer.android.com/reference/kotlin/java/lang/Void.html">Void</a>!&gt;</code></td>
+            <td>
               <div><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html#setDefaultsAsync(java.util.Map&lt;java.lang.String,java.lang.Object&gt;)">setDefaultsAsync</a>(defaults:&nbsp;(<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-map/index.html">Mutable</a>)<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a>&lt;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>!,&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>!&gt;)</code></div>
               <p>Asynchronously sets default configs using the given <code><a href="https://developer.android.com/reference/kotlin/java/util/Map.html">Map</a></code>.</p>
             </td>
@@ -990,6 +997,34 @@
                 </td>
               </tr>
             </tbody>
+          </table>
+        </div>
+      </div>
+      <div class="api-item"><a name="setCustomSignals-com.google.firebase.remoteconfig.CustomSignals-"></a><a name="setcustomsignals"></a>
+        <h3 class="api-name" id="setCustomSignals(com.google.firebase.remoteconfig.CustomSignals)">setCustomSignals</h3>
+        <pre class="api-signature no-pretty-print">fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html#setCustomSignals(com.google.firebase.remoteconfig.CustomSignals)">setCustomSignals</a>(customSignals:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a>):&nbsp;<a href="https://developers.google.com/android/reference/com/google/android/gms/tasks/Task.html">Task</a>&lt;<a href="https://developer.android.com/reference/kotlin/java/lang/Void.html">Void</a>!&gt;</pre>
+        <p>Asynchronously changes the custom signals for this <code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html">FirebaseRemoteConfig</a></code> instance. </p>
+        <p>The <code>customSignals</code> parameter should be an instance of <code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code>. </p>
+        <p>Custom signals are subject to limits on the size of key/value pairs and the total number of signals. Any calls that exceed these limits will be discarded.</p>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">Parameters</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code>customSignals:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code></td>
+                <td>
+                  <p>A dictionary of keys and the values of the custom signals to be set for the app instance</p>
+                </td>
+              </tr>
+            </tbody>
           </table>
         </div>
       </div>
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/remoteconfig/package-summary.html	2024-12-16 17:18:59.254231380 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/remoteconfig/package-summary.html	2024-12-16 17:16:01.986306092 +0000
@@ -56,6 +56,18 @@
             </td>
           </tr>
           <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code></td>
+            <td>
+              <p>A container type to represent key/value pairs of heterogeneous types to be set as custom signals in <code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html#setCustomSignals(com.google.firebase.remoteconfig.CustomSignals)">setCustomSignals</a></code>.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a></code></td>
+            <td>
+              <p>Builder for constructing <code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code> instances.</p>
+            </td>
+          </tr>
+          <tr>
             <td><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfig.html">FirebaseRemoteConfig</a></code></td>
             <td>
               <p>Entry point for the Firebase Remote Config API.</p>
@@ -135,6 +147,12 @@
         </colgroup>
         <tbody class="list">
           <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/package-summary.html#customSignals(kotlin.Function1)">customSignals</a>(builder:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a>.() <span style="white-space: nowrap;">-&gt;</span> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>)</code></div>
+            </td>
+          </tr>
+          <tr>
             <td><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfigSettings.html">FirebaseRemoteConfigSettings</a></code></td>
             <td>
               <div><code><a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/package-summary.html#remoteConfigSettings(kotlin.Function1)">remoteConfigSettings</a>(init:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfigSettings.Builder.html">FirebaseRemoteConfigSettings.Builder</a>.() <span style="white-space: nowrap;">-&gt;</span> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>)</code></div>
@@ -194,6 +212,10 @@
       </table>
     </div>
     <h2>Top-level functions</h2>
+    <div class="api-item"><a name="customSignals-kotlin.Function1-"></a><a name="customsignals"></a>
+      <h3 class="api-name" id="customSignals(kotlin.Function1)">customSignals</h3>
+      <pre class="api-signature no-pretty-print">fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/package-summary.html#customSignals(kotlin.Function1)">customSignals</a>(builder:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.Builder.html">CustomSignals.Builder</a>.() <span style="white-space: nowrap;">-&gt;</span> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>):&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/CustomSignals.html">CustomSignals</a></pre>
+    </div>
     <div class="api-item"><a name="remoteConfigSettings-kotlin.Function1-"></a><a name="remoteconfigsettings"></a>
       <h3 class="api-name" id="remoteConfigSettings(kotlin.Function1)">remoteConfigSettings</h3>
       <pre class="api-signature no-pretty-print">fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/package-summary.html#remoteConfigSettings(kotlin.Function1)">remoteConfigSettings</a>(init:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfigSettings.Builder.html">FirebaseRemoteConfigSettings.Builder</a>.() <span style="white-space: nowrap;">-&gt;</span> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>):&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/remoteconfig/FirebaseRemoteConfigSettings.html">FirebaseRemoteConfigSettings</a></pre>

Copy link
Contributor

Vertex AI Mock Responses Check ⚠️

A newer major version of the mock responses for Vertex AI unit tests is available. update_responses.sh should be updated to clone the latest version of the responses: v5.2

@google-oss-bot
Copy link
Contributor

1 Warning
⚠️ Did you forget to add a changelog entry? (Add the 'no-changelog' label to the PR to silence this warning.)

Generated by 🚫 Danger

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Nov 27, 2024

Coverage Report 1

Affected Products

  • firebase-config

    Overall coverage changed from 84.11% (50eacb7) to 83.95% (456b067) by -0.16%.

    FilenameBase (50eacb7)Merge (456b067)Diff
    ConfigFetchHandler.java92.86%92.94%+0.08%
    ConfigFetchHttpClient.java87.33%86.27%-1.06%
    ConfigSharedPrefsClient.java?87.50%?
    CustomSignals.java?100.00%?
    FirebaseRemoteConfig.java89.52%89.76%+0.25%

Test Logs

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/V41ikzjkKi.html

Copy link
Contributor

github-actions bot commented Nov 27, 2024

Test Results

 42 files   -    994   42 suites   - 994   1m 23s ⏱️ - 33m 2s
322 tests  -  5 551  322 ✅  -  5 529  0 💤  - 22  0 ❌ ±0 
656 runs   - 11 175  656 ✅  - 11 131  0 💤  - 44  0 ❌ ±0 

Results for commit d13645c. ± Comparison against base commit 2b072d9.

This pull request removes 5591 and adds 40 tests. Note that renamed tests count towards both.
com.google.android.datatransport.cct.CctBackendFactoryTest ‑ create_returnCCTBackend_WhenBackendNameIsCCT
com.google.android.datatransport.cct.CctDestinationTest ‑ cctDestination_shouldOnlySupportProtoAndJson
com.google.android.datatransport.cct.CctDestinationTest ‑ cctDestination_shouldSupportProtoAndJson
com.google.android.datatransport.cct.CctTransportBackendTest ‑ decorate_whenOffline_shouldProperlyPopulateNetworkInfo
com.google.android.datatransport.cct.CctTransportBackendTest ‑ decorate_whenOnline_shouldProperlyPopulateNetworkInfo
com.google.android.datatransport.cct.CctTransportBackendTest ‑ schedule_shouldAddCookieOnPseudonymousIds
com.google.android.datatransport.cct.CctTransportBackendTest ‑ schedule_shouldDropCookieOnMixedPseudonymousIds
com.google.android.datatransport.cct.CctTransportBackendTest ‑ send_CompressedResponseIsUncompressed
com.google.android.datatransport.cct.CctTransportBackendTest ‑ send_whenBackendRedirectsMoreThan5Times_shouldOnlyRedirect4Times
com.google.android.datatransport.cct.CctTransportBackendTest ‑ send_whenBackendRedirects_shouldCorrectlyFollowTheRedirectViaPost
…
com.google.firebase.remoteconfig.ConfigTests ‑ Custom Signals builder support multiple types
com.google.firebase.remoteconfig.CustomSignalsTest ‑ testCustomSignals_builderPutDouble
com.google.firebase.remoteconfig.CustomSignalsTest ‑ testCustomSignals_builderPutDuplicateKeys
com.google.firebase.remoteconfig.CustomSignalsTest ‑ testCustomSignals_builderPutLong
com.google.firebase.remoteconfig.CustomSignalsTest ‑ testCustomSignals_builderPutMixedTypes
com.google.firebase.remoteconfig.CustomSignalsTest ‑ testCustomSignals_builderPutNullValue
com.google.firebase.remoteconfig.CustomSignalsTest ‑ testCustomSignals_builderPutString
com.google.firebase.remoteconfig.FirebaseRemoteConfigTest ‑ setConfigSettingsAsync_updatesSharedPrefs
com.google.firebase.remoteconfig.FirebaseRemoteConfigTest ‑ setCustomSignals_succeeds_and_calls_sharedPrefsClient
com.google.firebase.remoteconfig.internal.ConfigFetchHandlerTest ‑ fetch_usesLatestCustomSignals
…

♻️ This comment has been updated with latest results.

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Nov 27, 2024

Size Report 1

Affected Products

  • firebase-config

    TypeBase (50eacb7)Merge (456b067)Diff
    aar108 kB112 kB+3.82 kB (+3.5%)
    apk (aggressive)211 kB211 kB+352 B (+0.2%)
    apk (release)4.58 MB4.59 MB+2.97 kB (+0.1%)
  • firebase-config-ktx

    TypeBase (50eacb7)Merge (456b067)Diff
    apk (aggressive)211 kB212 kB+356 B (+0.2%)
    apk (release)4.58 MB4.59 MB+2.97 kB (+0.1%)

Test Logs

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/SHe1rKIlFt.html

@tusharkhandelwal8 tusharkhandelwal8 changed the title feat(rc): Add support to set custom signals for Remote Config Custom targeting Add custom signals support in Remote Config. Dec 5, 2024
feat(rc): Add custom signals support and methods to set custom signals
for Remote Config Custom targeting
tusharkhandelwal8 and others added 2 commits December 11, 2024 00:28
When we update custom signals using setCustomSignals, the latest custom
signals are not retrieved in the subsequent fetch. Currently, we are
required to reload the app to fetch them.

Link to the bug: [Fetch uses stale custom signal
values](https://b.corp.google.com/issues/381353888)
@tusharkhandelwal8 tusharkhandelwal8 marked this pull request as ready for review December 10, 2024 20:42
@@ -41,7 +41,7 @@ fun createRemoteConfig(
defaultConfigsCache: ConfigCacheClient,
fetchHandler: ConfigFetchHandler,
getHandler: ConfigGetParameterHandler,
frcMetadata: ConfigMetadataClient,
frcSharedPrefs: ConfigSharedPrefsClient,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since we are already making changes here, it sounds like a good idea to revisit naming, is frc adding any valuable meaning as part of the name? If not, I'd rather rename it to something more descriptive.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the suggestion! The prefix frc here specifically refers for storing Remote Config related key-value pairs in shared preferences. It helps differentiate these preferences from other shared preferences. Do you have any other suggestions?

requestBodyMap.put(CUSTOM_SIGNALS, new JSONObject(customSignalsMap));

// Log the custom signals during fetch.
Log.d(TAG, "Fetching with custom signals: " + customSignalsMap);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could the custom signals include any information that shouldn't be logged? See https://developer.android.com/privacy-and-security/risks/log-info-disclosure

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are adding debug logs here, does logging at the debug level sufficiently mitigate the risk of exposing sensitive data? We are planning to explicitly advise against including sensitive information within custom signals in our public documentation. Do you think this approach adequately addresses the potential concerns?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants