Skip to content

Commit 9ef14a0

Browse files
committed
Upgrade to new GCM API.
1 parent c632b32 commit 9ef14a0

14 files changed

+234
-239
lines changed

AndroidManifest.xml

+3-9
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
android:versionCode="73"
66
android:versionName="2.1.1">
77

8-
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19"/>
9-
108
<permission android:name="org.thoughtcrime.securesms.ACCESS_SECRETS"
119
android:label="Access to TextSecure Secrets"
1210
android:protectionLevel="signature" />
@@ -33,7 +31,6 @@
3331
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3432
<uses-permission android:name="android.permission.READ_CALL_LOG" />
3533
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
36-
<uses-permission android:name="android.permission.WAKE_LOCK" />
3734
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
3835

3936
<permission android:name="org.thoughtcrime.securesms.permission.C2D_MESSAGE"
@@ -45,6 +42,9 @@
4542
android:label="@string/app_name"
4643
android:theme="@style/TextSecure.LightTheme">
4744

45+
<meta-data android:name="com.google.android.gms.version"
46+
android:value="@integer/google_play_services_version" />
47+
4848
<activity android:name=".RoutingActivity"
4949
android:theme="@style/NoAnimation.Theme.BlackScreen"
5050
android:launchMode="singleTask"
@@ -209,7 +209,6 @@
209209
<service android:enabled="true" android:name=".service.RegistrationService"/>
210210
<service android:enabled="true" android:name=".service.DirectoryRefreshService"/>
211211
<service android:enabled="true" android:name=".service.PreKeyService"/>
212-
<service android:enabled="true" android:name=".gcm.GcmIntentService"/>
213212

214213
<service android:name=".service.QuickResponseService"
215214
android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"
@@ -236,7 +235,6 @@
236235
<receiver android:name=".gcm.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" >
237236
<intent-filter>
238237
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
239-
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
240238
<category android:name="org.thoughtcrime.securesms" />
241239
</intent-filter>
242240
</receiver>
@@ -302,8 +300,4 @@
302300

303301
<uses-library android:name="android.test.runner" />
304302
</application>
305-
306-
<instrumentation android:name="android.test.InstrumentationTestRunner"
307-
android:targetPackage="org.thoughtcrime.securesms.tests" android:label="Tests for My App" />
308-
309303
</manifest>

build.gradle

+2-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ buildscript {
88
}
99
}
1010

11-
apply plugin: 'android'
11+
apply plugin: 'com.android.application'
1212
apply plugin: 'witness'
1313

1414
repositories {
@@ -24,8 +24,8 @@ repositories {
2424
dependencies {
2525
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
2626
compile 'com.android.support:support-v4:19.1.0'
27-
compile 'com.google.android.gcm:gcm-client:1.0.2'
2827
compile 'se.emilsjolander:stickylistheaders:2.2.0'
28+
compile "com.google.android.gms:play-services:5.0.77"
2929

3030
androidTestCompile 'com.squareup:fest-android:1.0.8'
3131

@@ -36,7 +36,6 @@ dependencyVerification {
3636
verify = [
3737
'com.actionbarsherlock:actionbarsherlock:5ab04d74101f70024b222e3ff9c87bee151ec43331b4a2134b6cc08cf8565819',
3838
'com.android.support:support-v4:3f40fa7b3a4ead01ce15dce9453b061646e7fe2e7c51cb75ca01ee1e77037f3f',
39-
'com.google.android.gcm:gcm-client:5ff578202f93dcba1c210d015deb4241c7cdad9b7867bd1b32e0a5f4c16986ca',
4039
'se.emilsjolander:stickylistheaders:89146b46c96fea0e40200474a2625cda10fe94891e4128f53cdb42375091b9b6',
4140
'com.google.protobuf:protobuf-java:ad9769a22989e688a46af4d3accc348cc501ced22118033230542bc916e33f0b',
4241
'com.madgag:sc-light-jdk15on:931f39d351429fb96c2f749e7ecb1a256a8ebbf5edca7995c9cc085b94d1841d',

src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
import android.widget.Toast;
4646

4747
import com.actionbarsherlock.view.MenuItem;
48-
import com.google.android.gcm.GCMRegistrar;
48+
import com.google.android.gms.gcm.GoogleCloudMessaging;
4949

5050
import org.thoughtcrime.securesms.components.OutgoingSmsPreference;
5151
import org.thoughtcrime.securesms.contacts.ContactAccessor;
@@ -344,7 +344,8 @@ protected Integer doInBackground(Void... params) {
344344
PushServiceSocket socket = PushServiceSocketFactory.create(context);
345345

346346
socket.unregisterGcmId();
347-
GCMRegistrar.unregister(context);
347+
GoogleCloudMessaging.getInstance(context).unregister();
348+
348349
return SUCCESS;
349350
} catch (AuthorizationFailedException afe) {
350351
Log.w("ApplicationPreferencesActivity", afe);

src/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java

+12-15
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.thoughtcrime.securesms.crypto.DecryptingQueue;
3131
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil;
3232
import org.thoughtcrime.securesms.notifications.MessageNotifier;
33+
import org.thoughtcrime.securesms.util.Util;
3334
import org.whispersystems.textsecure.crypto.MasterSecret;
3435
import org.thoughtcrime.securesms.database.DatabaseFactory;
3536
import org.thoughtcrime.securesms.util.VersionTracker;
@@ -78,25 +79,21 @@ public void onCreate(Bundle bundle) {
7879
}
7980

8081
private boolean needsUpgradeTask() {
81-
try {
82-
int currentVersionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
83-
int lastSeenVersion = VersionTracker.getLastSeenVersion(this);
84-
85-
Log.w("DatabaseUpgradeActivity", "LastSeenVersion: " + lastSeenVersion);
82+
int currentVersionCode = Util.getCurrentApkReleaseVersion(this);
83+
int lastSeenVersion = VersionTracker.getLastSeenVersion(this);
8684

87-
if (lastSeenVersion >= currentVersionCode)
88-
return false;
89-
90-
for (int version : UPGRADE_VERSIONS) {
91-
Log.w("DatabaseUpgradeActivity", "Comparing: " + version);
92-
if (lastSeenVersion < version)
93-
return true;
94-
}
85+
Log.w("DatabaseUpgradeActivity", "LastSeenVersion: " + lastSeenVersion);
9586

87+
if (lastSeenVersion >= currentVersionCode)
9688
return false;
97-
} catch (PackageManager.NameNotFoundException e) {
98-
throw new AssertionError(e);
89+
90+
for (int version : UPGRADE_VERSIONS) {
91+
Log.w("DatabaseUpgradeActivity", "Comparing: " + version);
92+
if (lastSeenVersion < version)
93+
return true;
9994
}
95+
96+
return false;
10097
}
10198

10299
public static boolean isUpdate(Context context) {

src/org/thoughtcrime/securesms/RegistrationActivity.java

+13-8
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@
1818
import android.widget.Toast;
1919

2020
import com.actionbarsherlock.app.SherlockActivity;
21-
import com.google.android.gcm.GCMRegistrar;
21+
import com.google.android.gms.common.ConnectionResult;
22+
import com.google.android.gms.common.GooglePlayServicesUtil;
2223
import com.google.i18n.phonenumbers.AsYouTypeFormatter;
2324
import com.google.i18n.phonenumbers.NumberParseException;
2425
import com.google.i18n.phonenumbers.PhoneNumberUtil;
2526
import com.google.i18n.phonenumbers.Phonenumber;
2627

27-
import org.whispersystems.textsecure.crypto.MasterSecret;
28-
import org.thoughtcrime.securesms.util.TextSecurePreferences;
2928
import org.thoughtcrime.securesms.util.Dialogs;
29+
import org.thoughtcrime.securesms.util.TextSecurePreferences;
30+
import org.whispersystems.textsecure.crypto.MasterSecret;
3031
import org.whispersystems.textsecure.util.PhoneNumberFormatter;
3132
import org.whispersystems.textsecure.util.Util;
3233

@@ -178,11 +179,15 @@ public void onClick(View v) {
178179
return;
179180
}
180181

181-
try {
182-
GCMRegistrar.checkDevice(self);
183-
} catch (UnsupportedOperationException uoe) {
184-
Dialogs.showAlertDialog(self, getString(R.string.RegistrationActivity_unsupported),
185-
getString(R.string.RegistrationActivity_sorry_this_device_is_not_supported_for_data_messaging));
182+
int gcmStatus = GooglePlayServicesUtil.isGooglePlayServicesAvailable(self);
183+
184+
if (gcmStatus != ConnectionResult.SUCCESS) {
185+
if (GooglePlayServicesUtil.isUserRecoverableError(gcmStatus)) {
186+
GooglePlayServicesUtil.getErrorDialog(gcmStatus, self, 9000).show();
187+
} else {
188+
Dialogs.showAlertDialog(self, getString(R.string.RegistrationActivity_unsupported),
189+
getString(R.string.RegistrationActivity_sorry_this_device_is_not_supported_for_data_messaging));
190+
}
186191
return;
187192
}
188193

src/org/thoughtcrime/securesms/RoutingActivity.java

+14-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.thoughtcrime.securesms.recipients.RecipientFormattingException;
1111
import org.thoughtcrime.securesms.recipients.Recipients;
1212
import org.thoughtcrime.securesms.service.ApplicationMigrationService;
13+
import org.thoughtcrime.securesms.service.GcmRegistrationService;
1314
import org.thoughtcrime.securesms.util.TextSecurePreferences;
1415
import org.whispersystems.textsecure.crypto.MasterSecret;
1516

@@ -128,15 +129,18 @@ private void handlePushRegistration() {
128129

129130
private void handleDisplayConversationOrList() {
130131
final ConversationParameters parameters = getConversationParameters();
131-
132132
final Intent intent;
133+
134+
scheduleRefreshActions();
135+
133136
if (isShareAction()) {
134137
intent = getShareIntent(parameters);
135138
} else if (parameters.recipients != null) {
136139
intent = getConversationIntent(parameters);
137140
} else {
138141
intent = getConversationListIntent();
139142
}
143+
140144
startActivity(intent);
141145
finish();
142146
}
@@ -182,6 +186,15 @@ private Intent getPushRegistrationIntent() {
182186
return intent;
183187
}
184188

189+
private void scheduleRefreshActions() {
190+
if (TextSecurePreferences.isPushRegistered(this) &&
191+
TextSecurePreferences.getGcmRegistrationId(this) == null)
192+
{
193+
Intent intent = new Intent(this, GcmRegistrationService.class);
194+
startService(intent);
195+
}
196+
}
197+
185198
private int getApplicationState() {
186199
if (!MasterSecretUtil.isPassphraseInitialized(this))
187200
return STATE_CREATE_PASSPHRASE;
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,80 @@
11
package org.thoughtcrime.securesms.gcm;
22

3+
import android.content.BroadcastReceiver;
34
import android.content.Context;
5+
import android.content.Intent;
6+
import android.util.Log;
47

5-
public class GcmBroadcastReceiver extends com.google.android.gcm.GCMBroadcastReceiver {
8+
import com.google.android.gms.gcm.GoogleCloudMessaging;
9+
10+
import org.thoughtcrime.securesms.service.SendReceiveService;
11+
import org.thoughtcrime.securesms.util.TextSecurePreferences;
12+
import org.whispersystems.textsecure.crypto.InvalidVersionException;
13+
import org.whispersystems.textsecure.directory.Directory;
14+
import org.whispersystems.textsecure.directory.NotInDirectoryException;
15+
import org.whispersystems.textsecure.push.ContactTokenDetails;
16+
import org.whispersystems.textsecure.push.IncomingEncryptedPushMessage;
17+
import org.whispersystems.textsecure.push.IncomingPushMessage;
18+
import org.whispersystems.textsecure.util.Util;
19+
20+
import java.io.IOException;
21+
22+
public class GcmBroadcastReceiver extends BroadcastReceiver {
23+
24+
private static final String TAG = GcmBroadcastReceiver.class.getSimpleName();
625

726
@Override
8-
protected String getGCMIntentServiceClassName(Context context) {
9-
return "org.thoughtcrime.securesms.gcm.GcmIntentService";
27+
public void onReceive(Context context, Intent intent) {
28+
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
29+
String messageType = gcm.getMessageType(intent);
30+
31+
if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
32+
Log.w(TAG, "GCM message...");
33+
34+
try {
35+
String data = intent.getStringExtra("message");
36+
37+
if (Util.isEmpty(data))
38+
return;
39+
40+
if (!TextSecurePreferences.isPushRegistered(context)) {
41+
Log.w(TAG, "Not push registered!");
42+
return;
43+
}
44+
45+
String sessionKey = TextSecurePreferences.getSignalingKey(context);
46+
IncomingEncryptedPushMessage encryptedMessage = new IncomingEncryptedPushMessage(data, sessionKey);
47+
IncomingPushMessage message = encryptedMessage.getIncomingPushMessage();
48+
49+
if (!isActiveNumber(context, message.getSource())) {
50+
Directory directory = Directory.getInstance(context);
51+
ContactTokenDetails contactTokenDetails = new ContactTokenDetails();
52+
contactTokenDetails.setNumber(message.getSource());
53+
54+
directory.setNumber(contactTokenDetails, true);
55+
}
56+
57+
Intent service = new Intent(context, SendReceiveService.class);
58+
service.setAction(SendReceiveService.RECEIVE_PUSH_ACTION);
59+
service.putExtra("message", message);
60+
context.startService(service);
61+
} catch (IOException e) {
62+
Log.w(TAG, e);
63+
} catch (InvalidVersionException e) {
64+
Log.w(TAG, e);
65+
}
66+
}
1067
}
1168

69+
private boolean isActiveNumber(Context context, String e164number) {
70+
boolean isActiveNumber;
71+
72+
try {
73+
isActiveNumber = Directory.getInstance(context).isActiveNumber(e164number);
74+
} catch (NotInDirectoryException e) {
75+
isActiveNumber = false;
76+
}
77+
78+
return isActiveNumber;
79+
}
1280
}

0 commit comments

Comments
 (0)