From e1b757de3e5003a3cee2e3a9d4e16cfb5a778ade Mon Sep 17 00:00:00 2001 From: mar-v-in Date: Sat, 4 Jul 2015 13:47:27 +0200 Subject: [PATCH] Various fixes, Checkin (dependency for GCM) is still broken! Fix lint (fixes #20) (hopefully) Fix mcs loop (could cause high battery drain) Show link to UnifiedNlp in settings (mentioned in #10, @XDA) Add extended description for settings (mentioned @XDA) --- extern/GmsApi | 2 +- extern/UnifiedNlp | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- play-services-core/build.gradle | 14 +++++++----- .../src/main/AndroidManifest.xml | 7 ++++-- .../java/org/microg/gms/gcm/McsService.java | 6 +++++ .../org/microg/gms/gcm/PendingReceiver.java | 20 +++++++++++++++++ .../org/microg/gms/gcm/TriggerReceiver.java | 22 ++++++++++++++----- .../src/main/res/values/signature.xml | 2 +- .../src/main/res/values/strings.xml | 10 +++++++++ .../src/main/res/xml/gms_preferences.xml | 21 +++++++++++++----- 11 files changed, 85 insertions(+), 23 deletions(-) create mode 100644 play-services-core/src/main/java/org/microg/gms/gcm/PendingReceiver.java diff --git a/extern/GmsApi b/extern/GmsApi index ef5e6dc0..2c847ce6 160000 --- a/extern/GmsApi +++ b/extern/GmsApi @@ -1 +1 @@ -Subproject commit ef5e6dc0668a8ca152aa38a78f0e91d65120d3b6 +Subproject commit 2c847ce6e8ac1604356dc45fd672cfdd6ad4d73b diff --git a/extern/UnifiedNlp b/extern/UnifiedNlp index 06341df3..74fb8b69 160000 --- a/extern/UnifiedNlp +++ b/extern/UnifiedNlp @@ -1 +1 @@ -Subproject commit 06341df3469b581e2bf5ab46e09cc1bb75a5d811 +Subproject commit 74fb8b696aaf35584b97c86eb7d9e67aaaf0e685 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 114dacf1..75697d4e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip diff --git a/play-services-core/build.gradle b/play-services-core/build.gradle index c7964efa..e8087a11 100644 --- a/play-services-core/build.gradle +++ b/play-services-core/build.gradle @@ -16,25 +16,25 @@ buildscript { repositories { - mavenCentral() + jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.1.0' + classpath 'com.android.tools.build:gradle:1.2.3' } } apply plugin: 'com.android.application' repositories { - mavenCentral() + jcenter() flatDir { dirs '../libs' } } dependencies { - compile 'com.android.support:support-v4:22.0.0' - compile 'com.android.support:appcompat-v7:22.0.0' + compile 'com.android.support:support-v4:22.2.0' + compile 'com.android.support:appcompat-v7:22.2.0' compile 'de.hdodenhof:circleimageview:1.2.1' compile 'com.squareup.wire:wire-runtime:1.6.1' compile project(':play-services-api') @@ -64,6 +64,10 @@ android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_6 } + lintOptions { + // TODO: Remove MissingTranslation once we have stable strings and proper translations. + disable 'MissingTranslation', 'InvalidPackage' + } } if (file('user.gradle').exists()) { diff --git a/play-services-core/src/main/AndroidManifest.xml b/play-services-core/src/main/AndroidManifest.xml index b259f4e7..375e47ad 100644 --- a/play-services-core/src/main/AndroidManifest.xml +++ b/play-services-core/src/main/AndroidManifest.xml @@ -19,7 +19,7 @@ android:versionName="7.5.74 (µg v0.01)"> + + @@ -337,7 +339,8 @@ + android:label="@string/gms_settings_name" + android:theme="@style/SettingsTheme"> diff --git a/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java b/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java index 0b1939f5..fc89ec33 100644 --- a/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java +++ b/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java @@ -61,6 +61,7 @@ public class McsService extends IntentService { public static final int HEARTBEAT_MS = 60000; public static final int HEARTBEAT_ALLOWED_OFFSET_MS = 2000; private static final AtomicBoolean connecting = new AtomicBoolean(false); + private static final AtomicBoolean pending = new AtomicBoolean(false); private static Thread connectionThread; private static Thread heartbeatThread; @@ -73,6 +74,10 @@ public class McsService extends IntentService { super(TAG); } + public static AtomicBoolean getPending() { + return pending; + } + @Override protected void onHandleIntent(Intent intent) { if (!isConnected()) { @@ -86,6 +91,7 @@ public class McsService extends IntentService { } else { Log.d(TAG, "MCS connection already started"); } + pending.set(false); } public static boolean isConnected() { diff --git a/play-services-core/src/main/java/org/microg/gms/gcm/PendingReceiver.java b/play-services-core/src/main/java/org/microg/gms/gcm/PendingReceiver.java new file mode 100644 index 00000000..27896612 --- /dev/null +++ b/play-services-core/src/main/java/org/microg/gms/gcm/PendingReceiver.java @@ -0,0 +1,20 @@ +/* + * Copyright 2013-2015 µg 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. + */ + +package org.microg.gms.gcm; + +public class PendingReceiver { +} diff --git a/play-services-core/src/main/java/org/microg/gms/gcm/TriggerReceiver.java b/play-services-core/src/main/java/org/microg/gms/gcm/TriggerReceiver.java index af395c1c..6cc5dec3 100644 --- a/play-services-core/src/main/java/org/microg/gms/gcm/TriggerReceiver.java +++ b/play-services-core/src/main/java/org/microg/gms/gcm/TriggerReceiver.java @@ -16,29 +16,39 @@ package org.microg.gms.gcm; +import android.app.AlarmManager; +import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import android.os.SystemClock; import android.preference.PreferenceManager; public class TriggerReceiver extends BroadcastReceiver { private static final String PREF_ENABLE_GCM = "gcm_enable_mcs_service"; + private static final long pendingDelay = 1000; @Override public void onReceive(Context context, Intent intent) { boolean force = "android.provider.Telephony.SECRET_CODE".equals(intent.getAction()); - ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo networkInfo = cm.getActiveNetworkInfo(); + if (McsService.getPending().compareAndSet(false, true)) { + if (!McsService.isConnected() || force) { + if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean(PREF_ENABLE_GCM, false) || force) { - if (networkInfo != null && networkInfo.isConnected() || force) { - if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean(PREF_ENABLE_GCM, false) || force) { - if (!McsService.isConnected() || force) { - context.startService(new Intent(context, McsService.class)); + ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = cm.getActiveNetworkInfo(); + if (networkInfo != null && networkInfo.isConnected() || force) { + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + PendingIntent pendingIntent = PendingIntent.getService(context, 0, new Intent(context, McsService.class), 0); + alarmManager.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + pendingDelay, pendingIntent); + return; + } } } + McsService.getPending().set(false); } } } diff --git a/play-services-core/src/main/res/values/signature.xml b/play-services-core/src/main/res/values/signature.xml index f19ccbfb..0a580d89 100644 --- a/play-services-core/src/main/res/values/signature.xml +++ b/play-services-core/src/main/res/values/signature.xml @@ -15,7 +15,7 @@ --> - + 308204433082032ba003020102020900c2e08746644a308d300d06092a864886f70d01010405003074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964301e170d3038303832313233313333345a170d3336303130373233313333345a3074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f696430820120300d06092a864886f70d01010105000382010d00308201080282010100ab562e00d83ba208ae0a966f124e29da11f2ab56d08f58e2cca91303e9b754d372f640a71b1dcb130967624e4656a7776a92193db2e5bfb724a91e77188b0e6a47a43b33d9609b77183145ccdf7b2e586674c9e1565b1f4c6a5955bff251a63dabf9c55c27222252e875e4f8154a645f897168c0b1bfc612eabf785769bb34aa7984dc7e2ea2764cae8307d8c17154d7ee5f64a51a44a602c249054157dc02cd5f5c0e55fbef8519fbe327f0b1511692c5a06f19d18385f5c4dbc2d6b93f68cc2979c70e18ab93866b3bd5db8999552a0e3b4c99df58fb918bedc182ba35e003c1b4b10dd244a8ee24fffd333872ab5221985edab0fc0d0b145b6aa192858e79020103a381d93081d6301d0603551d0e04160414c77d8cc2211756259a7fd382df6be398e4d786a53081a60603551d2304819e30819b8014c77d8cc2211756259a7fd382df6be398e4d786a5a178a4763074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964820900c2e08746644a308d300c0603551d13040530030101ff300d06092a864886f70d010104050003820101006dd252ceef85302c360aaace939bcff2cca904bb5d7a1661f8ae46b2994204d0ff4a68c7ed1a531ec4595a623ce60763b167297a7ae35712c407f208f0cb109429124d7b106219c084ca3eb3f9ad5fb871ef92269a8be28bf16d44c8d9a08e6cb2f005bb3fe2cb96447e868e731076ad45b33f6009ea19c161e62641aa99271dfd5228c5c587875ddb7f452758d661f6cc0cccb7352e424cc4365c523532f7325137593c4ae341f4db41edda0d0b1071a7c440f0fe9ea01cb627ca674369d084bd2fd911ff06cdbf2cfa10dc0f893ae35762919048c7efc64c7144178342f70581c9de573af55b390dd7fdb9418631895d5f759f30112687ff621410c069308a \ No newline at end of file diff --git a/play-services-core/src/main/res/values/strings.xml b/play-services-core/src/main/res/values/strings.xml index ea9b39c7..b6f9c60e 100644 --- a/play-services-core/src/main/res/values/strings.xml +++ b/play-services-core/src/main/res/values/strings.xml @@ -34,5 +34,15 @@ Trust Google for app permissions When disabled, the user is asked before an apps authorization request is sent to Google. Some applications will fail to use the Google account if this is disabled. + checkin_enable_service + Enable device checkin + Device checkin is a hidden process that is used to create an unique identifier for Google services. µg GmsCore strips identifying bits other than your Google account name from this data. + gcm_enable_mcs_service + Enable Google Cloud Messaging + Google Cloud Messaging is a push notification provider used by many applications. To use it you must enable device checkin. + + Background services + Components + µg Settings diff --git a/play-services-core/src/main/res/xml/gms_preferences.xml b/play-services-core/src/main/res/xml/gms_preferences.xml index b8e339dd..55f10198 100644 --- a/play-services-core/src/main/res/xml/gms_preferences.xml +++ b/play-services-core/src/main/res/xml/gms_preferences.xml @@ -15,15 +15,24 @@ --> - + + android:key="@string/pref_checkin_enable" + android:summary="@string/pref_checkin_enable_summary" + android:title="@string/pref_checkin_enable_title" /> + android:dependency="@string/pref_checkin_enable" + android:key="@string/pref_gcm_enable_mcs" + android:summary="@string/pref_gcm_enable_mcs_summary" + android:title="@string/pref_gcm_enable_mcs_title" /> + + + + +