1666ea1b28a76aeba74744148b15099254d918671Owen Lin/* 2666ea1b28a76aeba74744148b15099254d918671Owen Lin * Copyright (C) 2009 The Android Open Source Project 3666ea1b28a76aeba74744148b15099254d918671Owen Lin * 4666ea1b28a76aeba74744148b15099254d918671Owen Lin * Licensed under the Apache License, Version 2.0 (the "License"); 5666ea1b28a76aeba74744148b15099254d918671Owen Lin * you may not use this file except in compliance with the License. 6666ea1b28a76aeba74744148b15099254d918671Owen Lin * You may obtain a copy of the License at 7666ea1b28a76aeba74744148b15099254d918671Owen Lin * 8666ea1b28a76aeba74744148b15099254d918671Owen Lin * http://www.apache.org/licenses/LICENSE-2.0 9666ea1b28a76aeba74744148b15099254d918671Owen Lin * 10666ea1b28a76aeba74744148b15099254d918671Owen Lin * Unless required by applicable law or agreed to in writing, software 11666ea1b28a76aeba74744148b15099254d918671Owen Lin * distributed under the License is distributed on an "AS IS" BASIS, 12666ea1b28a76aeba74744148b15099254d918671Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13666ea1b28a76aeba74744148b15099254d918671Owen Lin * See the License for the specific language governing permissions and 14666ea1b28a76aeba74744148b15099254d918671Owen Lin * limitations under the License. 15666ea1b28a76aeba74744148b15099254d918671Owen Lin */ 16666ea1b28a76aeba74744148b15099254d918671Owen Lin 17666ea1b28a76aeba74744148b15099254d918671Owen Linpackage com.android.camera; 18666ea1b28a76aeba74744148b15099254d918671Owen Lin 19666ea1b28a76aeba74744148b15099254d918671Owen Linimport com.android.camera.PhotoAppWidgetProvider.PhotoDatabaseHelper; 20666ea1b28a76aeba74744148b15099254d918671Owen Lin 21666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.app.Activity; 22666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.appwidget.AppWidgetManager; 23666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.content.Intent; 24666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.graphics.Bitmap; 25666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.os.Bundle; 26666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.util.DisplayMetrics; 27666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.widget.RemoteViews; 28666ea1b28a76aeba74744148b15099254d918671Owen Lin 298aa3fbcf9a5a0d11acd48861f5167073e3554980Owen Linpublic class PhotoAppWidgetConfigure extends NoSearchActivity { 30666ea1b28a76aeba74744148b15099254d918671Owen Lin 31666ea1b28a76aeba74744148b15099254d918671Owen Lin @SuppressWarnings("unused") 32666ea1b28a76aeba74744148b15099254d918671Owen Lin private static final String TAG = "PhotoAppWidgetConfigure"; 33666ea1b28a76aeba74744148b15099254d918671Owen Lin static final int REQUEST_GET_PHOTO = 2; 34666ea1b28a76aeba74744148b15099254d918671Owen Lin 35666ea1b28a76aeba74744148b15099254d918671Owen Lin int mAppWidgetId = -1; 36666ea1b28a76aeba74744148b15099254d918671Owen Lin 37666ea1b28a76aeba74744148b15099254d918671Owen Lin @Override 38666ea1b28a76aeba74744148b15099254d918671Owen Lin protected void onCreate(Bundle icicle) { 39666ea1b28a76aeba74744148b15099254d918671Owen Lin super.onCreate(icicle); 40666ea1b28a76aeba74744148b15099254d918671Owen Lin 41666ea1b28a76aeba74744148b15099254d918671Owen Lin // Someone is requesting that we configure the given mAppWidgetId, which 42666ea1b28a76aeba74744148b15099254d918671Owen Lin // means we prompt the user to pick and crop a photo. 43666ea1b28a76aeba74744148b15099254d918671Owen Lin 44666ea1b28a76aeba74744148b15099254d918671Owen Lin mAppWidgetId = getIntent().getIntExtra( 45666ea1b28a76aeba74744148b15099254d918671Owen Lin AppWidgetManager.EXTRA_APPWIDGET_ID, -1); 46666ea1b28a76aeba74744148b15099254d918671Owen Lin if (mAppWidgetId == -1) { 47666ea1b28a76aeba74744148b15099254d918671Owen Lin setResult(Activity.RESULT_CANCELED); 48666ea1b28a76aeba74744148b15099254d918671Owen Lin finish(); 49666ea1b28a76aeba74744148b15099254d918671Owen Lin } 50666ea1b28a76aeba74744148b15099254d918671Owen Lin 51666ea1b28a76aeba74744148b15099254d918671Owen Lin // Assume the widget will be 1/4 of the screen. 52666ea1b28a76aeba74744148b15099254d918671Owen Lin // This will be slightly too large, but there is not a good way to know the 53666ea1b28a76aeba74744148b15099254d918671Owen Lin // actual widget size from here. The image will be scaled to fit since the layout 54666ea1b28a76aeba74744148b15099254d918671Owen Lin // file specifies android:scaleType="centerCrop" 55666ea1b28a76aeba74744148b15099254d918671Owen Lin DisplayMetrics display = getResources().getDisplayMetrics(); 56666ea1b28a76aeba74744148b15099254d918671Owen Lin int maxDimension = Math.max(display.heightPixels, display.widthPixels); 57666ea1b28a76aeba74744148b15099254d918671Owen Lin maxDimension /= 2; 58666ea1b28a76aeba74744148b15099254d918671Owen Lin 59666ea1b28a76aeba74744148b15099254d918671Owen Lin // TODO: Adjust the PhotoFrame's image size to avoid on the fly scaling 60666ea1b28a76aeba74744148b15099254d918671Owen Lin Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); 61666ea1b28a76aeba74744148b15099254d918671Owen Lin intent.setType("image/*"); 62666ea1b28a76aeba74744148b15099254d918671Owen Lin intent.putExtra("crop", "true"); 63666ea1b28a76aeba74744148b15099254d918671Owen Lin intent.putExtra("aspectX", 1); 64666ea1b28a76aeba74744148b15099254d918671Owen Lin intent.putExtra("aspectY", 1); 65666ea1b28a76aeba74744148b15099254d918671Owen Lin intent.putExtra("outputX", maxDimension); 66666ea1b28a76aeba74744148b15099254d918671Owen Lin intent.putExtra("outputY", maxDimension); 67666ea1b28a76aeba74744148b15099254d918671Owen Lin intent.putExtra("noFaceDetection", true); 68666ea1b28a76aeba74744148b15099254d918671Owen Lin intent.putExtra("return-data", true); 69666ea1b28a76aeba74744148b15099254d918671Owen Lin 70666ea1b28a76aeba74744148b15099254d918671Owen Lin startActivityForResult(intent, REQUEST_GET_PHOTO); 71666ea1b28a76aeba74744148b15099254d918671Owen Lin } 72666ea1b28a76aeba74744148b15099254d918671Owen Lin 73666ea1b28a76aeba74744148b15099254d918671Owen Lin @Override 74666ea1b28a76aeba74744148b15099254d918671Owen Lin protected void onActivityResult(int requestCode, int resultCode, 75666ea1b28a76aeba74744148b15099254d918671Owen Lin Intent data) { 76666ea1b28a76aeba74744148b15099254d918671Owen Lin if (resultCode == RESULT_OK && mAppWidgetId != -1) { 77666ea1b28a76aeba74744148b15099254d918671Owen Lin // Store the cropped photo in our database 78666ea1b28a76aeba74744148b15099254d918671Owen Lin Bitmap bitmap = (Bitmap) data.getParcelableExtra("data"); 79666ea1b28a76aeba74744148b15099254d918671Owen Lin 80666ea1b28a76aeba74744148b15099254d918671Owen Lin PhotoDatabaseHelper helper = new PhotoDatabaseHelper(this); 81666ea1b28a76aeba74744148b15099254d918671Owen Lin if (helper.setPhoto(mAppWidgetId, bitmap)) { 82666ea1b28a76aeba74744148b15099254d918671Owen Lin resultCode = Activity.RESULT_OK; 83666ea1b28a76aeba74744148b15099254d918671Owen Lin 84666ea1b28a76aeba74744148b15099254d918671Owen Lin // Push newly updated widget to surface 85666ea1b28a76aeba74744148b15099254d918671Owen Lin RemoteViews views = PhotoAppWidgetProvider.buildUpdate(this, 86666ea1b28a76aeba74744148b15099254d918671Owen Lin mAppWidgetId, helper); 87666ea1b28a76aeba74744148b15099254d918671Owen Lin AppWidgetManager appWidgetManager = 88666ea1b28a76aeba74744148b15099254d918671Owen Lin AppWidgetManager.getInstance(this); 89666ea1b28a76aeba74744148b15099254d918671Owen Lin appWidgetManager.updateAppWidget(new int[] {mAppWidgetId}, 90666ea1b28a76aeba74744148b15099254d918671Owen Lin views); 91666ea1b28a76aeba74744148b15099254d918671Owen Lin } 92666ea1b28a76aeba74744148b15099254d918671Owen Lin helper.close(); 93666ea1b28a76aeba74744148b15099254d918671Owen Lin } else { 94666ea1b28a76aeba74744148b15099254d918671Owen Lin resultCode = Activity.RESULT_CANCELED; 95666ea1b28a76aeba74744148b15099254d918671Owen Lin } 96666ea1b28a76aeba74744148b15099254d918671Owen Lin 97666ea1b28a76aeba74744148b15099254d918671Owen Lin // Make sure we pass back the original mAppWidgetId 98666ea1b28a76aeba74744148b15099254d918671Owen Lin Intent resultValue = new Intent(); 99666ea1b28a76aeba74744148b15099254d918671Owen Lin resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); 100666ea1b28a76aeba74744148b15099254d918671Owen Lin setResult(resultCode, resultValue); 101666ea1b28a76aeba74744148b15099254d918671Owen Lin finish(); 102666ea1b28a76aeba74744148b15099254d918671Owen Lin } 103666ea1b28a76aeba74744148b15099254d918671Owen Lin 104666ea1b28a76aeba74744148b15099254d918671Owen Lin} 105