OSDN Git Service

DO NOT MERGE: change SET_DISPLAY_OFFSET namespace to com.android.permission.* This...
[android-x86/frameworks-base.git] / cmds / bootanimation / BootAnimation.h
1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef ANDROID_BOOTANIMATION_H
18 #define ANDROID_BOOTANIMATION_H
19
20 #include <stdint.h>
21 #include <sys/types.h>
22
23 #include <androidfw/AssetManager.h>
24 #include <utils/Thread.h>
25
26 #include <EGL/egl.h>
27 #include <GLES/gl.h>
28
29 class SkBitmap;
30
31 namespace android {
32
33 class Surface;
34 class SurfaceComposerClient;
35 class SurfaceControl;
36
37 // ---------------------------------------------------------------------------
38
39 class BootAnimation : public Thread, public IBinder::DeathRecipient
40 {
41 public:
42                 BootAnimation();
43     virtual     ~BootAnimation();
44
45     sp<SurfaceComposerClient> session() const;
46
47 private:
48     virtual bool        threadLoop();
49     virtual status_t    readyToRun();
50     virtual void        onFirstRef();
51     virtual void        binderDied(const wp<IBinder>& who);
52
53     bool                updateIsTimeAccurate();
54
55     class TimeCheckThread : public Thread {
56     public:
57         TimeCheckThread(BootAnimation* bootAnimation);
58         virtual ~TimeCheckThread();
59     private:
60         virtual status_t    readyToRun();
61         virtual bool        threadLoop();
62         bool                doThreadLoop();
63         void                addTimeDirWatch();
64
65         int mInotifyFd;
66         int mSystemWd;
67         int mTimeWd;
68         BootAnimation* mBootAnimation;
69     };
70
71     struct Texture {
72         GLint   w;
73         GLint   h;
74         GLuint  name;
75     };
76
77     struct Font {
78         FileMap* map;
79         Texture texture;
80         int char_width;
81         int char_height;
82     };
83
84     struct Animation {
85         struct Frame {
86             String8 name;
87             FileMap* map;
88             int trimX;
89             int trimY;
90             int trimWidth;
91             int trimHeight;
92             mutable GLuint tid;
93             bool operator < (const Frame& rhs) const {
94                 return name < rhs.name;
95             }
96         };
97         struct Part {
98             int count;  // The number of times this part should repeat, 0 for infinite
99             int pause;  // The number of frames to pause for at the end of this part
100             int clockPosX;  // The x position of the clock, in pixels. Positive values offset from
101                             // the left of the screen, negative values offset from the right.
102             int clockPosY;  // The y position of the clock, in pixels. Positive values offset from
103                             // the bottom of the screen, negative values offset from the top.
104                             // If either of the above are INT_MIN the clock is disabled, if INT_MAX
105                             // the clock is centred on that axis.
106             String8 path;
107             String8 trimData;
108             SortedVector<Frame> frames;
109             bool playUntilComplete;
110             float backgroundColor[3];
111             uint8_t* audioData;
112             int audioLength;
113             Animation* animation;
114         };
115         int fps;
116         int width;
117         int height;
118         Vector<Part> parts;
119         String8 audioConf;
120         String8 fileName;
121         ZipFileRO* zip;
122         Font clockFont;
123     };
124
125     status_t initTexture(Texture* texture, AssetManager& asset, const char* name);
126     status_t initTexture(FileMap* map, int* width, int* height);
127     status_t initFont(Font* font, const char* fallback);
128     bool android();
129     bool movie();
130     void drawText(const char* str, const Font& font, bool bold, int* x, int* y);
131     void drawClock(const Font& font, const int xPos, const int yPos);
132     bool validClock(const Animation::Part& part);
133     Animation* loadAnimation(const String8&);
134     bool playAnimation(const Animation&);
135     void releaseAnimation(Animation*) const;
136     bool parseAnimationDesc(Animation&);
137     bool preloadZip(Animation &animation);
138     bool playSoundsAllowed() const;
139
140     void checkExit();
141
142     sp<SurfaceComposerClient>       mSession;
143     AssetManager mAssets;
144     Texture     mAndroid[2];
145     int         mWidth;
146     int         mHeight;
147     bool        mUseNpotTextures = false;
148     EGLDisplay  mDisplay;
149     EGLDisplay  mContext;
150     EGLDisplay  mSurface;
151     sp<SurfaceControl> mFlingerSurfaceControl;
152     sp<Surface> mFlingerSurface;
153     bool        mClockEnabled;
154     bool        mTimeIsAccurate;
155     bool        mTimeFormat12Hour;
156     bool        mSystemBoot;
157     String8     mZipFileName;
158     SortedVector<String8> mLoadedFiles;
159     sp<TimeCheckThread> mTimeCheckThread;
160 };
161
162 // ---------------------------------------------------------------------------
163
164 }; // namespace android
165
166 #endif // ANDROID_BOOTANIMATION_H