Compare commits

...

21 Commits

Author SHA1 Message Date
KevinX8 6814161c48
Remove the oop 2022-03-11 09:51:17 +00:00
KevinX8 309544601e
Merge pull request #183 from DavidBrazSan/master
Add translation of Portuguese Brazil
2022-03-09 12:20:17 +00:00
KevinX8 88f083616a
Merge pull request #184 from Oizaro/master
New stuff
2022-03-08 19:52:54 +00:00
Oizaro 895b6628fb Update deps 2022-03-08 20:18:59 +01:00
Oizaro 61582b63d0 Use new method for lifting idle restrictions temporarily when receiving PUSH messages 2022-03-08 20:18:49 +01:00
David BrazSan 77b560e620
Create strings.xml 2022-02-28 11:14:14 -03:00
David BrazSan 1899564f74
Create plurals.xml 2022-02-28 11:13:23 -03:00
David BrazSan 7e5f008906
Create arrays.xml 2022-02-28 11:12:39 -03:00
KevinX8 379346614c
Merge pull request #178 from Oizaro/master
Restore previous services list
2022-02-11 16:43:15 +00:00
KevinX8 cafd5ee4d4
Merge pull request #177 from novas78/master
Update of Czech translation
2022-02-11 15:43:14 +00:00
Lukas Novotny 2b2581d131
Update of Czech translation 2022-02-11 16:15:20 +01:00
Oizaro 6ca53537ee Restore previous services list 2022-02-11 16:06:20 +01:00
KevinX8 dc6426b9ff
Merge pull request #175 from Oizaro/master
Fix potential context crash + update deps
2022-02-09 21:39:28 +00:00
Oizaro 8a0361ea5e Fix potential context crash + update deps 2022-02-09 22:17:39 +01:00
KevinX8 d3092c4579
Merge pull request #174 from Oizaro/master
MicroG 0.2.24.220220
2022-02-07 09:40:00 +00:00
Oizaro 56538dd003 Merge remote-tracking branch 'upstream/master' 2022-02-05 12:52:03 +01:00
Oizaro a33a62ac79 MicroG 0.2.24.220220 2022-02-05 12:45:55 +01:00
Marvin W 17b8371b48
Update UnifiedNlp version 2022-02-01 20:23:12 +01:00
Marvin W adf534d20a
ENF: Replace invalid RSSI values in database 2022-02-01 14:47:52 +01:00
Tim Hetkämper 75aaeb1fc6 ENF: Fix average RSSI calculation
Correctly discard new measurements when the reported timestamp is older
than the timestamp in the database.
Fixes https://github.com/microg/GmsCore/issues/1655.
2022-02-01 13:50:37 +01:00
Marvin W 61957c33cd
ProfileManager: Allow overriding User-Agent in WebView 2022-02-01 13:36:39 +01:00
17 changed files with 358 additions and 352 deletions

View File

@ -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

View File

@ -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
}

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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'

View File

@ -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>

View File

@ -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;

View File

@ -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);

View File

@ -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)}"
}
}

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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 &amp; privacidade</string>
<string name="prefs_account_security">Entrar &amp; 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>

View File

@ -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;