1/*
2 * Copyright (C) 2012 Google Inc.
3 * Licensed to The Android Open Source Project.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18package com.android.mail.photo;
19
20import android.content.Context;
21import android.content.Intent;
22
23import com.android.ex.photo.Intents;
24import com.android.ex.photo.PhotoViewActivity;
25import com.android.ex.photo.PhotoViewController;
26import com.android.mail.R;
27import com.android.mail.browse.ConversationMessage;
28import com.android.mail.providers.UIProvider;
29
30/**
31 * Derives from {@link PhotoViewActivity} to allow customization.
32 * Delegates all work to {@link MailPhotoViewController}.
33 */
34public class MailPhotoViewActivity extends PhotoViewActivity implements
35        MailPhotoViewController.ActivityInterface {
36
37    static final String EXTRA_ACCOUNT = MailPhotoViewActivity.class.getName() + "-acct";
38    static final String EXTRA_ACCOUNT_TYPE = MailPhotoViewActivity.class.getName() + "-accttype";
39    static final String EXTRA_MESSAGE = MailPhotoViewActivity.class.getName() + "-msg";
40    static final String EXTRA_HIDE_EXTRA_OPTION_ONE =
41            MailPhotoViewActivity.class.getName() + "-hide-extra-option-one";
42
43    /**
44     * Start a new MailPhotoViewActivity to view the given images.
45     *
46     * @param context The context.
47     * @param account The email address of the account.
48     * @param accountType The type of the account.
49     * @param msg The text of the message for this photo.
50     * @param photoIndex The index of the photo within the album.
51     */
52    public static void startMailPhotoViewActivity(final Context context, final String account,
53            final String accountType, final ConversationMessage msg, final int photoIndex) {
54        final Intents.PhotoViewIntentBuilder builder =
55                Intents.newPhotoViewIntentBuilder(context,
56                        context.getString(R.string.photo_view_activity));
57        builder
58                .setPhotosUri(msg.attachmentListUri.toString())
59                .setProjection(UIProvider.ATTACHMENT_PROJECTION)
60                .setPhotoIndex(photoIndex);
61
62        context.startActivity(wrapIntent(builder.build(), account, accountType, msg));
63    }
64
65    /**
66     * Start a new MailPhotoViewActivity to view the given images.
67     *
68     * @param initialPhotoUri The uri of the photo to show first.
69     */
70    public static void startMailPhotoViewActivity(final Context context, final String account,
71            final String accountType, final ConversationMessage msg, final String initialPhotoUri) {
72        context.startActivity(
73                buildMailPhotoViewActivityIntent(context, account, accountType, msg,
74                        initialPhotoUri));
75    }
76
77    public static Intent buildMailPhotoViewActivityIntent(
78            final Context context, final String account, final String accountType,
79            final ConversationMessage msg, final String initialPhotoUri) {
80        final Intents.PhotoViewIntentBuilder builder = Intents.newPhotoViewIntentBuilder(
81                context, context.getString(R.string.photo_view_activity));
82
83        builder.setPhotosUri(msg.attachmentListUri.toString())
84                .setProjection(UIProvider.ATTACHMENT_PROJECTION)
85                .setInitialPhotoUri(initialPhotoUri);
86
87        return wrapIntent(builder.build(), account, accountType, msg);
88    }
89
90    private static Intent wrapIntent(
91            final Intent intent, final String account, final String accountType,
92            final ConversationMessage msg) {
93        intent.putExtra(EXTRA_MESSAGE, msg);
94        intent.putExtra(EXTRA_ACCOUNT, account);
95        intent.putExtra(EXTRA_ACCOUNT_TYPE, accountType);
96        intent.putExtra(EXTRA_HIDE_EXTRA_OPTION_ONE, msg.getConversation() == null);
97        return intent;
98    }
99
100    @Override
101    public PhotoViewController createController() {
102        return new MailPhotoViewController(this);
103    }
104}
105