1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/*
2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2007 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
17f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpackage com.android.gallery3d.app;
18f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
19cccb63219fc92b7f6a6e322746f276e6f07c7dd0Owen Linimport android.annotation.TargetApi;
20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.app.Activity;
2158b6f484263f57009e22fef482a9ae1a4d3f48b6Mangesh Ghiwareimport android.app.WallpaperManager;
22d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiwareimport android.content.ActivityNotFoundException;
23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.Intent;
244b9c37d08dc78118de53c1f3349024164abf2512Owen Linimport android.graphics.Point;
25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.net.Uri;
26cccb63219fc92b7f6a6e322746f276e6f07c7dd0Owen Linimport android.os.Build;
27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.os.Bundle;
28cccb63219fc92b7f6a6e322746f276e6f07c7dd0Owen Linimport android.view.Display;
29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
303a45725ad42324cd2db172fb082fe80772d94d3fOwen Linimport com.android.gallery3d.common.ApiHelper;
31d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.crop.CropActivity;
326fe165b7d28299d5b2f97deb135b233d84eb300fRuben Brunkimport com.android.gallery3d.filtershow.crop.CropExtras;
333a45725ad42324cd2db172fb082fe80772d94d3fOwen Lin
34a4f2389cf50404854d7820326d776deb7b6c1ad7Mangesh Ghiwareimport java.lang.IllegalArgumentException;
35a4f2389cf50404854d7820326d776deb7b6c1ad7Mangesh Ghiware
36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/**
37f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Wallpaper picker for the gallery application. This just redirects to the
38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * standard pick action.
39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin */
40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic class Wallpaper extends Activity {
41f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @SuppressWarnings("unused")
42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final String TAG = "Wallpaper";
43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final String IMAGE_TYPE = "image/*";
45f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final String KEY_STATE = "activity-state";
46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final String KEY_PICKED_ITEM = "picked-item";
47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final int STATE_INIT = 0;
49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final int STATE_PHOTO_PICKED = 1;
50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private int mState = STATE_INIT;
52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private Uri mPickedItem;
53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onCreate(Bundle bundle) {
56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onCreate(bundle);
57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (bundle != null) {
58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            mState = bundle.getInt(KEY_STATE);
59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            mPickedItem = (Uri) bundle.getParcelable(KEY_PICKED_ITEM);
60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onSaveInstanceState(Bundle saveState) {
65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        saveState.putInt(KEY_STATE, mState);
66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (mPickedItem != null) {
67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            saveState.putParcelable(KEY_PICKED_ITEM, mPickedItem);
68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
71cccb63219fc92b7f6a6e322746f276e6f07c7dd0Owen Lin    @SuppressWarnings("deprecation")
72df4763cf8752fb1babc7244fc2be33ed87d3b072Owen Lin    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
73cccb63219fc92b7f6a6e322746f276e6f07c7dd0Owen Lin    private Point getDefaultDisplaySize(Point size) {
74cccb63219fc92b7f6a6e322746f276e6f07c7dd0Owen Lin        Display d = getWindowManager().getDefaultDisplay();
753a45725ad42324cd2db172fb082fe80772d94d3fOwen Lin        if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
76cccb63219fc92b7f6a6e322746f276e6f07c7dd0Owen Lin            d.getSize(size);
77cccb63219fc92b7f6a6e322746f276e6f07c7dd0Owen Lin        } else {
78cccb63219fc92b7f6a6e322746f276e6f07c7dd0Owen Lin            size.set(d.getWidth(), d.getHeight());
79cccb63219fc92b7f6a6e322746f276e6f07c7dd0Owen Lin        }
80cccb63219fc92b7f6a6e322746f276e6f07c7dd0Owen Lin        return size;
81cccb63219fc92b7f6a6e322746f276e6f07c7dd0Owen Lin    }
82cccb63219fc92b7f6a6e322746f276e6f07c7dd0Owen Lin
83f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @SuppressWarnings("fallthrough")
84f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
85f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onResume() {
86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onResume();
87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Intent intent = getIntent();
88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        switch (mState) {
89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            case STATE_INIT: {
90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                mPickedItem = intent.getData();
91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                if (mPickedItem == null) {
92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    Intent request = new Intent(Intent.ACTION_GET_CONTENT)
93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                            .setClass(this, DialogPicker.class)
94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                            .setType(IMAGE_TYPE);
95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    startActivityForResult(request, STATE_PHOTO_PICKED);
96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    return;
97f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                }
98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                mState = STATE_PHOTO_PICKED;
99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                // fall-through
100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            case STATE_PHOTO_PICKED: {
10258b6f484263f57009e22fef482a9ae1a4d3f48b6Mangesh Ghiware                Intent cropAndSetWallpaperIntent;
1039895d680e66d1f1cf4603fa91c8a53e328f1476bMangesh Ghiware                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
10458b6f484263f57009e22fef482a9ae1a4d3f48b6Mangesh Ghiware                    WallpaperManager wpm = WallpaperManager.getInstance(getApplicationContext());
105d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    try {
106d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                        cropAndSetWallpaperIntent = wpm.getCropAndSetWallpaperIntent(mPickedItem);
107d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                        startActivity(cropAndSetWallpaperIntent);
108315ce7165e64aadb9d929677284957c4d7f8f0d8Mangesh Ghiware                        finish();
109315ce7165e64aadb9d929677284957c4d7f8f0d8Mangesh Ghiware                        return;
110d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    } catch (ActivityNotFoundException anfe) {
111d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                        // ignored; fallthru to existing crop activity
112a4f2389cf50404854d7820326d776deb7b6c1ad7Mangesh Ghiware                    } catch (IllegalArgumentException iae) {
113a4f2389cf50404854d7820326d776deb7b6c1ad7Mangesh Ghiware                        // ignored; fallthru to existing crop activity
114d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    }
11558b6f484263f57009e22fef482a9ae1a4d3f48b6Mangesh Ghiware                }
116d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware
117d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                int width = getWallpaperDesiredMinimumWidth();
118d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                int height = getWallpaperDesiredMinimumHeight();
119d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                Point size = getDefaultDisplaySize(new Point());
120d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                float spotlightX = (float) size.x / width;
121d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                float spotlightY = (float) size.y / height;
122d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                cropAndSetWallpaperIntent = new Intent(CropActivity.CROP_ACTION)
123d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    .setClass(this, CropActivity.class)
124d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    .setDataAndType(mPickedItem, IMAGE_TYPE)
125d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    .addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT)
126d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    .putExtra(CropExtras.KEY_OUTPUT_X, width)
127d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    .putExtra(CropExtras.KEY_OUTPUT_Y, height)
128d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    .putExtra(CropExtras.KEY_ASPECT_X, width)
129d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    .putExtra(CropExtras.KEY_ASPECT_Y, height)
130d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    .putExtra(CropExtras.KEY_SPOTLIGHT_X, spotlightX)
131d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    .putExtra(CropExtras.KEY_SPOTLIGHT_Y, spotlightY)
132d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    .putExtra(CropExtras.KEY_SCALE, true)
133d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    .putExtra(CropExtras.KEY_SCALE_UP_IF_NEEDED, true)
134d180bb94f9b9fc9846f08479fc952bb6f5fe70deMangesh Ghiware                    .putExtra(CropExtras.KEY_SET_AS_WALLPAPER, true);
13558b6f484263f57009e22fef482a9ae1a4d3f48b6Mangesh Ghiware                startActivity(cropAndSetWallpaperIntent);
136f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                finish();
137f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
138f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
139f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
140f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
141f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
142f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
143f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (resultCode != RESULT_OK) {
144f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            setResult(resultCode);
145f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            finish();
146f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            return;
147f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
148f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mState = requestCode;
149f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (mState == STATE_PHOTO_PICKED) {
150f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            mPickedItem = data.getData();
151f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
152f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
153f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        // onResume() would be called next
154f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
155f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
156