11754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato/*
21754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Copyright (C) 2016 The Android Open Source Project
31754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato *
41754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License");
51754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * you may not use this file except in compliance with the License.
61754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * You may obtain a copy of the License at
71754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato *
81754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato *      http://www.apache.org/licenses/LICENSE-2.0
91754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato *
101754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Unless required by applicable law or agreed to in writing, software
111754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS,
121754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * See the License for the specific language governing permissions and
141754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * limitations under the License.
151754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */
161754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
171754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#ifndef INCIDENT_SERVICE_H
181754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#define INCIDENT_SERVICE_H
191754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
201754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include "Reporter.h"
211754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
221754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <android/os/BnIncidentManager.h>
231754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <utils/Looper.h>
241754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
251754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <deque>
261754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <mutex>
271754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
281754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace android;
291754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace android::base;
301754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace android::binder;
311754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace android::os;
321754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace std;
331754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
341754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato// ================================================================================
351754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoclass ReportRequestQueue : public virtual RefBase
361754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{
371754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic:
381754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    ReportRequestQueue();
391754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    virtual ~ReportRequestQueue();
401754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
411754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    void addRequest(const sp<ReportRequest>& request);
421754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    sp<ReportRequest> getNextRequest();
431754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
441754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoprivate:
451754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    mutex mLock;
461754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    deque<sp<ReportRequest> > mQueue;
471754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato};
481754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
491754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
501754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato// ================================================================================
511754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoclass ReportHandler : public MessageHandler
521754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{
531754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic:
541754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    ReportHandler(const sp<Looper>& handlerLooper, const sp<ReportRequestQueue>& queue);
551754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    virtual ~ReportHandler();
561754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
571754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    virtual void handleMessage(const Message& message);
581754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
591754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    /**
601754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato     * Adds a ReportRequest to the queue.
611754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato     */
621754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    void scheduleRunReport(const sp<ReportRequest>& request);
631754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
641754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    /**
651754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato     * Resets mBacklogDelay to the default and schedules sending
661754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato     * the messages to dropbox.
671754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato     */
681754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    void scheduleSendBacklogToDropbox();
691754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
701754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoprivate:
711754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    mutex mLock;
721754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    nsecs_t mBacklogDelay;
731754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    sp<Looper> mHandlerLooper;
741754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    sp<ReportRequestQueue> mQueue;
751754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
761754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    /**
771754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato     * Runs all of the reports that have been queued.
781754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato     */
791754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    void run_report();
801754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
811754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    /**
821754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato     * Schedules a dropbox task mBacklogDelay nanoseconds from now.
831754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato     */
841754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    void schedule_send_backlog_to_dropbox_locked();
851754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
861754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    /**
871754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato     * Sends the backlog to the dropbox service.
881754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato     */
891754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    void send_backlog_to_dropbox();
901754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato};
911754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
921754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
931754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato// ================================================================================
941754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoclass IncidentService : public BnIncidentManager {
951754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic:
961754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    IncidentService(const sp<Looper>& handlerLooper);
971754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    virtual ~IncidentService();
981754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
991754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    virtual Status reportIncident(const IncidentReportArgs& args);
1001754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
1011754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    virtual Status reportIncidentToStream(const IncidentReportArgs& args,
1021754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato            const sp<IIncidentReportStatusListener>& listener, const unique_fd& stream);
1031754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
1041754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    virtual Status systemRunning();
1051754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
1061754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoprivate:
1071754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    sp<ReportRequestQueue> mQueue;
1081754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    sp<ReportHandler> mHandler;
1091754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato};
1101754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
1111754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
1121754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#endif // INCIDENT_SERVICE_H
113