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