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