1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/*
2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2011 The Android Open Source Project
3f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin *
4f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Licensed under the Apache License, Version 2.0 (the "License");
5f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * you may not use this file except in compliance with the License.
6f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * You may obtain a copy of the License at
7f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin *
8f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin *      http://www.apache.org/licenses/LICENSE-2.0
9f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin *
10f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Unless required by applicable law or agreed to in writing, software
11f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * distributed under the License is distributed on an "AS IS" BASIS,
12f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * See the License for the specific language governing permissions and
14f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * limitations under the License.
15f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin */
16f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
17d6db8eab6df048b9065834113a6d46a885af01d3Owen Linpackage com.android.gallery3d.gadget;
18f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
19f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.app.Activity;
20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.appwidget.AppWidgetManager;
21f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.Intent;
22f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.res.Resources;
23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.graphics.Bitmap;
24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.net.Uri;
25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.os.Bundle;
26fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liuimport android.util.Log;
27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.widget.RemoteViews;
28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
292b3ee0ea07246b859a5b75d8a6102a7cce7ec838Owen Linimport com.android.gallery3d.R;
302b3ee0ea07246b859a5b75d8a6102a7cce7ec838Owen Linimport com.android.gallery3d.app.AlbumPicker;
312b3ee0ea07246b859a5b75d8a6102a7cce7ec838Owen Linimport com.android.gallery3d.app.DialogPicker;
32fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liuimport com.android.gallery3d.app.GalleryApp;
33a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Linimport com.android.gallery3d.common.ApiHelper;
34fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liuimport com.android.gallery3d.data.DataManager;
35fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liuimport com.android.gallery3d.data.LocalAlbum;
36fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liuimport com.android.gallery3d.data.MediaSet;
37fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liuimport com.android.gallery3d.data.Path;
386416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport com.android.gallery3d.filtershow.FilterShowActivity;
396fe165b7d28299d5b2f97deb135b233d84eb300fRuben Brunkimport com.android.gallery3d.filtershow.crop.CropExtras;
402b3ee0ea07246b859a5b75d8a6102a7cce7ec838Owen Lin
41f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic class WidgetConfigure extends Activity {
42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @SuppressWarnings("unused")
43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final String TAG = "WidgetConfigure";
44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
45f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public static final String KEY_WIDGET_TYPE = "widget-type";
46a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin    private static final String KEY_PICKED_ITEM = "picked-item";
47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final int REQUEST_WIDGET_TYPE = 1;
49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final int REQUEST_CHOOSE_ALBUM = 2;
50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final int REQUEST_CROP_IMAGE = 3;
51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final int REQUEST_GET_PHOTO = 4;
52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public static final int RESULT_ERROR = RESULT_FIRST_USER;
54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    // Scale up the widget size since we only specified the minimized
56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    // size of the gadget. The real size could be larger.
57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    // Note: There is also a limit on the size of data that can be
58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    // passed in Binder's transaction.
59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static float WIDGET_SCALE_FACTOR = 1.5f;
605da31f8fd85d7c1e33133473bd1fbc5e3a240f2dOwen Lin    private static int MAX_WIDGET_SIDE = 360;
61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private int mAppWidgetId = -1;
63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private Uri mPickedItem;
64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
66a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin    protected void onCreate(Bundle savedState) {
67a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin        super.onCreate(savedState);
68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mAppWidgetId = getIntent().getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (mAppWidgetId == -1) {
71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            setResult(Activity.RESULT_CANCELED);
72f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            finish();
73f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            return;
74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
76a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin        if (savedState == null) {
77a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin            if (ApiHelper.HAS_REMOTE_VIEWS_SERVICE) {
78a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin                Intent intent = new Intent(this, WidgetTypeChooser.class);
79a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin                startActivityForResult(intent, REQUEST_WIDGET_TYPE);
80a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin            } else { // Choose the photo type widget
81a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin                setWidgetType(new Intent()
82a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin                        .putExtra(KEY_WIDGET_TYPE, R.id.widget_type_photo));
83a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin            }
84a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin        } else {
85a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin            mPickedItem = savedState.getParcelable(KEY_PICKED_ITEM);
86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
89a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin    protected void onSaveInstanceStates(Bundle outState) {
90a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin        super.onSaveInstanceState(outState);
91a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin        outState.putParcelable(KEY_PICKED_ITEM, mPickedItem);
92a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin    }
93a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin
94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private void updateWidgetAndFinish(WidgetDatabaseHelper.Entry entry) {
95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        AppWidgetManager manager = AppWidgetManager.getInstance(this);
96d6db8eab6df048b9065834113a6d46a885af01d3Owen Lin        RemoteViews views = PhotoAppWidgetProvider.buildWidget(this, mAppWidgetId, entry);
97f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        manager.updateAppWidget(mAppWidgetId, views);
98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        setResult(RESULT_OK, new Intent().putExtra(
99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId));
100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        finish();
101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
102f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
103f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
105f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (resultCode != RESULT_OK) {
106f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            setResult(resultCode, new Intent().putExtra(
107f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId));
108f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            finish();
109f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            return;
110f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
111f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
112f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (requestCode == REQUEST_WIDGET_TYPE) {
113f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            setWidgetType(data);
114f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } else if (requestCode == REQUEST_CHOOSE_ALBUM) {
115f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            setChoosenAlbum(data);
116f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } else if (requestCode == REQUEST_GET_PHOTO) {
117f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            setChoosenPhoto(data);
118f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } else if (requestCode == REQUEST_CROP_IMAGE) {
119f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            setPhotoWidget(data);
120f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } else {
121f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            throw new AssertionError("unknown request: " + requestCode);
122f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
123f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
124f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
125f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private void setPhotoWidget(Intent data) {
126f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        // Store the cropped photo in our database
127f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Bitmap bitmap = (Bitmap) data.getParcelableExtra("data");
128f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        WidgetDatabaseHelper helper = new WidgetDatabaseHelper(this);
129f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        try {
130f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            helper.setPhoto(mAppWidgetId, mPickedItem, bitmap);
131f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            updateWidgetAndFinish(helper.getEntry(mAppWidgetId));
132f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } finally {
133f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            helper.close();
134f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
135f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
136f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
137f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private void setChoosenPhoto(Intent data) {
138f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Resources res = getResources();
1395da31f8fd85d7c1e33133473bd1fbc5e3a240f2dOwen Lin
1405da31f8fd85d7c1e33133473bd1fbc5e3a240f2dOwen Lin        float width = res.getDimension(R.dimen.appwidget_width);
1415da31f8fd85d7c1e33133473bd1fbc5e3a240f2dOwen Lin        float height = res.getDimension(R.dimen.appwidget_height);
1425da31f8fd85d7c1e33133473bd1fbc5e3a240f2dOwen Lin
1435da31f8fd85d7c1e33133473bd1fbc5e3a240f2dOwen Lin        // We try to crop a larger image (by scale factor), but there is still
1445da31f8fd85d7c1e33133473bd1fbc5e3a240f2dOwen Lin        // a bound on the binder limit.
1455da31f8fd85d7c1e33133473bd1fbc5e3a240f2dOwen Lin        float scale = Math.min(WIDGET_SCALE_FACTOR,
1465da31f8fd85d7c1e33133473bd1fbc5e3a240f2dOwen Lin                MAX_WIDGET_SIDE / Math.max(width, height));
1475da31f8fd85d7c1e33133473bd1fbc5e3a240f2dOwen Lin
1485da31f8fd85d7c1e33133473bd1fbc5e3a240f2dOwen Lin        int widgetWidth = Math.round(width * scale);
1495da31f8fd85d7c1e33133473bd1fbc5e3a240f2dOwen Lin        int widgetHeight = Math.round(height * scale);
1505da31f8fd85d7c1e33133473bd1fbc5e3a240f2dOwen Lin
151f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mPickedItem = data.getData();
1526416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk        Intent request = new Intent(FilterShowActivity.CROP_ACTION, mPickedItem)
153795776f67fe5bca902b09c01edec630879263341Ruben Brunk                .putExtra(CropExtras.KEY_OUTPUT_X, widgetWidth)
154795776f67fe5bca902b09c01edec630879263341Ruben Brunk                .putExtra(CropExtras.KEY_OUTPUT_Y, widgetHeight)
155795776f67fe5bca902b09c01edec630879263341Ruben Brunk                .putExtra(CropExtras.KEY_ASPECT_X, widgetWidth)
156795776f67fe5bca902b09c01edec630879263341Ruben Brunk                .putExtra(CropExtras.KEY_ASPECT_Y, widgetHeight)
157795776f67fe5bca902b09c01edec630879263341Ruben Brunk                .putExtra(CropExtras.KEY_SCALE_UP_IF_NEEDED, true)
158795776f67fe5bca902b09c01edec630879263341Ruben Brunk                .putExtra(CropExtras.KEY_SCALE, true)
159795776f67fe5bca902b09c01edec630879263341Ruben Brunk                .putExtra(CropExtras.KEY_RETURN_DATA, true);
160f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        startActivityForResult(request, REQUEST_CROP_IMAGE);
161f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
162f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
163f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private void setChoosenAlbum(Intent data) {
164f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        String albumPath = data.getStringExtra(AlbumPicker.KEY_ALBUM_PATH);
165f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        WidgetDatabaseHelper helper = new WidgetDatabaseHelper(this);
166f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        try {
167fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu            String relativePath = null;
168fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu            GalleryApp galleryApp = (GalleryApp) getApplicationContext();
169fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu            DataManager manager = galleryApp.getDataManager();
170fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu            Path path = Path.fromString(albumPath);
171fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu            MediaSet mediaSet = (MediaSet) manager.getMediaObject(path);
172fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu            if (mediaSet instanceof LocalAlbum) {
173fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu                int bucketId = Integer.parseInt(path.getSuffix());
174fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu                // If the chosen album is a local album, find relative path
175fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu                // Otherwise, leave the relative path field empty
176fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu                relativePath = LocalAlbum.getRelativePath(bucketId);
177fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu                Log.i(TAG, "Setting widget, album path: " + albumPath
178fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu                        + ", relative path: " + relativePath);
179fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu            }
180f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            helper.setWidget(mAppWidgetId,
181fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu                    WidgetDatabaseHelper.TYPE_ALBUM, albumPath, relativePath);
182f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            updateWidgetAndFinish(helper.getEntry(mAppWidgetId));
183f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } finally {
184f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            helper.close();
185f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
186f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
187f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
188f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private void setWidgetType(Intent data) {
189a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin        int widgetType = data.getIntExtra(KEY_WIDGET_TYPE, R.id.widget_type_shuffle);
190a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin        if (widgetType == R.id.widget_type_album) {
191f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            Intent intent = new Intent(this, AlbumPicker.class);
192f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            startActivityForResult(intent, REQUEST_CHOOSE_ALBUM);
193a2cb30b688131380cab763a1b4da25f15a9fa45aOwen Lin        } else if (widgetType == R.id.widget_type_shuffle) {
194f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            WidgetDatabaseHelper helper = new WidgetDatabaseHelper(this);
195f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            try {
196fcf54601d45bfcef2fbeb911c46ff394e84d7011Doris Liu                helper.setWidget(mAppWidgetId, WidgetDatabaseHelper.TYPE_SHUFFLE, null, null);
197f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                updateWidgetAndFinish(helper.getEntry(mAppWidgetId));
198f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            } finally {
199f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                helper.close();
200f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
201f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } else {
202f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            // Explicitly send the intent to the DialogPhotoPicker
203f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            Intent request = new Intent(this, DialogPicker.class)
204f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    .setAction(Intent.ACTION_GET_CONTENT)
205f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    .setType("image/*");
206f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            startActivityForResult(request, REQUEST_GET_PHOTO);
207f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
208f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
209f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
210