Update to latest upstream

This commit is contained in:
Oizaro 2020-10-14 23:00:04 +02:00
parent 7a7f663c72
commit aa816ef84b
18 changed files with 293 additions and 65 deletions

15
.travis.yml Normal file
View File

@ -0,0 +1,15 @@
language: java
jdk: openjdk8
install:
- mkdir $HOME/android-cmdline-tools
- curl https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip > $HOME/android-cmdline-tools/cmdline-tools.zip
- unzip -qq -n $HOME/android-cmdline-tools/cmdline-tools.zip -d $HOME/android-cmdline-tools
- echo y | $HOME/android-cmdline-tools/tools/bin/sdkmanager --sdk_root=$HOME/android-sdk 'platform-tools'
- echo y | $HOME/android-cmdline-tools/tools/bin/sdkmanager --sdk_root=$HOME/android-sdk 'build-tools;29.0.3'
- echo y | $HOME/android-cmdline-tools/tools/bin/sdkmanager --sdk_root=$HOME/android-sdk 'platforms;android-30'
env:
- ANDROID_HOME=$HOME/android-sdk TERM=dumb JAVA_OPTS="-Xmx2048m"
before_script:
- echo sdk.dir $ANDROID_HOME > local.properties
script:
- ./gradlew --no-daemon build

View File

@ -27,7 +27,7 @@ buildscript {
ext.androidMinSdk = 21
ext.androidTargetSdk = 29
ext.androidCompileSdk = 29
ext.androidCompileSdk = 30
repositories {
jcenter()

View File

@ -0,0 +1,3 @@
package com.google.android.gms.phenotype;
parcelable Configurations;

View File

@ -0,0 +1,9 @@
package com.google.android.gms.phenotype.internal;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.phenotype.Configurations;
interface IPhenotypeCallbacks {
void onRegister(in Status status) = 0;
void onConfigurations(in Status status, in Configurations configurations) = 3;
}

View File

@ -0,0 +1,8 @@
package com.google.android.gms.phenotype.internal;
import com.google.android.gms.phenotype.internal.IPhenotypeCallbacks;
interface IPhenotypeService {
void register(IPhenotypeCallbacks callbacks, String p1, int p2, in String[] p3, in byte[] p4) = 0;
void getConfigurationSnapshot(IPhenotypeCallbacks callbacks, String p1, String p2, String p3) = 10;
}

View File

@ -7,13 +7,55 @@ package com.google.android.gms.measurement.internal;
import org.microg.safeparcel.AutoSafeParcelable;
import java.util.List;
public class AppMetadata extends AutoSafeParcelable {
@Field(2)
public String packageName;
@Field(3)
public String googleAppId;
@Field(4)
public String versionName;
@Field(5)
public String installerPackageName;
@Field(6)
private long field6;
@Field(7)
private long field7;
@Field(8)
private String field8;
@Field(9)
private boolean field9 = true;
@Field(10)
private boolean field10;
@Field(11)
public long versionCode;
public long versionCode = Integer.MIN_VALUE;
@Field(12)
private String field12;
@Field(13)
private long field13;
@Field(14)
private long field14;
@Field(15)
public int appType;
@Field(16)
private boolean field16;
@Field(17)
public boolean ssaidCollectionEnabled = true;
@Field(18)
public boolean deferredAnalyticsCollection;
@Field(19)
public String admobAppId;
@Field(21)
public Boolean allowAdPersonalization;
@Field(22)
private long field22;
@Field(23)
public List<String> safelistedEvents;
@Field(24)
public String gaAppId;
@Field(25)
private String field25;
public static final Creator<AppMetadata> CREATOR = new AutoCreator<>(AppMetadata.class);
}

View File

@ -8,5 +8,28 @@ package com.google.android.gms.measurement.internal;
import org.microg.safeparcel.AutoSafeParcelable;
public class ConditionalUserPropertyParcel extends AutoSafeParcelable {
@Field(2)
public String appId;
@Field(3)
public String origin;
@Field(4)
public UserAttributeParcel userAttribute;
@Field(5)
public long creationTimestamp;
@Field(6)
public boolean active;
@Field(7)
public String triggerEventName;
@Field(8)
public EventParcel timedOutEvent;
@Field(9)
public long triggerTimeout;
@Field(10)
public EventParcel triggerEvent;
@Field(11)
public long timeToLive;
@Field(12)
public EventParcel expiredEvent;
public static final Creator<ConditionalUserPropertyParcel> CREATOR = new AutoCreator<>(ConditionalUserPropertyParcel.class);
}

View File

@ -0,0 +1,18 @@
/*
* SPDX-FileCopyrightText: 2020, microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/
package com.google.android.gms.phenotype;
import org.microg.safeparcel.AutoSafeParcelable;
public class Configuration extends AutoSafeParcelable {
@Field(2)
public int field2;
@Field(3)
public Flag[] field3;
@Field(4)
public String[] field4;
public static final Creator<Configuration> CREATOR = new AutoCreator<>(Configuration.class);
}

View File

@ -0,0 +1,25 @@
/*
* SPDX-FileCopyrightText: 2020, microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/
package com.google.android.gms.phenotype;
import org.microg.safeparcel.AutoSafeParcelable;
public class Configurations extends AutoSafeParcelable {
@Field(2)
public String field2;
@Field(3)
public String field3;
@Field(4)
public Configuration[] field4;
@Field(5)
public boolean field5;
@Field(6)
public byte[] field6;
@Field(7)
public long field7;
public static final Creator<Configurations> CREATOR = new AutoCreator<>(Configurations.class);
}

View File

@ -0,0 +1,12 @@
/*
* SPDX-FileCopyrightText: 2020, microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/
package com.google.android.gms.phenotype;
import org.microg.safeparcel.AutoSafeParcelable;
public class Flag extends AutoSafeParcelable {
public static final Creator<Flag> CREATOR = new AutoCreator<>(Flag.class);
}

View File

@ -23,33 +23,26 @@ import com.google.android.gms.cast.framework.media.CastMediaOptions;
import com.google.android.gms.cast.LaunchOptions;
import java.util.ArrayList;
import java.util.List;
public class CastOptions extends AutoSafeParcelable {
@SafeParceled(1)
@Field(1)
private int versionCode = 1;
@SafeParceled(2)
@Field(2)
private String receiverApplicationId;
@SafeParceled(3)
@Field(3)
private ArrayList<String> supportedNamespaces;
@SafeParceled(4)
@Field(4)
private boolean stopReceiverApplicationWhenEndingSession;
@SafeParceled(5)
@Field(5)
private LaunchOptions launchOptions;
@SafeParceled(6)
@Field(6)
private boolean resumeSavedSession;
@SafeParceled(7)
@Field(7)
private CastMediaOptions castMediaOptions;
@SafeParceled(8)
@Field(8)
private boolean enableReconnectionService;
@SafeParceled(9)
@Field(9)
private double volumeDeltaBeforeIceCreamSandwich;
public String getReceiverApplicationId() {
@ -60,5 +53,5 @@ public class CastOptions extends AutoSafeParcelable {
return this.launchOptions;
}
public static Creator<CastOptions> CREATOR = new AutoCreator<>(CastOptions.class);
public static Creator<CastOptions> CREATOR = new AutoCreator<CastOptions>(CastOptions.class);
}

View File

@ -21,16 +21,20 @@ import org.microg.safeparcel.SafeParceled;
public class CastMediaOptions extends AutoSafeParcelable {
@SafeParceled(1)
@Field(1)
private int versionCode = 1;
@SafeParceled(2)
@Field(2)
public String mediaIntentReceiverClassName;
@SafeParceled(3)
@Field(3)
public String expandedControllerActivityClassName;
@SafeParceled(4)
@Field(4)
public IImagePicker imagePicker;
@SafeParceled(5)
@Field(5)
public NotificationOptions notificationOptions;
@Field(6)
public boolean bool6;
@Field(7)
public boolean bool7;
public static Creator<CastMediaOptions> CREATOR = new AutoCreator<>(CastMediaOptions.class);
public static Creator<CastMediaOptions> CREATOR = new AutoCreator<CastMediaOptions>(CastMediaOptions.class);
}

View File

@ -25,72 +25,72 @@ import org.microg.safeparcel.SafeParceled;
public class NotificationOptions extends AutoSafeParcelable {
@SafeParceled(1)
@Field(1)
private int versionCode = 1;
@SafeParceled(2)
@Field(2)
public List<String> actions;
@SafeParceled(3)
@Field(3)
public int[] compatActionIndices;
@SafeParceled(4)
@Field(4)
public long skipStepMs;
@SafeParceled(5)
@Field(5)
public String targetActivityClassName;
@SafeParceled(6)
@Field(6)
public int getSmallIconDrawableResId;
@SafeParceled(7)
@Field(7)
public int getStopLiveStreamDrawableResId;
@SafeParceled(8)
@Field(8)
public int getPauseDrawableResId;
@SafeParceled(9)
@Field(9)
public int getPlayDrawableResId;
@SafeParceled(10)
@Field(10)
public int getSkipNextDrawableResId;
@SafeParceled(11)
@Field(11)
public int getSkipPrevDrawableResId;
@SafeParceled(12)
@Field(12)
public int getForwardDrawableResId;
@SafeParceled(13)
@Field(13)
public int getForward10DrawableResId;
@SafeParceled(14)
@Field(14)
public int getForward30DrawableResId;
@SafeParceled(15)
@Field(15)
public int getRewindDrawableResId;
@SafeParceled(16)
@Field(16)
public int getRewind10DrawableResId;
@SafeParceled(17)
@Field(17)
public int getRewind30DrawableResId;
@SafeParceled(18)
@Field(18)
public int getDisconnectDrawableResId;
@SafeParceled(19)
@Field(19)
public int intvar19;
@SafeParceled(20)
@Field(20)
public int getCastingToDeviceStringResId;
@SafeParceled(21)
@Field(21)
public int getStopLiveStreamTitleResId;
@SafeParceled(22)
@Field(22)
public int intvar22;
@SafeParceled(23)
@Field(23)
public int intvar23;
@SafeParceled(24)
@Field(24)
public int intvar24;
@SafeParceled(25)
@Field(25)
public int intvar25;
@SafeParceled(26)
@Field(26)
public int intvar26;
@SafeParceled(27)
@Field(27)
public int intvar27;
@SafeParceled(28)
@Field(28)
public int intvar28;
@SafeParceled(29)
@Field(29)
public int intvar29;
@SafeParceled(30)
@Field(30)
public int intvar30;
@SafeParceled(31)
@Field(31)
public int intvar31;
@SafeParceled(32)
@Field(32)
public int intvar32;
@SafeParceled(33)
@Field(33)
public INotificationActionsProvider notificationActionsProvider;
public static Creator<NotificationOptions> CREATOR = new AutoCreator<>(NotificationOptions.class);
public static Creator<NotificationOptions> CREATOR = new AutoCreator<NotificationOptions>(NotificationOptions.class);
}

View File

@ -76,6 +76,7 @@
tools:ignore="ProtectedPermissions" />
<application
android:forceQueryable="true"
android:allowBackup="false"
android:extractNativeLibs="true"
android:icon="@mipmap/ic_launcher"
@ -115,8 +116,15 @@
<receiver android:name="org.microg.gms.checkin.TriggerReceiver">
<intent-filter>
<action android:name="android.server.checkin.CHECKIN" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.AIRPLANE_MODE" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.conn.BACKGROUND_DATA_SETTING_CHANGED" />
<action android:name="android.server.checkin.CHECKIN" />
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_RESTARTED" />
</intent-filter>
<intent-filter>
<action android:name="com.mgoogle.android.c2dm.intent.RECEIVE" />
@ -331,13 +339,21 @@
</activity>
<!-- Other -->
<!-- Phenotype -->
<provider
android:name="org.microg.gms.phenotype.ConfigurationProvider"
android:authorities="com.mgoogle.android.gms.phenotype"
android:exported="true" />
<service android:name="org.microg.gms.phenotype.PhenotypeService">
<intent-filter>
<action android:name="com.mgoogle.android.gms.phenotype.service.START" />
</intent-filter>
</service>
<!-- Other -->
<service
android:name="org.microg.gms.measurement.MeasurementBrokerService"
android:exported="true">
@ -384,7 +400,6 @@
<action android:name="com.google.android.gms.cast_mirroring.service.START" />
<action android:name="com.google.android.gms.common.service.START" />
<action android:name="com.google.android.contextmanager.service.ContextManagerService.START" />
<action android:name="com.mgoogle.android.gms.phenotype.service.START" />
<action android:name="com.google.android.gms.auth.api.credentials.service.START" />
<action android:name="com.google.android.gms.gass.START" />
</intent-filter>

View File

@ -22,6 +22,8 @@ import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import androidx.lifecycle.LifecycleService;
import com.google.android.gms.common.internal.GetServiceRequest;
import com.google.android.gms.common.internal.IGmsCallbacks;
import com.google.android.gms.common.internal.IGmsServiceBroker;
@ -31,7 +33,7 @@ import org.microg.gms.common.GmsService;
import java.util.Arrays;
import java.util.EnumSet;
public abstract class BaseService extends Service {
public abstract class BaseService extends LifecycleService {
private final IGmsServiceBroker broker;
protected final String TAG;
@ -55,6 +57,7 @@ public abstract class BaseService extends Service {
@Override
public IBinder onBind(Intent intent) {
super.onBind(intent);
Log.d(TAG, "onBind: " + intent);
return broker.asBinder();
}

View File

@ -18,7 +18,10 @@ package org.microg.gms.checkin;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.AlarmManager;
import android.app.IntentService;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
@ -35,6 +38,8 @@ import org.microg.gms.people.PeopleManager;
public class CheckinService extends IntentService {
private static final String TAG = "GmsCheckinSvc";
public static final long REGULAR_CHECKIN_INTERVAL = 12 * 60 * 60 * 1000; // 12 hours
public static final long BACKUP_CHECKIN_DELAY = 3 * 60 * 60 * 1000; // 3 hours
public static final String BIND_ACTION = "com.google.android.gms.checkin.BIND_TO_SERVICE";
public static final String EXTRA_FORCE_CHECKIN = "force";
public static final String EXTRA_CALLBACK_INTENT = "callback";
@ -73,6 +78,7 @@ public class CheckinService extends IntentService {
Log.w(TAG, e);
} finally {
WakefulBroadcastReceiver.completeWakefulIntent(intent);
schedule(this);
stopSelf();
}
}
@ -85,4 +91,10 @@ public class CheckinService extends IntentService {
return super.onBind(intent);
}
}
static void schedule(Context context) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getService(context, TriggerReceiver.class.getName().hashCode(), new Intent(context, TriggerReceiver.class), PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC, Math.max(LastCheckinInfo.read(context).lastCheckin + REGULAR_CHECKIN_INTERVAL, System.currentTimeMillis() + BACKUP_CHECKIN_DELAY), pendingIntent);
}
}

View File

@ -27,10 +27,10 @@ import androidx.legacy.content.WakefulBroadcastReceiver;
import org.microg.gms.common.ForegroundServiceContext;
import static org.microg.gms.checkin.CheckinService.EXTRA_FORCE_CHECKIN;
import static org.microg.gms.checkin.CheckinService.REGULAR_CHECKIN_INTERVAL;
public class TriggerReceiver extends WakefulBroadcastReceiver {
private static final String TAG = "GmsCheckinTrigger";
private static final long REGULAR_CHECKIN_INTERVAL = 12 * 60 * 60 * 1000; // 12 hours
@Override
public void onReceive(Context context, Intent intent) {
@ -41,6 +41,7 @@ public class TriggerReceiver extends WakefulBroadcastReceiver {
if (CheckinPrefs.get(context).isEnabled() || force) {
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction()) &&
LastCheckinInfo.read(context).lastCheckin > System.currentTimeMillis() - REGULAR_CHECKIN_INTERVAL) {
CheckinService.schedule(context);
return;
}

View File

@ -0,0 +1,45 @@
/*
* SPDX-FileCopyrightText: 2020, microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/
package org.microg.gms.phenotype
import android.os.Parcel
import android.util.Log
import com.google.android.gms.common.api.Status
import com.google.android.gms.common.internal.GetServiceRequest
import com.google.android.gms.common.internal.IGmsCallbacks
import com.google.android.gms.phenotype.Configurations
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
private const val TAG = "GmsPhenotypeSvc"
class PhenotypeService : BaseService(TAG, GmsService.PHENOTYPE) {
override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest?, service: GmsService?) {
callback.onPostInitComplete(0, PhenotypeServiceImpl().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?.contentToString()}, $p4)")
callbacks.onRegister(Status.SUCCESS)
}
override fun getConfigurationSnapshot(callbacks: IPhenotypeCallbacks, p1: String?, p2: String?, p3: String?) {
Log.d(TAG, "getConfigurationSnapshot($p1, $p2, $p3)")
callbacks.onConfigurations(Status.SUCCESS, Configurations().apply {
field4 = emptyArray()
})
}
override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean {
if (super.onTransact(code, data, reply, flags)) return true
Log.d(TAG, "onTransact [unknown]: $code, $data, $flags")
return false
}
}