diff --git a/.gitignore b/.gitignore index 25ed36579e..08f6e53da2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,8 @@ build/ user.gradle local.properties .directory +bin/ +.project +.classpath +.output/ +.settings/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000..fff35a132d --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,37 @@ +image: "registry.gitlab.e.foundation:5000/e/apps/docker-android-apps-cicd:latest" + +stages: +- build + +variables: + GIT_SUBMODULE_STRATEGY: recursive + +before_script: +- if [ -d "/srv/userscripts" ]; then cp -R userscripts/* /srv/userscripts ; fi +- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' +- eval $(ssh-agent -s) +- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null +- mkdir -p ~/.ssh +- chmod 700 ~/.ssh +- echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts +- chmod 644 ~/.ssh/known_hosts +- export GRADLE_USER_HOME=$(pwd)/.gradle +- chmod +x ./gradlew + +cache: + key: ${CI_PROJECT_ID} + paths: + - .gradle/ + +build: + stage: build + script: + - echo sdk.dir $ANDROID_HOME > local.properties + - echo mapbox.key $MAPBOX_KEY >> local.properties + - echo mapbox.enabled true >> local.properties + - export TERM=dumb + - export JAVA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -Xmx4096m" + - ./gradlew assemble + artifacts: + paths: + - play-services-core/build/outputs/apk/ diff --git a/.gitmodules b/.gitmodules index 53ff74d8b6..7baca207ed 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,20 @@ [submodule "extern/UnifiedNlp"] path = extern/UnifiedNlp - url = https://github.com/microg/android_packages_apps_UnifiedNlp.git + url = https://gitlab.e.foundation/e/apps/android_packages_apps_UnifiedNlp + branch = dev [submodule "extern/GmsApi"] path = extern/GmsApi - url = https://github.com/microg/android_external_GmsApi.git + url = https://gitlab.e.foundation/e/apps/GmsApi + branch = dev [submodule "extern/Wearable"] path = extern/Wearable - url = https://github.com/microg/android_external_Wearable.git + url = https://gitlab.e.foundation/e/apps/Wearable + branch = dev [submodule "extern/GmsLib"] path = extern/GmsLib - url = https://github.com/microg/android_external_GmsLib.git + url = https://gitlab.e.foundation/e/apps/GmsLib + branch = dev [submodule "extern/RemoteDroidGuard"] path = extern/RemoteDroidGuard - url = https://github.com/microg/android_packages_apps_RemoteDroidGuard.git + url = https://gitlab.e.foundation/e/apps/android_packages_apps_RemoteDroidGuard + branch = dev diff --git a/extern/GmsApi b/extern/GmsApi index 2a43448e49..c6448e7c55 160000 --- a/extern/GmsApi +++ b/extern/GmsApi @@ -1 +1 @@ -Subproject commit 2a43448e49dc0aec0d6c53c8a27dd58245fdaba6 +Subproject commit c6448e7c55ff95c49a6affe2e514ef96b0a30bf3 diff --git a/extern/GmsLib b/extern/GmsLib index 15cd4491bc..614e111fa0 160000 --- a/extern/GmsLib +++ b/extern/GmsLib @@ -1 +1 @@ -Subproject commit 15cd4491bcca57d627796b35b69bdf8c97564792 +Subproject commit 614e111fa02b9aeb195879735ababe869074617c diff --git a/extern/RemoteDroidGuard b/extern/RemoteDroidGuard index 47073dd7a2..0c5c944a54 160000 --- a/extern/RemoteDroidGuard +++ b/extern/RemoteDroidGuard @@ -1 +1 @@ -Subproject commit 47073dd7a2a039593fe556af8f9f33e325febfa7 +Subproject commit 0c5c944a54962a4c60cffa44785a36d7251df635 diff --git a/extern/UnifiedNlp b/extern/UnifiedNlp index 82479b79c7..5516c49cb4 160000 --- a/extern/UnifiedNlp +++ b/extern/UnifiedNlp @@ -1 +1 @@ -Subproject commit 82479b79c76353f532e0c6edd0d1dee8d49c48f4 +Subproject commit 5516c49cb40d5008bd76a0818bb856da1b134f05 diff --git a/firebase-dynamic-links b/firebase-dynamic-links new file mode 120000 index 0000000000..2b9de59721 --- /dev/null +++ b/firebase-dynamic-links @@ -0,0 +1 @@ +extern/GmsLib/firebase-dynamic-links \ No newline at end of file diff --git a/firebase-dynamic-links-api b/firebase-dynamic-links-api new file mode 120000 index 0000000000..30d4bb017b --- /dev/null +++ b/firebase-dynamic-links-api @@ -0,0 +1 @@ +extern/GmsApi/firebase-dynamic-links-api \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000000..e08c81d314 --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xms512m -Xmx4096m diff --git a/play-services-appinvite b/play-services-appinvite new file mode 120000 index 0000000000..3147eb928f --- /dev/null +++ b/play-services-appinvite @@ -0,0 +1 @@ +extern/GmsLib/play-services-appinvite \ No newline at end of file diff --git a/play-services-appinvite-api b/play-services-appinvite-api new file mode 120000 index 0000000000..e6b639d2f5 --- /dev/null +++ b/play-services-appinvite-api @@ -0,0 +1 @@ +extern/GmsApi/play-services-appinvite-api/ \ No newline at end of file diff --git a/play-services-core/build.gradle b/play-services-core/build.gradle index 0aef5a42d7..0a16720d9b 100644 --- a/play-services-core/build.gradle +++ b/play-services-core/build.gradle @@ -45,8 +45,10 @@ dependencies { implementation project(':play-services-api') implementation project(':play-services-cast-api') implementation project(':play-services-wearable') + implementation project(':play-services-appinvite') implementation project(':unifiednlp-base') implementation project(':wearable-lib') + implementation project(':firebase-dynamic-links') implementation project(':remote-droid-guard-lib') if (useMapbox()) { @@ -101,6 +103,10 @@ android { } } + lintOptions { + abortOnError false + } + lintOptions { disable 'MissingTranslation', 'InvalidPackage', 'BatteryLife', 'ImpliedQuantity', 'MissingQuantity', 'InvalidWakeLockTag' } diff --git a/play-services-core/src/main/AndroidManifest.xml b/play-services-core/src/main/AndroidManifest.xml index fa15b34636..e15987b44c 100644 --- a/play-services-core/src/main/AndroidManifest.xml +++ b/play-services-core/src/main/AndroidManifest.xml @@ -442,7 +442,7 @@ - - + --> + + + + + + + + + + + + @@ -683,6 +695,8 @@ + + diff --git a/play-services-core/src/main/java/com/google/android/gms/chimera/container/DynamiteLoaderImpl.java b/play-services-core/src/main/java/com/google/android/gms/chimera/container/DynamiteLoaderImpl.java index 43bd5cafed..a841984c76 100644 --- a/play-services-core/src/main/java/com/google/android/gms/chimera/container/DynamiteLoaderImpl.java +++ b/play-services-core/src/main/java/com/google/android/gms/chimera/container/DynamiteLoaderImpl.java @@ -66,6 +66,10 @@ public int getModuleVersion2(IObjectWrapper context, String moduleId, boolean up Log.d(TAG, "returning temp fix module version for " + moduleId + ". Cast API wil not be functional!"); return 1; } + if (moduleId.equals("com.google.android.gms.maps_dynamite")) { + Log.d(TAG, "returning v1 for maps"); + return 1; + } Log.d(TAG, "unimplemented Method: getModuleVersion for " + moduleId); return 0; } diff --git a/play-services-core/src/main/java/com/google/android/gms/common/security/ProviderInstallerImpl.java b/play-services-core/src/main/java/com/google/android/gms/common/security/ProviderInstallerImpl.java index 6d702279f1..cb8d856029 100644 --- a/play-services-core/src/main/java/com/google/android/gms/common/security/ProviderInstallerImpl.java +++ b/play-services-core/src/main/java/com/google/android/gms/common/security/ProviderInstallerImpl.java @@ -46,6 +46,8 @@ public class ProviderInstallerImpl { private static final String TAG = "GmsProviderInstaller"; + + //private static final List DISABLED = Collections.singletonList("com.discord"); private static final List DISABLED = Collections.unmodifiableList(Arrays.asList("com.discord", "com.bankid.bus")); public static void insertProvider(Context context) { diff --git a/play-services-core/src/main/java/org/microg/gms/appinvite/AppInviteService.java b/play-services-core/src/main/java/org/microg/gms/appinvite/AppInviteService.java new file mode 100644 index 0000000000..8270f78ab4 --- /dev/null +++ b/play-services-core/src/main/java/org/microg/gms/appinvite/AppInviteService.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2019 e Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.microg.gms.appinvite; + +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; +import android.util.Log; +import android.os.RemoteException; + +import com.google.android.gms.common.api.CommonStatusCodes; +import com.google.android.gms.common.internal.GetServiceRequest; +import com.google.android.gms.common.internal.IGmsCallbacks; + +import org.microg.gms.BaseService; +import org.microg.gms.common.GmsService; +import org.microg.gms.common.PackageUtils; + +import org.microg.gms.appinvite.AppInviteServiceImpl; + +public class AppInviteService extends BaseService { + private static final String TAG = "GmsAppInviteService"; + + public AppInviteService() { + super("GmsAppInviteSvc", GmsService.APP_INVITE); + } + + @Override + public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException { + PackageUtils.getAndCheckCallingPackage(this, request.packageName); + Log.d(TAG, "callb: " + callback + " ; req: " + request + " ; serv: " + service); + + callback.onPostInitComplete(0, new AppInviteServiceImpl(this, request.packageName, request.extras), null); + } +} diff --git a/play-services-core/src/main/java/org/microg/gms/appinvite/AppInviteServiceImpl.java b/play-services-core/src/main/java/org/microg/gms/appinvite/AppInviteServiceImpl.java new file mode 100644 index 0000000000..e3bfe6d34c --- /dev/null +++ b/play-services-core/src/main/java/org/microg/gms/appinvite/AppInviteServiceImpl.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2019 e Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.microg.gms.appinvite; + +import android.os.Parcel; +import android.os.RemoteException; +import android.os.Bundle; +import android.app.Activity; +import android.util.Log; +import android.content.Context; +import android.content.Intent; + +import com.google.android.gms.common.api.Status; + +import com.google.android.gms.dynamic.IObjectWrapper; +import com.google.android.gms.dynamic.ObjectWrapper; + +import com.google.android.gms.appinvite.internal.IAppInviteService; +import com.google.android.gms.appinvite.internal.IAppInviteCallbacks; + + +public class AppInviteServiceImpl extends IAppInviteService.Stub { + private static final String TAG = "GmsAppInviteServImpl"; + + public AppInviteServiceImpl(Context context, String packageName, Bundle extras) { + } + + + @Override + public void updateInvitationOnInstall(IAppInviteCallbacks callback, String invitationId) throws RemoteException { + callback.onStatus(Status.SUCCESS); + } + + @Override + public void convertInvitation(IAppInviteCallbacks callback, String invitationId) throws RemoteException { + callback.onStatus(Status.SUCCESS); + } + + @Override + public void getInvitation(IAppInviteCallbacks callback) throws RemoteException { + callback.onStatusIntent(new Status(Activity.RESULT_CANCELED), null); + } + + + @Override + public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException { + if (super.onTransact(code, data, reply, flags)) { + return true; + } + + Log.d(TAG, "onTransact [unknown]: " + code + ", " + data + ", " + flags); + return false; + } +} diff --git a/play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java b/play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java index 7a7bfacf5c..a538c55ffa 100644 --- a/play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java +++ b/play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java @@ -55,6 +55,7 @@ import org.microg.gms.checkin.LastCheckinInfo; import org.microg.gms.common.HttpFormClient; import org.microg.gms.common.Utils; +import org.microg.gms.gcm.McsService; import org.microg.gms.people.PeopleManager; import java.io.IOException; @@ -357,6 +358,7 @@ public void onException(Exception exception) { private boolean checkin(boolean force) { try { CheckinManager.checkin(LoginActivity.this, force); + McsService.scheduleReconnect(this); return true; } catch (IOException e) { Log.w(TAG, "Checkin failed", e); diff --git a/play-services-core/src/main/java/org/microg/gms/checkin/CheckinManager.java b/play-services-core/src/main/java/org/microg/gms/checkin/CheckinManager.java index 4b67bdd564..b8cfc399cc 100644 --- a/play-services-core/src/main/java/org/microg/gms/checkin/CheckinManager.java +++ b/play-services-core/src/main/java/org/microg/gms/checkin/CheckinManager.java @@ -43,7 +43,7 @@ public static synchronized LastCheckinInfo checkin(Context context, boolean forc LastCheckinInfo info = LastCheckinInfo.read(context); if (!force && info.lastCheckin > System.currentTimeMillis() - MIN_CHECKIN_INTERVAL) return null; - if (!PreferenceManager.getDefaultSharedPreferences(context).getBoolean(PREF_ENABLE_CHECKIN, false)) + if (!PreferenceManager.getDefaultSharedPreferences(context).getBoolean(PREF_ENABLE_CHECKIN, true)) return null; List accounts = new ArrayList(); AccountManager accountManager = AccountManager.get(context); diff --git a/play-services-core/src/main/java/org/microg/gms/checkin/CheckinService.java b/play-services-core/src/main/java/org/microg/gms/checkin/CheckinService.java index 009d9d44a0..68910851aa 100644 --- a/play-services-core/src/main/java/org/microg/gms/checkin/CheckinService.java +++ b/play-services-core/src/main/java/org/microg/gms/checkin/CheckinService.java @@ -57,7 +57,7 @@ public CheckinService() { protected void onHandleIntent(Intent intent) { try { ForegroundServiceContext.completeForegroundService(this, intent, TAG); - if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean(PREF_ENABLE_CHECKIN, false)) { + if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean(PREF_ENABLE_CHECKIN, true)) { LastCheckinInfo info = CheckinManager.checkin(this, intent.getBooleanExtra(EXTRA_FORCE_CHECKIN, false)); if (info != null) { Log.d(TAG, "Checked in as " + Long.toHexString(info.androidId)); diff --git a/play-services-core/src/main/java/org/microg/gms/checkin/TriggerReceiver.java b/play-services-core/src/main/java/org/microg/gms/checkin/TriggerReceiver.java index 08df8cdb91..cdcc302bd3 100644 --- a/play-services-core/src/main/java/org/microg/gms/checkin/TriggerReceiver.java +++ b/play-services-core/src/main/java/org/microg/gms/checkin/TriggerReceiver.java @@ -39,7 +39,7 @@ public void onReceive(Context context, Intent intent) { boolean force = "android.provider.Telephony.SECRET_CODE".equals(intent.getAction()); ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean(PREF_ENABLE_CHECKIN, false) || force) { + if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean(PREF_ENABLE_CHECKIN, true) || force) { if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction()) && LastCheckinInfo.read(context).lastCheckin > System.currentTimeMillis() - REGULAR_CHECKIN_INTERVAL) { return; diff --git a/play-services-core/src/main/java/org/microg/gms/firebase/dynamiclinks/DynamicLinksService.java b/play-services-core/src/main/java/org/microg/gms/firebase/dynamiclinks/DynamicLinksService.java new file mode 100644 index 0000000000..bb87a6af73 --- /dev/null +++ b/play-services-core/src/main/java/org/microg/gms/firebase/dynamiclinks/DynamicLinksService.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2019 e Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.microg.gms.firebase.dynamiclinks; + +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; +import android.util.Log; +import android.os.RemoteException; + +import com.google.android.gms.common.api.CommonStatusCodes; +import com.google.android.gms.common.internal.GetServiceRequest; +import com.google.android.gms.common.internal.IGmsCallbacks; + +import org.microg.gms.BaseService; +import org.microg.gms.common.GmsService; +import org.microg.gms.common.PackageUtils; + +import org.microg.gms.firebase.dynamiclinks.DynamicLinksServiceImpl; + +public class DynamicLinksService extends BaseService { + private static final String TAG = "GmsFrbDynamicLinksService"; + + public DynamicLinksService() { + super("GmsFrbDynamicLinksSvc", GmsService.FRB_DYNAMIC_LINKS); + } + + @Override + public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException { + PackageUtils.getAndCheckCallingPackage(this, request.packageName); + Log.d(TAG, "callb: " + callback + " ; req: " + request + " ; serv: " + service); + + callback.onPostInitComplete(0, new DynamicLinksServiceImpl(this, request.packageName, request.extras), null); + } +} diff --git a/play-services-core/src/main/java/org/microg/gms/firebase/dynamiclinks/DynamicLinksServiceImpl.java b/play-services-core/src/main/java/org/microg/gms/firebase/dynamiclinks/DynamicLinksServiceImpl.java new file mode 100644 index 0000000000..9db0f8adac --- /dev/null +++ b/play-services-core/src/main/java/org/microg/gms/firebase/dynamiclinks/DynamicLinksServiceImpl.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2019 e Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.microg.gms.firebase.dynamiclinks; + +import android.os.Parcel; +import android.os.RemoteException; +import android.os.Bundle; +import android.util.Log; +import android.content.Context; +import android.content.Intent; + +import com.google.android.gms.common.api.Status; +import com.google.android.gms.common.api.CommonStatusCodes; + +import com.google.firebase.dynamiclinks.internal.IDynamicLinksService; +import com.google.firebase.dynamiclinks.internal.IDynamicLinksCallbacks; +import com.google.firebase.dynamiclinks.internal.DynamicLinkData; +import com.google.firebase.dynamiclinks.internal.ShortDynamicLink; + + +public class DynamicLinksServiceImpl extends IDynamicLinksService.Stub { + private static final String TAG = "GmsFrbDynamicLinksServImpl"; + + public DynamicLinksServiceImpl(Context context, String packageName, Bundle extras) { + } + + + @Override + public void getInitialLink(IDynamicLinksCallbacks callback, String var2) throws RemoteException { + callback.onStatusDynamicLinkData(Status.SUCCESS, new DynamicLinkData()); + } + + + @Override + public void func2(IDynamicLinksCallbacks callback, Bundle var2) throws RemoteException { + Log.d(TAG, "func2: " + callback + ", " + var2); + callback.onStatusShortDynamicLink(Status.SUCCESS, new ShortDynamicLink()); + } + + + @Override + public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException { + if (super.onTransact(code, data, reply, flags)) { + return true; + } + + Log.d(TAG, "onTransact [unknown]: " + code + ", " + data + ", " + flags); + return false; + } +} diff --git a/play-services-core/src/main/java/org/microg/gms/gcm/GcmPrefs.java b/play-services-core/src/main/java/org/microg/gms/gcm/GcmPrefs.java index 30a9570349..cb1363651f 100644 --- a/play-services-core/src/main/java/org/microg/gms/gcm/GcmPrefs.java +++ b/play-services-core/src/main/java/org/microg/gms/gcm/GcmPrefs.java @@ -83,7 +83,7 @@ public void update() { gcmLogEnabled = defaultPreferences.getBoolean(PREF_FULL_LOG, true); lastPersistedId = defaultPreferences.getString(PREF_LAST_PERSISTENT_ID, ""); confirmNewApps = defaultPreferences.getBoolean(PREF_CONFIRM_NEW_APPS, false); - gcmEnabled = defaultPreferences.getBoolean(PREF_ENABLE_GCM, false); + gcmEnabled = defaultPreferences.getBoolean(PREF_ENABLE_GCM, true); networkMobile = Integer.parseInt(defaultPreferences.getString(PREF_NETWORK_MOBILE, "0")); networkWifi = Integer.parseInt(defaultPreferences.getString(PREF_NETWORK_WIFI, "0")); diff --git a/play-services-core/src/main/java/org/microg/gms/snet/SafetyNetPrefs.java b/play-services-core/src/main/java/org/microg/gms/snet/SafetyNetPrefs.java index a64757916f..e717e1dc9c 100644 --- a/play-services-core/src/main/java/org/microg/gms/snet/SafetyNetPrefs.java +++ b/play-services-core/src/main/java/org/microg/gms/snet/SafetyNetPrefs.java @@ -56,8 +56,8 @@ private SafetyNetPrefs(Context context) { } public void update() { - disabled = defaultPreferences.getBoolean(PREF_SNET_DISABLED, true); - official = defaultPreferences.getBoolean(PREF_SNET_OFFICIAL, false); + disabled = defaultPreferences.getBoolean(PREF_SNET_DISABLED, false); + official = defaultPreferences.getBoolean(PREF_SNET_OFFICIAL, true); selfSigned = defaultPreferences.getBoolean(PREF_SNET_SELF_SIGNED, false); thirdParty = defaultPreferences.getBoolean(PREF_SNET_THIRD_PARTY, false); customUrl = defaultPreferences.getString(PREF_SNET_CUSTOM_URL, null); diff --git a/play-services-core/src/main/java/org/microg/gms/ui/CheckinFragment.java b/play-services-core/src/main/java/org/microg/gms/ui/CheckinFragment.java index 24b662e7be..0cb277c540 100644 --- a/play-services-core/src/main/java/org/microg/gms/ui/CheckinFragment.java +++ b/play-services-core/src/main/java/org/microg/gms/ui/CheckinFragment.java @@ -37,7 +37,7 @@ public CheckinFragment() { public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - switchBar.setChecked(PreferenceManager.getDefaultSharedPreferences(getContext()).getBoolean(PREF_ENABLE_CHECKIN, false)); + switchBar.setChecked(PreferenceManager.getDefaultSharedPreferences(getContext()).getBoolean(PREF_ENABLE_CHECKIN, true)); } @Override diff --git a/play-services-core/src/main/java/org/microg/gms/ui/SettingsActivity.java b/play-services-core/src/main/java/org/microg/gms/ui/SettingsActivity.java index 0ff66731b2..27b5548325 100644 --- a/play-services-core/src/main/java/org/microg/gms/ui/SettingsActivity.java +++ b/play-services-core/src/main/java/org/microg/gms/ui/SettingsActivity.java @@ -104,7 +104,7 @@ private void updateDetails() { Preferences.splitBackendString(unifiedNlPrefs.getGeocoderBackends()).length; findPreference(PREF_UNIFIEDNLP).setSummary(getResources().getQuantityString(R.plurals.pref_unifiednlp_summary, backendCount, backendCount)); - boolean checkinEnabled = PreferenceManager.getDefaultSharedPreferences(getContext()).getBoolean(PREF_ENABLE_CHECKIN, false); + boolean checkinEnabled = PreferenceManager.getDefaultSharedPreferences(getContext()).getBoolean(PREF_ENABLE_CHECKIN, true); findPreference(PREF_CHECKIN).setSummary(checkinEnabled ? R.string.service_status_enabled : R.string.service_status_disabled); } } diff --git a/play-services-core/src/main/res/values-fr/strings.xml b/play-services-core/src/main/res/values-fr/strings.xml index 3a9d5cf938..84453c231e 100644 --- a/play-services-core/src/main/res/values-fr/strings.xml +++ b/play-services-core/src/main/res/values-fr/strings.xml @@ -1,4 +1,5 @@ - - - + --> microG Services Core Paramètres de microG - Juste une seconde… Google - En poursuivant, vous autorisez cette application et Google à utiliser vos informations en accord avec leurs termes de service et politiques de vie privée respectifs. + En poursuivant, vous autorisez cette application et Google à utiliser vos informations en accord avec leurs conditions d\'utilisation et politiques de confidentialité respectifs. %1$s voudrait : %1$s voudrait utiliser : - Gestionnaire du compte Google + Gestionnaire de compte Google Désolé… "Vous n’avez pas de connexion réseau. @@ -38,55 +36,43 @@ Ceci peut prendre plusieurs minutes." Refuser Authentification requise %1$s requiert votre autorisation pour accéder à votre compte Google. - - écouter les diffusions de status internes + écouter les diffusions de statut internes écouter les messages C2DM envoyer des messages C2DM aux autres applications échanger des messages et recevoir des notifications de synchronisation de la part des serveurs de Google Accès étendu aux services Google - Enregistrement du terminal auprès de Google Google Cloud Messaging Google SafetyNet - Désactivé Activé Automatique Manuel - Avancé Aucun - Google Play Jeux %1$s voudrait utiliser Play Jeux Pour utiliser Play Jeux il est requis d’installer l’application Google Play Jeux. L’application peut poursuivre sans Play Jeux, mais il est possible qu’elle se comporte de manière imprévue. - Sélectionner un emplacement La sélection d’emplacement n’est pas encore disponible. Sélectionner cette position - Lieux environnants. + Lieux environnants (%1$.7f, %2$.7f) - - microG Services Core: La permission %1$s est manquante. - + Self check Réseau mobile Wi-Fi - Roaming + Itinérance Autres réseaux - - Support de l’usurpation de signature Paquets installés Système - Le système supporte l’usurpation de signature : Votre ROM ne supporte pas nativement l’usurpation de signature. Vous pouvez néanmoins utiliser Xposed ou d’autres mécanismes pour usurper les signatures. Merci de consulter la documentation sur les ROMs supportant l’usurpation de signature et comment utiliser microG sur les autres. Le système autorise l’usurpation de signature : C’est une indication forte que la ROM supporte l’usurpation de signature mais que celle-ci requiert une action supplémentaire pour être activée. Merci de consulter la documentation sur les éventuelles étapes nécessaires. Le système usurpe la signature : Merci de consulter la documentation sur les éventuelles étapes nécessaires. - Play Services (GmsCore) Play Store (Phonesky) Services Framework (GSF) @@ -94,12 +80,9 @@ Ceci peut prendre plusieurs minutes." Installez l’application %1$s ou tout autre compatible. Merci de consulter la documentation pour obtenir la liste des applications compatibles. %1$s dispose de la bonne signature : Soit l’application %1$s installée n’est pas compatible, soit l’usurpation de signature n’est pas activée pour celle-ci. Merci de consulter la documentation sur les applications et ROMs compatibles. - Optimisations de la batterie ignorées : Appuyez ici pour désactiver les optimisations de la batterie. Des applications peuvent mal se comporter si vous ne le faites pas. - - À propos Composants Configuration @@ -107,24 +90,18 @@ Ceci peut prendre plusieurs minutes." Service de localisation Mode d’opération Services - Test - + Tester Optimisations de la batterie activées Vous avez activé Google Cloud Messaging mais l’optimisation de la batterie est activée pour microG Services Core. Afin de recevoir les notifications push vous devriez désactiver les optimisations de la batterie. - Désactiver les optimisations de la batterie + Ignorer les optimisations batterie Autorisations manquantes - Préférences du compte Informations personnelles & vie privée Connexion & sécurité - Faire confiance à Google pour les autorisations des applications Si désactivé, l’utilisateur est interrogé avant que la demande d’autorisation d’une application soit envoyée à Google. Certaines applications échoueront à utiliser le compte Google si ceci est désactivé. - - Enregistre votre terminal auprès des services Google et crée un identifiant unique. microG retire les identifiants autres que le nom de votre compte Google des informations d’enregistrement. - + Enregistre votre terminal auprès des services Google et crée un identifiant unique. microG retire les éléments identifiants autres que le nom de votre compte Google des informations d’enregistrement. Plus - Google Cloud Messaging est un fournisseur de notifications push utilisé par beaucoup d’applications tierces. Pour l’utiliser vous devez activer l’enregistrement du terminal. Intervalle des signaux de présence Cloud Messaging L’intervalle en secondes auquel le système signale sa présence aux serveurs de Google. Augmenter ce nombre réduira la consommation de batterie mais peu induire un délai dans la réception des messages push.\nDéprécié, sera remplacé dans une prochaine version. @@ -133,10 +110,8 @@ Ceci peut prendre plusieurs minutes." Confirmation pour les nouvelles applications Demander avant d’enregistrer une nouvelle application auprès de Google Cloud Messaging Intervalle de ping : %1$s - À propos de microG Services Core - Informations de version et librairies utilisées - + Informations de version et bibliothèques utilisées Erreur lors du désenregistrement Cette application n’est plus installée Désenregistrer @@ -145,25 +120,34 @@ Ceci peut prendre plusieurs minutes." Dernier message : %1$s Enregistrée Enregistrée depuis : %1$s - Désenregistrer %1$s? + Self check Certaines applications ne se réenregistrent pas et/ou ne fournisse pas de moyens de le faire manuellement. Ces applications peuvent ne plus fonctionner correctement après le désenregistrement.\nContinuer ? Vous avez empêché une application déjà enregistrée de s’enregistrer pour recevoir des notifications push.\nVoulez-vous la désenregistrer maintenant pour qu’elle ne reçoive plus de notifications push à l’avenir ? Messages : %1$d (%2$d octets) - Status actuel : Déconnecté - Status actuel : Connecté depuis %1$s - + Statut actuel : Déconnecté + Self check Google SafetyNet est un système de certification du terminal, assurant que celui-ci est correctement sécurisé et compatible avec Android CTS. Certaines applications utilisent SafetyNet pour des raisons de sécurité ou comme prérequis anti-altérations.\n\nmicroG GmsCore contient une implantation libre de SafetyNet, mais les serveurs officiels requièrent que les requêtes SafetyNet soient signées par le système propriétaire DroidGuard. Une version mise en « bac-à-sable » de DroidGuard est disponible dans une application séparée « DroidGuard Helper ». - Tester la certification SafetyNet - Utiliser les serveurs officiels Nécessite un système non-rooté et microG DroidGuard Helper installé Utiliser un serveur tiers - Les serveurs tiers peuvent être capable de répondre aux requêtes SafetyNet sans signature de DroidGuard. - URL serveur tiers + Les serveurs tiers peuvent être capable de répondre aux requêtes SafetyNet sans signature de DroidGuard + URL du serveur tiers URL complète du serveur tiers répondant aux requêtes de certification SafetyNet Utiliser un certificat auto-signé - Au lieu de requérir un serveur, signer les réponses SafetyNet localement en utilisant un certificat auto-signé. La plupart des applications refuseront d’utiliser des réponses auto-signées. - - + Au lieu de solliciter un serveur, signer les réponses SafetyNet localement en utilisant un certificat auto-signé. La plupart des applications refuseront d’utiliser des réponses auto-signées. + certificat auto-signé + serveur tiers + serveur officiel + Ajouter un compte Google + Compte + Si activé, toutes les applications de cet appareil pourront lire l\'adresse mail de vos comptes Google, sans avoir à en demander l\'autorisation. + Autoriser les applications à trouver les comptes + Votre appareil établit une connexion aux serveurs de Google pour vous y connecter. +\n +\nCeci peut prendre quelques secondes. + Se connecter + Self check + Configurer microG services Core. + \ No newline at end of file diff --git a/play-services-core/src/main/res/values-nl/strings.xml b/play-services-core/src/main/res/values-nl/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/play-services-core/src/main/res/values-nl/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/GoogleMap.kt b/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/GoogleMap.kt index b31472cb44..3025263b80 100644 --- a/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/GoogleMap.kt +++ b/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/GoogleMap.kt @@ -210,6 +210,11 @@ class GoogleMapImpl(private val context: Context, var options: GoogleMapOptions) override fun stopAnimation() = map?.cancelTransitions() ?: Unit + override fun setMapStyle(options: MapStyleOptions?): Boolean { + Log.d(TAG, "setMapStyle options: " + options?.getJson()) + return true + } + override fun setMinZoomPreference(minZoom: Float) { map?.setMinZoomPreference(minZoom.toDouble() - 1) } @@ -436,7 +441,7 @@ class GoogleMapImpl(private val context: Context, var options: GoogleMapOptions) } - override fun snapshot(callback: ISnapshotReadyCallback, bitmap: IObjectWrapper) { + override fun snapshot(callback: ISnapshotReadyCallback, bitmap: IObjectWrapper?) { Log.d(TAG, "unimplemented Method: snapshot") } @@ -678,23 +683,33 @@ class GoogleMapImpl(private val context: Context, var options: GoogleMapOptions) override fun onResume() = mapView?.onResume() ?: Unit override fun onPause() = mapView?.onPause() ?: Unit override fun onDestroy() { - Log.d(TAG, "destroy"); + Log.d(TAG, "destroy") circleManager?.onDestroy() circleManager = null + lineManager?.onDestroy() lineManager = null + fillManager?.onDestroy() fillManager = null + symbolManager?.onDestroy() symbolManager = null + pendingMarkers.clear() markers.clear() + BitmapDescriptorFactoryImpl.unregisterMap(map) + view.removeView(mapView) + // TODO can crash? mapView?.onDestroy() mapView = null - map = null + + // Don't make it null; this object is not deleted immediately, and it may want to access map.* stuff + //map = null + created = false initialized = false loaded = false diff --git a/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/MapView.kt b/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/MapView.kt index 572eba6f5e..9aa8bfd141 100644 --- a/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/MapView.kt +++ b/play-services-maps-core-mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/MapView.kt @@ -46,6 +46,7 @@ class MapViewImpl(private val context: Context, options: GoogleMapOptions?) : IM override fun onResume() = map?.onResume() ?: Unit override fun onPause() = map?.onPause() ?: Unit override fun onDestroy() { + Log.d(TAG, "destroy") map?.onDestroy() map = null } diff --git a/play-services-maps-core-vtm/src/main/java/org/microg/gms/maps/vtm/GoogleMapImpl.java b/play-services-maps-core-vtm/src/main/java/org/microg/gms/maps/vtm/GoogleMapImpl.java index b18189a4f1..f16d621f2a 100644 --- a/play-services-maps-core-vtm/src/main/java/org/microg/gms/maps/vtm/GoogleMapImpl.java +++ b/play-services-maps-core-vtm/src/main/java/org/microg/gms/maps/vtm/GoogleMapImpl.java @@ -59,6 +59,7 @@ import com.google.android.gms.maps.model.GroundOverlayOptions; import com.google.android.gms.maps.model.LatLngBounds; import com.google.android.gms.maps.model.MarkerOptions; +import com.google.android.gms.maps.model.MapStyleOptions; import com.google.android.gms.maps.model.PolygonOptions; import com.google.android.gms.maps.model.PolylineOptions; import com.google.android.gms.maps.model.TileOverlayOptions; @@ -210,6 +211,12 @@ public void onExitAmbient() throws RemoteException { } + @Override + public boolean setMapStyle(MapStyleOptions options) throws RemoteException { + Log.d(TAG, "unimplemented Method: setMapStyle"); + return true; + } + @Override public void setMinZoomPreference(float minZoom) throws RemoteException { Log.d(TAG, "unimplemented Method: setMinZoomPreference"); diff --git a/settings.gradle b/settings.gradle index cf94adba2e..c92e4a2bfc 100644 --- a/settings.gradle +++ b/settings.gradle @@ -12,10 +12,14 @@ include ':play-services-cast-framework-api' include ':play-services-iid-api' include ':play-services-location-api' include ':play-services-wearable-api' +include ':play-services-appinvite-api' +include ':firebase-dynamic-links-api' include ':play-services-base' include ':play-services-tasks' include ':play-services-wearable' +include ':play-services-appinvite' +include ':firebase-dynamic-links' include ':play-services-maps-core-mapbox' include ':play-services-maps-core-vtm'