152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project/* 252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * 452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * you may not use this file except in compliance with the License. 652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * You may obtain a copy of the License at 752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * 852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * 1052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * See the License for the specific language governing permissions and 1452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * limitations under the License. 1552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project */ 1652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 1752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectpackage com.example.android.home; 1852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 1952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.app.Activity; 2052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.content.Context; 2152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.os.Bundle; 2252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.util.Log; 2352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.view.MotionEvent; 2452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.view.View; 2552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.view.ViewGroup; 2652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.view.Window; 2752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.widget.AdapterView; 2852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.widget.BaseAdapter; 2952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.widget.Gallery; 3052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.widget.ImageView; 3152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.widget.Gallery.LayoutParams; 3252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 3352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport java.io.IOException; 3452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport java.io.InputStream; 3552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 3652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project/** 3752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * Wallpaper picker for the Home application. User can choose from 3852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * a gallery of stock photos. 3952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project */ 4052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectpublic class Wallpaper extends Activity implements 4152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project AdapterView.OnItemSelectedListener, AdapterView.OnItemClickListener { 4252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 4352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project private static final String LOG_TAG = "Home"; 4452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 4552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project private static final Integer[] THUMB_IDS = { 4652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project R.drawable.bg_android_icon, 4752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project R.drawable.bg_sunrise_icon, 4852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project R.drawable.bg_sunset_icon, 4952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project }; 5052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 5152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project private static final Integer[] IMAGE_IDS = { 5252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project R.drawable.bg_android, 5352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project R.drawable.bg_sunrise, 5452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project R.drawable.bg_sunset, 5552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project }; 5652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 5752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project private Gallery mGallery; 5852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project private boolean mIsWallpaperSet; 5952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 6052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project @Override 6152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public void onCreate(Bundle icicle) { 6252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project super.onCreate(icicle); 6352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project requestWindowFeature(Window.FEATURE_NO_TITLE); 6452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 6552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project setContentView(R.layout.wallpaper); 6652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 6752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project mGallery = (Gallery) findViewById(R.id.gallery); 6852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project mGallery.setAdapter(new ImageAdapter(this)); 6952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project mGallery.setOnItemSelectedListener(this); 7052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project mGallery.setOnItemClickListener(this); 7152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 7252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 7352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project @Override 7452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project protected void onResume() { 7552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project super.onResume(); 7652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project mIsWallpaperSet = false; 7752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 7852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 7952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public void onItemSelected(AdapterView parent, View v, int position, long id) { 8052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project getWindow().setBackgroundDrawableResource(IMAGE_IDS[position]); 8152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 8252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 8352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public void onItemClick(AdapterView parent, View v, int position, long id) { 8452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project selectWallpaper(position); 8552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 8652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 8752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project /* 8852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * When using touch if you tap an image it triggers both the onItemClick and 8952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * the onTouchEvent causing the wallpaper to be set twice. Synchronize this 9052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * method and ensure we only set the wallpaper once. 9152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project */ 9252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project private synchronized void selectWallpaper(int position) { 9352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project if (mIsWallpaperSet) { 9452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project return; 9552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 9652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project mIsWallpaperSet = true; 9752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project try { 9852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project InputStream stream = getResources().openRawResource(IMAGE_IDS[position]); 9952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project setWallpaper(stream); 10052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project setResult(RESULT_OK); 10152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project finish(); 10252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } catch (IOException e) { 10352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project Log.e(LOG_TAG, "Failed to set wallpaper " + e); 10452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 10552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 10652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 10752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public void onNothingSelected(AdapterView parent) { 10852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 10952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 11052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project @Override 11152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public boolean onTouchEvent(MotionEvent event) { 11252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project selectWallpaper(mGallery.getSelectedItemPosition()); 11352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project return true; 11452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 11552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 11652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public class ImageAdapter extends BaseAdapter { 11752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 11852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project private Context mContext; 11952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 12052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public ImageAdapter(Context c) { 12152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project mContext = c; 12252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 12352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 12452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public int getCount() { 12552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project return THUMB_IDS.length; 12652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 12752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 12852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public Object getItem(int position) { 12952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project return position; 13052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 13152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 13252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public long getItemId(int position) { 13352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project return position; 13452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 13552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 13652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project public View getView(final int position, View convertView, ViewGroup parent) { 13752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project ImageView i = new ImageView(mContext); 13852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 13952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project i.setImageResource(THUMB_IDS[position]); 14052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project i.setAdjustViewBounds(true); 14152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project i.setLayoutParams(new Gallery.LayoutParams( 14252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 14352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project i.setBackgroundResource(android.R.drawable.picture_frame); 14452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project return i; 14552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 14652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 14752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project } 14852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 14952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project} 15052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 15152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project 152