зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1197010 - Implement Android backend for createMessageCursor/createThreadCursor. r=snorp
This commit is contained in:
Родитель
40e821a651
Коммит
94f2455f3b
|
@ -5,7 +5,9 @@
|
|||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "MobileMessageDatabaseService.h"
|
||||
|
||||
#include "AndroidBridge.h"
|
||||
#include "SmsManager.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
@ -13,6 +15,11 @@ namespace mobilemessage {
|
|||
|
||||
NS_IMPL_ISUPPORTS(MobileMessageDatabaseService, nsIMobileMessageDatabaseService)
|
||||
|
||||
MobileMessageDatabaseService::MobileMessageDatabaseService()
|
||||
{
|
||||
SmsManager::Init();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
MobileMessageDatabaseService::GetMessageMoz(int32_t aMessageId,
|
||||
nsIMobileMessageCallback* aRequest)
|
||||
|
@ -60,9 +67,29 @@ MobileMessageDatabaseService::CreateMessageCursor(bool aHasStartDate,
|
|||
uint64_t aThreadId,
|
||||
bool aReverse,
|
||||
nsIMobileMessageCursorCallback* aCallback,
|
||||
nsICursorContinueCallback** aResult)
|
||||
nsICursorContinueCallback** aCursor)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
if (!AndroidBridge::Bridge()) {
|
||||
*aCursor = nullptr;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsICursorContinueCallback> cursor =
|
||||
AndroidBridge::Bridge()->CreateMessageCursor(aHasStartDate,
|
||||
aStartDate,
|
||||
aHasEndDate,
|
||||
aEndDate,
|
||||
aNumbers,
|
||||
aNumbersCount,
|
||||
aDelivery,
|
||||
aHasRead,
|
||||
aRead,
|
||||
aHasThreadId,
|
||||
aThreadId,
|
||||
aReverse,
|
||||
aCallback);
|
||||
cursor.forget(aCursor);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -76,11 +103,18 @@ MobileMessageDatabaseService::MarkMessageRead(int32_t aMessageId,
|
|||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
MobileMessageDatabaseService::CreateThreadCursor(nsIMobileMessageCursorCallback* aCallback,
|
||||
nsICursorContinueCallback** aResult)
|
||||
MobileMessageDatabaseService::CreateThreadCursor(nsIMobileMessageCursorCallback* aRequest,
|
||||
nsICursorContinueCallback** aCursor)
|
||||
{
|
||||
NS_NOTYETIMPLEMENTED("Implement me!");
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
if (!AndroidBridge::Bridge()) {
|
||||
*aCursor = nullptr;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsICursorContinueCallback> cursor =
|
||||
AndroidBridge::Bridge()->CreateThreadCursor(aRequest);
|
||||
cursor.forget(aCursor);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
} // namespace mobilemessage
|
||||
|
|
|
@ -20,6 +20,8 @@ private:
|
|||
~MobileMessageDatabaseService() {}
|
||||
|
||||
public:
|
||||
MobileMessageDatabaseService();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIMOBILEMESSAGEDATABASESERVICE
|
||||
};
|
||||
|
|
|
@ -0,0 +1,397 @@
|
|||
/* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "SmsManager.h"
|
||||
|
||||
#include "mozilla/dom/mobilemessage/Constants.h"
|
||||
#include "mozilla/dom/mobilemessage/PSms.h"
|
||||
#include "mozilla/dom/mobilemessage/SmsParent.h"
|
||||
#include "mozilla/dom/mobilemessage/SmsTypes.h"
|
||||
#include "mozilla/dom/mobilemessage/Types.h"
|
||||
#include "mozilla/dom/MobileMessageThread.h"
|
||||
#include "mozilla/dom/SmsMessage.h"
|
||||
#include "mozilla/Services.h"
|
||||
#include "nsIMobileMessageDatabaseService.h"
|
||||
#include "nsIObserverService.h"
|
||||
|
||||
using namespace mozilla::dom;
|
||||
using namespace mozilla::dom::mobilemessage;
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifySmsReceived(jni::String::Param aSender,
|
||||
jni::String::Param aBody,
|
||||
int32_t aMessageClass,
|
||||
int64_t aTimestamp)
|
||||
{
|
||||
// TODO Need to correct the message `threadId` parameter value. Bug 859098
|
||||
SmsMessageData message;
|
||||
message.id() = 0;
|
||||
message.threadId() = 0;
|
||||
message.iccId() = EmptyString();
|
||||
message.delivery() = eDeliveryState_Received;
|
||||
message.deliveryStatus() = eDeliveryStatus_Success;
|
||||
message.sender() = aSender ? nsString(aSender) : EmptyString();
|
||||
message.receiver() = EmptyString();
|
||||
message.body() = aBody ? nsString(aBody) : EmptyString();
|
||||
message.messageClass() = static_cast<MessageClass>(aMessageClass);
|
||||
message.timestamp() = aTimestamp;
|
||||
message.sentTimestamp() = aTimestamp;
|
||||
message.deliveryTimestamp() = aTimestamp;
|
||||
message.read() = false;
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=] () {
|
||||
nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
|
||||
if (!obs) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMMozSmsMessage> domMessage = new SmsMessage(message);
|
||||
obs->NotifyObservers(domMessage, kSmsReceivedObserverTopic, nullptr);
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifySmsSent(int32_t aId,
|
||||
jni::String::Param aReceiver,
|
||||
jni::String::Param aBody,
|
||||
int64_t aTimestamp,
|
||||
int32_t aRequestId)
|
||||
{
|
||||
// TODO Need to add the message `messageClass` parameter value. Bug 804476
|
||||
// TODO Need to correct the message `threadId` parameter value. Bug 859098
|
||||
SmsMessageData message;
|
||||
message.id() = aId;
|
||||
message.threadId() = 0;
|
||||
message.iccId() = EmptyString();
|
||||
message.delivery() = eDeliveryState_Sent;
|
||||
message.deliveryStatus() = eDeliveryStatus_Pending;
|
||||
message.sender() = EmptyString();
|
||||
message.receiver() = aReceiver ? nsString(aReceiver) : EmptyString();
|
||||
message.body() = aBody ? nsString(aBody) : EmptyString();
|
||||
message.messageClass() = eMessageClass_Normal;
|
||||
message.timestamp() = aTimestamp;
|
||||
message.sentTimestamp() = aTimestamp;
|
||||
message.deliveryTimestamp() = aTimestamp;
|
||||
message.read() = true;
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=]() {
|
||||
/*
|
||||
* First, we are going to notify all SmsManager that a message has
|
||||
* been sent. Then, we will notify the SmsRequest object about it.
|
||||
*/
|
||||
nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
|
||||
if (!obs) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMMozSmsMessage> domMessage = new SmsMessage(message);
|
||||
obs->NotifyObservers(domMessage, kSmsSentObserverTopic, nullptr);
|
||||
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(aRequestId);
|
||||
if (!request) {
|
||||
return;
|
||||
}
|
||||
|
||||
request->NotifyMessageSent(domMessage);
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifySmsDelivery(int32_t aId,
|
||||
int32_t aDeliveryStatus,
|
||||
jni::String::Param aReceiver,
|
||||
jni::String::Param aBody,
|
||||
int64_t aTimestamp)
|
||||
{
|
||||
// TODO Need to add the message `messageClass` parameter value. Bug 804476
|
||||
// TODO Need to correct the message `threadId` parameter value. Bug 859098
|
||||
SmsMessageData message;
|
||||
message.id() = aId;
|
||||
message.threadId() = 0;
|
||||
message.iccId() = EmptyString();
|
||||
message.delivery() = eDeliveryState_Sent;
|
||||
message.deliveryStatus() = static_cast<DeliveryStatus>(aDeliveryStatus);
|
||||
message.sender() = EmptyString();
|
||||
message.receiver() = aReceiver ? nsString(aReceiver) : EmptyString();
|
||||
message.body() = aBody ? nsString(aBody) : EmptyString();
|
||||
message.messageClass() = eMessageClass_Normal;
|
||||
message.timestamp() = aTimestamp;
|
||||
message.sentTimestamp() = aTimestamp;
|
||||
message.deliveryTimestamp() = aTimestamp;
|
||||
message.read() = true;
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=]() {
|
||||
nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
|
||||
if (!obs) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMMozSmsMessage> domMessage = new SmsMessage(message);
|
||||
const char* topic = (message.deliveryStatus() == eDeliveryStatus_Success)
|
||||
? kSmsDeliverySuccessObserverTopic
|
||||
: kSmsDeliveryErrorObserverTopic;
|
||||
obs->NotifyObservers(domMessage, topic, nullptr);
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifySmsSendFailed(int32_t aError, int32_t aRequestId)
|
||||
{
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=]() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(aRequestId);
|
||||
if(!request) {
|
||||
return;
|
||||
}
|
||||
|
||||
request->NotifySendMessageFailed(aError, nullptr);
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifyGetSms(int32_t aId,
|
||||
int32_t aDeliveryStatus,
|
||||
jni::String::Param aReceiver,
|
||||
jni::String::Param aSender,
|
||||
jni::String::Param aBody,
|
||||
int64_t aTimestamp,
|
||||
bool aRead,
|
||||
int32_t aRequestId)
|
||||
{
|
||||
nsString receiver(aReceiver);
|
||||
DeliveryState state = receiver.IsEmpty() ? eDeliveryState_Received
|
||||
: eDeliveryState_Sent;
|
||||
|
||||
// TODO Need to add the message `messageClass` parameter value. Bug 804476
|
||||
// TODO Need to correct the message `threadId` parameter value. Bug 859098
|
||||
SmsMessageData message;
|
||||
message.id() = aId;
|
||||
message.threadId() = 0;
|
||||
message.iccId() = EmptyString();
|
||||
message.delivery() = state;
|
||||
message.deliveryStatus() = static_cast<DeliveryStatus>(aDeliveryStatus);
|
||||
message.sender() = aSender ? nsString(aSender) : EmptyString();
|
||||
message.receiver() = receiver;
|
||||
message.body() = aBody ? nsString(aBody) : EmptyString();
|
||||
message.messageClass() = eMessageClass_Normal;
|
||||
message.timestamp() = aTimestamp;
|
||||
message.sentTimestamp() = aTimestamp;
|
||||
message.deliveryTimestamp() = aTimestamp;
|
||||
message.read() = aRead;
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=]() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(aRequestId);
|
||||
if (!request) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMMozSmsMessage> domMessage = new SmsMessage(message);
|
||||
request->NotifyMessageGot(domMessage);
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifyGetSmsFailed(int32_t aError, int32_t aRequestId)
|
||||
{
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=]() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(aRequestId);
|
||||
if (!request) {
|
||||
return;
|
||||
}
|
||||
|
||||
request->NotifyGetMessageFailed(aError);
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifySmsDeleted(bool aDeleted, int32_t aRequestId)
|
||||
{
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=]() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(aRequestId);
|
||||
if (!request) {
|
||||
return;
|
||||
}
|
||||
|
||||
// For android, we support only single SMS deletion.
|
||||
bool deleted = aDeleted;
|
||||
request->NotifyMessageDeleted(&deleted, 1);
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifySmsDeleteFailed(int32_t aError, int32_t aRequestId)
|
||||
{
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=]() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(aRequestId);
|
||||
if (!request) {
|
||||
return;
|
||||
}
|
||||
|
||||
request->NotifyDeleteMessageFailed(aError);
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifyCursorError(int32_t aError, int32_t aRequestId)
|
||||
{
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=]() {
|
||||
nsCOMPtr<nsIMobileMessageCursorCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsCursorRequest(aRequestId);
|
||||
if (!request) {
|
||||
return;
|
||||
}
|
||||
|
||||
request->NotifyCursorError(aError);
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifyThreadCursorResult(int64_t aId,
|
||||
jni::String::Param aLastMessageSubject,
|
||||
jni::String::Param aBody,
|
||||
int64_t aUnreadCount,
|
||||
jni::ObjectArray::Param aParticipants,
|
||||
int64_t aTimestamp,
|
||||
jni::String::Param aLastMessageType,
|
||||
int32_t aRequestId)
|
||||
{
|
||||
ThreadData thread;
|
||||
thread.id() = aId;
|
||||
thread.lastMessageSubject() = aLastMessageSubject ?
|
||||
nsString(aLastMessageSubject) :
|
||||
EmptyString();
|
||||
thread.body() = aBody ? nsString(aBody) : EmptyString();
|
||||
thread.unreadCount() = aUnreadCount;
|
||||
thread.timestamp() = aTimestamp;
|
||||
thread.lastMessageType() = eMessageType_SMS;
|
||||
|
||||
JNIEnv* const env = jni::GetEnvForThread();
|
||||
|
||||
jobjectArray participants = aParticipants.Get();
|
||||
jsize length = env->GetArrayLength(participants);
|
||||
for (jsize i = 0; i < length; ++i) {
|
||||
jstring participant =
|
||||
static_cast<jstring>(env->GetObjectArrayElement(participants, i));
|
||||
if (participant) {
|
||||
thread.participants().AppendElement(nsJNIString(participant, env));
|
||||
}
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=]() {
|
||||
nsCOMPtr<nsIMobileMessageCursorCallback> request =
|
||||
AndroidBridge::Bridge()->GetSmsCursorRequest(aRequestId);
|
||||
if (!request) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMArray<nsIDOMMozMobileMessageThread> arr;
|
||||
arr.AppendElement(new MobileMessageThread(thread));
|
||||
|
||||
nsIDOMMozMobileMessageThread** elements;
|
||||
int32_t size;
|
||||
size = arr.Forget(&elements);
|
||||
|
||||
request->NotifyCursorResult(reinterpret_cast<nsISupports**>(elements),
|
||||
size);
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifyMessageCursorResult(int32_t aMessageId,
|
||||
int32_t aDeliveryStatus,
|
||||
jni::String::Param aReceiver,
|
||||
jni::String::Param aSender,
|
||||
jni::String::Param aBody,
|
||||
int64_t aTimestamp,
|
||||
int64_t aThreadId,
|
||||
bool aRead,
|
||||
int32_t aRequestId)
|
||||
{
|
||||
nsString receiver = nsString(aReceiver);
|
||||
DeliveryState state = receiver.IsEmpty() ? eDeliveryState_Received
|
||||
: eDeliveryState_Sent;
|
||||
|
||||
// TODO Need to add the message `messageClass` parameter value. Bug 804476
|
||||
SmsMessageData message;
|
||||
message.id() = aMessageId;
|
||||
message.threadId() = aThreadId;
|
||||
message.iccId() = EmptyString();
|
||||
message.delivery() = state;
|
||||
message.deliveryStatus() = static_cast<DeliveryStatus>(aDeliveryStatus);
|
||||
message.sender() = aSender ? nsString(aSender) : EmptyString();
|
||||
message.receiver() = receiver;
|
||||
message.body() = aBody ? nsString(aBody) : EmptyString();
|
||||
message.messageClass() = eMessageClass_Normal;
|
||||
message.timestamp() = aTimestamp;
|
||||
message.sentTimestamp() = aTimestamp;
|
||||
message.deliveryTimestamp() = aTimestamp;
|
||||
message.read() = aRead;
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=]() {
|
||||
nsCOMPtr<nsIMobileMessageCursorCallback> request =
|
||||
AndroidBridge::Bridge()->GetSmsCursorRequest(aRequestId);
|
||||
if (!request) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMArray<nsIDOMMozSmsMessage> arr;
|
||||
arr.AppendElement(new SmsMessage(message));
|
||||
|
||||
nsIDOMMozSmsMessage** elements;
|
||||
int32_t size;
|
||||
size = arr.Forget(&elements);
|
||||
|
||||
request->NotifyCursorResult(reinterpret_cast<nsISupports**>(elements),
|
||||
size);
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void
|
||||
SmsManager::NotifyCursorDone(int32_t aRequestId)
|
||||
{
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction([=]() {
|
||||
nsCOMPtr<nsIMobileMessageCursorCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsCursorRequest(aRequestId);
|
||||
if (!request) {
|
||||
return;
|
||||
}
|
||||
|
||||
request->NotifyCursorDone();
|
||||
});
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
/* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef SmsManager_h__
|
||||
#define SmsManager_h__
|
||||
|
||||
#include "GeneratedJNINatives.h"
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
class SmsManager : public widget::GeckoSmsManager::Natives<SmsManager>
|
||||
{
|
||||
private:
|
||||
SmsManager();
|
||||
|
||||
public:
|
||||
static void NotifySmsReceived(jni::String::Param aSender,
|
||||
jni::String::Param aBody,
|
||||
int32_t aMessageClass,
|
||||
int64_t aTimestamp);
|
||||
static void NotifySmsSent(int32_t aId,
|
||||
jni::String::Param aReceiver,
|
||||
jni::String::Param aBody,
|
||||
int64_t aTimestamp,
|
||||
int32_t aRequestId);
|
||||
static void NotifySmsDelivery(int32_t aId,
|
||||
int32_t aDeliveryStatus,
|
||||
jni::String::Param aReceiver,
|
||||
jni::String::Param aBody,
|
||||
int64_t aTimestamp);
|
||||
static void NotifySmsSendFailed(int32_t aError,
|
||||
int32_t aRequestId);
|
||||
static void NotifyGetSms(int32_t aId,
|
||||
int32_t aDeliveryStatus,
|
||||
jni::String::Param aReceiver,
|
||||
jni::String::Param aSender,
|
||||
jni::String::Param aBody,
|
||||
int64_t aTimestamp,
|
||||
bool aRead,
|
||||
int32_t aRequestId);
|
||||
static void NotifyGetSmsFailed(int32_t aError,
|
||||
int32_t aRequestId);
|
||||
static void NotifySmsDeleted(bool aDeleted,
|
||||
int32_t aRequestId);
|
||||
static void NotifySmsDeleteFailed(int32_t aError,
|
||||
int32_t aRequestId);
|
||||
static void NotifyCursorError(int32_t aError,
|
||||
int32_t aRequestId);
|
||||
static void NotifyThreadCursorResult(int64_t aId,
|
||||
jni::String::Param aLastMessageSubject,
|
||||
jni::String::Param aBody,
|
||||
int64_t aUnreadCount,
|
||||
jni::ObjectArray::Param aParticipants,
|
||||
int64_t aTimestamp,
|
||||
jni::String::Param aLastMessageType,
|
||||
int32_t aRequestId);
|
||||
static void NotifyMessageCursorResult(int32_t aMessageId,
|
||||
int32_t aDeliveryStatus,
|
||||
jni::String::Param aReceiver,
|
||||
jni::String::Param aSender,
|
||||
jni::String::Param aBody,
|
||||
int64_t aTimestamp,
|
||||
int64_t aThreadId,
|
||||
bool aRead,
|
||||
int32_t aRequestId);
|
||||
static void NotifyCursorDone(int32_t aRequestId);
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
#endif // SmsManager_h__
|
|
@ -19,6 +19,7 @@ EXPORTS.mozilla.dom.mobilemessage += [
|
|||
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android':
|
||||
SOURCES += [
|
||||
'android/MobileMessageDatabaseService.cpp',
|
||||
'android/SmsManager.cpp',
|
||||
'android/SmsService.cpp',
|
||||
]
|
||||
elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['MOZ_B2G_RIL']:
|
||||
|
@ -46,6 +47,7 @@ EXPORTS.mozilla.dom += [
|
|||
'DOMMobileMessageError.h',
|
||||
'MmsMessage.h',
|
||||
'MobileMessageManager.h',
|
||||
'MobileMessageThread.h',
|
||||
'SmsMessage.h',
|
||||
]
|
||||
|
||||
|
@ -75,6 +77,7 @@ IPDL_SOURCES += [
|
|||
|
||||
LOCAL_INCLUDES += [
|
||||
'/dom/base',
|
||||
'/widget/android',
|
||||
]
|
||||
|
||||
include('/ipc/chromium/chromium-config.mozbuild')
|
||||
|
|
|
@ -28,6 +28,14 @@
|
|||
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
|
||||
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
|
||||
|
||||
<!-- WebSMS -->
|
||||
<uses-permission android:name="android.permission.SEND_SMS"/>
|
||||
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
|
||||
<uses-permission android:name="android.permission.WRITE_SMS"/>
|
||||
<uses-permission android:name="android.permission.READ_SMS"/>
|
||||
|
||||
<uses-feature android:name="android.hardware.telephony"/>
|
||||
|
||||
<!-- Tab Queue -->
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
||||
|
||||
|
|
|
@ -122,3 +122,5 @@ fi
|
|||
|
||||
MOZ_JSDOWNLOADS=1
|
||||
MOZ_TIME_MANAGER=1
|
||||
MOZ_WEBSMS_BACKEND=1
|
||||
|
||||
|
|
|
@ -47,6 +47,8 @@
|
|||
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
|
||||
<uses-permission android:name="android.permission.WRITE_SMS"/>
|
||||
<uses-permission android:name="android.permission.READ_SMS"/>
|
||||
|
||||
<uses-feature android:name="android.hardware.telephony"/>
|
||||
#endif
|
||||
|
||||
<uses-feature android:name="android.hardware.location" android:required="false"/>
|
||||
|
|
|
@ -2381,31 +2381,42 @@ public class GeckoAppShell
|
|||
SmsManager.getInstance().deleteMessage(aMessageId, aRequestId);
|
||||
}
|
||||
|
||||
@WrapForJNI(stubName = "CreateMessageListWrapper")
|
||||
public static void createMessageList(long aStartDate, long aEndDate, String[] aNumbers, int aNumbersCount, String aDelivery, boolean aHasRead, boolean aRead, long aThreadId, boolean aReverse, int 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()) {
|
||||
return;
|
||||
}
|
||||
|
||||
SmsManager.getInstance().createMessageList(aStartDate, aEndDate, aNumbers, aNumbersCount, aDelivery, aHasRead, aRead, aThreadId, aReverse, aRequestId);
|
||||
SmsManager.getInstance().createMessageCursor(aStartDate, aEndDate, aNumbers, aNumbersCount, aDelivery, aHasRead, aRead, aHasThreadId, aThreadId, aReverse, aRequestId);
|
||||
}
|
||||
|
||||
@WrapForJNI(stubName = "GetNextMessageInListWrapper")
|
||||
public static void getNextMessageInList(int aListId, int aRequestId) {
|
||||
@WrapForJNI(stubName = "GetNextMessageWrapper")
|
||||
public static void getNextMessage(int aRequestId) {
|
||||
if (!SmsManager.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
SmsManager.getInstance().getNextMessageInList(aListId, aRequestId);
|
||||
SmsManager.getInstance().getNextMessage(aRequestId);
|
||||
}
|
||||
|
||||
@WrapForJNI
|
||||
public static void clearMessageList(int aListId) {
|
||||
@WrapForJNI(stubName = "CreateThreadCursorWrapper")
|
||||
public static void createThreadCursor(int aRequestId) {
|
||||
Log.i("GeckoAppShell", "CreateThreadCursorWrapper!");
|
||||
|
||||
if (!SmsManager.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
SmsManager.getInstance().clearMessageList(aListId);
|
||||
SmsManager.getInstance().createThreadCursor(aRequestId);
|
||||
}
|
||||
|
||||
@WrapForJNI(stubName = "GetNextThreadWrapper")
|
||||
public static void getNextThread(int aRequestId) {
|
||||
if (!SmsManager.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
SmsManager.getInstance().getNextThread(aRequestId);
|
||||
}
|
||||
|
||||
/* Called by JNI from AndroidBridge, and by reflection from tests/BaseTest.java.in */
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
package org.mozilla.gecko;
|
||||
|
||||
import org.mozilla.gecko.annotation.WrapForJNI;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.BroadcastReceiver;
|
||||
|
@ -18,7 +20,7 @@ import android.database.Cursor;
|
|||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.HandlerThread;
|
||||
import android.telephony.SmsManager;
|
||||
import android.telephony.SmsMessage;
|
||||
import android.util.Log;
|
||||
|
@ -27,6 +29,12 @@ import static android.telephony.SmsMessage.MessageClass;
|
|||
import static org.mozilla.gecko.SmsManager.ISmsManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Formatter;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
|
@ -183,7 +191,7 @@ class Postman
|
|||
}
|
||||
}
|
||||
|
||||
class SmsIOThread extends Thread {
|
||||
class SmsIOThread extends HandlerThread {
|
||||
private final static SmsIOThread sInstance = new SmsIOThread();
|
||||
|
||||
private Handler mHandler;
|
||||
|
@ -192,17 +200,18 @@ class SmsIOThread extends Thread {
|
|||
return sInstance;
|
||||
}
|
||||
|
||||
public boolean execute(Runnable r) {
|
||||
return mHandler.post(r);
|
||||
SmsIOThread() {
|
||||
super("SmsIOThread");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Looper.prepare();
|
||||
public void start() {
|
||||
super.start();
|
||||
mHandler = new Handler(getLooper());
|
||||
}
|
||||
|
||||
mHandler = new Handler();
|
||||
|
||||
Looper.loop();
|
||||
public boolean execute(Runnable r) {
|
||||
return mHandler.post(r);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -214,57 +223,40 @@ class MessagesListManager
|
|||
return sInstance;
|
||||
}
|
||||
|
||||
private final ArrayList<Cursor> mCursors = new ArrayList<>();
|
||||
private final HashMap<Integer, Cursor> mCursors = new HashMap<>();
|
||||
|
||||
public int add(Cursor aCursor) {
|
||||
int size = mCursors.size();
|
||||
|
||||
for (int i=0; i<size; ++i) {
|
||||
if (mCursors.get(i) == null) {
|
||||
mCursors.set(i, aCursor);
|
||||
return i;
|
||||
}
|
||||
public void add(int id, Cursor aCursor) {
|
||||
if (mCursors.containsKey(id)) {
|
||||
Log.e("GeckoSmsManager", "Trying to overwrite cursor!");
|
||||
return;
|
||||
}
|
||||
|
||||
mCursors.add(aCursor);
|
||||
return size;
|
||||
mCursors.put(id, aCursor);
|
||||
}
|
||||
|
||||
public Cursor get(int aId) {
|
||||
if (aId < 0 || mCursors.size() <= aId) {
|
||||
Log.e("GeckoSmsManager", "Trying to get an unknown list!");
|
||||
if (!mCursors.containsKey(aId)) {
|
||||
Log.e("GeckoSmsManager", "Cursor doesn't exist!");
|
||||
return null;
|
||||
}
|
||||
|
||||
Cursor cursor = mCursors.get(aId);
|
||||
if (cursor == null) {
|
||||
Log.e("GeckoSmsManager", "Trying to get an empty list!");
|
||||
}
|
||||
|
||||
return cursor;
|
||||
return mCursors.get(aId);
|
||||
}
|
||||
|
||||
public void remove(int aId) {
|
||||
if (aId < 0 || mCursors.size() <= aId) {
|
||||
Log.e("GeckoSmsManager", "Trying to destroy an unknown list!");
|
||||
if (!mCursors.containsKey(aId)) {
|
||||
Log.e("GeckoSmsManager", "Cursor doesn't exist!");
|
||||
return;
|
||||
}
|
||||
|
||||
Cursor cursor = mCursors.set(aId, null);
|
||||
if (cursor == null) {
|
||||
Log.e("GeckoSmsManager", "Trying to destroy an empty list!");
|
||||
return;
|
||||
}
|
||||
|
||||
cursor.close();
|
||||
mCursors.remove(aId);
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
for (int i=0; i<mCursors.size(); ++i) {
|
||||
Cursor c = mCursors.get(i);
|
||||
if (c != null) {
|
||||
c.close();
|
||||
}
|
||||
Set<Map.Entry<Integer, Cursor>> entries = mCursors.entrySet();
|
||||
Iterator<Map.Entry<Integer, Cursor>> it = entries.iterator();
|
||||
while (it.hasNext()) {
|
||||
it.next().getValue().close();
|
||||
}
|
||||
|
||||
mCursors.clear();
|
||||
|
@ -282,7 +274,7 @@ public class GeckoSmsManager
|
|||
/*
|
||||
* Make sure that the following error codes are in sync with |ErrorType| in:
|
||||
* dom/mobilemessage/interfaces/nsIMobileMessageCallback.idl
|
||||
* The error code are owned by the DOM.
|
||||
* The error codes are owned by the DOM.
|
||||
*/
|
||||
public final static int kNoError = 0;
|
||||
public final static int kNoSignalError = 1;
|
||||
|
@ -305,8 +297,9 @@ public class GeckoSmsManager
|
|||
|
||||
private final static int kMaxMessageSize = 160;
|
||||
|
||||
private final static Uri kSmsContentUri = Uri.parse("content://sms");
|
||||
private final static Uri kSmsSentContentUri = Uri.parse("content://sms/sent");
|
||||
private final static Uri kSmsContentUri = Uri.parse("content://sms");
|
||||
private final static Uri kSmsSentContentUri = Uri.parse("content://sms/sent");
|
||||
private final static Uri kSmsThreadsContentUri = Uri.parse("content://sms/conversations");
|
||||
|
||||
private final static int kSmsTypeInbox = 1;
|
||||
private final static int kSmsTypeSentbox = 2;
|
||||
|
@ -351,7 +344,9 @@ public class GeckoSmsManager
|
|||
private final static int kMessageClassClass2 = 3;
|
||||
private final static int kMessageClassClass3 = 4;
|
||||
|
||||
private final static String[] kRequiredMessageRows = { "_id", "address", "body", "date", "type", "status" };
|
||||
private final static String[] kRequiredMessageRows = { "_id", "address", "body", "date", "type", "status", "read", "thread_id" };
|
||||
private final static String[] kRequiredMessageRowsForThread = { "_id", "address", "body", "read", "subject", "date" };
|
||||
private final static String[] kThreadProjection = { "thread_id" };
|
||||
|
||||
// Used to generate monotonically increasing GUIDs.
|
||||
private static final AtomicInteger pendingIntentGuid = new AtomicInteger(Integer.MIN_VALUE);
|
||||
|
@ -660,11 +655,14 @@ public class GeckoSmsManager
|
|||
throw new InvalidTypeException();
|
||||
}
|
||||
|
||||
boolean read = cursor.getInt(cursor.getColumnIndex("read")) != 0;
|
||||
|
||||
notifyGetSms(cursor.getInt(cursor.getColumnIndex("_id")),
|
||||
deliveryStatus,
|
||||
receiver, sender,
|
||||
cursor.getString(cursor.getColumnIndex("body")),
|
||||
cursor.getLong(cursor.getColumnIndex("date")),
|
||||
read,
|
||||
mRequestId);
|
||||
} catch (NotFoundException e) {
|
||||
Log.i("GeckoSmsManager", "Message id " + mMessageId + " not found");
|
||||
|
@ -736,23 +734,55 @@ public class GeckoSmsManager
|
|||
}
|
||||
}
|
||||
|
||||
private void getMessageFromCursorAndNotify(Cursor aCursor, int aRequestId) throws Exception {
|
||||
int type = aCursor.getInt(aCursor.getColumnIndex("type"));
|
||||
int deliveryStatus = kDeliveryStateUnknown;
|
||||
String sender = "";
|
||||
String receiver = "";
|
||||
|
||||
if (type == kSmsTypeInbox) {
|
||||
deliveryStatus = kDeliveryStatusSuccess;
|
||||
sender = aCursor.getString(aCursor.getColumnIndex("address"));
|
||||
} else if (type == kSmsTypeSentbox) {
|
||||
deliveryStatus = getGeckoDeliveryStatus(aCursor.getInt(aCursor.getColumnIndex("status")));
|
||||
receiver = aCursor.getString(aCursor.getColumnIndex("address"));
|
||||
} else {
|
||||
throw new Exception("Shouldn't ever get a message here that's not from inbox or sentbox");
|
||||
}
|
||||
|
||||
boolean read = aCursor.getInt(aCursor.getColumnIndex("read")) != 0;
|
||||
|
||||
notifyMessageCursorResult(aCursor.getInt(aCursor.getColumnIndex("_id")),
|
||||
deliveryStatus,
|
||||
receiver, sender,
|
||||
aCursor.getString(aCursor.getColumnIndex("body")),
|
||||
aCursor.getLong(aCursor.getColumnIndex("date")),
|
||||
aCursor.getLong(aCursor.getColumnIndex("thread_id")),
|
||||
read,
|
||||
aRequestId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createMessageList(long aStartDate, long aEndDate, String[] aNumbers, int aNumbersCount, String aDelivery, boolean aHasRead, boolean aRead, long aThreadId, boolean aReverse, int aRequestId) {
|
||||
class CreateMessageListRunnable implements Runnable {
|
||||
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 {
|
||||
private final long mStartDate;
|
||||
private final long mEndDate;
|
||||
private final String[] mNumbers;
|
||||
private final int mNumbersCount;
|
||||
private final String mDelivery;
|
||||
private final boolean mHasThreadId;
|
||||
private final long mThreadId;
|
||||
private final boolean mReverse;
|
||||
private final int mRequestId;
|
||||
|
||||
CreateMessageListRunnable(long aStartDate, long aEndDate, String[] aNumbers, int aNumbersCount, String aDelivery, boolean aHasRead, boolean aRead, long aThreadId, boolean aReverse, int aRequestId) {
|
||||
CreateMessageCursorRunnable(long aStartDate, long aEndDate, String[] aNumbers, int aNumbersCount, String aDelivery, boolean aHasRead, boolean aRead, boolean aHasThreadId, long aThreadId, boolean aReverse, int aRequestId) {
|
||||
mStartDate = aStartDate;
|
||||
mEndDate = aEndDate;
|
||||
mNumbers = aNumbers;
|
||||
mNumbersCount = aNumbersCount;
|
||||
mDelivery = aDelivery;
|
||||
mHasThreadId = aHasThreadId;
|
||||
mThreadId = aThreadId;
|
||||
mReverse = aReverse;
|
||||
mRequestId = aRequestId;
|
||||
}
|
||||
|
@ -763,169 +793,236 @@ public class GeckoSmsManager
|
|||
boolean closeCursor = true;
|
||||
|
||||
try {
|
||||
// TODO: should use the |selectionArgs| argument in |ContentResolver.query()|.
|
||||
ArrayList<String> restrictions = new ArrayList<String>();
|
||||
StringBuilder restrictions = new StringBuilder();
|
||||
Formatter formatter = new Formatter(restrictions);
|
||||
|
||||
if (mStartDate >= 0) {
|
||||
restrictions.add("date >= " + mStartDate);
|
||||
formatter.format("date >= '%d' AND ", mStartDate);
|
||||
}
|
||||
|
||||
if (mEndDate >= 0) {
|
||||
restrictions.add("date <= " + mEndDate);
|
||||
formatter.format("date <= '%d' AND ", mEndDate);
|
||||
}
|
||||
|
||||
if (mNumbersCount > 0) {
|
||||
final StringBuilder numberRestriction = new StringBuilder("address IN ('");
|
||||
numberRestriction.append(mNumbers[0]).append("'");
|
||||
formatter.format("address IN ('%s'", mNumbers[0]);
|
||||
|
||||
for (int i=1; i<mNumbersCount; ++i) {
|
||||
numberRestriction.append(", '").append(mNumbers[i]).append("'");
|
||||
for (int i = 1; i < mNumbersCount; ++i) {
|
||||
formatter.format(", '%s'", mNumbers[i]);
|
||||
}
|
||||
numberRestriction.append(')');
|
||||
|
||||
restrictions.add(numberRestriction.toString());
|
||||
|
||||
formatter.format(") AND ");
|
||||
}
|
||||
|
||||
if (mDelivery == null) {
|
||||
restrictions.add("type IN ('" + kSmsTypeSentbox + "', '" + kSmsTypeInbox + "')");
|
||||
if (mDelivery == null || mDelivery.isEmpty()) {
|
||||
formatter.format("type IN ('%d', '%d') AND ", kSmsTypeSentbox, kSmsTypeInbox);
|
||||
} else if (mDelivery.equals("sent")) {
|
||||
restrictions.add("type = " + kSmsTypeSentbox);
|
||||
formatter.format("type = '%d' AND ", kSmsTypeSentbox);
|
||||
} else if (mDelivery.equals("received")) {
|
||||
restrictions.add("type = " + kSmsTypeInbox);
|
||||
formatter.format("type = '%d' AND ", kSmsTypeInbox);
|
||||
} else {
|
||||
throw new UnexpectedDeliveryStateException();
|
||||
throw new Exception("Unexpected delivery state: " + mDelivery);
|
||||
}
|
||||
|
||||
final StringBuilder restrictionText = new StringBuilder();
|
||||
if (!restrictions.isEmpty()) {
|
||||
restrictionText.append(restrictions.get(0));
|
||||
if (mHasThreadId) {
|
||||
formatter.format("thread_id = '%d' AND ", mThreadId);
|
||||
}
|
||||
|
||||
for (int i=1; i<restrictions.size(); ++i) {
|
||||
restrictionText.append(" AND ").append(restrictions.get(i));
|
||||
}
|
||||
// Final 'AND 1' is a no-op so we don't have to special case the last
|
||||
// condition.
|
||||
formatter.format("1");
|
||||
|
||||
ContentResolver cr = GeckoAppShell.getContext().getContentResolver();
|
||||
cursor = cr.query(kSmsContentUri, kRequiredMessageRows, restrictionText.toString(), null,
|
||||
cursor = cr.query(kSmsContentUri,
|
||||
kRequiredMessageRows,
|
||||
restrictions.toString(),
|
||||
null,
|
||||
mReverse ? "date DESC" : "date ASC");
|
||||
|
||||
if (cursor.getCount() == 0) {
|
||||
notifyNoMessageInList(mRequestId);
|
||||
notifyCursorDone(mRequestId);
|
||||
return;
|
||||
}
|
||||
|
||||
MessagesListManager.getInstance().add(mRequestId, cursor);
|
||||
|
||||
cursor.moveToFirst();
|
||||
|
||||
int type = cursor.getInt(cursor.getColumnIndex("type"));
|
||||
int deliveryStatus;
|
||||
String sender = "";
|
||||
String receiver = "";
|
||||
|
||||
if (type == kSmsTypeInbox) {
|
||||
deliveryStatus = kDeliveryStatusSuccess;
|
||||
sender = cursor.getString(cursor.getColumnIndex("address"));
|
||||
} else if (type == kSmsTypeSentbox) {
|
||||
deliveryStatus = getGeckoDeliveryStatus(cursor.getInt(cursor.getColumnIndex("status")));
|
||||
receiver = cursor.getString(cursor.getColumnIndex("address"));
|
||||
} else {
|
||||
throw new UnexpectedDeliveryStateException();
|
||||
}
|
||||
|
||||
int listId = MessagesListManager.getInstance().add(cursor);
|
||||
getMessageFromCursorAndNotify(cursor, mRequestId);
|
||||
closeCursor = false;
|
||||
notifyListCreated(listId,
|
||||
cursor.getInt(cursor.getColumnIndex("_id")),
|
||||
deliveryStatus,
|
||||
receiver, sender,
|
||||
cursor.getString(cursor.getColumnIndex("body")),
|
||||
cursor.getLong(cursor.getColumnIndex("date")),
|
||||
mRequestId);
|
||||
} catch (UnexpectedDeliveryStateException e) {
|
||||
Log.e("GeckoSmsManager", "Unexcepted delivery state type", e);
|
||||
notifyReadingMessageListFailed(kUnknownError, mRequestId);
|
||||
} catch (Exception e) {
|
||||
Log.e("GeckoSmsManager", "Error while trying to create a message list cursor", e);
|
||||
notifyReadingMessageListFailed(kUnknownError, mRequestId);
|
||||
notifyCursorError(kUnknownError, mRequestId);
|
||||
} finally {
|
||||
// Close the cursor if MessagesListManager isn't taking care of it.
|
||||
// We could also just check if it is in the MessagesListManager list but
|
||||
// that would be less efficient.
|
||||
if (cursor != null && closeCursor) {
|
||||
if (closeCursor && cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!SmsIOThread.getInstance().execute(new CreateMessageListRunnable(aStartDate, aEndDate, aNumbers, aNumbersCount, aDelivery, aHasRead, aRead, aThreadId, aReverse, aRequestId))) {
|
||||
Log.e("GeckoSmsManager", "Failed to add CreateMessageListRunnable to the SmsIOThread");
|
||||
notifyReadingMessageListFailed(kUnknownError, aRequestId);
|
||||
if (!SmsIOThread.getInstance().execute(new CreateMessageCursorRunnable(aStartDate, aEndDate, aNumbers, aNumbersCount, aDelivery, aHasRead, aRead, aHasThreadId, aThreadId, aReverse, aRequestId))) {
|
||||
Log.e("GeckoSmsManager", "Failed to add CreateMessageCursorRunnable to the SmsIOThread");
|
||||
notifyCursorError(kUnknownError, aRequestId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getNextMessageInList(int aListId, int aRequestId) {
|
||||
class GetNextMessageInListRunnable implements Runnable {
|
||||
private final int mListId;
|
||||
public void getNextMessage(int aRequestId) {
|
||||
class GetNextMessageRunnable implements Runnable {
|
||||
private final int mRequestId;
|
||||
|
||||
GetNextMessageInListRunnable(int aListId, int aRequestId) {
|
||||
mListId = aListId;
|
||||
GetNextMessageRunnable(int aRequestId) {
|
||||
mRequestId = aRequestId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Cursor cursor = null;
|
||||
boolean closeCursor = true;
|
||||
try {
|
||||
cursor = MessagesListManager.getInstance().get(mRequestId);
|
||||
|
||||
if (!cursor.moveToNext()) {
|
||||
MessagesListManager.getInstance().remove(mRequestId);
|
||||
notifyCursorDone(mRequestId);
|
||||
return;
|
||||
}
|
||||
|
||||
getMessageFromCursorAndNotify(cursor, mRequestId);
|
||||
closeCursor = false;
|
||||
} catch (Exception e) {
|
||||
Log.e("GeckoSmsManager", "Error while trying to get the next message of a list", e);
|
||||
notifyCursorError(kUnknownError, mRequestId);
|
||||
} finally {
|
||||
if (closeCursor) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!SmsIOThread.getInstance().execute(new GetNextMessageRunnable(aRequestId))) {
|
||||
Log.e("GeckoSmsManager", "Failed to add GetNextMessageRunnable to the SmsIOThread");
|
||||
notifyCursorError(kUnknownError, aRequestId);
|
||||
}
|
||||
}
|
||||
|
||||
private void getThreadFromCursorAndNotify(Cursor aCursor, int aRequestId) throws Exception {
|
||||
ContentResolver cr = GeckoAppShell.getContext().getContentResolver();
|
||||
|
||||
long id = aCursor.getLong(aCursor.getColumnIndex("thread_id"));
|
||||
Cursor msgCursor = cr.query(kSmsContentUri,
|
||||
kRequiredMessageRowsForThread,
|
||||
"thread_id = " + id,
|
||||
null,
|
||||
"date DESC");
|
||||
|
||||
if (msgCursor == null || msgCursor.getCount() == 0) {
|
||||
throw new Exception("Empty thread " + id);
|
||||
}
|
||||
|
||||
msgCursor.moveToFirst();
|
||||
|
||||
String lastMessageSubject = msgCursor.getString(msgCursor.getColumnIndex("subject"));
|
||||
String body = msgCursor.getString(msgCursor.getColumnIndex("body"));
|
||||
long timestamp = msgCursor.getLong(msgCursor.getColumnIndex("date"));
|
||||
|
||||
HashSet<String> participants = new HashSet<>();
|
||||
do {
|
||||
String p = msgCursor.getString(msgCursor.getColumnIndex("address"));
|
||||
participants.add(p);
|
||||
} while (msgCursor.moveToNext());
|
||||
|
||||
//TODO: handle MMS
|
||||
String lastMessageType = "sms";
|
||||
|
||||
msgCursor = cr.query(kSmsContentUri,
|
||||
kRequiredMessageRowsForThread,
|
||||
"thread_id = " + id + " AND read = 0",
|
||||
null,
|
||||
null);
|
||||
|
||||
if (msgCursor == null) {
|
||||
Log.e("GeckoSmsManager", "We should never get here, should have errored before");
|
||||
throw new Exception("Empty thread " + id);
|
||||
}
|
||||
|
||||
long unreadCount = msgCursor.getCount();
|
||||
|
||||
notifyThreadCursorResult(id, lastMessageSubject, body, unreadCount, participants.toArray(), timestamp, lastMessageType, aRequestId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createThreadCursor(int aRequestId) {
|
||||
class CreateThreadCursorRunnable implements Runnable {
|
||||
private final int mRequestId;
|
||||
|
||||
CreateThreadCursorRunnable(int aRequestId) {
|
||||
mRequestId = aRequestId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Cursor cursor = MessagesListManager.getInstance().get(mListId);
|
||||
|
||||
if (!cursor.moveToNext()) {
|
||||
MessagesListManager.getInstance().remove(mListId);
|
||||
notifyNoMessageInList(mRequestId);
|
||||
ContentResolver cr = GeckoAppShell.getContext().getContentResolver();
|
||||
Cursor cursor = cr.query(kSmsThreadsContentUri,
|
||||
kThreadProjection,
|
||||
null,
|
||||
null,
|
||||
"date DESC");
|
||||
if (cursor == null || !cursor.moveToFirst()) {
|
||||
notifyCursorDone(mRequestId);
|
||||
return;
|
||||
}
|
||||
|
||||
int type = cursor.getInt(cursor.getColumnIndex("type"));
|
||||
int deliveryStatus;
|
||||
String sender = "";
|
||||
String receiver = "";
|
||||
MessagesListManager.getInstance().add(mRequestId, cursor);
|
||||
|
||||
if (type == kSmsTypeInbox) {
|
||||
deliveryStatus = kDeliveryStatusSuccess;
|
||||
sender = cursor.getString(cursor.getColumnIndex("address"));
|
||||
} else if (type == kSmsTypeSentbox) {
|
||||
deliveryStatus = getGeckoDeliveryStatus(cursor.getInt(cursor.getColumnIndex("status")));
|
||||
receiver = cursor.getString(cursor.getColumnIndex("address"));
|
||||
} else {
|
||||
throw new UnexpectedDeliveryStateException();
|
||||
}
|
||||
|
||||
int listId = MessagesListManager.getInstance().add(cursor);
|
||||
notifyGotNextMessage(cursor.getInt(cursor.getColumnIndex("_id")),
|
||||
deliveryStatus,
|
||||
receiver, sender,
|
||||
cursor.getString(cursor.getColumnIndex("body")),
|
||||
cursor.getLong(cursor.getColumnIndex("date")),
|
||||
mRequestId);
|
||||
} catch (UnexpectedDeliveryStateException e) {
|
||||
Log.e("GeckoSmsManager", "Unexcepted delivery state type", e);
|
||||
notifyReadingMessageListFailed(kUnknownError, mRequestId);
|
||||
getThreadFromCursorAndNotify(cursor, mRequestId);
|
||||
} catch (Exception e) {
|
||||
Log.e("GeckoSmsManager", "Error while trying to get the next message of a list", e);
|
||||
notifyReadingMessageListFailed(kUnknownError, mRequestId);
|
||||
Log.e("GeckoSmsManager", "Error while trying to create thread cursor: " + e);
|
||||
notifyCursorError(kUnknownError, mRequestId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!SmsIOThread.getInstance().execute(new GetNextMessageInListRunnable(aListId, aRequestId))) {
|
||||
Log.e("GeckoSmsManager", "Failed to add GetNextMessageInListRunnable to the SmsIOThread");
|
||||
notifyReadingMessageListFailed(kUnknownError, aRequestId);
|
||||
if (!SmsIOThread.getInstance().execute(new CreateThreadCursorRunnable(aRequestId))) {
|
||||
Log.e("GeckoSmsManager", "Failed to add CreateThreadCursorRunnable to the SmsIOThread");
|
||||
notifyCursorError(kUnknownError, aRequestId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearMessageList(int aListId) {
|
||||
MessagesListManager.getInstance().remove(aListId);
|
||||
public void getNextThread(int aRequestId) {
|
||||
class GetNextThreadRunnable implements Runnable {
|
||||
private final int mRequestId;
|
||||
|
||||
GetNextThreadRunnable(int aRequestId) {
|
||||
mRequestId = aRequestId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Cursor cursor = MessagesListManager.getInstance().get(mRequestId);
|
||||
|
||||
if (!cursor.moveToNext()) {
|
||||
MessagesListManager.getInstance().remove(mRequestId);
|
||||
notifyCursorDone(mRequestId);
|
||||
return;
|
||||
}
|
||||
|
||||
getThreadFromCursorAndNotify(cursor, mRequestId);
|
||||
} catch (Exception e) {
|
||||
Log.e("GeckoSmsManager", "Error while trying to create thread cursor: " + e);
|
||||
notifyCursorError(kUnknownError, mRequestId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!SmsIOThread.getInstance().execute(new GetNextThreadRunnable(aRequestId))) {
|
||||
Log.e("GeckoSmsManager", "Failed to add GetNextThreadRunnable to the SmsIOThread");
|
||||
notifyCursorError(kUnknownError, aRequestId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -983,24 +1080,32 @@ public class GeckoSmsManager
|
|||
private static final long serialVersionUID = 51883196784325305L;
|
||||
}
|
||||
|
||||
static class UnexpectedDeliveryStateException extends Exception {
|
||||
private static final long serialVersionUID = 494122763684005716L;
|
||||
}
|
||||
|
||||
static class UnmatchingIdException extends Exception {
|
||||
private static final long serialVersionUID = 158467542575633280L;
|
||||
}
|
||||
|
||||
@WrapForJNI
|
||||
private static native void notifySmsReceived(String aSender, String aBody, int aMessageClass, long aTimestamp);
|
||||
@WrapForJNI
|
||||
private static native void notifySmsSent(int aId, String aReceiver, String aBody, long aTimestamp, int aRequestId);
|
||||
@WrapForJNI
|
||||
private static native void notifySmsDelivery(int aId, int aDeliveryStatus, String aReceiver, String aBody, long aTimestamp);
|
||||
@WrapForJNI
|
||||
private static native void notifySmsSendFailed(int aError, int aRequestId);
|
||||
private static native void notifyGetSms(int aId, int aDeliveryStatus, String aReceiver, String aSender, String aBody, long aTimestamp, int aRequestId);
|
||||
@WrapForJNI
|
||||
private static native void notifyGetSms(int aId, int aDeliveryStatus, String aReceiver, String aSender, String aBody, long aTimestamp, boolean aRead, int aRequestId);
|
||||
@WrapForJNI
|
||||
private static native void notifyGetSmsFailed(int aError, int aRequestId);
|
||||
@WrapForJNI
|
||||
private static native void notifySmsDeleted(boolean aDeleted, int aRequestId);
|
||||
@WrapForJNI
|
||||
private static native void notifySmsDeleteFailed(int aError, int aRequestId);
|
||||
private static native void notifyNoMessageInList(int aRequestId);
|
||||
private static native void notifyListCreated(int aListId, int aMessageId, int aDeliveryStatus, String aReceiver, String aSender, String aBody, long aTimestamp, int aRequestId);
|
||||
private static native void notifyGotNextMessage(int aMessageId, int aDeliveryStatus, String aReceiver, String aSender, String aBody, long aTimestamp, int aRequestId);
|
||||
private static native void notifyReadingMessageListFailed(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);
|
||||
@WrapForJNI
|
||||
private static native void notifyMessageCursorResult(int aMessageId, int aDeliveryStatus, String aReceiver, String aSender, String aBody, long aTimestamp, long aThreadId, boolean aRead, int aRequestId);
|
||||
@WrapForJNI
|
||||
private static native void notifyCursorDone(int aRequestId);
|
||||
}
|
||||
|
|
|
@ -31,9 +31,10 @@ public class SmsManager {
|
|||
void send(String aNumber, String aMessage, int aRequestId);
|
||||
void getMessage(int aMessageId, int aRequestId);
|
||||
void deleteMessage(int aMessageId, int aRequestId);
|
||||
void createMessageList(long aStartDate, long aEndDate, String[] aNumbers, int aNumbersCount, String aDelivery, boolean aHasRead, boolean aRead, long aThreadId, boolean aReverse, int aRequestId);
|
||||
void getNextMessageInList(int aListId, int aRequestId);
|
||||
void clearMessageList(int aListId);
|
||||
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);
|
||||
void getNextMessage(int aRequestId);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -512,3 +512,231 @@ Java_org_mozilla_gecko_gfx_NativePanZoomController_getOverScrollMode(JNIEnv * ar
|
|||
xul_dlsym("Java_org_mozilla_gecko_gfx_NativePanZoomController_getOverScrollMode", &f_Java_org_mozilla_gecko_gfx_NativePanZoomController_getOverScrollMode);
|
||||
#endif
|
||||
|
||||
#ifdef JNI_STUBS
|
||||
|
||||
typedef void (*Java_org_mozilla_gecko_GeckoSmsManager_notifySmsReceived_t)(JNIEnv *, jclass, jstring, jstring, jint, jlong);
|
||||
static Java_org_mozilla_gecko_GeckoSmsManager_notifySmsReceived_t f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsReceived;
|
||||
extern "C" NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifySmsReceived(JNIEnv * arg0, jclass arg1, jstring arg2, jstring arg3, jint arg4, jlong arg5) {
|
||||
if (!f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsReceived) {
|
||||
arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"),
|
||||
"JNI Function called before it was loaded");
|
||||
return ;
|
||||
}
|
||||
f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsReceived(arg0, arg1, arg2, arg3, arg4, arg5);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef JNI_BINDINGS
|
||||
xul_dlsym("Java_org_mozilla_gecko_GeckoSmsManager_notifySmsReceived", &f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsReceived);
|
||||
#endif
|
||||
|
||||
#ifdef JNI_STUBS
|
||||
|
||||
typedef void (*Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSent_t)(JNIEnv *, jclass, jint, jstring, jstring, jlong, jint);
|
||||
static Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSent_t f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSent;
|
||||
extern "C" NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSent(JNIEnv * arg0, jclass arg1, jint arg2, jstring arg3, jstring arg4, jlong arg5, jint arg6) {
|
||||
if (!f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSent) {
|
||||
arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"),
|
||||
"JNI Function called before it was loaded");
|
||||
return ;
|
||||
}
|
||||
f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSent(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef JNI_BINDINGS
|
||||
xul_dlsym("Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSent", &f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSent);
|
||||
#endif
|
||||
|
||||
#ifdef JNI_STUBS
|
||||
|
||||
typedef void (*Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDelivery_t)(JNIEnv *, jclass, jint, jint, jstring, jstring, jlong);
|
||||
static Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDelivery_t f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDelivery;
|
||||
extern "C" NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDelivery(JNIEnv * arg0, jclass arg1, jint arg2, jint arg3, jstring arg4, jstring arg5, jlong arg6) {
|
||||
if (!f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDelivery) {
|
||||
arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"),
|
||||
"JNI Function called before it was loaded");
|
||||
return ;
|
||||
}
|
||||
f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDelivery(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef JNI_BINDINGS
|
||||
xul_dlsym("Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDelivery", &f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDelivery);
|
||||
#endif
|
||||
|
||||
#ifdef JNI_STUBS
|
||||
|
||||
typedef void (*Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSendFailed_t)(JNIEnv *, jclass, jint, jint);
|
||||
static Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSendFailed_t f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSendFailed;
|
||||
extern "C" NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSendFailed(JNIEnv * arg0, jclass arg1, jint arg2, jint arg3) {
|
||||
if (!f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSendFailed) {
|
||||
arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"),
|
||||
"JNI Function called before it was loaded");
|
||||
return ;
|
||||
}
|
||||
f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSendFailed(arg0, arg1, arg2, arg3);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef JNI_BINDINGS
|
||||
xul_dlsym("Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSendFailed", &f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSendFailed);
|
||||
#endif
|
||||
|
||||
#ifdef JNI_STUBS
|
||||
|
||||
typedef void (*Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSms_t)(JNIEnv *, jclass, jint, jint, jstring, jstring, jstring, jlong, jboolean, jint);
|
||||
static Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSms_t f_Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSms;
|
||||
extern "C" NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSms(JNIEnv * arg0, jclass arg1, jint arg2, jint arg3, jstring arg4, jstring arg5, jstring arg6, jlong arg7, jboolean arg8, jint arg9) {
|
||||
if (!f_Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSms) {
|
||||
arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"),
|
||||
"JNI Function called before it was loaded");
|
||||
return ;
|
||||
}
|
||||
f_Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSms(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef JNI_BINDINGS
|
||||
xul_dlsym("Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSms", &f_Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSms);
|
||||
#endif
|
||||
|
||||
#ifdef JNI_STUBS
|
||||
|
||||
typedef void (*Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSmsFailed_t)(JNIEnv *, jclass, jint, jint);
|
||||
static Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSmsFailed_t f_Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSmsFailed;
|
||||
extern "C" NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSmsFailed(JNIEnv * arg0, jclass arg1, jint arg2, jint arg3) {
|
||||
if (!f_Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSmsFailed) {
|
||||
arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"),
|
||||
"JNI Function called before it was loaded");
|
||||
return ;
|
||||
}
|
||||
f_Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSmsFailed(arg0, arg1, arg2, arg3);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef JNI_BINDINGS
|
||||
xul_dlsym("Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSmsFailed", &f_Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSmsFailed);
|
||||
#endif
|
||||
|
||||
#ifdef JNI_STUBS
|
||||
|
||||
typedef void (*Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleted_t)(JNIEnv *, jclass, jboolean, jint);
|
||||
static Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleted_t f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleted;
|
||||
extern "C" NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleted(JNIEnv * arg0, jclass arg1, jboolean arg2, jint arg3) {
|
||||
if (!f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleted) {
|
||||
arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"),
|
||||
"JNI Function called before it was loaded");
|
||||
return ;
|
||||
}
|
||||
f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleted(arg0, arg1, arg2, arg3);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef JNI_BINDINGS
|
||||
xul_dlsym("Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleted", &f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleted);
|
||||
#endif
|
||||
|
||||
#ifdef JNI_STUBS
|
||||
|
||||
typedef void (*Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleteFailed_t)(JNIEnv *, jclass, jint, jint);
|
||||
static Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleteFailed_t f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleteFailed;
|
||||
extern "C" NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleteFailed(JNIEnv * arg0, jclass arg1, jint arg2, jint arg3) {
|
||||
if (!f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleteFailed) {
|
||||
arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"),
|
||||
"JNI Function called before it was loaded");
|
||||
return ;
|
||||
}
|
||||
f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleteFailed(arg0, arg1, arg2, arg3);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef JNI_BINDINGS
|
||||
xul_dlsym("Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleteFailed", &f_Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleteFailed);
|
||||
#endif
|
||||
|
||||
#ifdef JNI_STUBS
|
||||
|
||||
typedef void (*Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorError_t)(JNIEnv *, jclass, jint, jint);
|
||||
static Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorError_t f_Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorError;
|
||||
extern "C" NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorError(JNIEnv * arg0, jclass arg1, jint arg2, jint arg3) {
|
||||
if (!f_Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorError) {
|
||||
arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"),
|
||||
"JNI Function called before it was loaded");
|
||||
return ;
|
||||
}
|
||||
f_Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorError(arg0, arg1, arg2, arg3);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef JNI_BINDINGS
|
||||
xul_dlsym("Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorError", &f_Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorError);
|
||||
#endif
|
||||
|
||||
#ifdef JNI_STUBS
|
||||
|
||||
typedef void (*Java_org_mozilla_gecko_GeckoSmsManager_notifyThreadCursorResult_t)(JNIEnv *, jclass, jlong, jstring, jstring, jlong, jobjectArray, jlong, jstring, jint);
|
||||
static Java_org_mozilla_gecko_GeckoSmsManager_notifyThreadCursorResult_t f_Java_org_mozilla_gecko_GeckoSmsManager_notifyThreadCursorResult;
|
||||
extern "C" NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifyThreadCursorResult(JNIEnv * arg0, jclass arg1, jlong arg2, jstring arg3, jstring arg4, jlong arg5, jobjectArray arg6, jlong arg7, jstring arg8, jint arg9) {
|
||||
if (!f_Java_org_mozilla_gecko_GeckoSmsManager_notifyThreadCursorResult) {
|
||||
arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"),
|
||||
"JNI Function called before it was loaded");
|
||||
return ;
|
||||
}
|
||||
f_Java_org_mozilla_gecko_GeckoSmsManager_notifyThreadCursorResult(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef JNI_BINDINGS
|
||||
xul_dlsym("Java_org_mozilla_gecko_GeckoSmsManager_notifyThreadCursorResult", &f_Java_org_mozilla_gecko_GeckoSmsManager_notifyThreadCursorResult);
|
||||
#endif
|
||||
|
||||
#ifdef JNI_STUBS
|
||||
|
||||
typedef void (*Java_org_mozilla_gecko_GeckoSmsManager_notifyMessageCursorResult_t)(JNIEnv *, jclass, jint, jint, jstring, jstring, jstring, jlong, jlong, jboolean, jint);
|
||||
static Java_org_mozilla_gecko_GeckoSmsManager_notifyMessageCursorResult_t f_Java_org_mozilla_gecko_GeckoSmsManager_notifyMessageCursorResult;
|
||||
extern "C" NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifyMessageCursorResult(JNIEnv * arg0, jclass arg1, jint arg2, jint arg3, jstring arg4, jstring arg5, jstring arg6, jlong arg7, jlong arg8, jboolean arg9, jint arg10) {
|
||||
if (!f_Java_org_mozilla_gecko_GeckoSmsManager_notifyMessageCursorResult) {
|
||||
arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"),
|
||||
"JNI Function called before it was loaded");
|
||||
return ;
|
||||
}
|
||||
f_Java_org_mozilla_gecko_GeckoSmsManager_notifyMessageCursorResult(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef JNI_BINDINGS
|
||||
xul_dlsym("Java_org_mozilla_gecko_GeckoSmsManager_notifyMessageCursorResult", &f_Java_org_mozilla_gecko_GeckoSmsManager_notifyMessageCursorResult);
|
||||
#endif
|
||||
|
||||
#ifdef JNI_STUBS
|
||||
|
||||
typedef void (*Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorDone_t)(JNIEnv *, jclass, jint);
|
||||
static Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorDone_t f_Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorDone;
|
||||
extern "C" NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorDone(JNIEnv * arg0, jclass arg1, jint arg2) {
|
||||
if (!f_Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorDone) {
|
||||
arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"),
|
||||
"JNI Function called before it was loaded");
|
||||
return ;
|
||||
}
|
||||
f_Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorDone(arg0, arg1, arg2);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef JNI_BINDINGS
|
||||
xul_dlsym("Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorDone", &f_Java_org_mozilla_gecko_GeckoSmsManager_notifyCursorDone);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1101,52 +1101,91 @@ AndroidBridge::DeleteMessage(int32_t aMessageId, nsIMobileMessageCallback* aRequ
|
|||
GeckoAppShell::DeleteMessageWrapper(aMessageId, requestId);
|
||||
}
|
||||
|
||||
void
|
||||
AndroidBridge::CreateMessageList(const dom::mobilemessage::SmsFilterData& aFilter, bool aReverse,
|
||||
nsIMobileMessageCallback* aRequest)
|
||||
NS_IMPL_ISUPPORTS0(MessageCursorContinueCallback)
|
||||
|
||||
NS_IMETHODIMP
|
||||
MessageCursorContinueCallback::HandleContinue()
|
||||
{
|
||||
ALOG_BRIDGE("AndroidBridge::CreateMessageList");
|
||||
GeckoAppShell::GetNextMessageWrapper(mRequestId);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
already_AddRefed<nsICursorContinueCallback>
|
||||
AndroidBridge::CreateMessageCursor(bool aHasStartDate,
|
||||
uint64_t aStartDate,
|
||||
bool aHasEndDate,
|
||||
uint64_t aEndDate,
|
||||
const char16_t** aNumbers,
|
||||
uint32_t aNumbersCount,
|
||||
const nsAString& aDelivery,
|
||||
bool aHasRead,
|
||||
bool aRead,
|
||||
bool aHasThreadId,
|
||||
uint64_t aThreadId,
|
||||
bool aReverse,
|
||||
nsIMobileMessageCursorCallback* aRequest)
|
||||
{
|
||||
ALOG_BRIDGE("AndroidBridge::CreateMessageCursor");
|
||||
|
||||
JNIEnv* const env = jni::GetGeckoThreadEnv();
|
||||
|
||||
uint32_t requestId;
|
||||
if (!QueueSmsRequest(aRequest, &requestId))
|
||||
return;
|
||||
if (!QueueSmsCursorRequest(aRequest, &requestId))
|
||||
return nullptr;
|
||||
|
||||
AutoLocalJNIFrame jniFrame(env, 2);
|
||||
|
||||
jobjectArray numbers =
|
||||
(jobjectArray)env->NewObjectArray(aFilter.numbers().Length(),
|
||||
(jobjectArray)env->NewObjectArray(aNumbersCount,
|
||||
jStringClass,
|
||||
NewJavaString(&jniFrame, EmptyString()));
|
||||
|
||||
for (uint32_t i = 0; i < aFilter.numbers().Length(); ++i) {
|
||||
jstring elem = NewJavaString(&jniFrame, aFilter.numbers()[i]);
|
||||
for (uint32_t i = 0; i < aNumbersCount; ++i) {
|
||||
jstring elem = NewJavaString(&jniFrame, nsDependentString(aNumbers[i]));
|
||||
env->SetObjectArrayElement(numbers, i, elem);
|
||||
env->DeleteLocalRef(elem);
|
||||
}
|
||||
|
||||
int64_t startDate = aFilter.hasStartDate() ? aFilter.startDate() : -1;
|
||||
int64_t endDate = aFilter.hasEndDate() ? aFilter.endDate() : -1;
|
||||
GeckoAppShell::CreateMessageListWrapper(startDate, endDate,
|
||||
ObjectArray::Ref::From(numbers),
|
||||
aFilter.numbers().Length(),
|
||||
aFilter.delivery(),
|
||||
aFilter.hasRead(), aFilter.read(),
|
||||
aFilter.threadId(),
|
||||
aReverse, requestId);
|
||||
int64_t startDate = aHasStartDate ? aStartDate : -1;
|
||||
int64_t endDate = aHasEndDate ? aEndDate : -1;
|
||||
GeckoAppShell::CreateMessageCursorWrapper(startDate, endDate,
|
||||
ObjectArray::Ref::From(numbers),
|
||||
aNumbersCount,
|
||||
aDelivery,
|
||||
aHasRead, aRead,
|
||||
aHasThreadId, aThreadId,
|
||||
aReverse,
|
||||
requestId);
|
||||
|
||||
nsCOMPtr<nsICursorContinueCallback> callback =
|
||||
new MessageCursorContinueCallback(requestId);
|
||||
return callback.forget();
|
||||
}
|
||||
|
||||
void
|
||||
AndroidBridge::GetNextMessageInList(int32_t aListId, nsIMobileMessageCallback* aRequest)
|
||||
NS_IMPL_ISUPPORTS0(ThreadCursorContinueCallback)
|
||||
|
||||
NS_IMETHODIMP
|
||||
ThreadCursorContinueCallback::HandleContinue()
|
||||
{
|
||||
ALOG_BRIDGE("AndroidBridge::GetNextMessageInList");
|
||||
GeckoAppShell::GetNextThreadWrapper(mRequestId);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
already_AddRefed<nsICursorContinueCallback>
|
||||
AndroidBridge::CreateThreadCursor(nsIMobileMessageCursorCallback* aRequest)
|
||||
{
|
||||
ALOG_BRIDGE("AndroidBridge::CreateThreadCursor");
|
||||
|
||||
uint32_t requestId;
|
||||
if (!QueueSmsRequest(aRequest, &requestId))
|
||||
return;
|
||||
if (!QueueSmsCursorRequest(aRequest, &requestId)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
GeckoAppShell::GetNextMessageInListWrapper(aListId, requestId);
|
||||
GeckoAppShell::CreateThreadCursorWrapper(requestId);
|
||||
|
||||
nsCOMPtr<nsICursorContinueCallback> callback =
|
||||
new ThreadCursorContinueCallback(requestId);
|
||||
return callback.forget();
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -1184,6 +1223,57 @@ AndroidBridge::DequeueSmsRequest(uint32_t aRequestId)
|
|||
return mSmsRequests[aRequestId].forget();
|
||||
}
|
||||
|
||||
bool
|
||||
AndroidBridge::QueueSmsCursorRequest(nsIMobileMessageCursorCallback* aRequest,
|
||||
uint32_t* aRequestIdOut)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread(), "Wrong thread!");
|
||||
MOZ_ASSERT(aRequest && aRequestIdOut);
|
||||
|
||||
const uint32_t length = mSmsCursorRequests.Length();
|
||||
for (uint32_t i = 0; i < length; i++) {
|
||||
if (!(mSmsCursorRequests)[i]) {
|
||||
(mSmsCursorRequests)[i] = aRequest;
|
||||
*aRequestIdOut = i;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
mSmsCursorRequests.AppendElement(aRequest);
|
||||
|
||||
// After AppendElement(), previous `length` points to the new tail element.
|
||||
*aRequestIdOut = length;
|
||||
return true;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIMobileMessageCursorCallback>
|
||||
AndroidBridge::GetSmsCursorRequest(uint32_t aRequestId)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread(), "Wrong thread!");
|
||||
|
||||
MOZ_ASSERT(aRequestId < mSmsCursorRequests.Length());
|
||||
if (aRequestId >= mSmsCursorRequests.Length()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// TODO: remove on final dequeue
|
||||
return mSmsCursorRequests[aRequestId];
|
||||
}
|
||||
|
||||
already_AddRefed<nsIMobileMessageCursorCallback>
|
||||
AndroidBridge::DequeueSmsCursorRequest(uint32_t aRequestId)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread(), "Wrong thread!");
|
||||
|
||||
MOZ_ASSERT(aRequestId < mSmsCursorRequests.Length());
|
||||
if (aRequestId >= mSmsCursorRequests.Length()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// TODO: remove on final dequeue
|
||||
return mSmsCursorRequests[aRequestId].forget();
|
||||
}
|
||||
|
||||
void
|
||||
AndroidBridge::GetCurrentNetworkInformation(hal::NetworkInformation* aNetworkInfo)
|
||||
{
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
|
||||
#include "nsIAndroidBridge.h"
|
||||
#include "nsIMobileMessageCallback.h"
|
||||
#include "nsIMobileMessageCursorCallback.h"
|
||||
#include "nsIDOMDOMCursor.h"
|
||||
|
||||
#include "mozilla/Likely.h"
|
||||
#include "mozilla/StaticPtr.h"
|
||||
|
@ -74,15 +76,6 @@ typedef struct AndroidSystemColors {
|
|||
nscolor panelColorBackground;
|
||||
} AndroidSystemColors;
|
||||
|
||||
class nsFilePickerCallback : nsISupports {
|
||||
public:
|
||||
NS_DECL_THREADSAFE_ISUPPORTS
|
||||
virtual void handleResult(nsAString& filePath) = 0;
|
||||
nsFilePickerCallback() {}
|
||||
protected:
|
||||
virtual ~nsFilePickerCallback() {}
|
||||
};
|
||||
|
||||
class DelayedTask {
|
||||
public:
|
||||
DelayedTask(Task* aTask, int aDelayMs) {
|
||||
|
@ -108,6 +101,42 @@ private:
|
|||
mozilla::TimeStamp mRunTime;
|
||||
};
|
||||
|
||||
class ThreadCursorContinueCallback : public nsICursorContinueCallback
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSICURSORCONTINUECALLBACK
|
||||
|
||||
ThreadCursorContinueCallback(int aRequestId)
|
||||
: mRequestId(aRequestId)
|
||||
{
|
||||
}
|
||||
private:
|
||||
virtual ~ThreadCursorContinueCallback()
|
||||
{
|
||||
}
|
||||
|
||||
int mRequestId;
|
||||
};
|
||||
|
||||
class MessageCursorContinueCallback : public nsICursorContinueCallback
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSICURSORCONTINUECALLBACK
|
||||
|
||||
MessageCursorContinueCallback(int aRequestId)
|
||||
: mRequestId(aRequestId)
|
||||
{
|
||||
}
|
||||
private:
|
||||
virtual ~MessageCursorContinueCallback()
|
||||
{
|
||||
}
|
||||
|
||||
int mRequestId;
|
||||
};
|
||||
|
||||
class AndroidBridge final
|
||||
{
|
||||
public:
|
||||
|
@ -241,10 +270,25 @@ public:
|
|||
nsIMobileMessageCallback* aRequest);
|
||||
void GetMessage(int32_t aMessageId, nsIMobileMessageCallback* aRequest);
|
||||
void DeleteMessage(int32_t aMessageId, nsIMobileMessageCallback* aRequest);
|
||||
void CreateMessageList(const dom::mobilemessage::SmsFilterData& aFilter,
|
||||
bool aReverse, nsIMobileMessageCallback* aRequest);
|
||||
void GetNextMessageInList(int32_t aListId, nsIMobileMessageCallback* aRequest);
|
||||
already_AddRefed<nsICursorContinueCallback>
|
||||
CreateMessageCursor(bool aHasStartDate,
|
||||
uint64_t aStartDate,
|
||||
bool aHasEndDate,
|
||||
uint64_t aEndDate,
|
||||
const char16_t** aNumbers,
|
||||
uint32_t aNumbersCount,
|
||||
const nsAString& aDelivery,
|
||||
bool aHasRead,
|
||||
bool aRead,
|
||||
bool aHasThreadId,
|
||||
uint64_t aThreadId,
|
||||
bool aReverse,
|
||||
nsIMobileMessageCursorCallback* aRequest);
|
||||
already_AddRefed<nsICursorContinueCallback>
|
||||
CreateThreadCursor(nsIMobileMessageCursorCallback* aRequest);
|
||||
already_AddRefed<nsIMobileMessageCallback> DequeueSmsRequest(uint32_t aRequestId);
|
||||
nsCOMPtr<nsIMobileMessageCursorCallback> GetSmsCursorRequest(uint32_t aRequestId);
|
||||
already_AddRefed<nsIMobileMessageCursorCallback> DequeueSmsCursorRequest(uint32_t aRequestId);
|
||||
|
||||
void GetCurrentNetworkInformation(hal::NetworkInformation* aNetworkInfo);
|
||||
|
||||
|
@ -313,7 +357,8 @@ protected:
|
|||
|
||||
static pthread_t sJavaUiThread;
|
||||
static AndroidBridge* sBridge;
|
||||
nsTArray<nsCOMPtr<nsIMobileMessageCallback> > mSmsRequests;
|
||||
nsTArray<nsCOMPtr<nsIMobileMessageCallback>> mSmsRequests;
|
||||
nsTArray<nsCOMPtr<nsIMobileMessageCursorCallback>> mSmsCursorRequests;
|
||||
|
||||
widget::GeckoLayerClient::GlobalRef mLayerClient;
|
||||
|
||||
|
@ -334,6 +379,7 @@ protected:
|
|||
int mAPIVersion;
|
||||
|
||||
bool QueueSmsRequest(nsIMobileMessageCallback* aRequest, uint32_t* aRequestIdOut);
|
||||
bool QueueSmsCursorRequest(nsIMobileMessageCursorCallback* aRequest, uint32_t* aRequestIdOut);
|
||||
|
||||
// intput stream
|
||||
jclass jReadableByteChannel;
|
||||
|
|
|
@ -33,20 +33,13 @@
|
|||
#include "mozilla/MathAlgorithms.h"
|
||||
#include "mozilla/UniquePtr.h"
|
||||
|
||||
#include "mozilla/dom/SmsMessage.h"
|
||||
#include "mozilla/dom/mobilemessage/Constants.h"
|
||||
#include "mozilla/dom/mobilemessage/Types.h"
|
||||
#include "mozilla/dom/mobilemessage/PSms.h"
|
||||
#include "mozilla/dom/mobilemessage/SmsParent.h"
|
||||
#include "mozilla/layers/APZCTreeManager.h"
|
||||
#include "nsIMobileMessageDatabaseService.h"
|
||||
#include "nsPluginInstanceOwner.h"
|
||||
#include "AndroidSurfaceTexture.h"
|
||||
#include "nsMemoryPressure.h"
|
||||
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
using namespace mozilla::dom::mobilemessage;
|
||||
using namespace mozilla::layers;
|
||||
using namespace mozilla::widget;
|
||||
using namespace mozilla::widget::android;
|
||||
|
@ -164,499 +157,6 @@ Java_org_mozilla_gecko_GeckoAppShell_notifyBatteryChange(JNIEnv* jenv, jclass,
|
|||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
#ifdef MOZ_WEBSMS_BACKEND
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifySmsReceived(JNIEnv* jenv, jclass,
|
||||
jstring aSender,
|
||||
jstring aBody,
|
||||
jint aMessageClass,
|
||||
jlong aTimestamp)
|
||||
{
|
||||
class NotifySmsReceivedRunnable : public nsRunnable {
|
||||
public:
|
||||
NotifySmsReceivedRunnable(const SmsMessageData& aMessageData)
|
||||
: mMessageData(aMessageData)
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP Run() {
|
||||
nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
|
||||
if (!obs) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMMozSmsMessage> message = new SmsMessage(mMessageData);
|
||||
obs->NotifyObservers(message, kSmsReceivedObserverTopic, nullptr);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
SmsMessageData mMessageData;
|
||||
};
|
||||
|
||||
// TODO Need to correct the message `threadId` parameter value. Bug 859098
|
||||
SmsMessageData message(0, 0, eDeliveryState_Received, eDeliveryStatus_Success,
|
||||
nsJNIString(aSender, jenv), EmptyString(),
|
||||
nsJNIString(aBody, jenv),
|
||||
static_cast<MessageClass>(aMessageClass),
|
||||
aTimestamp, false);
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable = new NotifySmsReceivedRunnable(message);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSent(JNIEnv* jenv, jclass,
|
||||
jint aId,
|
||||
jstring aReceiver,
|
||||
jstring aBody,
|
||||
jlong aTimestamp,
|
||||
jint aRequestId)
|
||||
{
|
||||
class NotifySmsSentRunnable : public nsRunnable {
|
||||
public:
|
||||
NotifySmsSentRunnable(const SmsMessageData& aMessageData,
|
||||
int32_t aRequestId)
|
||||
: mMessageData(aMessageData)
|
||||
, mRequestId(aRequestId)
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP Run() {
|
||||
/*
|
||||
* First, we are going to notify all SmsManager that a message has
|
||||
* been sent. Then, we will notify the SmsRequest object about it.
|
||||
*/
|
||||
nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
|
||||
if (!obs) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMMozSmsMessage> message = new SmsMessage(mMessageData);
|
||||
obs->NotifyObservers(message, kSmsSentObserverTopic, nullptr);
|
||||
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(mRequestId);
|
||||
NS_ENSURE_TRUE(request, NS_ERROR_FAILURE);
|
||||
|
||||
request->NotifyMessageSent(message);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
SmsMessageData mMessageData;
|
||||
int32_t mRequestId;
|
||||
};
|
||||
|
||||
// TODO Need to add the message `messageClass` parameter value. Bug 804476
|
||||
// TODO Need to correct the message `threadId` parameter value. Bug 859098
|
||||
SmsMessageData message(aId, 0, eDeliveryState_Sent, eDeliveryStatus_Pending,
|
||||
EmptyString(), nsJNIString(aReceiver, jenv),
|
||||
nsJNIString(aBody, jenv), eMessageClass_Normal,
|
||||
aTimestamp, true);
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable = new NotifySmsSentRunnable(message, aRequestId);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDelivery(JNIEnv* jenv, jclass,
|
||||
jint aId,
|
||||
jint aDeliveryStatus,
|
||||
jstring aReceiver,
|
||||
jstring aBody,
|
||||
jlong aTimestamp)
|
||||
{
|
||||
class NotifySmsDeliveredRunnable : public nsRunnable {
|
||||
public:
|
||||
NotifySmsDeliveredRunnable(const SmsMessageData& aMessageData)
|
||||
: mMessageData(aMessageData)
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP Run() {
|
||||
nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
|
||||
if (!obs) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMMozSmsMessage> message = new SmsMessage(mMessageData);
|
||||
const char* topic = (mMessageData.deliveryStatus() == eDeliveryStatus_Success)
|
||||
? kSmsDeliverySuccessObserverTopic
|
||||
: kSmsDeliveryErrorObserverTopic;
|
||||
obs->NotifyObservers(message, topic, nullptr);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
SmsMessageData mMessageData;
|
||||
};
|
||||
|
||||
// TODO Need to add the message `messageClass` parameter value. Bug 804476
|
||||
// TODO Need to correct the message `threadId` parameter value. Bug 859098
|
||||
SmsMessageData message(aId, 0, eDeliveryState_Sent,
|
||||
static_cast<DeliveryStatus>(aDeliveryStatus),
|
||||
EmptyString(), nsJNIString(aReceiver, jenv),
|
||||
nsJNIString(aBody, jenv), eMessageClass_Normal,
|
||||
aTimestamp, true);
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable = new NotifySmsDeliveredRunnable(message);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifySmsSendFailed(JNIEnv* jenv, jclass,
|
||||
jint aError,
|
||||
jint aRequestId)
|
||||
{
|
||||
class NotifySmsSendFailedRunnable : public nsRunnable {
|
||||
public:
|
||||
NotifySmsSendFailedRunnable(int32_t aError,
|
||||
int32_t aRequestId)
|
||||
: mError(aError)
|
||||
, mRequestId(aRequestId)
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP Run() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(mRequestId);
|
||||
NS_ENSURE_TRUE(request, NS_ERROR_FAILURE);
|
||||
|
||||
request->NotifySendMessageFailed(mError);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
int32_t mError;
|
||||
int32_t mRequestId;
|
||||
};
|
||||
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable =
|
||||
new NotifySmsSendFailedRunnable(aError, aRequestId);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSms(JNIEnv* jenv, jclass,
|
||||
jint aId,
|
||||
jint aDeliveryStatus,
|
||||
jstring aReceiver,
|
||||
jstring aSender,
|
||||
jstring aBody,
|
||||
jlong aTimestamp,
|
||||
jint aRequestId)
|
||||
{
|
||||
class NotifyGetSmsRunnable : public nsRunnable {
|
||||
public:
|
||||
NotifyGetSmsRunnable(const SmsMessageData& aMessageData,
|
||||
int32_t aRequestId)
|
||||
: mMessageData(aMessageData)
|
||||
, mRequestId(aRequestId)
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP Run() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(mRequestId);
|
||||
NS_ENSURE_TRUE(request, NS_ERROR_FAILURE);
|
||||
|
||||
nsCOMPtr<nsIDOMMozSmsMessage> message = new SmsMessage(mMessageData);
|
||||
request->NotifyMessageGot(message);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
SmsMessageData mMessageData;
|
||||
int32_t mRequestId;
|
||||
};
|
||||
|
||||
nsJNIString receiver = nsJNIString(aReceiver, jenv);
|
||||
DeliveryState state = receiver.IsEmpty() ? eDeliveryState_Received
|
||||
: eDeliveryState_Sent;
|
||||
|
||||
// TODO Need to add the message `read` parameter value. Bug 748391
|
||||
// TODO Need to add the message `messageClass` parameter value. Bug 804476
|
||||
// TODO Need to correct the message `threadId` parameter value. Bug 859098
|
||||
SmsMessageData message(aId, 0, state,
|
||||
static_cast<DeliveryStatus>(aDeliveryStatus),
|
||||
nsJNIString(aSender, jenv), receiver,
|
||||
nsJNIString(aBody, jenv), eMessageClass_Normal,
|
||||
aTimestamp, true);
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable = new NotifyGetSmsRunnable(message, aRequestId);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifyGetSmsFailed(JNIEnv* jenv, jclass,
|
||||
jint aError,
|
||||
jint aRequestId)
|
||||
{
|
||||
class NotifyGetSmsFailedRunnable : public nsRunnable {
|
||||
public:
|
||||
NotifyGetSmsFailedRunnable(int32_t aError,
|
||||
int32_t aRequestId)
|
||||
: mError(aError)
|
||||
, mRequestId(aRequestId)
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP Run() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(mRequestId);
|
||||
NS_ENSURE_TRUE(request, NS_ERROR_FAILURE);
|
||||
|
||||
request->NotifyGetMessageFailed(mError);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
int32_t mError;
|
||||
int32_t mRequestId;
|
||||
};
|
||||
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable =
|
||||
new NotifyGetSmsFailedRunnable(aError, aRequestId);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleted(JNIEnv* jenv, jclass,
|
||||
jboolean aDeleted,
|
||||
jint aRequestId)
|
||||
{
|
||||
class NotifySmsDeletedRunnable : public nsRunnable {
|
||||
public:
|
||||
NotifySmsDeletedRunnable(bool aDeleted, int32_t aRequestId)
|
||||
: mDeleted(aDeleted)
|
||||
, mRequestId(aRequestId)
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP Run() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(mRequestId);
|
||||
NS_ENSURE_TRUE(request, NS_ERROR_FAILURE);
|
||||
|
||||
// For android, we support only single SMS deletion.
|
||||
request->NotifyMessageDeleted(&mDeleted, 1);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
bool mDeleted;
|
||||
int32_t mRequestId;
|
||||
};
|
||||
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable =
|
||||
new NotifySmsDeletedRunnable(aDeleted, aRequestId);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifySmsDeleteFailed(JNIEnv* jenv, jclass,
|
||||
jint aError,
|
||||
jint aRequestId)
|
||||
{
|
||||
class NotifySmsDeleteFailedRunnable : public nsRunnable {
|
||||
public:
|
||||
NotifySmsDeleteFailedRunnable(int32_t aError,
|
||||
int32_t aRequestId)
|
||||
: mError(aError)
|
||||
, mRequestId(aRequestId)
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP Run() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(mRequestId);
|
||||
NS_ENSURE_TRUE(request, NS_ERROR_FAILURE);
|
||||
|
||||
request->NotifyDeleteMessageFailed(mError);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
int32_t mError;
|
||||
int32_t mRequestId;
|
||||
};
|
||||
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable =
|
||||
new NotifySmsDeleteFailedRunnable(aError, aRequestId);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifyNoMessageInList(JNIEnv* jenv, jclass,
|
||||
jint aRequestId)
|
||||
{
|
||||
class NotifyNoMessageInListRunnable : public nsRunnable {
|
||||
public:
|
||||
NotifyNoMessageInListRunnable(int32_t aRequestId)
|
||||
: mRequestId(aRequestId)
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP Run() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(mRequestId);
|
||||
NS_ENSURE_TRUE(request, NS_ERROR_FAILURE);
|
||||
|
||||
request->NotifyNoMessageInList();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
int32_t mRequestId;
|
||||
};
|
||||
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable =
|
||||
new NotifyNoMessageInListRunnable(aRequestId);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifyListCreated(JNIEnv* jenv, jclass,
|
||||
jint aListId,
|
||||
jint aMessageId,
|
||||
jint aDeliveryStatus,
|
||||
jstring aReceiver,
|
||||
jstring aSender,
|
||||
jstring aBody,
|
||||
jlong aTimestamp,
|
||||
jint aRequestId)
|
||||
{
|
||||
class NotifyCreateMessageListRunnable : public nsRunnable {
|
||||
public:
|
||||
NotifyCreateMessageListRunnable(int32_t aListId,
|
||||
const SmsMessageData& aMessageData,
|
||||
int32_t aRequestId)
|
||||
: mListId(aListId)
|
||||
, mMessageData(aMessageData)
|
||||
, mRequestId(aRequestId)
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP Run() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(mRequestId);
|
||||
NS_ENSURE_TRUE(request, NS_ERROR_FAILURE);
|
||||
|
||||
nsCOMPtr<nsIDOMMozSmsMessage> message = new SmsMessage(mMessageData);
|
||||
request->NotifyMessageListCreated(mListId, message);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
int32_t mListId;
|
||||
SmsMessageData mMessageData;
|
||||
int32_t mRequestId;
|
||||
};
|
||||
|
||||
|
||||
nsJNIString receiver = nsJNIString(aReceiver, jenv);
|
||||
DeliveryState state = receiver.IsEmpty() ? eDeliveryState_Received
|
||||
: eDeliveryState_Sent;
|
||||
|
||||
// TODO Need to add the message `read` parameter value. Bug 748391
|
||||
// TODO Need to add the message `messageClass` parameter value. Bug 804476
|
||||
// TODO Need to correct the message `threadId` parameter value. Bug 859098
|
||||
SmsMessageData message(aMessageId, 0, state,
|
||||
static_cast<DeliveryStatus>(aDeliveryStatus),
|
||||
nsJNIString(aSender, jenv), receiver,
|
||||
nsJNIString(aBody, jenv), eMessageClass_Normal,
|
||||
aTimestamp, true);
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable =
|
||||
new NotifyCreateMessageListRunnable(aListId, message, aRequestId);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifyGotNextMessage(JNIEnv* jenv, jclass,
|
||||
jint aMessageId,
|
||||
jint aDeliveryStatus,
|
||||
jstring aReceiver,
|
||||
jstring aSender,
|
||||
jstring aBody,
|
||||
jlong aTimestamp,
|
||||
jint aRequestId)
|
||||
{
|
||||
class NotifyGotNextMessageRunnable : public nsRunnable {
|
||||
public:
|
||||
NotifyGotNextMessageRunnable(const SmsMessageData& aMessageData,
|
||||
int32_t aRequestId)
|
||||
: mMessageData(aMessageData)
|
||||
, mRequestId(aRequestId)
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP Run() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(mRequestId);
|
||||
NS_ENSURE_TRUE(request, NS_ERROR_FAILURE);
|
||||
|
||||
nsCOMPtr<nsIDOMMozSmsMessage> message = new SmsMessage(mMessageData);
|
||||
request->NotifyNextMessageInListGot(message);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
SmsMessageData mMessageData;
|
||||
int32_t mRequestId;
|
||||
};
|
||||
|
||||
|
||||
nsJNIString receiver = nsJNIString(aReceiver, jenv);
|
||||
DeliveryState state = receiver.IsEmpty() ? eDeliveryState_Received
|
||||
: eDeliveryState_Sent;
|
||||
|
||||
// TODO Need to add the message `read` parameter value. Bug 748391
|
||||
// TODO Need to add the message `messageClass` parameter value. Bug 804476
|
||||
// TODO Need to correct the message `threadId` parameter value. Bug 859098
|
||||
SmsMessageData message(aMessageId, 0, state,
|
||||
static_cast<DeliveryStatus>(aDeliveryStatus),
|
||||
nsJNIString(aSender, jenv), receiver,
|
||||
nsJNIString(aBody, jenv), eMessageClass_Normal,
|
||||
aTimestamp, true);
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable =
|
||||
new NotifyGotNextMessageRunnable(message, aRequestId);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoSmsManager_notifyReadingMessageListFailed(JNIEnv* jenv, jclass,
|
||||
jint aError,
|
||||
jint aRequestId)
|
||||
{
|
||||
class NotifyReadListFailedRunnable : public nsRunnable {
|
||||
public:
|
||||
NotifyReadListFailedRunnable(int32_t aError,
|
||||
int32_t aRequestId)
|
||||
: mError(aError)
|
||||
, mRequestId(aRequestId)
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP Run() {
|
||||
nsCOMPtr<nsIMobileMessageCallback> request =
|
||||
AndroidBridge::Bridge()->DequeueSmsRequest(mRequestId);
|
||||
NS_ENSURE_TRUE(request, NS_ERROR_FAILURE);
|
||||
|
||||
request->NotifyReadMessageListFailed(mError);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
int32_t mError;
|
||||
int32_t mRequestId;
|
||||
};
|
||||
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable =
|
||||
new NotifyReadListFailedRunnable(aError, aRequestId);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
#endif // MOZ_WEBSMS_BACKEND
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoAppShell_invalidateAndScheduleComposite(JNIEnv*, jclass)
|
||||
{
|
||||
|
@ -675,31 +175,6 @@ Java_org_mozilla_gecko_GeckoAppShell_computeRenderIntegrity(JNIEnv*, jclass)
|
|||
return nsWindow::ComputeRenderIntegrity();
|
||||
}
|
||||
|
||||
NS_EXPORT void JNICALL
|
||||
Java_org_mozilla_gecko_GeckoAppShell_notifyFilePickerResult(JNIEnv* jenv, jclass, jstring filePath, jlong callback)
|
||||
{
|
||||
class NotifyFilePickerResultRunnable : public nsRunnable {
|
||||
public:
|
||||
NotifyFilePickerResultRunnable(nsString& fileDir, long callback) :
|
||||
mFileDir(fileDir), mCallback(callback) {}
|
||||
|
||||
NS_IMETHODIMP Run() {
|
||||
nsFilePickerCallback* handler = (nsFilePickerCallback*)mCallback;
|
||||
handler->handleResult(mFileDir);
|
||||
handler->Release();
|
||||
return NS_OK;
|
||||
}
|
||||
private:
|
||||
nsString mFileDir;
|
||||
long mCallback;
|
||||
};
|
||||
nsString path = nsJNIString(filePath, jenv);
|
||||
|
||||
nsCOMPtr<nsIRunnable> runnable =
|
||||
new NotifyFilePickerResultRunnable(path, (long)callback);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
#define MAX_LOCK_ATTEMPTS 10
|
||||
|
||||
static bool LockWindowWithRetry(void* window, unsigned char** bits, int* width, int* height, int* format, int* stride)
|
||||
|
@ -873,7 +348,7 @@ Java_org_mozilla_gecko_gfx_NativePanZoomController_init(JNIEnv* env, jobject ins
|
|||
NativePanZoomController::LocalRef oldRef =
|
||||
AndroidContentController::SetNativePanZoomController(newRef);
|
||||
|
||||
MOZ_ASSERT(!oldRef, "Registering a new NPZC when we already have one");
|
||||
// MOZ_ASSERT(!oldRef, "Registering a new NPZC when we already have one");
|
||||
}
|
||||
|
||||
NS_EXPORT jboolean JNICALL
|
||||
|
|
|
@ -66,6 +66,65 @@ public:
|
|||
template<class Impl>
|
||||
constexpr JNINativeMethod GeckoJavaSampler::Natives<Impl>::methods[];
|
||||
|
||||
template<class Impl>
|
||||
class GeckoSmsManager::Natives : public mozilla::jni::NativeImpl<GeckoSmsManager, Impl>
|
||||
{
|
||||
public:
|
||||
static constexpr JNINativeMethod methods[] = {
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifyCursorDone_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifyCursorDone_t, Impl>
|
||||
::template Wrap<&Impl::NotifyCursorDone>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifyCursorError_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifyCursorError_t, Impl>
|
||||
::template Wrap<&Impl::NotifyCursorError>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifyGetSms_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifyGetSms_t, Impl>
|
||||
::template Wrap<&Impl::NotifyGetSms>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifyGetSmsFailed_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifyGetSmsFailed_t, Impl>
|
||||
::template Wrap<&Impl::NotifyGetSmsFailed>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifyMessageCursorResult_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifyMessageCursorResult_t, Impl>
|
||||
::template Wrap<&Impl::NotifyMessageCursorResult>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifySmsDeleteFailed_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifySmsDeleteFailed_t, Impl>
|
||||
::template Wrap<&Impl::NotifySmsDeleteFailed>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifySmsDeleted_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifySmsDeleted_t, Impl>
|
||||
::template Wrap<&Impl::NotifySmsDeleted>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifySmsDelivery_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifySmsDelivery_t, Impl>
|
||||
::template Wrap<&Impl::NotifySmsDelivery>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifySmsReceived_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifySmsReceived_t, Impl>
|
||||
::template Wrap<&Impl::NotifySmsReceived>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifySmsSendFailed_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifySmsSendFailed_t, Impl>
|
||||
::template Wrap<&Impl::NotifySmsSendFailed>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifySmsSent_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifySmsSent_t, Impl>
|
||||
::template Wrap<&Impl::NotifySmsSent>),
|
||||
|
||||
mozilla::jni::MakeNativeMethod<GeckoSmsManager::NotifyThreadCursorResult_t>(
|
||||
mozilla::jni::NativeStub<GeckoSmsManager::NotifyThreadCursorResult_t, Impl>
|
||||
::template Wrap<&Impl::NotifyThreadCursorResult>)
|
||||
};
|
||||
};
|
||||
|
||||
template<class Impl>
|
||||
constexpr JNINativeMethod GeckoSmsManager::Natives<Impl>::methods[];
|
||||
|
||||
template<class Impl>
|
||||
class GeckoThread::Natives : public mozilla::jni::NativeImpl<GeckoThread, Impl>
|
||||
{
|
||||
|
|
|
@ -78,14 +78,6 @@ auto GeckoAppShell::CheckURIVisited(mozilla::jni::String::Param a0) -> void
|
|||
return mozilla::jni::Method<CheckURIVisited_t>::Call(nullptr, nullptr, a0);
|
||||
}
|
||||
|
||||
constexpr char GeckoAppShell::ClearMessageList_t::name[];
|
||||
constexpr char GeckoAppShell::ClearMessageList_t::signature[];
|
||||
|
||||
auto GeckoAppShell::ClearMessageList(int32_t a0) -> void
|
||||
{
|
||||
return mozilla::jni::Method<ClearMessageList_t>::Call(nullptr, nullptr, a0);
|
||||
}
|
||||
|
||||
constexpr char GeckoAppShell::CloseCamera_t::name[];
|
||||
constexpr char GeckoAppShell::CloseCamera_t::signature[];
|
||||
|
||||
|
@ -118,12 +110,12 @@ auto GeckoAppShell::CreateInputStream(mozilla::jni::Object::Param a0) -> mozilla
|
|||
return mozilla::jni::Method<CreateInputStream_t>::Call(nullptr, nullptr, a0);
|
||||
}
|
||||
|
||||
constexpr char GeckoAppShell::CreateMessageListWrapper_t::name[];
|
||||
constexpr char GeckoAppShell::CreateMessageListWrapper_t::signature[];
|
||||
constexpr char GeckoAppShell::CreateMessageCursorWrapper_t::name[];
|
||||
constexpr char GeckoAppShell::CreateMessageCursorWrapper_t::signature[];
|
||||
|
||||
auto GeckoAppShell::CreateMessageListWrapper(int64_t a0, int64_t a1, mozilla::jni::ObjectArray::Param a2, int32_t a3, mozilla::jni::String::Param a4, bool a5, bool a6, int64_t a7, bool a8, int32_t a9) -> void
|
||||
auto GeckoAppShell::CreateMessageCursorWrapper(int64_t a0, int64_t a1, mozilla::jni::ObjectArray::Param a2, int32_t a3, mozilla::jni::String::Param a4, bool a5, bool a6, bool a7, int64_t a8, bool a9, int32_t a10) -> void
|
||||
{
|
||||
return mozilla::jni::Method<CreateMessageListWrapper_t>::Call(nullptr, nullptr, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
|
||||
return mozilla::jni::Method<CreateMessageCursorWrapper_t>::Call(nullptr, nullptr, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
|
||||
}
|
||||
|
||||
constexpr char GeckoAppShell::CreateShortcut_t::name[];
|
||||
|
@ -134,6 +126,14 @@ auto GeckoAppShell::CreateShortcut(mozilla::jni::String::Param a0, mozilla::jni:
|
|||
return mozilla::jni::Method<CreateShortcut_t>::Call(nullptr, nullptr, a0, a1, a2);
|
||||
}
|
||||
|
||||
constexpr char GeckoAppShell::CreateThreadCursorWrapper_t::name[];
|
||||
constexpr char GeckoAppShell::CreateThreadCursorWrapper_t::signature[];
|
||||
|
||||
auto GeckoAppShell::CreateThreadCursorWrapper(int32_t a0) -> void
|
||||
{
|
||||
return mozilla::jni::Method<CreateThreadCursorWrapper_t>::Call(nullptr, nullptr, a0);
|
||||
}
|
||||
|
||||
constexpr char GeckoAppShell::DeleteMessageWrapper_t::name[];
|
||||
constexpr char GeckoAppShell::DeleteMessageWrapper_t::signature[];
|
||||
|
||||
|
@ -366,12 +366,20 @@ auto GeckoAppShell::GetMimeTypeFromExtensionsWrapper(mozilla::jni::String::Param
|
|||
return mozilla::jni::Method<GetMimeTypeFromExtensionsWrapper_t>::Call(nullptr, nullptr, a0);
|
||||
}
|
||||
|
||||
constexpr char GeckoAppShell::GetNextMessageInListWrapper_t::name[];
|
||||
constexpr char GeckoAppShell::GetNextMessageInListWrapper_t::signature[];
|
||||
constexpr char GeckoAppShell::GetNextMessageWrapper_t::name[];
|
||||
constexpr char GeckoAppShell::GetNextMessageWrapper_t::signature[];
|
||||
|
||||
auto GeckoAppShell::GetNextMessageInListWrapper(int32_t a0, int32_t a1) -> void
|
||||
auto GeckoAppShell::GetNextMessageWrapper(int32_t a0) -> void
|
||||
{
|
||||
return mozilla::jni::Method<GetNextMessageInListWrapper_t>::Call(nullptr, nullptr, a0, a1);
|
||||
return mozilla::jni::Method<GetNextMessageWrapper_t>::Call(nullptr, nullptr, a0);
|
||||
}
|
||||
|
||||
constexpr char GeckoAppShell::GetNextThreadWrapper_t::name[];
|
||||
constexpr char GeckoAppShell::GetNextThreadWrapper_t::signature[];
|
||||
|
||||
auto GeckoAppShell::GetNextThreadWrapper(int32_t a0) -> void
|
||||
{
|
||||
return mozilla::jni::Method<GetNextThreadWrapper_t>::Call(nullptr, nullptr, a0);
|
||||
}
|
||||
|
||||
constexpr char GeckoAppShell::GetProxyForURIWrapper_t::name[];
|
||||
|
@ -795,6 +803,44 @@ auto GeckoJavaSampler::UnpauseJavaProfiling() -> void
|
|||
return mozilla::jni::Method<UnpauseJavaProfiling_t>::Call(nullptr, nullptr);
|
||||
}
|
||||
|
||||
constexpr char GeckoSmsManager::name[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifyCursorDone_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifyCursorDone_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifyCursorError_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifyCursorError_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifyGetSms_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifyGetSms_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifyGetSmsFailed_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifyGetSmsFailed_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifyMessageCursorResult_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifyMessageCursorResult_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifySmsDeleteFailed_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifySmsDeleteFailed_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifySmsDeleted_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifySmsDeleted_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifySmsDelivery_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifySmsDelivery_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifySmsReceived_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifySmsReceived_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifySmsSendFailed_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifySmsSendFailed_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifySmsSent_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifySmsSent_t::signature[];
|
||||
|
||||
constexpr char GeckoSmsManager::NotifyThreadCursorResult_t::name[];
|
||||
constexpr char GeckoSmsManager::NotifyThreadCursorResult_t::signature[];
|
||||
|
||||
constexpr char GeckoThread::name[];
|
||||
|
||||
constexpr char GeckoThread::PumpMessageLoop_t::name[];
|
||||
|
|
|
@ -254,24 +254,6 @@ public:
|
|||
|
||||
static auto CheckURIVisited(mozilla::jni::String::Param) -> void;
|
||||
|
||||
public:
|
||||
struct ClearMessageList_t {
|
||||
typedef GeckoAppShell Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "clearMessageList";
|
||||
static constexpr char signature[] =
|
||||
"(I)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
static auto ClearMessageList(int32_t) -> void;
|
||||
|
||||
public:
|
||||
struct CloseCamera_t {
|
||||
typedef GeckoAppShell Owner;
|
||||
|
@ -344,7 +326,7 @@ public:
|
|||
static auto CreateInputStream(mozilla::jni::Object::Param) -> mozilla::jni::Object::LocalRef;
|
||||
|
||||
public:
|
||||
struct CreateMessageListWrapper_t {
|
||||
struct CreateMessageCursorWrapper_t {
|
||||
typedef GeckoAppShell Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
|
@ -356,19 +338,20 @@ public:
|
|||
mozilla::jni::String::Param,
|
||||
bool,
|
||||
bool,
|
||||
bool,
|
||||
int64_t,
|
||||
bool,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "createMessageList";
|
||||
static constexpr char name[] = "createMessageCursor";
|
||||
static constexpr char signature[] =
|
||||
"(JJ[Ljava/lang/String;ILjava/lang/String;ZZJZI)V";
|
||||
"(JJ[Ljava/lang/String;ILjava/lang/String;ZZZJZI)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
static auto CreateMessageListWrapper(int64_t, int64_t, mozilla::jni::ObjectArray::Param, int32_t, mozilla::jni::String::Param, bool, bool, int64_t, bool, int32_t) -> void;
|
||||
static auto CreateMessageCursorWrapper(int64_t, int64_t, mozilla::jni::ObjectArray::Param, int32_t, mozilla::jni::String::Param, bool, bool, bool, int64_t, bool, int32_t) -> void;
|
||||
|
||||
public:
|
||||
struct CreateShortcut_t {
|
||||
|
@ -390,6 +373,24 @@ public:
|
|||
|
||||
static auto CreateShortcut(mozilla::jni::String::Param, mozilla::jni::String::Param, mozilla::jni::String::Param) -> void;
|
||||
|
||||
public:
|
||||
struct CreateThreadCursorWrapper_t {
|
||||
typedef GeckoAppShell Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "createThreadCursor";
|
||||
static constexpr char signature[] =
|
||||
"(I)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
static auto CreateThreadCursorWrapper(int32_t) -> void;
|
||||
|
||||
public:
|
||||
struct DeleteMessageWrapper_t {
|
||||
typedef GeckoAppShell Owner;
|
||||
|
@ -904,23 +905,40 @@ public:
|
|||
static auto GetMimeTypeFromExtensionsWrapper(mozilla::jni::String::Param) -> mozilla::jni::String::LocalRef;
|
||||
|
||||
public:
|
||||
struct GetNextMessageInListWrapper_t {
|
||||
struct GetNextMessageWrapper_t {
|
||||
typedef GeckoAppShell Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "getNextMessageInList";
|
||||
static constexpr char name[] = "getNextMessage";
|
||||
static constexpr char signature[] =
|
||||
"(II)V";
|
||||
"(I)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
static auto GetNextMessageInListWrapper(int32_t, int32_t) -> void;
|
||||
static auto GetNextMessageWrapper(int32_t) -> void;
|
||||
|
||||
public:
|
||||
struct GetNextThreadWrapper_t {
|
||||
typedef GeckoAppShell Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "getNextThread";
|
||||
static constexpr char signature[] =
|
||||
"(I)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
static auto GetNextThreadWrapper(int32_t) -> void;
|
||||
|
||||
public:
|
||||
struct GetProxyForURIWrapper_t {
|
||||
|
@ -1906,6 +1924,254 @@ public:
|
|||
template<class Impl> class Natives;
|
||||
};
|
||||
|
||||
class GeckoSmsManager : public mozilla::jni::Class<GeckoSmsManager>
|
||||
{
|
||||
public:
|
||||
typedef mozilla::jni::Ref<GeckoSmsManager> Ref;
|
||||
typedef mozilla::jni::LocalRef<GeckoSmsManager> LocalRef;
|
||||
typedef mozilla::jni::GlobalRef<GeckoSmsManager> GlobalRef;
|
||||
typedef const mozilla::jni::Param<GeckoSmsManager>& Param;
|
||||
|
||||
static constexpr char name[] =
|
||||
"org/mozilla/gecko/GeckoSmsManager";
|
||||
|
||||
protected:
|
||||
GeckoSmsManager(jobject instance) : Class(instance) {}
|
||||
|
||||
public:
|
||||
struct NotifyCursorDone_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "notifyCursorDone";
|
||||
static constexpr char signature[] =
|
||||
"(I)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
public:
|
||||
struct NotifyCursorError_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "notifyCursorError";
|
||||
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 NotifyGetSms_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t,
|
||||
int32_t,
|
||||
mozilla::jni::String::Param,
|
||||
mozilla::jni::String::Param,
|
||||
mozilla::jni::String::Param,
|
||||
int64_t,
|
||||
bool,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "notifyGetSms";
|
||||
static constexpr char signature[] =
|
||||
"(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;JZI)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
public:
|
||||
struct NotifyGetSmsFailed_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "notifyGetSmsFailed";
|
||||
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 NotifyMessageCursorResult_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t,
|
||||
int32_t,
|
||||
mozilla::jni::String::Param,
|
||||
mozilla::jni::String::Param,
|
||||
mozilla::jni::String::Param,
|
||||
int64_t,
|
||||
int64_t,
|
||||
bool,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "notifyMessageCursorResult";
|
||||
static constexpr char signature[] =
|
||||
"(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;JJZI)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
public:
|
||||
struct NotifySmsDeleteFailed_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "notifySmsDeleteFailed";
|
||||
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 NotifySmsDeleted_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
bool,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "notifySmsDeleted";
|
||||
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 NotifySmsDelivery_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t,
|
||||
int32_t,
|
||||
mozilla::jni::String::Param,
|
||||
mozilla::jni::String::Param,
|
||||
int64_t> Args;
|
||||
static constexpr char name[] = "notifySmsDelivery";
|
||||
static constexpr char signature[] =
|
||||
"(IILjava/lang/String;Ljava/lang/String;J)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;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
mozilla::jni::String::Param,
|
||||
mozilla::jni::String::Param,
|
||||
int32_t,
|
||||
int64_t> Args;
|
||||
static constexpr char name[] = "notifySmsReceived";
|
||||
static constexpr char signature[] =
|
||||
"(Ljava/lang/String;Ljava/lang/String;IJ)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
public:
|
||||
struct NotifySmsSendFailed_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "notifySmsSendFailed";
|
||||
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 NotifySmsSent_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int32_t,
|
||||
mozilla::jni::String::Param,
|
||||
mozilla::jni::String::Param,
|
||||
int64_t,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "notifySmsSent";
|
||||
static constexpr char signature[] =
|
||||
"(ILjava/lang/String;Ljava/lang/String;JI)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
public:
|
||||
struct NotifyThreadCursorResult_t {
|
||||
typedef GeckoSmsManager Owner;
|
||||
typedef void ReturnType;
|
||||
typedef void SetterType;
|
||||
typedef mozilla::jni::Args<
|
||||
int64_t,
|
||||
mozilla::jni::String::Param,
|
||||
mozilla::jni::String::Param,
|
||||
int64_t,
|
||||
mozilla::jni::ObjectArray::Param,
|
||||
int64_t,
|
||||
mozilla::jni::String::Param,
|
||||
int32_t> Args;
|
||||
static constexpr char name[] = "notifyThreadCursorResult";
|
||||
static constexpr char signature[] =
|
||||
"(JLjava/lang/String;Ljava/lang/String;J[Ljava/lang/Object;JLjava/lang/String;I)V";
|
||||
static const bool isStatic = true;
|
||||
static const bool isMultithreaded = false;
|
||||
static const mozilla::jni::ExceptionMode exceptionMode =
|
||||
mozilla::jni::ExceptionMode::ABORT;
|
||||
};
|
||||
|
||||
public:
|
||||
template<class Impl> class Natives;
|
||||
};
|
||||
|
||||
class GeckoThread : public mozilla::jni::Class<GeckoThread>
|
||||
{
|
||||
public:
|
||||
|
|
Загрузка…
Ссылка в новой задаче