1
1
package org .thoughtcrime .securesms .gcm ;
2
2
3
+ import android .content .BroadcastReceiver ;
3
4
import android .content .Context ;
5
+ import android .content .Intent ;
6
+ import android .util .Log ;
4
7
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 ();
6
25
7
26
@ 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
+ }
10
67
}
11
68
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
+ }
12
80
}
0 commit comments