1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef PRINTING_PRINTING_CONTEXT_ANDROID_H_
6#define PRINTING_PRINTING_CONTEXT_ANDROID_H_
7
8#include <jni.h>
9
10#include <string>
11
12#include "base/android/scoped_java_ref.h"
13#include "printing/printing_context.h"
14
15namespace printing {
16
17// Android subclass of PrintingContext.  The implementation for this header file
18// resides in Chrome for Android repository.  This class communicates with the
19// Java side through JNI.
20class PRINTING_EXPORT PrintingContextAndroid : public PrintingContext {
21 public:
22  explicit PrintingContextAndroid(Delegate* delegate);
23  virtual ~PrintingContextAndroid();
24
25  // Called when the page is successfully written to a PDF using the file
26  // descriptor specified, or when the printing operation failed.
27  static void PdfWritingDone(int fd, bool success);
28
29  // Called from Java, when printing settings from the user are ready or the
30  // printing operation is canceled.
31  void AskUserForSettingsReply(JNIEnv* env, jobject obj, jboolean success);
32
33  // PrintingContext implementation.
34  virtual void AskUserForSettings(
35      int max_pages,
36      bool has_selection,
37      const PrintSettingsCallback& callback) OVERRIDE;
38  virtual Result UseDefaultSettings() OVERRIDE;
39  virtual gfx::Size GetPdfPaperSizeDeviceUnits() OVERRIDE;
40  virtual Result UpdatePrinterSettings(bool external_preview,
41                                       bool show_system_dialog) OVERRIDE;
42  virtual Result InitWithSettings(const PrintSettings& settings) OVERRIDE;
43  virtual Result NewDocument(const base::string16& document_name) OVERRIDE;
44  virtual Result NewPage() OVERRIDE;
45  virtual Result PageDone() OVERRIDE;
46  virtual Result DocumentDone() OVERRIDE;
47  virtual void Cancel() OVERRIDE;
48  virtual void ReleaseContext() OVERRIDE;
49  virtual gfx::NativeDrawingContext context() const OVERRIDE;
50
51  // Registers JNI bindings for RegisterContext.
52  static bool RegisterPrintingContext(JNIEnv* env);
53
54 private:
55  base::android::ScopedJavaGlobalRef<jobject> j_printing_context_;
56
57  // The callback from AskUserForSettings to be called when the settings are
58  // ready on the Java side
59  PrintSettingsCallback callback_;
60
61  DISALLOW_COPY_AND_ASSIGN(PrintingContextAndroid);
62};
63
64}  // namespace printing
65
66#endif  // PRINTING_PRINTING_CONTEXT_ANDROID_H_
67
68