1ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/*
2ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Copyright (C) 2010 The Android Open Source Project
3ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *
4ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Licensed under the Apache License, Version 2.0 (the "License");
5ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * you may not use this file except in compliance with the License.
6ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * You may obtain a copy of the License at
7ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *
8ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *      http://www.apache.org/licenses/LICENSE-2.0
9ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *
10ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Unless required by applicable law or agreed to in writing, software
11ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * distributed under the License is distributed on an "AS IS" BASIS,
12ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * See the License for the specific language governing permissions and
14ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * limitations under the License.
15ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */
16ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
1781393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschipackage com.android.videoeditor.service;
18ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
19ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.util.Map;
20ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
21ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.Overlay;
22ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.os.Bundle;
23ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
24ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
25ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/**
26ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The representation of an overlay in the user interface
27ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */
28ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschipublic class MovieOverlay {
29ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    // Overlay types
30194f8240bb71889b6a096eecda5601c969f6c21fGil Dobjanschi    public static final int OVERLAY_TYPE_CENTER_1 = 0;
31194f8240bb71889b6a096eecda5601c969f6c21fGil Dobjanschi    public static final int OVERLAY_TYPE_BOTTOM_1 = 1;
32194f8240bb71889b6a096eecda5601c969f6c21fGil Dobjanschi    public static final int OVERLAY_TYPE_CENTER_2 = 2;
33194f8240bb71889b6a096eecda5601c969f6c21fGil Dobjanschi    public static final int OVERLAY_TYPE_BOTTOM_2 = 3;
34ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
35ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    // User attribute keys
36ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private static final String KEY_TYPE = "type";
37ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private static final String KEY_TITLE = "title";
38ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private static final String KEY_SUBTITLE = "subtitle";
39ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
40ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    // Instance variables
41ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private final String mUniqueId;
42ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private long mStartTimeMs;
43ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private long mDurationMs;
44ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private String mTitle;
45ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private String mSubtitle;
46ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private int mType;
47ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
48ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private long mAppStartTimeMs;
49ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private long mAppDurationMs;
50ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
51ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
52ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * Default constructor
53ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
54ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @SuppressWarnings("unused")
55ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private MovieOverlay() {
56ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        this(null);
57ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
58ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
59ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
60ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * Constructor
61ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
62ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param overlay The overlay
63ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
64ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    MovieOverlay(Overlay overlay) {
65ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mUniqueId = overlay.getId();
66ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mAppStartTimeMs = mStartTimeMs = overlay.getStartTime();
67ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mAppDurationMs = mDurationMs = overlay.getDuration();
68ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
69ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        final Map<String, String> userAttributes = overlay.getUserAttributes();
70ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mTitle = userAttributes.get(KEY_TITLE);
71ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mSubtitle = userAttributes.get(KEY_SUBTITLE);
72ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mType = Integer.parseInt(userAttributes.get(KEY_TYPE));
73ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
74ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
75ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
76ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * Constructor
77ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
78ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param id The overlay id
79ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param startTimeMs The start time
80ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param durationMs The duration
81ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param title The title
82ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param subTitle The sub title
83ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param type The title type
84ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
85ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    MovieOverlay(String id, long startTimeMs, long durationMs, String title,
86ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            String subTitle, int type) {
87ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mUniqueId = id;
88ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mAppStartTimeMs = mStartTimeMs = startTimeMs;
89ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mAppDurationMs = mDurationMs = durationMs;
90ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
91ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mTitle = title;
92ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mSubtitle = subTitle;
93ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mType = type;
94ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
95ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
96ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
9705be941a5cc0347e8b67deb0a91d70e91105ccafShih-chia Cheng     * @return The id of this overlay
98ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
99ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public String getId() {
100ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return mUniqueId;
101ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
102ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
103ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
104ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * If a preview or export is in progress, then this change is effective for
105ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * next preview or export session.
106ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
107ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param durationMs The duration in milliseconds
108ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
109ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    void setDuration(long durationMs) {
110ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mDurationMs = durationMs;
111ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
112ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
113ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
114ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @return The duration of the overlay effect
115ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
116ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    long getDuration() {
117ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return mDurationMs;
118ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
119ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
120ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
121ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * If a preview or export is in progress, then this change is effective for
122ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * next preview or export session.
123ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
124ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param durationMs The duration in milliseconds
125ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
126ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public void setAppDuration(long durationMs) {
127ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mAppDurationMs = durationMs;
128ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
129ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
130ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
131ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @return The duration of the overlay effect
132ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
133ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public long getAppDuration() {
134ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return mAppDurationMs;
135ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
136ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
137ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
138ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * Set the start time for the overlay. If a preview or export is in
139ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * progress, then this change is effective for next preview or export
140ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * session.
141ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
142ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param startTimeMs start time in milliseconds
143ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
144ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    void setStartTime(long startTimeMs) {
145ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mStartTimeMs = startTimeMs;
146ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
147ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
148ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
149ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @return the start time of the overlay
150ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
151ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    long getStartTime() {
152ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return mStartTimeMs;
153ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
154ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
155ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
156ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * Set the start time of this audio track relative to the storyboard
157ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * timeline. Default value is 0.
158ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
159ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param startTimeMs the start time in milliseconds
160ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
161ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public void setAppStartTime(long startTimeMs) {
162ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mAppStartTimeMs = startTimeMs;
163ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
164ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
165ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
166ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * Get the start time of this audio track relative to the storyboard
167ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * timeline.
168ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
169ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @return The start time in milliseconds
170ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
171ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public long getAppStartTime() {
172ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return mAppStartTimeMs;
173ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
174ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
175ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
176ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @return The title
177ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
178ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public String getTitle() {
179ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return mTitle;
180ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
181ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
182ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
183ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @return The subtitle
184ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
185ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public String getSubtitle() {
186ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return mSubtitle;
187ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
188ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
189ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
190ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @return The type
191ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
192ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public int getType() {
193ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return mType;
194ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
195ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
196ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /*
197ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * {@inheritDoc}
198ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
199ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
200ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public boolean equals(Object object) {
201ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        if (!(object instanceof MovieOverlay)) {
202ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            return false;
203ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
204ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return mUniqueId.equals(((MovieOverlay)object).mUniqueId);
205ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
206ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
207ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /*
208ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * {@inheritDoc}
209ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
210ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
211ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public int hashCode() {
212ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return mUniqueId.hashCode();
213ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
214ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
215ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
216ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * Build the user attributes
217ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
218ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @return The user attributes
219ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
220ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public Bundle buildUserAttributes() {
221ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        final Bundle userAttributes = new Bundle(4);
222ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        userAttributes.putInt(KEY_TYPE, mType);
223ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        userAttributes.putString(KEY_TITLE, mTitle);
224ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        userAttributes.putString(KEY_SUBTITLE, mSubtitle);
225ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return userAttributes;
226ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
227ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
228ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
229ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * Build the user attributes
230ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
231ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param type The overlay type
232ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param title The overlay title
233ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param subtitle The overlay subtitle
234ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
235ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @return The user attributes
236ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
237ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static Bundle buildUserAttributes(int type, String title, String subtitle) {
238ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        final Bundle userAttributes = new Bundle(4);
239ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        userAttributes.putInt(KEY_TYPE, type);
240ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        userAttributes.putString(KEY_TITLE, title);
241ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        userAttributes.putString(KEY_SUBTITLE, subtitle);
242ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return userAttributes;
243ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
244ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
245ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
246ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param userAttributes The user attributes
247ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
248ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    void updateUserAttributes(Bundle userAttributes) {
249ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mType = userAttributes.getInt(KEY_TYPE);
250ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mTitle = userAttributes.getString(KEY_TITLE);
251ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mSubtitle = userAttributes.getString(KEY_SUBTITLE);
252ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
253ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
254ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
255ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * Get the type of the value corresponding to the specified key
256ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
257ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param name The key name
258ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
259ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @return The type
260ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
261ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static Class<?> getAttributeType(String name) {
262ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        if (KEY_TYPE.equals(name)) {
263ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            return Integer.class;
264ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        } else {
265ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            return String.class;
266ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
267ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
268ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
269ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
270ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param userAttributes The user attributes
271ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
272ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @return The type
273ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
274ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static int getType(Bundle userAttributes) {
275ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return userAttributes.getInt(KEY_TYPE);
276ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
277ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
278ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
279ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param userAttributes The user attributes
280ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
281ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @return The title
282ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
283ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static String getTitle(Bundle userAttributes) {
284ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return userAttributes.getString(KEY_TITLE);
285ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
286ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
287ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
288ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @param userAttributes The user attributes
289ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     *
290ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     * @return The subtitle
291ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
292ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static String getSubtitle(Bundle userAttributes) {
293ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return userAttributes.getString(KEY_SUBTITLE);
294ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
295ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi}
296