1d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/*
2d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Copyright (C) 2010 The Android Open Source Project
3d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi *
4d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License");
5d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * you may not use this file except in compliance with the License.
6d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * You may obtain a copy of the License at
7d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi *
8d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi *      http://www.apache.org/licenses/LICENSE-2.0
9d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi *
10d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Unless required by applicable law or agreed to in writing, software
11d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS,
12d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * See the License for the specific language governing permissions and
14d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * limitations under the License.
15d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */
16d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
17d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipackage android.drm;
18d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
19d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/**
200e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Defines constants that are used by the DRM framework.
21d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi *
22d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */
23d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic class DrmStore {
24d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
250e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Interface definition for the columns that represent DRM constraints.
26d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
27d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public interface ConstraintsColumns {
28d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
290e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The maximum repeat count.
300e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * <p>
310e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * Type: INTEGER
32d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
33d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final String MAX_REPEAT_COUNT = "max_repeat_count";
34d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
35d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
360e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The remaining repeat count.
370e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * <p>
380e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * Type: INTEGER
39d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
40d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final String REMAINING_REPEAT_COUNT = "remaining_repeat_count";
41d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
42d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
430e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The time before which the rights-protected file cannot be played/viewed.
440e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * <p>
450e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * Type: TEXT
46d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
47d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final String LICENSE_START_TIME = "license_start_time";
48d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
49d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
500e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The time after which the rights-protected file cannot be played/viewed.
510e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * <p>
520e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * Type: TEXT
53d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
54d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final String LICENSE_EXPIRY_TIME = "license_expiry_time";
55d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
56d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
570e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The available time left before the license expires.
580e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * <p>
590e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * Type: TEXT
60d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
61d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final String LICENSE_AVAILABLE_TIME = "license_available_time";
62d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
63d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
640e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The data stream for extended metadata.
650e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * <p>
660e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * Type: TEXT
67d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
68d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final String EXTENDED_METADATA = "extended_metadata";
69d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
70d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
71d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
720e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Defines DRM object types.
73d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
74d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static class DrmObjectType {
75d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
760e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * An unknown object type.
77d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
78d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int UNKNOWN = 0x00;
79d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
800e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * A rights-protected file object type.
81d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
82d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int CONTENT = 0x01;
83d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
840e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * A rights information object type.
85d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
86d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int RIGHTS_OBJECT = 0x02;
87d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
880e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * A trigger information object type.
89d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
90d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int TRIGGER_OBJECT = 0x03;
91d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
92d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
93d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
940e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Defines playback states for content.
95d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
96d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static class Playback {
97d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
980e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * Playback started.
99d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
100d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int START = 0x00;
101d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1020e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * Playback stopped.
103d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
104d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int STOP = 0x01;
105d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1060e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * Playback paused.
107d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
108d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int PAUSE = 0x02;
109d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1100e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * Playback resumed.
111d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
112d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int RESUME = 0x03;
113d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
114d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /* package */ static boolean isValid(int playbackStatus) {
115d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            boolean isValid = false;
116d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
117d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            switch (playbackStatus) {
118d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                case START:
119d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                case STOP:
120d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                case PAUSE:
121d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                case RESUME:
122d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                    isValid = true;
123d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            }
124d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            return isValid;
125d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        }
126d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
127d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
128d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
1290e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Defines actions that can be performed on rights-protected content.
130d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
131d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static class Action {
132d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1330e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The default action.
134d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
135d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int DEFAULT = 0x00;
136d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1370e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The rights-protected content can be played.
138d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
139d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int PLAY = 0x01;
140d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1410e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The rights-protected content can be set as a ringtone.
142d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
143d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int RINGTONE = 0x02;
144d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1450e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The rights-protected content can be transferred.
146d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
147d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int TRANSFER = 0x03;
148d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1490e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The rights-protected content can be set as output.
150d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
151d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int OUTPUT = 0x04;
152d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1530e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The rights-protected content can be previewed.
154d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
155d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int PREVIEW = 0x05;
156d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1570e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The rights-protected content can be executed.
158d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
159d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int EXECUTE = 0x06;
160d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1610e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The rights-protected content can be displayed.
162d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
163d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int DISPLAY = 0x07;
164d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
165d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /* package */ static boolean isValid(int action) {
166d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            boolean isValid = false;
167d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
168d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            switch (action) {
169d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                case DEFAULT:
170d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                case PLAY:
171d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                case RINGTONE:
172d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                case TRANSFER:
173d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                case OUTPUT:
174d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                case PREVIEW:
175d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                case EXECUTE:
176d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                case DISPLAY:
177d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                    isValid = true;
178d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            }
179d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            return isValid;
180d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        }
181d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
182d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
183d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
1840e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Defines status notifications for digital rights.
185d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
186d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static class RightsStatus {
187d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1880e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The digital rights are valid.
189d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
190d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int RIGHTS_VALID = 0x00;
191d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1920e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The digital rights are invalid.
193d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
194d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int RIGHTS_INVALID = 0x01;
195d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
1960e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The digital rights have expired.
197d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
198d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int RIGHTS_EXPIRED = 0x02;
199d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        /**
2000e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber         * The digital rights have not been acquired for the rights-protected content.
201d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi         */
202d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        public static final int RIGHTS_NOT_ACQUIRED = 0x03;
203d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
204d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi}
205d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
206