mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 748391 - Implement markMessageRead on the Android backend. r=snorp
This commit is contained in:
parent
271ba69909
commit
0ea536d19d
@ -98,7 +98,14 @@ MobileMessageDatabaseService::MarkMessageRead(int32_t aMessageId,
|
||||
bool aSendReadReport,
|
||||
nsIMobileMessageCallback* aRequest)
|
||||
{
|
||||
// TODO: This would need to be implemented as part of Bug 748391
|
||||
if (!AndroidBridge::Bridge()) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
AndroidBridge::Bridge()->MarkMessageRead(aMessageId,
|
||||
aValue,
|
||||
aSendReadReport,
|
||||
aRequest);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -393,5 +393,36 @@ SmsManager::NotifyCursorDone(int32_t aRequestId)
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifySmsMarkedAsRead(bool aMarkedAsRead, int32_t aRequestId)
|
||||
{
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=]() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(aRequestId);
|
||||
if (!request) {
|
||||
return;
|
||||
}
|
||||
|
||||
request->NotifyMessageMarkedRead(aMarkedAsRead);
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifySmsMarkAsReadFailed(int32_t aError, int32_t aRequestId)
|
||||
{
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=]() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(aRequestId);
|
||||
if (!request) {
|
||||
return;
|
||||
}
|
||||
|
||||
request->NotifyMarkMessageReadFailed(aError);
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
@ -66,6 +66,8 @@ public:
|
||||
bool aRead,
|
||||
int32_t aRequestId);
|
||||
static void NotifyCursorDone(int32_t aRequestId);
|
||||
static void NotifySmsMarkedAsRead(bool aMarkedAsRead, int32_t aRequestId);
|
||||
static void NotifySmsMarkAsReadFailed(int32_t aError, int32_t aRequestId);
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
@ -2361,6 +2361,15 @@ public class GeckoAppShell
|
||||
SmsManager.getInstance().deleteMessage(aMessageId, aRequestId);
|
||||
}
|
||||
|
||||
@WrapForJNI
|
||||
public static void markMessageRead(int aMessageId, boolean aValue, boolean aSendReadReport, int aRequestId) {
|
||||
if (!SmsManager.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
SmsManager.getInstance().markMessageRead(aMessageId, aValue, aSendReadReport, aRequestId);
|
||||
}
|
||||
|
||||
@WrapForJNI(stubName = "CreateMessageCursorWrapper")
|
||||
public static void createMessageCursor(long aStartDate, long aEndDate, String[] aNumbers, int aNumbersCount, String aDelivery, boolean aHasRead, boolean aRead, boolean aHasThreadId, long aThreadId, boolean aReverse, int aRequestId) {
|
||||
if (!SmsManager.isEnabled()) {
|
||||
|
@ -762,6 +762,48 @@ public class GeckoSmsManager
|
||||
aRequestId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markMessageRead(int aMessageId, boolean aValue, boolean aSendReadReport, int aRequestId) {
|
||||
class MarkMessageReadRunnable implements Runnable {
|
||||
private final int mMessageId;
|
||||
private final boolean mValue;
|
||||
private final int mRequestId;
|
||||
|
||||
MarkMessageReadRunnable(int aMessageId, boolean aValue, int aRequestId) {
|
||||
mMessageId = aMessageId;
|
||||
mValue = aValue;
|
||||
mRequestId = aRequestId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
ContentResolver cr = GeckoAppShell.getContext().getContentResolver();
|
||||
Uri message = ContentUris.withAppendedId(kSmsContentUri, mMessageId);
|
||||
|
||||
ContentValues updatedProps = new ContentValues();
|
||||
updatedProps.put("read", mValue);
|
||||
|
||||
int count = cr.update(message, updatedProps, null, null);
|
||||
|
||||
notifySmsMarkedAsRead(count == 1, mRequestId);
|
||||
} catch (Exception e) {
|
||||
Log.e("GeckoSmsManager", "Error while trying to mark message as read: " + e);
|
||||
notifySmsMarkAsReadFailed(kUnknownError, mRequestId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (aSendReadReport == true) {
|
||||
Log.w("GeckoSmsManager", "Android SmsManager doesn't suport read receipts for SMS.");
|
||||
}
|
||||
|
||||
if (!SmsIOThread.getInstance().execute(new MarkMessageReadRunnable(aMessageId, aValue, aRequestId))) {
|
||||
Log.e("GeckoSmsManager", "Failed to add MarkMessageReadRunnable to the SmsIOThread");
|
||||
notifySmsMarkAsReadFailed(kUnknownError, aRequestId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createMessageCursor(long aStartDate, long aEndDate, String[] aNumbers, int aNumbersCount, String aDelivery, boolean aHasRead, boolean aRead, boolean aHasThreadId, long aThreadId, boolean aReverse, int aRequestId) {
|
||||
class CreateMessageCursorRunnable implements Runnable {
|
||||
@ -1101,6 +1143,10 @@ public class GeckoSmsManager
|
||||
@WrapForJNI
|
||||
private static native void notifySmsDeleteFailed(int aError, int aRequestId);
|
||||
@WrapForJNI
|
||||
private static native void notifySmsMarkedAsRead(boolean aMarkedAsRead, int aRequestId);
|
||||
@WrapForJNI
|
||||
private static native void notifySmsMarkAsReadFailed(int aError, int aRequestId);
|
||||
@WrapForJNI
|
||||
private static native void notifyCursorError(int aError, int aRequestId);
|
||||
@WrapForJNI
|
||||
private static native void notifyThreadCursorResult(long aId, String aLastMessageSubject, String aBody, long aUnreadCount, Object[] aParticipants, long aTimestamp, String aLastMessageType, int aRequestId);
|
||||
|
@ -31,6 +31,7 @@ public class SmsManager {
|
||||
void send(String aNumber, String aMessage, int aRequestId);
|
||||
void getMessage(int aMessageId, int aRequestId);
|
||||
void deleteMessage(int aMessageId, int aRequestId);
|
||||
void markMessageRead(int aMessageId, boolean aValue, boolean aSendReadReport, int aRequestId);
|
||||
void createMessageCursor(long aStartDate, long aEndDate, String[] aNumbers, int aNumbersCount, String aDelivery, boolean aHasRead, boolean aRead, boolean aHasThreadId, long aThreadId, boolean aReverse, int aRequestId);
|
||||
void createThreadCursor(int aRequestId);
|
||||
void getNextThread(int aRequestId);
|
||||
|
@ -1101,6 +1101,25 @@ AndroidBridge::DeleteMessage(int32_t aMessageId, nsIMobileMessageCallback* aRequ
|
||||
GeckoAppShell::DeleteMessageWrapper(aMessageId, requestId);
|
||||
}
|
||||
|
||||
void
|
||||
AndroidBridge::MarkMessageRead(int32_t aMessageId,
|
||||
bool aValue,
|
||||
bool aSendReadReport,
|
||||
nsIMobileMessageCallback* aRequest)
|
||||
{
|
||||
ALOG_BRIDGE("AndroidBridge::MarkMessageRead");
|
||||
|
||||
uint32_t requestId;
|
||||
if (!QueueSmsRequest(aRequest, &requestId)) {
|
||||
return;
|
||||
}
|
||||
|
||||
GeckoAppShell::MarkMessageRead(aMessageId,
|
||||
aValue,
|
||||
aSendReadReport,
|
||||
requestId);
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS0(MessageCursorContinueCallback)
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -270,6 +270,10 @@ public:
|
||||
nsIMobileMessageCallback* aRequest);
|
||||
void GetMessage(int32_t aMessageId, nsIMobileMessageCallback* aRequest);
|
||||
void DeleteMessage(int32_t aMessageId, nsIMobileMessageCallback* aRequest);
|
||||
void MarkMessageRead(int32_t aMessageId,
|
||||
bool aValue,
|
||||
bool aSendReadReport,
|
||||
nsIMobileMessageCallback* aRequest);
|
||||
already_AddRefed<nsICursorContinueCallback>
|
||||
CreateMessageCursor(bool aHasStartDate,
|
||||
uint64_t aStartDate,
|
||||
|
@ -104,6 +104,14 @@ public:
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifySmsDelivery_t, Impl>
|
||||
::template Wrap<&Impl::NotifySmsDelivery>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifySmsMarkAsReadFailed_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifySmsMarkAsReadFailed_t, Impl>
|
||||
::template Wrap<&Impl::NotifySmsMarkAsReadFailed>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifySmsMarkedAsRead_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifySmsMarkedAsRead_t, Impl>
|
||||
::template Wrap<&Impl::NotifySmsMarkedAsRead>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifySmsReceived_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifySmsReceived_t, Impl>
|
||||
::template Wrap<&Impl::NotifySmsReceived>),
|
||||
|
@ -518,6 +518,14 @@ auto GeckoAppShell::LockScreenOrientation(int32_t a0) -> void
|
||||
return mozilla::jni::Method<LockScreenOrientation_t>::Call(nullptr, nullptr, a0);
|
||||
}
|
||||
|
||||
constexpr char GeckoAppShell::MarkMessageRead_t::name[];
|
||||
constexpr char GeckoAppShell::MarkMessageRead_t::signature[];
|
||||
|
||||
auto GeckoAppShell::MarkMessageRead(int32_t a0, bool a1, bool a2, int32_t a3) -> void
|
||||
{
|
||||
return mozilla::jni::Method<MarkMessageRead_t>::Call(nullptr, nullptr, a0, a1, a2, a3);
|
||||
}
|
||||
|
||||
constexpr char GeckoAppShell::MarkURIVisited_t::name[];
|
||||
constexpr char GeckoAppShell::MarkURIVisited_t::signature[];
|
||||
|
||||
@ -857,6 +865,12 @@ constexpr char GeckoSmsManager::NotifySmsDeleted_t::signature[];
|
||||
constexpr char GeckoSmsManager::NotifySmsDelivery_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifySmsDelivery_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifySmsMarkAsReadFailed_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifySmsMarkAsReadFailed_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifySmsMarkedAsRead_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifySmsMarkedAsRead_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifySmsReceived_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifySmsReceived_t::signature[];
|
||||
|
||||
|
@ -1243,6 +1243,27 @@ public:
|
||||
|
||||
static auto LockScreenOrientation(int32_t) -> void;
|
||||
|
||||
public:
|
||||
struct MarkMessageRead_t {
|
||||
typedef GeckoAppShell Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t,
|
||||
bool,
|
||||
bool,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "markMessageRead";
|
||||
static constexpr char signature[] =
|
||||
"(IZZI)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
static auto MarkMessageRead(int32_t, bool, bool, int32_t) -> void;
|
||||
|
||||
public:
|
||||
struct MarkURIVisited_t {
|
||||
typedef GeckoAppShell Owner;
|
||||
@ -2181,6 +2202,40 @@ public:
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
public:
|
||||
struct NotifySmsMarkAsReadFailed_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "notifySmsMarkAsReadFailed";
|
||||
static constexpr char signature[] =
|
||||
"(II)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
public:
|
||||
struct NotifySmsMarkedAsRead_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
bool,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "notifySmsMarkedAsRead";
|
||||
static constexpr char signature[] =
|
||||
"(ZI)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
public:
|
||||
struct NotifySmsReceived_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
|
Loading…
Reference in New Issue
Block a user