mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-11-17 07:29:27 +01:00
a1cb246e27
Previously, the DeviceCommunicationService was invoked directly, via Intent intent = new Intent(foo, bar); intent.setExtra(EXTRA_BAZ, baz); startService(...); and this was scattered throughout GadgetBridge. Now there is a "frontend" available, so that you can call the service more easily, like GBApplication.deviceService().connect(); For a start, this client interface (DeviceService) actually implements the same interface (EventHandler) as the receiving side (DeviceSupport). This may change in the future. This will also make testing much easier, because we can use this client interface to invoke the test service as well.
71 lines
2.5 KiB
Java
71 lines
2.5 KiB
Java
package nodomain.freeyourgadget.gadgetbridge.externalevents;
|
|
|
|
import android.content.BroadcastReceiver;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.SharedPreferences;
|
|
import android.database.Cursor;
|
|
import android.net.Uri;
|
|
import android.os.PowerManager;
|
|
import android.preference.PreferenceManager;
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
|
|
|
public class K9Receiver extends BroadcastReceiver {
|
|
|
|
private static final Logger LOG = LoggerFactory.getLogger(K9Receiver.class);
|
|
private final Uri k9Uri = Uri.parse("content://com.fsck.k9.messageprovider/inbox_messages");
|
|
|
|
@Override
|
|
public void onReceive(Context context, Intent intent) {
|
|
|
|
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
|
|
if ("never".equals(sharedPrefs.getString("notification_mode_k9mail", "when_screen_off"))) {
|
|
return;
|
|
}
|
|
if ("when_screen_off".equals(sharedPrefs.getString("notification_mode_k9mail", "when_screen_off"))) {
|
|
PowerManager powermanager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
|
|
if (powermanager.isScreenOn()) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
String uriWanted = intent.getData().toString();
|
|
|
|
String[] messagesProjection = {
|
|
"senderAddress",
|
|
"subject",
|
|
"preview",
|
|
"uri"
|
|
};
|
|
|
|
String sender = "";
|
|
String subject = "";
|
|
String preview = "";
|
|
|
|
/*
|
|
* there seems to be no way to specify the the uri in the where clause.
|
|
* If we do so, we just get the newest message, not the one requested.
|
|
* So, we will just search our message and match the uri manually.
|
|
* It should be the first one returned by the query in most cases,
|
|
*/
|
|
Cursor c = context.getContentResolver().query(k9Uri, messagesProjection, null, null, null);
|
|
c.moveToFirst();
|
|
do {
|
|
String uri = c.getString(c.getColumnIndex("uri"));
|
|
if (uri.equals(uriWanted)) {
|
|
sender = c.getString(c.getColumnIndex("senderAddress"));
|
|
subject = c.getString(c.getColumnIndex("subject"));
|
|
preview = c.getString(c.getColumnIndex("preview"));
|
|
break;
|
|
}
|
|
} while (c.moveToNext());
|
|
c.close();
|
|
|
|
GBApplication.deviceService().onEmail(sender, subject, preview);
|
|
}
|
|
}
|