1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.example.android.home;
18 
19 import android.app.Activity;
20 import android.content.Context;
21 import android.os.Bundle;
22 import android.util.Log;
23 import android.view.MotionEvent;
24 import android.view.View;
25 import android.view.ViewGroup;
26 import android.view.Window;
27 import android.widget.AdapterView;
28 import android.widget.BaseAdapter;
29 import android.widget.Gallery;
30 import android.widget.ImageView;
31 import android.widget.Gallery.LayoutParams;
32 
33 import java.io.IOException;
34 import java.io.InputStream;
35 
36 /**
37  * Wallpaper picker for the Home application. User can choose from
38  * a gallery of stock photos.
39  */
40 public class Wallpaper extends Activity implements
41         AdapterView.OnItemSelectedListener, AdapterView.OnItemClickListener {
42 
43     private static final String LOG_TAG = "Home";
44 
45     private static final Integer[] THUMB_IDS = {
46             R.drawable.bg_android_icon,
47             R.drawable.bg_sunrise_icon,
48             R.drawable.bg_sunset_icon,
49     };
50 
51     private static final Integer[] IMAGE_IDS = {
52             R.drawable.bg_android,
53             R.drawable.bg_sunrise,
54             R.drawable.bg_sunset,
55     };
56 
57     private Gallery mGallery;
58     private boolean mIsWallpaperSet;
59 
60     @Override
onCreate(Bundle icicle)61     public void onCreate(Bundle icicle) {
62         super.onCreate(icicle);
63         requestWindowFeature(Window.FEATURE_NO_TITLE);
64 
65         setContentView(R.layout.wallpaper);
66 
67         mGallery = (Gallery) findViewById(R.id.gallery);
68         mGallery.setAdapter(new ImageAdapter(this));
69         mGallery.setOnItemSelectedListener(this);
70         mGallery.setOnItemClickListener(this);
71     }
72 
73     @Override
onResume()74     protected void onResume() {
75         super.onResume();
76         mIsWallpaperSet = false;
77     }
78 
onItemSelected(AdapterView parent, View v, int position, long id)79     public void onItemSelected(AdapterView parent, View v, int position, long id) {
80         getWindow().setBackgroundDrawableResource(IMAGE_IDS[position]);
81     }
82 
onItemClick(AdapterView parent, View v, int position, long id)83     public void onItemClick(AdapterView parent, View v, int position, long id) {
84         selectWallpaper(position);
85     }
86 
87     /*
88      * When using touch if you tap an image it triggers both the onItemClick and
89      * the onTouchEvent causing the wallpaper to be set twice. Synchronize this
90      * method and ensure we only set the wallpaper once.
91      */
selectWallpaper(int position)92     private synchronized void selectWallpaper(int position) {
93         if (mIsWallpaperSet) {
94             return;
95         }
96         mIsWallpaperSet = true;
97         try {
98             InputStream stream = getResources().openRawResource(IMAGE_IDS[position]);
99             setWallpaper(stream);
100             setResult(RESULT_OK);
101             finish();
102         } catch (IOException e) {
103             Log.e(LOG_TAG, "Failed to set wallpaper " + e);
104         }
105     }
106 
onNothingSelected(AdapterView parent)107     public void onNothingSelected(AdapterView parent) {
108     }
109 
110     @Override
onTouchEvent(MotionEvent event)111     public boolean onTouchEvent(MotionEvent event) {
112         selectWallpaper(mGallery.getSelectedItemPosition());
113         return true;
114     }
115 
116     public class ImageAdapter extends BaseAdapter {
117 
118         private Context mContext;
119 
ImageAdapter(Context c)120         public ImageAdapter(Context c) {
121             mContext = c;
122         }
123 
getCount()124         public int getCount() {
125             return THUMB_IDS.length;
126         }
127 
getItem(int position)128         public Object getItem(int position) {
129             return position;
130         }
131 
getItemId(int position)132         public long getItemId(int position) {
133             return position;
134         }
135 
getView(final int position, View convertView, ViewGroup parent)136         public View getView(final int position, View convertView, ViewGroup parent) {
137             ImageView i = new ImageView(mContext);
138 
139             i.setImageResource(THUMB_IDS[position]);
140             i.setAdjustViewBounds(true);
141             i.setLayoutParams(new Gallery.LayoutParams(
142                     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
143             i.setBackgroundResource(android.R.drawable.picture_frame);
144             return i;
145         }
146 
147     }
148 
149 }
150 
151 
152