Skip to content

Commit

Permalink
Add a few details for Phenotype API
Browse files Browse the repository at this point in the history
  • Loading branch information
mar-v-in committed Feb 21, 2024
1 parent 48e0b00 commit 11cc078
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,30 +6,30 @@ import com.google.android.gms.phenotype.Flag;
import com.google.android.gms.phenotype.RegistrationInfo;

interface IPhenotypeService {
oneway void register(IPhenotypeCallbacks callbacks, String p1, int p2, in String[] p3, in byte[] p4) = 0; // returns via callbacks.onRegistered()
oneway void weakRegister(IPhenotypeCallbacks callbacks, String p1, int p2, in String[] p3, in int[] p4, in byte[] p5) = 1; // returns via callbacks.onWeakRegistered()
oneway void unregister(IPhenotypeCallbacks callbacks, String p1) = 2; // returns via callbacks.onUnregistered()
oneway void getConfigurationSnapshot(IPhenotypeCallbacks callbacks, String p1, String p2) = 3; // returns via callbacks.onConfiguration()
oneway void commitToConfiguration(IPhenotypeCallbacks callbacks, String p1) = 4; // returns via callbacks.onCommitedToConfiguration()
oneway void getExperimentTokens(IPhenotypeCallbacks callbacks, String p1, String logSourceName) = 5; // returns via callbacks.onExperimentTokens()
oneway void register(IPhenotypeCallbacks callbacks, String packageName, int version, in String[] p3, in byte[] p4) = 0; // returns via callbacks.onRegistered()
oneway void weakRegister(IPhenotypeCallbacks callbacks, String packageName, int version, in String[] p3, in int[] p4, in byte[] p5) = 1; // returns via callbacks.onWeakRegistered()
oneway void unregister(IPhenotypeCallbacks callbacks, String packageName) = 2; // returns via callbacks.onUnregistered()
oneway void getConfigurationSnapshot(IPhenotypeCallbacks callbacks, String packageName, String user) = 3; // returns via callbacks.onConfiguration()
oneway void commitToConfiguration(IPhenotypeCallbacks callbacks, String snapshotToken) = 4; // returns via callbacks.onCommitedToConfiguration()
oneway void getExperimentTokens(IPhenotypeCallbacks callbacks, String packageName, String logSourceName) = 5; // returns via callbacks.onExperimentTokens()
oneway void getDogfoodsToken(IPhenotypeCallbacks callbacks) = 6; // returns via callbacks.onDogfoodsToken()
oneway void setDogfoodsToken(IPhenotypeCallbacks callbacks, in byte[] p1) = 7; // returns via callbacks.onDogfoodsTokenSet()
oneway void getFlag(IPhenotypeCallbacks callbacks, String packageName, String name, int type) = 8; // returns via callbacks.onFlag()
oneway void getCommitedConfiguration(IPhenotypeCallbacks callbacks, String p1) = 9; // returns via callbacks.onCommittedConfiguration()
oneway void getConfigurationSnapshot2(IPhenotypeCallbacks callbacks, String p1, String p2, String p3) = 10; // returns via callbacks.onConfiguration()
oneway void syncAfterOperation(IPhenotypeCallbacks callbacks, String p1, long p2) = 11; // returns via callbacks.onSyncFinished()
oneway void registerSync(IPhenotypeCallbacks callbacks, String p1, int p2, in String[] p3, in byte[] p4, String p5, String p6) = 12; // returns via callbacks.onConfiguration()
oneway void getCommitedConfiguration(IPhenotypeCallbacks callbacks, String packageName) = 9; // returns via callbacks.onCommittedConfiguration()
oneway void getConfigurationSnapshot2(IPhenotypeCallbacks callbacks, String packageName, String user, String p3) = 10; // returns via callbacks.onConfiguration()
oneway void syncAfterOperation(IPhenotypeCallbacks callbacks, String packageName, long version) = 11; // returns via callbacks.onSyncFinished()
oneway void registerSync(IPhenotypeCallbacks callbacks, String packageName, int version, in String[] p3, in byte[] p4, String p5, String p6) = 12; // returns via callbacks.onConfiguration()
oneway void setFlagOverrides(IPhenotypeCallbacks callbacks, String packageName, String user, String flagName, int flagType, int flagDataType, String flagValue) = 13; // returns via callbacks.onFlagOverridesSet()
oneway void deleteFlagOverrides(IPhenotypeCallbacks callbacks, String packageName, String user, String flagName) = 14; // returns via callbacks.onFlagOverrides()
oneway void listFlagOverrides(IPhenotypeCallbacks callbacks, String packageName, String user, String flagName) = 15; // returns via callbacks.onFlagOverrides()

oneway void clearFlagOverrides(IPhenotypeCallbacks callbacks, String packageName, String user) = 17; // returns via callbacks.onFlagOverridesSet()
oneway void bulkRegister(IPhenotypeCallbacks callbacks, in RegistrationInfo[] infos) = 18; // returns via callbacks.onRegister()
oneway void setAppSpecificProperties(IPhenotypeCallbacks callbacks, String p1, in byte[] p2) = 19; // returns via callbacks.onAppSpecificPropertiesSet()
oneway void setAppSpecificProperties(IPhenotypeCallbacks callbacks, String packageName, in byte[] p2) = 19; // returns via callbacks.onAppSpecificPropertiesSet()

oneway void getServingVersion(IPhenotypeCallbacks callbacks) = 21; // returns via callbacks.onServingVersion()
oneway void getExperimentTokens2(IPhenotypeCallbacks callbacks, String p1, String p2, String p3, String p4) = 22; // returns via callbacks.onExperimentTokens()
oneway void syncAfterOperation2(IPhenotypeCallbacks callbacks, long p1) = 23; // returns via callbacks.onSyncFinished()
oneway void getExperimentTokensForLogging(IPhenotypeCallbacks callbacks, String packageName, String logSourceName, String p3, String clientPackageName) = 22; // returns via callbacks.onExperimentTokens()
oneway void syncAllAfterOperation(IPhenotypeCallbacks callbacks, long p1) = 23; // returns via callbacks.onSyncFinished()
oneway void setRuntimeProperties(IStatusCallback callbacks, String p1, in byte[] p2) = 24;
// oneway void setExternalExperiments(IStatusCallback callbacks, String p1, in List<byte[]> p2) = 25;
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,19 @@

public class RegistrationInfo extends AutoSafeParcelable {
@Field(1)
public String field1;
public String packageName;
@Field(2)
public int field2;
public int version;
@Field(3)
public String[] field3;
@Field(4)
public byte[] field4;
@Field(5)
public boolean field5;
public boolean weak;
@Field(6)
public int[] field6;
@Field(7)
public String field7;
public String clientPackageName;

public static final Creator<RegistrationInfo> CREATOR = new AutoCreator<>(RegistrationInfo.class);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,47 +16,45 @@ import com.google.android.gms.phenotype.internal.IPhenotypeCallbacks
import com.google.android.gms.phenotype.internal.IPhenotypeService
import org.microg.gms.BaseService
import org.microg.gms.common.GmsService
import org.microg.gms.common.PackageUtils
import org.microg.gms.utils.warnOnTransactionIssues

private const val TAG = "PhenotypeService"

class PhenotypeService : BaseService(TAG, GmsService.PHENOTYPE) {
override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest?, service: GmsService?) {
callback.onPostInitComplete(0, PhenotypeServiceImpl().asBinder(), null)
val packageName = PackageUtils.getAndCheckCallingPackage(this, request?.packageName)
callback.onPostInitComplete(0, PhenotypeServiceImpl(packageName).asBinder(), null)
}
}

class PhenotypeServiceImpl : IPhenotypeService.Stub() {
override fun register(callbacks: IPhenotypeCallbacks, p1: String?, p2: Int, p3: Array<out String>?, p4: ByteArray?) {
Log.d(TAG, "register($p1, $p2, $p3, $p4)")
class PhenotypeServiceImpl(val packageName: String?) : IPhenotypeService.Stub() {
override fun register(callbacks: IPhenotypeCallbacks, packageName: String?, version: Int, p3: Array<out String>?, p4: ByteArray?) {
Log.d(TAG, "register($packageName, $version, $p3, $p4)")
callbacks.onRegistered(Status.SUCCESS)
}

override fun weakRegister(callbacks: IPhenotypeCallbacks, p1: String?, p2: Int, p3: Array<out String>?, p4: IntArray?, p5: ByteArray?) {
Log.d(TAG, "weakRegister($p1, $p2, $p3, $p4, $p5)")
override fun weakRegister(callbacks: IPhenotypeCallbacks, packageName: String?, version: Int, p3: Array<out String>?, p4: IntArray?, p5: ByteArray?) {
Log.d(TAG, "weakRegister($packageName, $version, $p3, $p4, $p5)")
callbacks.onWeakRegistered(Status.SUCCESS)
}

override fun unregister(callbacks: IPhenotypeCallbacks, p1: String?) {
Log.d(TAG, "unregister($p1)")
override fun unregister(callbacks: IPhenotypeCallbacks, packageName: String?) {
Log.d(TAG, "unregister($packageName)")
callbacks.onUnregistered(Status.SUCCESS)
}

override fun getConfigurationSnapshot(callbacks: IPhenotypeCallbacks, p1: String?, p2: String?) {
Log.d(TAG, "getConfigurationSnapshot($p1, $p2)")
callbacks.onConfiguration(Status.SUCCESS, Configurations().apply {
field4 = emptyArray()
})
override fun getConfigurationSnapshot(callbacks: IPhenotypeCallbacks, packageName: String?, user: String?) {
getConfigurationSnapshot2(callbacks, packageName, user, null)
}

override fun commitToConfiguration(callbacks: IPhenotypeCallbacks, p1: String?) {
Log.d(TAG, "commitToConfiguration($p1)")
override fun commitToConfiguration(callbacks: IPhenotypeCallbacks, snapshotToken: String?) {
Log.d(TAG, "commitToConfiguration($snapshotToken)")
callbacks.onCommitedToConfiguration(Status.SUCCESS)
}

override fun getExperimentTokens(callbacks: IPhenotypeCallbacks, p1: String?, logSourceName: String?) {
Log.d(TAG, "getExperimentTokens($p1, $logSourceName)")
callbacks.onExperimentTokens(Status.SUCCESS, ExperimentTokens())
override fun getExperimentTokens(callbacks: IPhenotypeCallbacks, packageName: String?, logSourceName: String?) {
getExperimentTokensForLogging(callbacks, packageName, logSourceName, null, this.packageName)
}

override fun getDogfoodsToken(callbacks: IPhenotypeCallbacks) {
Expand All @@ -74,27 +72,27 @@ class PhenotypeServiceImpl : IPhenotypeService.Stub() {
callbacks.onFlag(Status.SUCCESS, null)
}

override fun getCommitedConfiguration(callbacks: IPhenotypeCallbacks, p1: String?) {
Log.d(TAG, "getCommitedConfiguration($p1)")
override fun getCommitedConfiguration(callbacks: IPhenotypeCallbacks, packageName: String?) {
Log.d(TAG, "getCommitedConfiguration($packageName)")
callbacks.onCommittedConfiguration(Status.SUCCESS, Configurations().apply {
field4 = emptyArray()
})
}

override fun getConfigurationSnapshot2(callbacks: IPhenotypeCallbacks, p1: String?, p2: String?, p3: String?) {
Log.d(TAG, "getConfigurationSnapshot2($p1, $p2, $p3)")
override fun getConfigurationSnapshot2(callbacks: IPhenotypeCallbacks, packageName: String?, user: String?, p3: String?) {
Log.d(TAG, "getConfigurationSnapshot2($packageName, $user, $p3)")
callbacks.onConfiguration(Status.SUCCESS, Configurations().apply {
field4 = emptyArray()
})
}

override fun syncAfterOperation(callbacks: IPhenotypeCallbacks, p1: String?, p2: Long) {
Log.d(TAG, "syncAfterOperation($p1, $p2)")
callbacks.onSyncFinished(Status.SUCCESS, p2)
override fun syncAfterOperation(callbacks: IPhenotypeCallbacks, packageName: String?, version: Long) {
Log.d(TAG, "syncAfterOperation($packageName, $version)")
callbacks.onSyncFinished(Status.SUCCESS, version)
}

override fun registerSync(callbacks: IPhenotypeCallbacks, p1: String?, p2: Int, p3: Array<out String>?, p4: ByteArray?, p5: String?, p6: String?) {
Log.d(TAG, "registerSync($p1, $p2, $p3, $p4, $p5, $p6)")
override fun registerSync(callbacks: IPhenotypeCallbacks, packageName: String?, version: Int, p3: Array<out String>?, p4: ByteArray?, p5: String?, p6: String?) {
Log.d(TAG, "registerSync($packageName, $version, $p3, $p4, $p5, $p6)")
callbacks.onConfiguration(Status.SUCCESS, Configurations().apply {
field4 = emptyArray()
})
Expand Down Expand Up @@ -125,8 +123,8 @@ class PhenotypeServiceImpl : IPhenotypeService.Stub() {
callbacks.onRegistered(Status.SUCCESS)
}

override fun setAppSpecificProperties(callbacks: IPhenotypeCallbacks, p1: String?, p2: ByteArray?) {
Log.d(TAG, "setAppSpecificProperties($p1, $p2)")
override fun setAppSpecificProperties(callbacks: IPhenotypeCallbacks, packageName: String?, p2: ByteArray?) {
Log.d(TAG, "setAppSpecificProperties($packageName, $p2)")
callbacks.onAppSpecificPropertiesSet(Status.SUCCESS)
}

Expand All @@ -135,15 +133,15 @@ class PhenotypeServiceImpl : IPhenotypeService.Stub() {
callbacks.onServingVersion(Status.SUCCESS, 1)
}

override fun getExperimentTokens2(callbacks: IPhenotypeCallbacks, p1: String?, p2: String?, p3: String?, p4: String?) {
Log.d(TAG, "getExperimentTokens2($p1, $p2, $p3, $p4)")
override fun getExperimentTokensForLogging(callbacks: IPhenotypeCallbacks, packageName: String?, user: String?, p3: String?, clientPackageName: String?) {
Log.d(TAG, "getExperimentTokens($packageName, $user, $p3, $clientPackageName)")
callbacks.onExperimentTokens(Status.SUCCESS, ExperimentTokens().apply {
field2 = ""
})
}

override fun syncAfterOperation2(callbacks: IPhenotypeCallbacks?, p1: Long) {
Log.d(TAG, "Not yet implemented: syncAfterOperation2")
override fun syncAllAfterOperation(callbacks: IPhenotypeCallbacks?, p1: Long) {
Log.d(TAG, "Not yet implemented: syncAllAfterOperation")
}

override fun setRuntimeProperties(callbacks: IStatusCallback?, p1: String?, p2: ByteArray?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package com.google.android.gms.phenotype;

import androidx.annotation.NonNull;
import org.microg.safeparcel.AutoSafeParcelable;

public class ExperimentTokens extends AutoSafeParcelable {
Expand All @@ -26,6 +27,8 @@ public class ExperimentTokens extends AutoSafeParcelable {
public byte[][] directs;
@Field(10)
public int[] genericDimensions;
@Field(11)
public byte[][] external;

public static final Creator<ExperimentTokens> CREATOR = findCreator(ExperimentTokens.class);
}

0 comments on commit 11cc078

Please sign in to comment.