/* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.android.home; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageView; import android.widget.Gallery.LayoutParams; import java.io.IOException; import java.io.InputStream; /** * Wallpaper picker for the Home application. User can choose from * a gallery of stock photos. */ public class Wallpaper extends Activity implements AdapterView.OnItemSelectedListener, AdapterView.OnItemClickListener { private static final String LOG_TAG = "Home"; private static final Integer[] THUMB_IDS = { R.drawable.bg_android_icon, R.drawable.bg_sunrise_icon, R.drawable.bg_sunset_icon, }; private static final Integer[] IMAGE_IDS = { R.drawable.bg_android, R.drawable.bg_sunrise, R.drawable.bg_sunset, }; private Gallery mGallery; private boolean mIsWallpaperSet; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.wallpaper); mGallery = (Gallery) findViewById(R.id.gallery); mGallery.setAdapter(new ImageAdapter(this)); mGallery.setOnItemSelectedListener(this); mGallery.setOnItemClickListener(this); } @Override protected void onResume() { super.onResume(); mIsWallpaperSet = false; } public void onItemSelected(AdapterView parent, View v, int position, long id) { getWindow().setBackgroundDrawableResource(IMAGE_IDS[position]); } public void onItemClick(AdapterView parent, View v, int position, long id) { selectWallpaper(position); } /* * When using touch if you tap an image it triggers both the onItemClick and * the onTouchEvent causing the wallpaper to be set twice. Synchronize this * method and ensure we only set the wallpaper once. */ private synchronized void selectWallpaper(int position) { if (mIsWallpaperSet) { return; } mIsWallpaperSet = true; try { InputStream stream = getResources().openRawResource(IMAGE_IDS[position]); setWallpaper(stream); setResult(RESULT_OK); finish(); } catch (IOException e) { Log.e(LOG_TAG, "Failed to set wallpaper " + e); } } public void onNothingSelected(AdapterView parent) { } @Override public boolean onTouchEvent(MotionEvent event) { selectWallpaper(mGallery.getSelectedItemPosition()); return true; } public class ImageAdapter extends BaseAdapter { private Context mContext; public ImageAdapter(Context c) { mContext = c; } public int getCount() { return THUMB_IDS.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(final int position, View convertView, ViewGroup parent) { ImageView i = new ImageView(mContext); i.setImageResource(THUMB_IDS[position]); i.setAdjustViewBounds(true); i.setLayoutParams(new Gallery.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); i.setBackgroundResource(android.R.drawable.picture_frame); return i; } } }