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; 38d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.crop.CropActivity; 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(); 152d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk Intent request = new Intent(CropActivity.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