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