152 lines
4.4 KiB
Java
152 lines
4.4 KiB
Java
/*
|
|
* 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;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|