1// Copyright 2014 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 ATHENA_ACTIVITY_PUBLIC_ACTIVITY_VIEW_MODEL_H_
6#define ATHENA_ACTIVITY_PUBLIC_ACTIVITY_VIEW_MODEL_H_
7
8#include "athena/athena_export.h"
9#include "base/strings/string16.h"
10
11typedef unsigned int SkColor;
12
13namespace gfx {
14class ImageSkia;
15}
16
17namespace views {
18class View;
19class Widget;
20}
21
22namespace athena {
23
24// The view model for the representation of the activity.
25class ATHENA_EXPORT ActivityViewModel {
26 public:
27  virtual ~ActivityViewModel() {}
28
29  // Called after the view model is attached to the widget/window tree and
30  // before it gets registered to the ActivityManager and the ResourceManager.
31  // At this time the Activity can also be moved to a different place in the
32  // Activity history.
33  virtual void Init() = 0;
34
35  // Returns a color most representative of this activity.
36  virtual SkColor GetRepresentativeColor() const = 0;
37
38  // Returns a title for the activity.
39  virtual base::string16 GetTitle() const = 0;
40
41  // Returns an icon for the activity.
42  virtual gfx::ImageSkia GetIcon() const = 0;
43
44  // True if the activity wants to use Widget's frame, or false if the activity
45  // draws its own frame.
46  virtual bool UsesFrame() const = 0;
47
48  // Returns the contents view which might be NULL if the activity is not
49  // loaded. Note that the caller should not hold on to the view since it can
50  // be deleted by the resource manager.
51  virtual views::View* GetContentsView() = 0;
52
53  // Creates a custom widget for the activity. Returns NULL to use default
54  // implementation.
55  virtual views::Widget* CreateWidget() = 0;
56
57  // Returns an image which can be used to represent the activity in e.g. the
58  // overview mode. The returned image can have no size if either a view exists
59  // or the activity has not yet been loaded or ever been presented. In that
60  // case GetRepresentativeColor() should be used to clear the preview area.
61  // Note that since the image gets created upon request, and the
62  // ActivityViewModel will hold no reference to the returned image data. As
63  // such it is advisable to hold on to the image as long as needed instead of
64  // calling this function frequently since it will cause time to generate.
65  virtual gfx::ImageSkia GetOverviewModeImage() = 0;
66
67  // Prepares the contents view for overview.
68  virtual void PrepareContentsForOverview() = 0;
69
70  // Undoes any changes done by PrepareContentsForOverview().
71  virtual void ResetContentsView() = 0;
72};
73
74}  // namespace athena
75
76#endif  // ATHENA_ACTIVITY_PUBLIC_ACTIVITY_VIEW_MODEL_H_
77