mirror of https://github.com/YTVanced/VancedMicroG
Compare commits
21 Commits
v0.2.23.22
...
master
Author | SHA1 | Date |
---|---|---|
KevinX8 | 6814161c48 | |
KevinX8 | 309544601e | |
KevinX8 | 88f083616a | |
Oizaro | 895b6628fb | |
Oizaro | 61582b63d0 | |
David BrazSan | 77b560e620 | |
David BrazSan | 1899564f74 | |
David BrazSan | 7e5f008906 | |
KevinX8 | 379346614c | |
KevinX8 | cafd5ee4d4 | |
Lukas Novotny | 2b2581d131 | |
Oizaro | 6ca53537ee | |
KevinX8 | dc6426b9ff | |
Oizaro | 8a0361ea5e | |
KevinX8 | d3092c4579 | |
Oizaro | 56538dd003 | |
Oizaro | a33a62ac79 | |
Marvin W | 17b8371b48 | |
Marvin W | adf534d20a | |
Tim Hetkämper | 75aaeb1fc6 | |
Marvin W | 61957c33cd |
|
@ -5,7 +5,7 @@
|
|||
|
||||
microG GmsCore is a FLOSS (Free/Libre Open Source Software) framework to allow applications designed for Google Play Services to run on systems, where Play Services is not available.
|
||||
|
||||
This fork tweaks MicroG to be usable by applications that require Google authentication such as Youtube Vanced.
|
||||
This fork tweaks MicroG to be usable by applications that require Google authentication such as Vanced.
|
||||
|
||||
## Notable changes
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ buildscript {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.1.0'
|
||||
classpath 'com.android.tools.build:gradle:7.1.2'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
|
||||
classpath "com.squareup.wire:wire-gradle-plugin:3.2.2"
|
||||
}
|
||||
|
@ -24,8 +24,8 @@ allprojects {
|
|||
apply plugin: 'idea'
|
||||
|
||||
group = 'org.microg.gms'
|
||||
version = "0.2.23.220217"
|
||||
ext.appVersionCode = 220217001
|
||||
version = "0.2.24.220220"
|
||||
ext.appVersionCode = 220220001
|
||||
ext.isReleaseVersion = false
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#Wed Jan 26 02:00:21 CET 2022
|
||||
#Wed Feb 09 22:14:11 CET 2022
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
|
||||
distributionPath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
|
|
@ -27,7 +27,6 @@ import org.microg.safeparcel.AutoSafeParcelable;
|
|||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.CharBuffer;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.CharsetDecoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Arrays;
|
||||
|
|
|
@ -19,147 +19,38 @@ package org.microg.gms.common;
|
|||
public enum GmsService {
|
||||
UNKNOWN(-2),
|
||||
ANY(-1),
|
||||
GAMES(1, "com.google.android.gms.games.service.START"),
|
||||
PLUS(2, "com.google.android.gms.plus.service.START", "com.google.android.gms.plus.service.internal.START"),
|
||||
PANORAMA(3, "com.google.android.gms.panorama.service.START"),
|
||||
WALLET(4, "com.google.android.gms.wallet.service.BIND"),
|
||||
PEOPLE(5, "com.google.android.gms.people.service.START"),
|
||||
LOCATION(6),
|
||||
APPSTATE(7, "com.google.android.gms.appstate.service.START"),
|
||||
ADREQUEST(8, "com.google.android.gms.ads.service.START"),
|
||||
ACCOUNT(9, "com.google.android.gms.accounts.ACCOUNT_SERVICE"),
|
||||
CAST(10, "com.google.android.gms.cast.service.BIND_CAST_DEVICE_CONTROLLER_SERVICE"),
|
||||
DRIVE(11, "com.google.android.gms.drive.ApiService.START"),
|
||||
ADDRESS(12, "com.google.android.gms.identity.service.BIND"),
|
||||
CAR(13, "com.google.android.gms.car.service.START"),
|
||||
WEARABLE(14, "com.google.android.gms.wearable.BIND"),
|
||||
AUTH_PROXY(16, "com.google.android.gms.auth.service.START"),
|
||||
FITNESS(17, "com.google.android.gms.fitness.GoogleFitnessService.START"),
|
||||
REMINDERS(18, "com.google.android.gms.reminders.service.START"),
|
||||
LIGHTWEIGHT_INDEX(19, "com.google.android.gms.icing.LIGHTWEIGHT_INDEX_SERVICE"),
|
||||
DEVICE_CONNECTION(20, "com.google.android.gms.deviceconnection.service.START"),
|
||||
INDEX(21, "com.google.android.gms.icing.INDEX_SERVICE"),
|
||||
LOCATION_REPORTING(22, "com.google.android.gms.location.reporting.service.START", "com.google.android.location.reporting.service.START"),
|
||||
LOCATION_MANAGER(23, "com.google.android.location.internal.GoogleLocationManagerService.START"),
|
||||
PLAY_LOG(24, "com.google.android.gms.playlog.service.START"),
|
||||
LOCKBOX(26, "com.google.android.gms.lockbox.service.START"),
|
||||
CAST_MIRRORING(27, "com.google.android.gms.cast_mirroring.service.START"),
|
||||
NETWORK_QUALITY(28, "com.google.android.gms.mdm.services.START"),
|
||||
FEEDBACK(29, "com.google.android.gms.feedback.internal.IFeedbackService"),
|
||||
SEARCH_ADMINISTRATION(30),
|
||||
PHOTO_AUTO_BACKUP(31, "com.google.android.gms.photos.autobackup.service.START"),
|
||||
SEARCH_QUERIES(32),
|
||||
SEARCH_GLOBAL(33),
|
||||
UDC(35, "com.google.android.gms.udc.service.START"),
|
||||
SEARCH_CORPORA(36),
|
||||
DEVICE_MANAGER(37, "com.google.android.gms.mdm.services.DeviceManagerApiService.START"),
|
||||
PSEUDONYMOUS_ID(38, "com.google.android.gms.pseudonymous.service.START"),
|
||||
COMMON(39, "com.google.android.gms.common.service.START"),
|
||||
CLEARCUT_LOGGER(40, "com.google.android.gms.clearcut.service.START"),
|
||||
USAGE_REPORTING(41, "com.google.android.gms.usagereporting.service.START"),
|
||||
KIDS(42, "com.google.android.gms.kids.service.START"),
|
||||
DOWNLOAD(43, "com.google.android.gms.common.download.START"),
|
||||
SIGN_IN(44, "com.google.android.gms.signin.service.START"),
|
||||
SAFETY_NET_CLIENT(45, "com.google.android.gms.safetynet.service.START"),
|
||||
GSERVICES(46, "com.google.android.gms.ads.gservice.START"),
|
||||
CONTEXT_MANAGER(47, "com.google.android.contextmanager.service.ContextManagerService.START"),
|
||||
AUDIO_MODEM(48, "com.google.android.gms.audiomodem.service.AudioModemService.START"),
|
||||
NEARBY_SHARING(49, "com.google.android.gms.nearby.sharing.service.NearbySharingService.START"),
|
||||
LIGHTWEIGHT_NETWORK_QUALITY(50, "com.google.android.gms.herrevad.services.LightweightNetworkQualityAndroidService.START"),
|
||||
PHENOTYPE(51, "com.google.android.gms.phenotype.service.START"),
|
||||
VOICE_UNLOCK(52, "com.google.android.gms.speech.service.START"),
|
||||
NEARBY_CONNECTIONS(54, "com.google.android.gms.nearby.connection.service.START"),
|
||||
FITNESS_SENSORS(55, "com.google.android.gms.fitness.SensorsApi"),
|
||||
FITNESS_RECORDING(56, "com.google.android.gms.fitness.RecordingApi"),
|
||||
FITNESS_HISTORY(57, "com.google.android.gms.fitness.HistoryApi"),
|
||||
FITNESS_SESSIONS(58, "com.google.android.gms.fitness.SessionsApi"),
|
||||
FITNESS_BLE(59, "com.google.android.gms.fitness.BleApi"),
|
||||
FITNESS_CONFIG(60, "com.google.android.gms.fitness.ConfigApi"),
|
||||
FITNESS_INTERNAL(61, "com.google.android.gms.fitness.InternalApi"),
|
||||
NEARBY_MESSAGES(62, "com.google.android.gms.nearby.messages.service.NearbyMessagesService.START"),
|
||||
HELP(63, "com.google.android.gms.googlehelp.service.GoogleHelpService.START"),
|
||||
CONFIG(64, "com.google.android.gms.config.START"),
|
||||
PHENOTYPE(51, "com.mgoogle.android.gms.phenotype.service.START"),
|
||||
GEODATA(65, "com.google.android.gms.location.places.GeoDataApi"),
|
||||
SEARCH_IME(66),
|
||||
PLACE_DETECTION(67, "com.google.android.gms.location.places.PlaceDetectionApi"),
|
||||
CREDENTIALS(68, "com.google.android.gms.auth.api.credentials.service.START"),
|
||||
NEARBY_BOOTSTRAP(69, "com.google.android.gms.nearby.bootstrap.service.NearbyBootstrapService.START"),
|
||||
PLUS_INTERNAL(70),
|
||||
SOURCE_DEVICE(75, "com.google.android.gms.smartdevice.d2d.SourceDeviceService.START"),
|
||||
TARGET_DEVICE(76, "com.google.android.gms.smartdevice.d2d.TargetDeviceService.START"),
|
||||
APP_INVITE(77, "com.google.android.gms.appinvite.service.START"),
|
||||
TAP_AND_PAY(79, "com.google.android.gms.tapandpay.service.BIND"),
|
||||
CHROME_SYNC(80, "com.google.android.gms.chromesync.service.START"),
|
||||
ACCOUNTS(81, "com.google.android.gms.smartdevice.setup.accounts.AccountsService.START"),
|
||||
CAST_REMOTE_DISPLAY(83, "com.google.android.gms.cast.remote_display.service.START"),
|
||||
TRUST_AGENT(85, "com.google.android.gms.trustagent.StateApi.START"),
|
||||
AUTH_SIGN_IN(91, "com.google.android.gms.auth.api.signin.service.START"),
|
||||
MEASUREMENT(93, "com.google.android.gms.measurement.START"),
|
||||
FREIGHTER(98, "com.google.android.gms.freighter.service.START"),
|
||||
GUNS(110, "com.google.android.gms.notifications.service.START"),
|
||||
BLE(111, "com.google.android.gms.beacon.internal.IBleService.START"),
|
||||
FIREBASE_AUTH(112, "com.google.firebase.auth.api.gms.service.START"),
|
||||
APP_INDEXING(113),
|
||||
GASS(116, "com.google.android.gms.gass.START"),
|
||||
WORK_ACCOUNT(120),
|
||||
INSTANT_APPS(121, "com.google.android.gms.instantapps.START"),
|
||||
CAST_FIRSTPATY(122, "com.google.android.gms.cast.firstparty.START"),
|
||||
AD_CACHE(123, "com.google.android.gms.ads.service.CACHE"),
|
||||
CRYPT_AUTH(129, "com.google.android.gms.auth.cryptauth.cryptauthservice.START"),
|
||||
DYNAMIC_LINKS(131, "com.google.firebase.dynamiclinks.service.START"),
|
||||
FONTS(132, "com.google.android.gms.fonts.service.START"),
|
||||
ROMANESCO(135, "com.google.android.gms.romanesco.service.START"),
|
||||
TRAINER(139, "com.google.android.gms.learning.trainer.START"),
|
||||
FIDO2_REGULAR(148, "com.google.android.gms.fido.fido2.regular.START"),
|
||||
FIDO2_PRIVILEGED(149, "com.google.android.gms.fido.fido2.privileged.START"),
|
||||
DATA_DOWNLOAD(152, "com.google.android.mdd.service.START"),
|
||||
ACCOUNT_DATA(153, "com.google.android.gms.auth.account.data.service.START"),
|
||||
CONSTELLATION(155, "com.google.android.gms.constellation.service.START"),
|
||||
AUDIT(154, "com.google.android.gms.audit.service.START"),
|
||||
SYSTEM_UPDATE(157, "com.google.android.gms.update.START_API_SERVICE"),
|
||||
USER_LOCATION(163, "com.google.android.gms.userlocation.service.START"),
|
||||
AD_HTTP(166, "com.google.android.gms.ads.service.HTTP"),
|
||||
LANGUAGE_PROFILE(167, "com.google.android.gms.languageprofile.service.START"),
|
||||
MDNS(168, "com.google.android.gms.mdns.service.START"),
|
||||
FIDO2_ZEROPARTY(180, "com.google.android.gms.fido.fido2.zeroparty.START"),
|
||||
G1_RESTORE(181, "com.google.android.gms.backup.G1_RESTORE"),
|
||||
G1_BACKUP(182, "com.google.android.gms.backup.G1_BACKUP"),
|
||||
PAYSE(188, "com.google.android.gms.payse.service.BIND"),
|
||||
RCS(189, "com.google.android.gms.rcs.START"),
|
||||
CARRIER_AUTH(191, "com.google.android.gms.carrierauth.service.START"),
|
||||
SYSTEM_UPDATE_SINGLE_UESR(192, "com.google.android.gms.update.START_SINGLE_USER_API_SERVICE"),
|
||||
APP_USAGE(193, "com.google.android.gms.appusage.service.START"),
|
||||
NEARBY_SHARING_2(194, "com.google.android.gms.nearby.sharing.START_SERVICE"),
|
||||
AD_CONSENT_LOOKUP(195, "com.google.android.gms.ads.service.CONSENT_LOOKUP"),
|
||||
PHONE_INTERNAL(197, "com.google.android.gms.auth.api.phone.service.InternalService.START"),
|
||||
PAY(198, "com.google.android.gms.pay.service.BIND"),
|
||||
ASTERISM(199, "com.google.android.gms.asterism.service.START"),
|
||||
MODULE_RESTORE(201, "com.google.android.gms.backup.GMS_MODULE_RESTORE"),
|
||||
FACS_CACHE(202, "com.google.android.gms.facs.cache.service.START"),
|
||||
RECAPTCHA(205, "com.google.android.gms.recaptcha.service.START"),
|
||||
CONTACT_SYNC(208, "com.google.android.gms.people.contactssync.service.START"),
|
||||
IDENTITY_SIGN_IN(212, "com.google.android.gms.auth.api.identity.service.signin.START"),
|
||||
CREDENTIAL_STORE(214, "com.google.android.gms.fido.credentialstore.internal_service.START"),
|
||||
EVENT_ATTESTATION(216, "com.google.android.gms.ads.identifier.service.EVENT_ATTESTATION"),
|
||||
SCHEDULER(218, "com.google.android.gms.scheduler.ACTION_PROXY_SCHEDULE"),
|
||||
AUTHORIZATION(219, "com.google.android.gms.auth.api.identity.service.authorization.START"),
|
||||
FACS_SYNC(220, "com.google.android.gms.facs.internal.service.START"),
|
||||
AUTH_CONFIG_SYNC(221, "com.google.android.gms.auth.config.service.START"),
|
||||
CREDENTIAL_SAVING(223, "com.google.android.gms.auth.api.identity.service.credentialsaving.START"),
|
||||
GOOGLE_AUTH(224, "com.google.android.gms.auth.account.authapi.START"),
|
||||
ENTERPRISE_LOADER(225, "com.google.android.gms.enterprise.loader.service.START"),
|
||||
THUNDERBIRD(226, "com.google.android.gms.thunderbird.service.START"),
|
||||
NEARBY_EXPOSURE(236, "com.google.android.gms.nearby.exposurenotification.START"),
|
||||
GMS_COMPLIANCE(257, "com.google.android.gms.gmscompliance.service.START"),
|
||||
FIDO_SOURCE_DEVICE(262, "com.google.android.gms.fido.sourcedevice.service.START"),
|
||||
FAST_PAIR(265, "com.google.android.gms.nearby.fastpair.START"),
|
||||
MATCHSTICK_LIGHTER(268, "com.google.android.gms.matchstick.lighter.service.START"),
|
||||
FIDO_TARGET_DEVICE_INTERNAL(269, "com.google.android.gms.fido.targetdevice.internal_service.START"),
|
||||
TELEMETRY(270, "com.google.android.gms.common.telemetry.service.START"),
|
||||
SECOND_DEVICE_AUTH(275, "com.google.android.gms.setup.auth.SecondDeviceAuth.START"),
|
||||
LOCATION_SHARING_REPORTER(277, "com.google.android.gms.locationsharingreporter.service.START"),
|
||||
OCR(279, "com.google.android.gms.ocr.service.START"),
|
||||
OCR_INTERNAL(281, "com.google.android.gms.ocr.service.internal.START"),
|
||||
;
|
||||
|
||||
public int SERVICE_ID;
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
|
||||
package com.google.android.gms.cast.framework.media;
|
||||
|
||||
import com.google.android.gms.cast.framework.media.INotificationActionsProvider;
|
||||
|
||||
import org.microg.safeparcel.AutoSafeParcelable;
|
||||
|
||||
import java.util.List;
|
||||
|
|
|
@ -22,6 +22,7 @@ dependencies {
|
|||
implementation 'com.squareup.wire:wire-runtime:3.6.1'
|
||||
implementation 'de.hdodenhof:circleimageview:3.1.0'
|
||||
implementation "info.armills.chromecast-java-api-v2:api-v2-raw-request:0.10.4-raw-request-1"
|
||||
implementation 'androidx.webkit:webkit:1.4.0'
|
||||
|
||||
implementation project(':play-services-cronet-core')
|
||||
implementation project(':play-services-core-proto')
|
||||
|
@ -37,13 +38,13 @@ dependencies {
|
|||
|
||||
implementation "org.microg.gms:conscrypt-gmscore:2.5.1"
|
||||
implementation 'androidx.annotation:annotation:1.3.0'
|
||||
implementation 'androidx.lifecycle:lifecycle-service:2.4.0'
|
||||
implementation 'androidx.lifecycle:lifecycle-service:2.4.1'
|
||||
|
||||
// Navigation
|
||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.0'
|
||||
implementation 'androidx.navigation:navigation-ui-ktx:2.4.0'
|
||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1'
|
||||
implementation 'androidx.navigation:navigation-ui-ktx:2.4.1'
|
||||
|
||||
implementation 'androidx.lifecycle:lifecycle-service:2.4.0'
|
||||
implementation 'androidx.lifecycle:lifecycle-service:2.4.1'
|
||||
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10'
|
||||
implementation 'com.android.volley:volley:1.2.1'
|
||||
|
||||
|
|
|
@ -500,161 +500,16 @@
|
|||
|
||||
<service android:name="org.microg.gms.DummyService">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.android.contextmanager.service.ContextManagerService.START" />
|
||||
<action android:name="com.google.android.gms.accounts.ACCOUNT_SERVICE" />
|
||||
<action android:name="com.google.android.gms.ads.identifier.service.EVENT_ATTESTATION" />
|
||||
<action android:name="com.google.android.gms.ads.service.CACHE" />
|
||||
<action android:name="com.google.android.gms.ads.service.CONSENT_LOOKUP" />
|
||||
<action android:name="com.google.android.gms.ads.service.HTTP" />
|
||||
<action android:name="com.google.android.gms.ads.service.START" />
|
||||
<action android:name="com.google.android.gms.appstate.service.START" />
|
||||
<action android:name="com.google.android.gms.appusage.service.START" />
|
||||
<action android:name="com.google.android.gms.asterism.service.START" />
|
||||
<action android:name="com.google.android.gms.audiomodem.service.AudioModemService.START" />
|
||||
<action android:name="com.google.android.gms.audit.service.START" />
|
||||
<action android:name="com.google.android.gms.auth.account.authapi.START" />
|
||||
<action android:name="com.google.android.gms.auth.account.authenticator.auto.service.START" />
|
||||
<action android:name="com.google.android.gms.auth.account.authenticator.chromeos.START" />
|
||||
<action android:name="com.google.android.gms.auth.account.authenticator.tv.service.START" />
|
||||
<action android:name="com.google.android.gms.auth.account.data.service.START" />
|
||||
<action android:name="com.google.android.gms.auth.api.identity.service.authorization.START" />
|
||||
<action android:name="com.google.android.gms.auth.api.identity.service.credentialsaving.START" />
|
||||
<action android:name="com.google.android.gms.auth.api.identity.service.signin.START" />
|
||||
<action android:name="com.google.android.gms.auth.api.phone.service.InternalService.START" />
|
||||
<action android:name="com.google.android.gms.auth.api.signin.service.START" />
|
||||
<action android:name="com.google.android.gms.auth.config.service.START" />
|
||||
<action android:name="com.google.android.gms.auth.cryptauth.cryptauthservice.START" />
|
||||
<action android:name="com.google.android.gms.auth.proximity.devicesyncservice.START" />
|
||||
<action android:name="com.google.android.gms.auth.proximity.securechannelservice.START" />
|
||||
<action android:name="com.google.android.gms.auth.proximity.START" />
|
||||
<action android:name="com.google.android.gms.auth.service.START" />
|
||||
<action android:name="com.google.android.gms.backup.G1_BACKUP" />
|
||||
<action android:name="com.google.android.gms.backup.G1_RESTORE" />
|
||||
<action android:name="com.google.android.gms.backup.GMS_MODULE_RESTORE" />
|
||||
<action android:name="com.google.android.gms.beacon.internal.IBleService.START" />
|
||||
<action android:name="com.google.android.gms.carrierauth.service.START" />
|
||||
<action android:name="com.google.android.gms.cast.firstparty.START" />
|
||||
<action android:name="com.google.android.gms.cast_mirroring.service.START" />
|
||||
<action android:name="com.google.android.gms.cast.remote_display.service.START" />
|
||||
<action android:name="com.google.android.gms.chromesync.service.START" />
|
||||
<action android:name="com.google.android.gms.common.download.START" />
|
||||
<action android:name="com.google.android.gms.common.service.START" />
|
||||
<action android:name="com.google.android.gms.common.telemetry.service.START" />
|
||||
<action android:name="com.google.android.gms.config.START" />
|
||||
<action android:name="com.google.android.gms.constellation.service.START" />
|
||||
<action android:name="com.google.android.gms.deviceconnection.service.START" />
|
||||
<action android:name="com.google.android.gms.enterprise.loader.service.START" />
|
||||
<action android:name="com.google.android.gms.facs.internal.service.START" />
|
||||
<action android:name="com.google.android.gms.fido.credentialstore.internal_service.START" />
|
||||
<action android:name="com.google.android.gms.fido.fido2.privileged.START" />
|
||||
<action android:name="com.google.android.gms.fido.fido2.regular.START" />
|
||||
<action android:name="com.google.android.gms.fido.fido2.zeroparty.START" />
|
||||
<action android:name="com.google.android.gms.fido.sourcedevice.service.START" />
|
||||
<action android:name="com.google.android.gms.fido.targetdevice.internal_service.START" />
|
||||
<action android:name="com.google.android.gms.fido.u2f.privileged.START" />
|
||||
<action android:name="com.google.android.gms.fido.u2f.thirdparty.START" />
|
||||
<action android:name="com.google.android.gms.fido.u2f.zeroparty.START" />
|
||||
<action android:name="com.google.android.gms.fitness.BleApi" />
|
||||
<action android:name="com.google.android.gms.fitness.ConfigApi" />
|
||||
<action android:name="com.google.android.gms.fitness.GoalsApi" />
|
||||
<action android:name="com.google.android.gms.fitness.GoogleFitnessService.START" />
|
||||
<action android:name="com.google.android.gms.fitness.HistoryApi" />
|
||||
<action android:name="com.google.android.gms.fitness.InternalApi" />
|
||||
<action android:name="com.google.android.gms.fitness.RecordingApi" />
|
||||
<action android:name="com.google.android.gms.fitness.SensorsApi" />
|
||||
<action android:name="com.google.android.gms.fitness.SessionsApi" />
|
||||
<action android:name="com.google.android.gms.fonts.service.START" />
|
||||
<action android:name="com.google.android.gms.freighter.service.START" />
|
||||
<action android:name="com.google.android.gms.gass.START" />
|
||||
<action android:name="com.google.android.gms.growth.service.START" />
|
||||
<action android:name="com.google.android.gms.gmscompliance.service.START" />
|
||||
<action android:name="com.google.android.gms.googlehelp.service.GoogleHelpService.START" />
|
||||
<action android:name="com.google.android.gms.herrevad.services.LightweightNetworkQualityAndroidService.START" />
|
||||
<action android:name="com.google.android.gms.identity.service.BIND" />
|
||||
<action android:name="com.google.android.gms.instantapps.START" />
|
||||
<action android:name="com.google.android.gms.kids.service.START" />
|
||||
<action android:name="com.google.android.gms.languageprofile.service.START" />
|
||||
<action android:name="com.google.android.gms.learning.internal.dynamitesupport.START" />
|
||||
<action android:name="com.google.android.gms.learning.intservice.START" />
|
||||
<action android:name="com.google.android.gms.learning.predictor.START" />
|
||||
<action android:name="com.google.android.gms.learning.trainer.START" />
|
||||
<action android:name="com.google.android.gms.learning.training.background.START" />
|
||||
<action android:name="com.google.android.gms.locationsharing.api.START" />
|
||||
<action android:name="com.google.android.gms.locationsharingreporter.service.START" />
|
||||
<action android:name="com.google.android.gms.lockbox.service.START" />
|
||||
<action android:name="com.google.android.gms.matchstick.lighter.service.START" />
|
||||
<action android:name="com.google.android.gms.mdm.services.DeviceManagerApiService.START" />
|
||||
<action android:name="com.google.android.gms.mdns.service.START" />
|
||||
<action android:name="com.google.android.gms.nearby.bootstrap.service.NearbyBootstrapService.START" />
|
||||
<action android:name="com.google.android.gms.nearby.connection.service.START" />
|
||||
<action android:name="com.google.android.gms.nearby.fastpair.START" />
|
||||
<action android:name="com.google.android.gms.nearby.messages.service.NearbyMessagesService.START" />
|
||||
<action android:name="com.google.android.gms.nearby.sharing.service.NearbySharingService.START" />
|
||||
<action android:name="com.google.android.gms.nearby.sharing.START_SERVICE" />
|
||||
<action android:name="com.google.android.gms.notifications.service.START" />
|
||||
<action android:name="com.google.android.gms.ocr.service.internal.START" />
|
||||
<action android:name="com.google.android.gms.ocr.service.START" />
|
||||
<action android:name="com.google.android.gms.panorama.service.START" />
|
||||
<action android:name="com.google.android.gms.pay.service.BIND" />
|
||||
<action android:name="com.google.android.gms.payse.service.BIND" />
|
||||
<action android:name="com.google.android.gms.people.contactssync.service.START" />
|
||||
<action android:name="com.google.android.gms.photos.autobackup.service.START" />
|
||||
<action android:name="com.google.android.gms.plus.service.default.INTENT" />
|
||||
<action android:name="com.google.android.gms.plus.service.image.INTENT" />
|
||||
<action android:name="com.google.android.gms.plus.service.internal.START" />
|
||||
<action android:name="com.google.android.gms.plus.service.START" />
|
||||
<action android:name="com.google.android.gms.pseudonymous.service.START" />
|
||||
<action android:name="com.google.android.gms.rcs.START" />
|
||||
<action android:name="com.google.android.gms.recaptcha.service.START" />
|
||||
<action android:name="com.google.android.gms.romanesco.MODULE_BACKUP_AGENT" />
|
||||
<action android:name="com.google.android.gms.romanesco.service.START" />
|
||||
<action android:name="com.google.android.gms.search.service.SEARCH_AUTH_START" />
|
||||
<action android:name="com.google.android.gms.semanticlocation.service.START_ODLH" />
|
||||
<action android:name="com.google.android.gms.sesame.service.BIND" />
|
||||
<action android:name="com.google.android.gms.telephonyspam.service.START" />
|
||||
<action android:name="com.google.android.gms.testsupport.service.START" />
|
||||
<action android:name="com.google.android.gms.scheduler.ACTION_PROXY_SCHEDULE" />
|
||||
<action android:name="com.google.android.gms.setup.auth.SecondDeviceAuth.START" />
|
||||
<action android:name="com.google.android.gms.smartdevice.d2d.SourceDeviceService.START" />
|
||||
<action android:name="com.google.android.gms.smartdevice.d2d.TargetDeviceService.START" />
|
||||
<action android:name="com.google.android.gms.smartdevice.directtransfer.SourceDirectTransferService.START" />
|
||||
<action android:name="com.google.android.gms.smartdevice.directtransfer.TargetDirectTransferService.START" />
|
||||
<action android:name="com.google.android.gms.smartdevice.postsetup.PostSetupService.START" />
|
||||
<action android:name="com.google.android.gms.smartdevice.setup.accounts.AccountsService.START" />
|
||||
<action android:name="com.google.android.gms.smartdevice.wifi.START_WIFI_HELPER_SERVICE" />
|
||||
<action android:name="com.google.android.gms.social.location.activity.service.START" />
|
||||
<action android:name="com.google.android.gms.statementservice.EXECUTE" />
|
||||
<action android:name="com.google.android.gms.stats.ACTION_UPLOAD_DROPBOX_ENTRIES" />
|
||||
<action android:name="com.google.android.gms.speech.service.START" />
|
||||
<action android:name="com.google.android.gms.thunderbird.service.START" />
|
||||
<action android:name="com.google.android.gms.trustagent.BridgeApi.START" />
|
||||
<action android:name="com.google.android.gms.trustagent.StateApi.START" />
|
||||
<action android:name="com.google.android.gms.trustagent.trustlet.trustletmanagerservice.BIND" />
|
||||
<action android:name="com.google.android.gms.trustlet.bluetooth.service.BIND" />
|
||||
<action android:name="com.google.android.gms.trustlet.connectionlessble.service.BIND" />
|
||||
<action android:name="com.google.android.gms.trustlet.face.service.BIND" />
|
||||
<action android:name="com.google.android.gms.trustlet.nfc.service.BIND" />
|
||||
<action android:name="com.google.android.gms.trustlet.onbody.service.BIND" />
|
||||
<action android:name="com.google.android.gms.trustlet.place.service.BIND" />
|
||||
<action android:name="com.google.android.gms.trustlet.voiceunlock.service.BIND" />
|
||||
<action android:name="com.google.android.gms.udc.service.START" />
|
||||
<action android:name="com.google.android.gms.update.START_API_SERVICE" />
|
||||
<action android:name="com.google.android.gms.update.START_SERVICE" />
|
||||
<action android:name="com.google.android.gms.update.START_SINGLE_USER_API_SERVICE" />
|
||||
<action android:name="com.google.android.gms.update.START_TV_API_SERVICE" />
|
||||
<action android:name="com.google.android.gms.userlocation.service.START" />
|
||||
<action android:name="com.google.android.gms.vehicle.cabin.service.START" />
|
||||
<action android:name="com.google.android.gms.vehicle.climate.service.START" />
|
||||
<action android:name="com.google.android.gms.vehicle.info.service.START" />
|
||||
<action android:name="com.google.android.gms.walletp2p.service.firstparty.BIND" />
|
||||
<action android:name="com.google.android.gms.walletp2p.service.zeroparty.BIND" />
|
||||
<action android:name="com.google.android.gms.wearable.BIND" />
|
||||
<action android:name="com.google.android.gms.wearable.DATA_CHANGED" />
|
||||
<action android:name="com.google.android.gms.wearable.NODE_CHANGED" />
|
||||
<action android:name="com.google.android.mdd.service.START" />
|
||||
<action android:name="com.google.android.mdh.service.START" />
|
||||
<action android:name="com.google.android.mdh.service.listener.START" />
|
||||
<action android:name="com.google.android.mobstore.service.START" />
|
||||
<action android:name="com.google.android.gms.auth.service.START" />
|
||||
<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.google.android.gms.herrevad.services.LightweightNetworkQualityAndroidService.START" />
|
||||
<action android:name="com.google.android.gms.auth.api.credentials.service.START" />
|
||||
<action android:name="com.google.android.gms.gass.START" />
|
||||
<action android:name="com.google.android.gms.audit.service.START" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
</application>
|
||||
|
|
|
@ -19,9 +19,6 @@ package org.microg.gms.auth.login;
|
|||
import static android.accounts.AccountManager.PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE;
|
||||
import static android.accounts.AccountManager.VISIBILITY_USER_MANAGED_VISIBLE;
|
||||
import static android.os.Build.VERSION.SDK_INT;
|
||||
import static android.os.Build.VERSION_CODES.GINGERBREAD_MR1;
|
||||
import static android.os.Build.VERSION_CODES.HONEYCOMB;
|
||||
import static android.os.Build.VERSION_CODES.LOLLIPOP;
|
||||
import static android.telephony.TelephonyManager.SIM_STATE_UNKNOWN;
|
||||
import static android.view.KeyEvent.KEYCODE_BACK;
|
||||
import static android.view.View.INVISIBLE;
|
||||
|
@ -37,13 +34,11 @@ import static org.microg.gms.common.Constants.GMS_VERSION_CODE;
|
|||
import android.accounts.Account;
|
||||
import android.accounts.AccountManager;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
@ -55,11 +50,11 @@ import android.webkit.CookieManager;
|
|||
import android.webkit.JavascriptInterface;
|
||||
import android.webkit.WebSettings;
|
||||
import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.webkit.WebViewClientCompat;
|
||||
|
||||
import com.mgoogle.android.gms.R;
|
||||
|
||||
|
@ -73,6 +68,8 @@ import org.microg.gms.checkin.LastCheckinInfo;
|
|||
import org.microg.gms.common.HttpFormClient;
|
||||
import org.microg.gms.common.Utils;
|
||||
import org.microg.gms.people.PeopleManager;
|
||||
import org.microg.gms.profile.Build;
|
||||
import org.microg.gms.profile.ProfileManager;
|
||||
import org.microg.gms.ui.UtilsKt;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -113,7 +110,7 @@ public class LoginActivity extends AssistantActivity {
|
|||
webView.addJavascriptInterface(new JsBridge(), "mm");
|
||||
authContent = (ViewGroup) findViewById(R.id.auth_content);
|
||||
((ViewGroup) findViewById(R.id.auth_root)).addView(webView);
|
||||
webView.setWebViewClient(new WebViewClient() {
|
||||
webView.setWebViewClient(new WebViewClientCompat() {
|
||||
@Override
|
||||
public void onPageFinished(WebView view, String url) {
|
||||
Log.d(TAG, "pageFinished: " + view.getUrl());
|
||||
|
@ -142,7 +139,7 @@ public class LoginActivity extends AssistantActivity {
|
|||
AccountManager accountManager = AccountManager.get(this);
|
||||
Account account = new Account(getIntent().getStringExtra(EXTRA_EMAIL), accountType);
|
||||
accountManager.addAccountExplicitly(account, getIntent().getStringExtra(EXTRA_TOKEN), null);
|
||||
if (isAuthVisible(this) && SDK_INT >= Build.VERSION_CODES.O) {
|
||||
if (isAuthVisible(this) && SDK_INT >= 26) {
|
||||
accountManager.setAccountVisibility(account, PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE, VISIBILITY_USER_MANAGED_VISIBLE);
|
||||
}
|
||||
retrieveGmsToken(account);
|
||||
|
@ -162,7 +159,7 @@ public class LoginActivity extends AssistantActivity {
|
|||
super.onHuaweiButtonClicked();
|
||||
state++;
|
||||
if (state == 1) {
|
||||
if (SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (SDK_INT >= 23) {
|
||||
hideLauncherIcon(this, false);
|
||||
UtilsKt.hideIcon(this, false);
|
||||
}
|
||||
|
@ -212,7 +209,7 @@ public class LoginActivity extends AssistantActivity {
|
|||
authContent.addView(loading);
|
||||
setMessage(R.string.auth_connecting);
|
||||
CookieManager.getInstance().setAcceptCookie(true);
|
||||
if (SDK_INT >= LOLLIPOP) {
|
||||
if (SDK_INT >= 21) {
|
||||
CookieManager.getInstance().removeAllCookies(value -> start());
|
||||
} else {
|
||||
//noinspection deprecation
|
||||
|
@ -223,7 +220,7 @@ public class LoginActivity extends AssistantActivity {
|
|||
|
||||
private static WebView createWebView(Context context) {
|
||||
WebView webView = new WebView(context);
|
||||
if (SDK_INT < LOLLIPOP) {
|
||||
if (SDK_INT < 21) {
|
||||
webView.setVisibility(VISIBLE);
|
||||
} else {
|
||||
webView.setVisibility(INVISIBLE);
|
||||
|
@ -231,13 +228,14 @@ public class LoginActivity extends AssistantActivity {
|
|||
webView.setLayoutParams(new RelativeLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
|
||||
webView.setBackgroundColor(Color.TRANSPARENT);
|
||||
prepareWebViewSettings(webView.getSettings());
|
||||
prepareWebViewSettings(context, webView.getSettings());
|
||||
return webView;
|
||||
}
|
||||
|
||||
@SuppressLint("SetJavaScriptEnabled")
|
||||
private static void prepareWebViewSettings(WebSettings settings) {
|
||||
settings.setUserAgentString(settings.getUserAgentString() + MAGIC_USER_AGENT);
|
||||
private static void prepareWebViewSettings(Context context, WebSettings settings) {
|
||||
ProfileManager.ensureInitialized(context);
|
||||
settings.setUserAgentString(Build.INSTANCE.generateWebViewUserAgentString(settings.getUserAgentString()) + MAGIC_USER_AGENT);
|
||||
settings.setJavaScriptEnabled(true);
|
||||
settings.setSupportMultipleWindows(false);
|
||||
settings.setSaveFormData(false);
|
||||
|
@ -544,10 +542,8 @@ public class LoginActivity extends AssistantActivity {
|
|||
Log.d(TAG, "JSBridge: setAccountIdentifier");
|
||||
}
|
||||
|
||||
@TargetApi(HONEYCOMB)
|
||||
@JavascriptInterface
|
||||
public final void setBackButtonEnabled(boolean backButtonEnabled) {
|
||||
if (SDK_INT <= GINGERBREAD_MR1) return;
|
||||
int visibility = getWindow().getDecorView().getSystemUiVisibility();
|
||||
if (backButtonEnabled)
|
||||
visibility &= -STATUS_BAR_DISABLE_BACK;
|
||||
|
|
|
@ -54,6 +54,7 @@ import static org.microg.gms.gcm.McsConstants.MSG_OUTPUT_ERROR;
|
|||
import static org.microg.gms.gcm.McsConstants.MSG_OUTPUT_READY;
|
||||
import static org.microg.gms.gcm.McsConstants.MSG_TEARDOWN;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.AlarmManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
|
@ -77,6 +78,8 @@ import android.os.SystemClock;
|
|||
import android.os.UserHandle;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import androidx.legacy.content.WakefulBroadcastReceiver;
|
||||
|
||||
import com.mgoogle.android.gms.R;
|
||||
|
@ -120,7 +123,11 @@ public class McsService extends Service implements Handler.Callback {
|
|||
public static final String FROM_FIELD = "gcm@android.com";
|
||||
|
||||
public static final String SERVICE_HOST = "mtalk.google.com";
|
||||
// A few ports are available: 443, 5228-5230 but also 5222-5223
|
||||
// See https://github.com/microg/GmsCore/issues/408
|
||||
public static final int SERVICE_PORT = 5228;
|
||||
// Likely if the main port 5228 is blocked by a firewall, the other 52xx are blocked as well
|
||||
public static final int SERVICE_PORT_FALLBACK = 443;
|
||||
|
||||
private static final int WAKELOCK_TIMEOUT = 5000;
|
||||
// On bad mobile network a ping can take >60s, so we wait for an ACK for 90s
|
||||
|
@ -155,9 +162,18 @@ public class McsService extends Service implements Handler.Callback {
|
|||
|
||||
private static final int maxTtl = 24 * 60 * 60;
|
||||
|
||||
private Object deviceIdleController;
|
||||
@Nullable
|
||||
private Method getUserIdMethod;
|
||||
@Nullable
|
||||
private Object deviceIdleController;
|
||||
@Nullable
|
||||
private Method addPowerSaveTempWhitelistAppMethod;
|
||||
@Nullable
|
||||
@RequiresApi(Build.VERSION_CODES.S)
|
||||
private Object powerExemptionManager;
|
||||
@Nullable
|
||||
@RequiresApi(Build.VERSION_CODES.S)
|
||||
private Method addToTemporaryAllowListMethod;
|
||||
|
||||
private class HandlerThread extends Thread {
|
||||
|
||||
|
@ -186,6 +202,7 @@ public class McsService extends Service implements Handler.Callback {
|
|||
}
|
||||
|
||||
@Override
|
||||
@SuppressLint("PrivateApi")
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
TriggerReceiver.register(this);
|
||||
|
@ -195,20 +212,27 @@ public class McsService extends Service implements Handler.Callback {
|
|||
powerManager = (PowerManager) getSystemService(POWER_SERVICE);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission("android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST") == PackageManager.PERMISSION_GRANTED) {
|
||||
try {
|
||||
String deviceIdleControllerName = "deviceidle";
|
||||
try {
|
||||
Field field = Context.class.getField("DEVICE_IDLE_CONTROLLER");
|
||||
deviceIdleControllerName = (String) field.get(null);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
IBinder binder = (IBinder) Class.forName("android.os.ServiceManager")
|
||||
.getMethod("getService", String.class).invoke(null, deviceIdleControllerName);
|
||||
if (binder != null) {
|
||||
deviceIdleController = Class.forName("android.os.IDeviceIdleController$Stub")
|
||||
.getMethod("asInterface", IBinder.class).invoke(null, binder);
|
||||
getUserIdMethod = UserHandle.class.getMethod("getUserId", int.class);
|
||||
addPowerSaveTempWhitelistAppMethod = deviceIdleController.getClass()
|
||||
.getMethod("addPowerSaveTempWhitelistApp", String.class, long.class, int.class, String.class);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
Class<?> powerExemptionManagerClass = Class.forName("android.os.PowerExemptionManager");
|
||||
powerExemptionManager = getSystemService(powerExemptionManagerClass);
|
||||
addToTemporaryAllowListMethod =
|
||||
powerExemptionManagerClass.getMethod("addToTemporaryAllowList", String.class, int.class, String.class, long.class);
|
||||
} else {
|
||||
String deviceIdleControllerName = "deviceidle";
|
||||
try {
|
||||
Field field = Context.class.getField("DEVICE_IDLE_CONTROLLER");
|
||||
deviceIdleControllerName = (String) field.get(null);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
IBinder binder = (IBinder) Class.forName("android.os.ServiceManager")
|
||||
.getMethod("getService", String.class).invoke(null, deviceIdleControllerName);
|
||||
if (binder != null) {
|
||||
deviceIdleController = Class.forName("android.os.IDeviceIdleController$Stub")
|
||||
.getMethod("asInterface", IBinder.class).invoke(null, binder);
|
||||
getUserIdMethod = UserHandle.class.getMethod("getUserId", int.class);
|
||||
addPowerSaveTempWhitelistAppMethod = deviceIdleController.getClass()
|
||||
.getMethod("addPowerSaveTempWhitelistApp", String.class, long.class, int.class, String.class);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.w(TAG, e);
|
||||
|
@ -440,24 +464,15 @@ public class McsService extends Service implements Handler.Callback {
|
|||
}
|
||||
}
|
||||
|
||||
private synchronized void connect() {
|
||||
private boolean connect(int port) {
|
||||
try {
|
||||
closeAll();
|
||||
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
|
||||
activeNetworkPref = GcmPrefs.get(this).getNetworkPrefForInfo(activeNetworkInfo);
|
||||
if (!GcmPrefs.get(this).isEnabledFor(activeNetworkInfo)) {
|
||||
logd(this, "Don't connect, because disabled for " + activeNetworkInfo.getTypeName());
|
||||
scheduleReconnect(this);
|
||||
return;
|
||||
}
|
||||
wasTornDown = false;
|
||||
|
||||
logd(this, "Starting MCS connection...");
|
||||
Socket socket = new Socket(SERVICE_HOST, SERVICE_PORT);
|
||||
logd(this, "Connected to " + SERVICE_HOST + ":" + SERVICE_PORT);
|
||||
sslSocket = SSLContext.getDefault().getSocketFactory().createSocket(socket, SERVICE_HOST, SERVICE_PORT, true);
|
||||
logd(this, "Activated SSL with " + SERVICE_HOST + ":" + SERVICE_PORT);
|
||||
logd(this, "Starting MCS connection to port " + port + "...");
|
||||
Socket socket = new Socket(SERVICE_HOST, port);
|
||||
logd(this, "Connected to " + SERVICE_HOST + ":" + port);
|
||||
sslSocket = SSLContext.getDefault().getSocketFactory().createSocket(socket, SERVICE_HOST, port, true);
|
||||
logd(this, "Activated SSL with " + SERVICE_HOST + ":" + port);
|
||||
inputStream = new McsInputStream(sslSocket.getInputStream(), rootHandler);
|
||||
outputStream = new McsOutputStream(sslSocket.getOutputStream(), rootHandler);
|
||||
inputStream.start();
|
||||
|
@ -469,9 +484,29 @@ public class McsService extends Service implements Handler.Callback {
|
|||
lastIncomingNetworkRealtime = SystemClock.elapsedRealtime();
|
||||
scheduleHeartbeat(this);
|
||||
} catch (Exception e) {
|
||||
Log.w(TAG, "Exception while connecting!", e);
|
||||
Log.w(TAG, "Exception while connecting to " + SERVICE_HOST + ":" + port, e);
|
||||
rootHandler.sendMessage(rootHandler.obtainMessage(MSG_TEARDOWN, e));
|
||||
closeAll();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private synchronized void connect() {
|
||||
closeAll();
|
||||
|
||||
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
|
||||
activeNetworkPref = GcmPrefs.get(this).getNetworkPrefForInfo(activeNetworkInfo);
|
||||
if (!GcmPrefs.get(this).isEnabledFor(activeNetworkInfo)) {
|
||||
logd(this, "Don't connect, because disabled for " + activeNetworkInfo.getTypeName());
|
||||
scheduleReconnect(this);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!connect(SERVICE_PORT))
|
||||
connect(SERVICE_PORT_FALLBACK);
|
||||
}
|
||||
|
||||
private void handleClose(Close close) {
|
||||
|
@ -594,7 +629,16 @@ public class McsService extends Service implements Handler.Callback {
|
|||
}
|
||||
|
||||
private void addPowerSaveTempWhitelistApp(String packageName) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
try {
|
||||
if (addToTemporaryAllowListMethod != null && powerExemptionManager != null) {
|
||||
logd(this, "Adding app " + packageName + " to the temp allowlist");
|
||||
addToTemporaryAllowListMethod.invoke(powerExemptionManager, packageName, 0, "GCM Push", 10000);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Error adding app" + packageName + " to the temp allowlist.", e);
|
||||
}
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
try {
|
||||
if (getUserIdMethod != null && addPowerSaveTempWhitelistAppMethod != null && deviceIdleController != null) {
|
||||
int userId = (int) getUserIdMethod.invoke(null, getPackageManager().getApplicationInfo(packageName, 0).uid);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2021, microG Project Team
|
||||
* SPDX-FileCopyrightText: 2021 microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
|
@ -91,4 +91,11 @@ object Build {
|
|||
@JvmField
|
||||
var SECURITY_PATCH: String? = null
|
||||
}
|
||||
|
||||
fun generateWebViewUserAgentString(original: String): String {
|
||||
if (!original.startsWith("Mozilla/5.0 (")) return original
|
||||
val closeParen: Int = original.indexOf(')')
|
||||
|
||||
return "Mozilla/5.0 (Linux; Android ${VERSION.RELEASE}; $MODEL Build/$ID; wv)${original.substring(closeParen + 1)}"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,8 +69,9 @@ class PushNotificationPreferencesFragment : PreferenceFragmentCompat() {
|
|||
private fun updateStatus() {
|
||||
try {
|
||||
handler.postDelayed(updateRunnable, UPDATE_INTERVAL)
|
||||
val appContext = requireContext().applicationContext
|
||||
lifecycleScope.launchWhenStarted {
|
||||
val statusInfo = getGcmServiceInfo(requireContext())
|
||||
val statusInfo = getGcmServiceInfo(appContext)
|
||||
pushStatusCategory.isVisible = statusInfo.configuration.enabled
|
||||
pushStatus.summary = if (statusInfo.connected) {
|
||||
getString(R.string.gcm_network_state_connected, DateUtils.getRelativeTimeSpanString(statusInfo.startTimestamp, System.currentTimeMillis(), 0))
|
||||
|
@ -82,21 +83,22 @@ class PushNotificationPreferencesFragment : PreferenceFragmentCompat() {
|
|||
}
|
||||
|
||||
private fun updateContent() {
|
||||
val appContext = requireContext().applicationContext
|
||||
val context = requireContext()
|
||||
lifecycleScope.launchWhenResumed {
|
||||
val context = requireContext()
|
||||
val (apps, showAll) = withContext(Dispatchers.IO) {
|
||||
val apps = database.appList.sortedByDescending { it.lastMessageTimestamp }
|
||||
val res = apps.map { app ->
|
||||
app to context.packageManager.getApplicationInfoIfExists(app.packageName)
|
||||
app to appContext.packageManager.getApplicationInfoIfExists(app.packageName)
|
||||
}.mapNotNull { (app, info) ->
|
||||
if (info == null) null else app to info
|
||||
}.take(3).mapIndexed { idx, (app, applicationInfo) ->
|
||||
val pref = AppIconPreference(context)
|
||||
val pref = AppIconPreference(appContext)
|
||||
pref.order = idx
|
||||
pref.title = applicationInfo.loadLabel(context.packageManager)
|
||||
pref.icon = applicationInfo.loadIcon(context.packageManager)
|
||||
pref.title = applicationInfo.loadLabel(appContext.packageManager)
|
||||
pref.icon = applicationInfo.loadIcon(appContext.packageManager)
|
||||
pref.onPreferenceClickListener = Preference.OnPreferenceClickListener {
|
||||
findNavController().navigate(requireContext(), R.id.openGcmAppDetails, bundleOf(
|
||||
findNavController().navigate(context, R.id.openGcmAppDetails, bundleOf(
|
||||
"package" to app.packageName
|
||||
))
|
||||
true
|
||||
|
|
|
@ -20,25 +20,25 @@
|
|||
<string name="gms_settings_name">Nastavení Vanced microG</string>
|
||||
<string name="gms_settings_summary">Nastavení Vanced microG.</string>
|
||||
|
||||
<string name="notification_service_name">Varování o úspoře baterie</string>
|
||||
<string name="notification_service_name">Varování o úspoře baterie</string>
|
||||
<string name="small_notification_service_title">Rozbalit oznámení</string>
|
||||
<string name="big_notification_service_title">Nechte microG běžet na pozadí</string>
|
||||
<string name="notification_service_content">Klepnutím zde přejděte do nastavení a zakažte optimalizaci baterie pro aplikaci Vanced microG. Po provedení této akce a restartu zařízení toto oznámení zmizí</string>
|
||||
<string name="notification_service_content">Klepnutím zde přejděte do nastavení a zakažte optimalizaci baterie pro aplikaci Vanced microG. Po provedení této akce a restartu zařízení toto oznámení zmizí</string>
|
||||
|
||||
<string name="just_a_sec">Počkejte chviličku…</string>
|
||||
<string name="account_manager_title">Google Account Manager</string>
|
||||
<string name="sorry">Promiňte…</string>
|
||||
<string name="auth_before_connect">"Aplikace na vašem zařízení se pokouší přihlásit se k účtu Google.
|
||||
<string name="auth_before_connect">"Aplikace na vašem zařízení se pokouší přihlásit se k účtu Google.
|
||||
|
||||
Jestliže tuto aktivitu poznáváte, a provádíte ji úmyslně, klepněte na tlačítko <b>PŘIHLÁSIT</b> (nebo na tlačítko <b>HUAWEI</b>, pokud používáte zařízení od tohoto výrobce) pro připojení k přihlašovací stránce Google. Jestliže ji nepoznáváte, klepněte na tlačítko <b>ZRUŠIT</b> pro návrat do aplikace, kvůli které se tento dialog zobrazil."</string>
|
||||
Jestliže tuto aktivitu poznáváte, a provádíte ji úmyslně, klepněte na tlačítko <b>PŘIHLÁSIT</b> (nebo na tlačítko <b>HUAWEI</b>, pokud používáte zařízení od tohoto výrobce) pro připojení k přihlašovací stránce Google. Jestliže ji nepoznáváte, klepněte na tlačítko <b>ZRUŠIT</b> pro návrat do aplikace, kvůli které se tento dialog zobrazil."</string>
|
||||
<string name="auth_sign_in">Přihlásit</string>
|
||||
<string name="auth_connecting">"Zahajuje se navázání spojení se servery Google, abyste se mohli přihlásit.
|
||||
|
||||
Může to chvilku trvat."</string>
|
||||
<string name="no_network_error_desc">"Nemáte přístup k síti.
|
||||
<string name="no_network_error_desc">"Nemáte přístup k síti.
|
||||
|
||||
Může jít o dočasný problém nebo ve vašem zařízení nemusí být zřízeny datové služby. Připojte se k mobilní síti nebo k síti Wi\u2011Fi."</string>
|
||||
<string name="auth_general_error_desc">"Při komunikaci se servery Google došlo k potížím.
|
||||
Může jít o dočasný problém nebo ve vašem zařízení nemusí být zřízeny datové služby. Připojte se k mobilní síti nebo k síti Wi\u2011Fi."</string>
|
||||
<string name="auth_general_error_desc">"Při komunikaci se servery Google došlo k potížím.
|
||||
|
||||
Zkuste to později."</string>
|
||||
<string name="auth_finalize">"Vaše zařízení právě kontaktuje Google za účelem uložení informací do vašeho účtu.
|
||||
|
@ -46,9 +46,9 @@ Zkuste to později."</string>
|
|||
Tato akce může trvat několik minut."</string>
|
||||
|
||||
<string name="perm_status_broadcast_label">poslouchat interní stavová vysílání</string>
|
||||
<string name="perm_c2dm_receive_label">poslouchat zprávy C2DM</string>
|
||||
<string name="perm_c2dm_send_label">odesílat zprávy C2DM do ostatních aplikací</string>
|
||||
<string name="perm_gtalk_svc_label">vyměňovat si zprávy a přijímat oznámení o synchronizaci ze serverů Google</string>
|
||||
<string name="perm_c2dm_receive_label">poslouchat zprávy C2DM</string>
|
||||
<string name="perm_c2dm_send_label">odesílat zprávy C2DM do ostatních aplikací</string>
|
||||
<string name="perm_gtalk_svc_label">vyměňovat si zprávy a přijímat oznámení o synchronizaci ze serverů Google</string>
|
||||
<string name="perm_extended_access_label">Rozšířený přístup ke službám Google</string>
|
||||
|
||||
<string name="service_name_checkin">Registrace zařízení Google</string>
|
||||
|
@ -68,7 +68,7 @@ Tato akce může trvat několik minut."</string>
|
|||
|
||||
<!-- Settings strings -->
|
||||
|
||||
<string name="prefcat_about">O aplikaci</string>
|
||||
<string name="prefcat_about">O aplikaci</string>
|
||||
<string name="prefcat_google_services">Služby Google</string>
|
||||
<string name="pref_more_settings">Více</string>
|
||||
|
||||
|
@ -76,11 +76,11 @@ Tato akce může trvat několik minut."</string>
|
|||
<string name="checkin_last_registration">Naposledy registrováno: <xliff:g example="Yesterday, 02:20 PM">%1$s</xliff:g></string>
|
||||
|
||||
<string name="prefs_account">Předvolby účtu</string>
|
||||
<string name="prefs_account_privacy">Osobní informace a soukromí</string>
|
||||
<string name="prefs_account_security">Přihlášení a zabezpečení</string>
|
||||
<string name="prefs_account_privacy">Osobní informace a soukromí</string>
|
||||
<string name="prefs_account_security">Přihlášení a zabezpečení</string>
|
||||
|
||||
<string name="pref_auth_trust_google_title">Důvěřovat společnosti Google ohledně oprávnění aplikací</string>
|
||||
<string name="pref_auth_trust_google_summary">Je-li toto nastavení zakázáno, uživatel je dotázán ještě předtím, než je žádost aplikace o ověření odeslána společnosti Google. Pokud je toto nastavení zakázano, některé aplikace nebudou moci používat účet Google.</string>
|
||||
<string name="pref_auth_trust_google_summary">Je-li toto nastavení zakázáno, uživatel je dotázán ještě předtím, než je žádost aplikace o ověření odeslána společnosti Google. Pokud je toto nastavení zakázano, některé aplikace nebudou moci používat účet Google.</string>
|
||||
<string name="pref_auth_visible_title">Dovolit aplikacím vyhledávat účty</string>
|
||||
<string name="pref_auth_visible_summary">Je-li toto nastavení povoleno, všechny aplikace na tomto zařízení budou moci přečíst e\u2011mailovou adresu všech vašich účtů Google bez předchozího vyžádání oprávnění.</string>
|
||||
|
||||
|
@ -90,14 +90,14 @@ Tato akce může trvat několik minut."</string>
|
|||
<string name="pref_gcm_enable_mcs_summary">Cloud Messaging je poskytovatel push oznámení využívaný mnoha aplikacemi třetích stran. Chcete\u2011li jej použít, musíte povolit registraci zařízení.</string>
|
||||
|
||||
<string name="pref_about_title">O aplikaci Vanced microG</string>
|
||||
<string name="pref_cast_double_fix">Opravit duplicity ve Vysílání</string>
|
||||
<string name="pref_cast_double_fix">Opravit duplicity ve Vysílání</string>
|
||||
<string name="hideLauncherIcon">Skrýt ikonu ze spouštěče</string>
|
||||
|
||||
<string name="brand_spoof_button">Huawei</string>
|
||||
|
||||
<string name="pref_switcher_title">Registrovat zařízení</string>
|
||||
<string name="pref_checkin_enable_summary">Zaregistruje vaše zařízení do služeb Google a vytvoří pro něj unikátní identifikátor. Vanced microG z dat nutných pro registraci odstraní všechny identifikační údaje kromě názvu vašeho účtu Google.</string>
|
||||
<string name="pref_device_registration_android_id">Android ID</string>
|
||||
<string name="pref_checkin_enable_summary">Zaregistruje vaše zařízení do služeb Google a vytvoří pro něj unikátní identifikátor. Vanced microG z dat nutných pro registraci odstraní všechny identifikační údaje kromě názvu vašeho účtu Google.</string>
|
||||
<string name="pref_device_registration_android_id">Android ID</string>
|
||||
<string name="pref_info_status">Stav</string>
|
||||
|
||||
<string name="gcm_status_pref_default">Výchozí</string>
|
||||
|
@ -112,7 +112,7 @@ Tato akce může trvat několik minut."</string>
|
|||
<string name="gcm_unregister_confirm_title">Zrušit registraci aplikaci <xliff:g example="F-Droid">%1$s</xliff:g>?</string>
|
||||
<string name="gcm_unregister_confirm_message">Některé aplikace se nezaregistrují znovu automaticky a/nebo neposkytují možnost tento úkon provést manuálně. Takové aplikace nemusí po zrušení registrace fungovat správně.\nPřejete si pokračovat?</string>
|
||||
<string name="gcm_unregister_after_deny_message">Aplikaci, která již je registrovaná, jste zamítli registraci pro příjem push oznámení.\nPřejete si pro ní registraci zrušit, aby push zprávy do budoucna již nepřijímala?</string>
|
||||
<string name="gcm_messages_counter">Počet zpráv: <xliff:g example="123">%1$d</xliff:g> (<xliff:g example="12345">%2$d</xliff:g> bajtů)</string>
|
||||
<string name="gcm_messages_counter">Počet zpráv: <xliff:g example="123">%1$d</xliff:g> (<xliff:g example="12345">%2$d</xliff:g> bajtů)</string>
|
||||
<string name="gcm_network_state_disconnected">Odpojeno</string>
|
||||
<string name="gcm_network_state_connected">Připojeno: <xliff:g example="2 hours ago">%1$s</xliff:g></string>
|
||||
|
||||
|
@ -125,6 +125,17 @@ Tato akce může trvat několik minut."</string>
|
|||
<string name="prefcat_push_apps_registered_title">Registrované aplikace</string>
|
||||
<string name="prefcat_push_apps_unregistered_title">Aplikace se zrušenou registrací</string>
|
||||
<string name="prefcat_push_networks_title">Sítě používané pro push oznámení</string>
|
||||
<string name="pref_cast_double_fix_summary">Povolte toto nastavení, jestliže zaznamenáte duplicity v menu Vysílání</string>
|
||||
<string name="pref_cast_double_fix_summary">Povolte toto nastavení, jestliže zaznamenáte duplicity v menu Vysílání</string>
|
||||
|
||||
<string name="device_profile_name">Profil zařízení</string>
|
||||
<string name="profile_name">Vybrat profil</string>
|
||||
<string name="profile_name_native">Nativní</string>
|
||||
<string name="profile_name_real">Reálný</string>
|
||||
<string name="profile_name_user">Vlastní: %s</string>
|
||||
<string name="profile_name_auto">Automatický: %s</string>
|
||||
<string name="profile_name_system">Systém: %s</string>
|
||||
<string name="import_profile_name">Importovat vlastní profil</string>
|
||||
<string name="import_profile_summary">Importovat profil zařízení ze souboru</string>
|
||||
<string name="serial_name">Serial</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013-2017 microG Project Team
|
||||
~
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<resources>
|
||||
|
||||
<string-array name="gcm_network_config_values" translatables="false">
|
||||
<item>-1</item>
|
||||
<item>0</item>
|
||||
<item>2</item>
|
||||
<item>5</item>
|
||||
<item>10</item>
|
||||
<item>15</item>
|
||||
<item>20</item>
|
||||
<item>30</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="gcm_network_config_names" translatables="false">
|
||||
<item>@string/service_status_disabled_short</item>
|
||||
<item>@string/gcm_status_pref_default</item>
|
||||
<item>Intervalo de ping: 2 minutos</item>
|
||||
<item>Intervalo de ping: 5 minutos</item>
|
||||
<item>Intervalo de ping: 10 minutos</item>
|
||||
<item>Intervalo de ping: 15 minutos</item>
|
||||
<item>Intervalo de ping: 20 minutos</item>
|
||||
<item>Intervalo de ping: 30 minutos</item>
|
||||
</string-array>
|
||||
</resources>
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2017 microG Project Team
|
||||
~
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<plurals name="gcm_registered_apps_counter">
|
||||
<item quantity="one"><xliff:g example="1">%1$d</xliff:g> Aplicativo registrado</item>
|
||||
<item quantity="other"><xliff:g example="123">%1$d</xliff:g> Aplicativo registrados</item>
|
||||
</plurals>
|
||||
</resources>
|
|
@ -0,0 +1,139 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013-2017 microG Project Team
|
||||
~
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="gms_settings_name">Configurações do Vanced microG</string>
|
||||
<string name="gms_settings_summary">Configuração do Vanced microG.</string>
|
||||
|
||||
<string name="notification_service_name">Aviso de Economia de Bateria</string>
|
||||
<string name="small_notification_service_title">Expandir notificação</string>
|
||||
<string name="big_notification_service_title">Mantenha o microG em segundo plano</string>
|
||||
<string name="notification_service_content">Toque aqui para desativar a otimização da bateria para o vanced microG e, em seguida, reinicie o dispositivo para remover esta notificação</string>
|
||||
|
||||
<string name="just_a_sec">Só um segundo...</string>
|
||||
<string name="account_manager_title">Gerente de Contas do Google</string>
|
||||
<string name="sorry">Desculpa...</string>
|
||||
<string name="auth_before_connect">"Um aplicativo em seu dispositivo está tentando fazer login em uma conta do Google.
|
||||
|
||||
Se isso foi intencional, use o botão <b>Entrar</b> (ou <b>Huawei</b>, se você tiver um dispositivo com esta marca) para se conectar à página de login do Google, se não, pressione <b>Cancelar</b> para voltar ao aplicativo que fez com que essa caixa de diálogo aparecesse."</string>
|
||||
<string name="auth_sign_in">Entrar</string>
|
||||
<string name="auth_connecting">"Estabelecendo uma conexão com os servidores do Google para fazer login.
|
||||
|
||||
Isso pode levar alguns segundos."</string>
|
||||
<string name="no_network_error_desc">"Você não tem uma conexão de rede.
|
||||
|
||||
Isso pode ser um problema temporário ou seu dispositivo Android pode não ser configurado para serviços de dados. Tente novamente quando conectado a uma rede móvel ou conecte-se a uma rede Wi-Fi."</string>
|
||||
<string name="auth_general_error_desc">"Houve um problema na comunicação com os servidores do Google.
|
||||
|
||||
Tente de novo mais tarde."</string>
|
||||
<string name="auth_finalize">"Seu dispositivo está entrando em contato com o Google para salvar informações em sua conta.
|
||||
|
||||
Isso pode levar alguns minutos."</string>
|
||||
|
||||
<string name="perm_status_broadcast_label">Escutar as transmissões de status interno</string>
|
||||
<string name="perm_c2dm_receive_label">Escutar mensagens C2DM</string>
|
||||
<string name="perm_c2dm_send_label">Enviar mensagens C2DM para outros aplicativos</string>
|
||||
<string name="perm_gtalk_svc_label">Trocar mensagens e receber notificações de sincronização de servidores do Google</string>
|
||||
<string name="perm_extended_access_label">Acesso estendido aos serviços do Google</string>
|
||||
|
||||
<string name="service_name_checkin">Registro de dispositivos do Google</string>
|
||||
<string name="service_name_mcs">Cloud Messaging</string>
|
||||
|
||||
<string name="service_status_enabled_short">Ligado</string>
|
||||
<string name="service_status_disabled_short">Desligado</string>
|
||||
|
||||
<string name="menu_advanced">Avançado</string>
|
||||
<string name="list_no_item_none">Nenhum</string>
|
||||
<string name="list_item_see_all">Veja tudo</string>
|
||||
|
||||
<string name="network_type_mobile">Rede móvel</string>
|
||||
<string name="network_type_wifi">Wi-Fi</string>
|
||||
<string name="network_type_roaming">Roaming</string>
|
||||
<string name="network_type_other">Outras redes</string>
|
||||
|
||||
<!-- Settings strings -->
|
||||
|
||||
<string name="prefcat_about">Sobre</string>
|
||||
<string name="prefcat_google_services">Serviços do Google</string>
|
||||
<string name="pref_more_settings">Mais</string>
|
||||
|
||||
<string name="checkin_not_registered">Não registrado</string>
|
||||
<string name="checkin_last_registration">Último registro: <xliff:g example="Yesterday, 02:20 PM">%1$s</xliff:g></string>
|
||||
|
||||
<string name="prefs_account">Preferências da conta</string>
|
||||
<string name="prefs_account_privacy">Informações pessoais & privacidade</string>
|
||||
<string name="prefs_account_security">Entrar & segurança</string>
|
||||
|
||||
<string name="pref_auth_trust_google_title">Confiar permissões de aplicativos no Google</string>
|
||||
<string name="pref_auth_trust_google_summary">Quando desativado, o usuário é solicitado antes que uma solicitação de autorização de aplicativos seja enviada ao Google. Alguns aplicativos não usarão a conta do Google se isso for desativado.</string>
|
||||
<string name="pref_auth_visible_title">Permitir que aplicativos encontrem contas</string>
|
||||
<string name="pref_auth_visible_summary">Quando ativado, todos os aplicativos deste dispositivo poderão ver o endereço de e-mail de suas contas do Google sem autorização prévia.</string>
|
||||
|
||||
<string name="pref_add_account_title">Conta</string>
|
||||
<string name="pref_add_account_summary">Adicionar conta do Google</string>
|
||||
<string name="pref_gcm_switcher_title">Receba notificações push</string>
|
||||
<string name="pref_gcm_enable_mcs_summary">Cloud Messaging é um provedor de notificação push usado por muitos aplicativos de terceiros. Para usá-lo, você deve ativar ao registro do dispositivo.</string>
|
||||
|
||||
<string name="pref_about_title">Sobre o Vanced microG</string>
|
||||
<string name="pref_cast_double_fix">Corrigir duplicação do Cast</string>
|
||||
<string name="hideLauncherIcon">Ocultar ícone no menu</string>
|
||||
|
||||
<string name="brand_spoof_button">Huawei</string>
|
||||
|
||||
<string name="pref_switcher_title">Registar dispositivo</string>
|
||||
<string name="pref_checkin_enable_summary">Registre seu dispositivo nos serviços do Google e cria um identificador de dispositivo exclusivo. Vanced microG identifica e tiras bits que não sejam o nome da sua conta do Google a partir de dados de registro.</string>
|
||||
<string name="pref_device_registration_android_id">ID do Android</string>
|
||||
<string name="pref_info_status">Status</string>
|
||||
|
||||
<string name="gcm_status_pref_default">Padrão</string>
|
||||
<string name="gcm_status_pref_manual">Manual</string>
|
||||
<string name="gcm_status_pref_sec">segundos</string>
|
||||
<string name="gcm_status_pref_min">minutos</string>
|
||||
<string name="gcm_unregister_app">Sem registrado</string>
|
||||
<string name="gcm_no_message_yet">Nenhuma mensagem recebida até agora</string>
|
||||
<string name="gcm_last_message_at">Última mensagem: <xliff:g example="Yesterday, 02:20 PM">%1$s</xliff:g></string>
|
||||
<string name="gcm_registered">Registrado</string>
|
||||
<string name="gcm_registered_since">Registrado desde: <xliff:g example="Yesterday, 02:20 PM">%1$s</xliff:g></string>
|
||||
<string name="gcm_unregister_confirm_title">Sem registrado <xliff:g example="F-Droid">%1$s</xliff:g>?</string>
|
||||
<string name="gcm_unregister_confirm_message">Alguns aplicativos não se recadastram automaticamente e/ou não oferecem uma opção para fazê-lo manualmente. Esses aplicativos podem não funcionar corretamente após o não registro.\nContinuar?</string>
|
||||
<string name="gcm_unregister_after_deny_message">Você negou um aplicativo para se registrar notificações push que já estão registradas.\nVocê quer desregissá-lo agora para que ele não receba mensagens push no futuro?</string>
|
||||
<string name="gcm_messages_counter">Mensagens: <xliff:g example="123">%1$d</xliff:g> (<xliff:g example="12345">%2$d</xliff:g> bytes)</string>
|
||||
<string name="gcm_network_state_disconnected">Desconectado</string>
|
||||
<string name="gcm_network_state_connected">Conectado à <xliff:g example="2 hours ago">%1$s</xliff:g></string>
|
||||
|
||||
<string name="pref_push_app_allow_register_title">Permitir registro</string>
|
||||
<string name="pref_push_app_allow_register_summary">Permita que o aplicativo se registre para notificações push.</string>
|
||||
<string name="pref_push_app_wake_for_delivery_title">Iniciar aplicativo na mensagem push</string>
|
||||
<string name="pref_push_app_wake_for_delivery_summary">Inicie o aplicativo em segundo plano para receber as mensagens push recebidas.</string>
|
||||
<string name="prefcat_status_title">Status</string>
|
||||
<string name="prefcat_push_apps_title">Aplicativos usando notificações push</string>
|
||||
<string name="prefcat_push_apps_registered_title">Aplicativos registrados</string>
|
||||
<string name="prefcat_push_apps_unregistered_title">Aplicativos não registrados</string>
|
||||
<string name="prefcat_push_networks_title">Redes para usar em notificações push</string>
|
||||
<string name="pref_cast_double_fix_summary">Ative isso se você ver o menu casting duplicado</string>
|
||||
|
||||
<string name="device_profile_name">Perfil do dispositivo</string>
|
||||
<string name="profile_name">Selecionar perfil</string>
|
||||
<string name="profile_name_native">Nativo</string>
|
||||
<string name="profile_name_real">Real</string>
|
||||
<string name="profile_name_user">Personalizado: %s</string>
|
||||
<string name="profile_name_auto">Automático: %s</string>
|
||||
<string name="profile_name_system">Sistema: %s</string>
|
||||
<string name="import_profile_name">Importar perfil personalizado</string>
|
||||
<string name="import_profile_summary">Importar perfil do dispositivo a partir do arquivo</string>
|
||||
<string name="serial_name">Serial</string>
|
||||
</resources>
|
|
@ -20,7 +20,6 @@ import android.app.PendingIntent;
|
|||
|
||||
import com.google.android.gms.location.ILocationCallback;
|
||||
import com.google.android.gms.location.ILocationListener;
|
||||
import com.google.android.gms.location.internal.IFusedLocationProviderCallback;
|
||||
|
||||
import org.microg.safeparcel.AutoSafeParcelable;
|
||||
import org.microg.safeparcel.SafeParceled;
|
||||
|
|
Loading…
Reference in New Issue