Finish KitKat compatibility details.

1) The system does actually enforce having a BROADCAST_SMS
   permission on the SMS receiver. Break out the "delivered"
   parts of this into a separate Receiver, so the permission
   won't trip up GB devices.

2) The system does actually enforce having "quick response"
   intents.  Add a no-op for now.

3) Add a "make default" prompt.

4) Update settings to reflect what's going on in KitKat.
This commit is contained in:
Moxie Marlinspike
2013-12-02 12:31:59 -08:00
parent e81756f443
commit b0216e1494
10 changed files with 145 additions and 23 deletions

View File

@@ -0,0 +1,31 @@
package org.thoughtcrime.securesms.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
import org.thoughtcrime.securesms.R;
public class QuickResponseService extends Service {
public int onStartCommand(Intent intent, int flags, int startId) {
if (!TelephonyManager.ACTION_RESPOND_VIA_MESSAGE.equals(intent.getAction())) {
Log.w("QuickResponseService", "Received unknown intent: " + intent.getAction());
return START_NOT_STICKY;
}
Toast.makeText(this,
getString(R.string.QuickResponseService_sorry_quick_response_is_not_yet_supported_by_textsecure),
Toast.LENGTH_LONG).show();
return START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}

View File

@@ -0,0 +1,21 @@
package org.thoughtcrime.securesms.service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class SmsDeliveryListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (SendReceiveService.SENT_SMS_ACTION.equals(intent.getAction())) {
intent.putExtra("ResultCode", this.getResultCode());
intent.setClass(context, SendReceiveService.class);
context.startService(intent);
} else if (SendReceiveService.DELIVERED_SMS_ACTION.equals(intent.getAction())) {
intent.putExtra("ResultCode", this.getResultCode());
intent.setClass(context, SendReceiveService.class);
context.startService(intent);
}
}
}

View File

@@ -106,8 +106,11 @@ public class SmsListener extends BroadcastReceiver {
intent.getAction().equals(SMS_RECEIVED_ACTION) && Util.isDefaultSmsProvider(context))
return false;
if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean("pref_all_sms", true))
if (PreferenceManager.getDefaultSharedPreferences(context)
.getBoolean(ApplicationPreferencesActivity.ALL_SMS_PREF, true))
{
return true;
}
return WirePrefix.isEncryptedMessage(messageBody) || WirePrefix.isKeyExchange(messageBody);
}
@@ -140,7 +143,7 @@ public class SmsListener extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Log.w("SMSListener", "Got SMS broadcast...");
if (intent.getAction().equals(SMS_RECEIVED_ACTION) && isChallenge(context, intent)) {
if (SMS_RECEIVED_ACTION.equals(intent.getAction()) && isChallenge(context, intent)) {
Log.w("SmsListener", "Got challenge!");
Intent challengeIntent = new Intent(RegistrationService.CHALLENGE_EVENT);
challengeIntent.putExtra(RegistrationService.CHALLENGE_EXTRA, parseChallenge(context, intent));
@@ -148,8 +151,9 @@ public class SmsListener extends BroadcastReceiver {
abortBroadcast();
} else if ((intent.getAction().equals(SMS_RECEIVED_ACTION) ||
intent.getAction().equals(SMS_DELIVERED_ACTION)) &&
isRelevant(context, intent)) {
intent.getAction().equals(SMS_DELIVERED_ACTION)) &&
isRelevant(context, intent))
{
Intent receivedIntent = new Intent(context, SendReceiveService.class);
receivedIntent.setAction(SendReceiveService.RECEIVE_SMS_ACTION);
receivedIntent.putExtra("ResultCode", this.getResultCode());
@@ -157,14 +161,6 @@ public class SmsListener extends BroadcastReceiver {
context.startService(receivedIntent);
abortBroadcast();
} else if (intent.getAction().equals(SendReceiveService.SENT_SMS_ACTION)) {
intent.putExtra("ResultCode", this.getResultCode());
intent.setClass(context, SendReceiveService.class);
context.startService(intent);
} else if (intent.getAction().equals(SendReceiveService.DELIVERED_SMS_ACTION)) {
intent.putExtra("ResultCode", this.getResultCode());
intent.setClass(context, SendReceiveService.class);
context.startService(intent);
}
}
}