/*
* Copyright (C) 2007 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 android.widget.focus;
import android.app.Activity;
import android.graphics.Point;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.util.InternalSelectionView;
/**
* A list of {@link InternalSelectionView}s paramatarized by the number of items,
* how many rows in each item, and how tall each item is.
*/
public class ListOfInternalSelectionViews extends Activity {
private ListView mListView;
// keys for initializing via Intent params
public static final String BUNDLE_PARAM_NUM_ITEMS = "com.google.test.numItems";
public static final String BUNDLE_PARAM_NUM_ROWS_PER_ITEM = "com.google.test.numRowsPerItem";
public static final String BUNDLE_PARAM_ITEM_SCREEN_HEIGHT_FACTOR = "com.google.test.itemScreenHeightFactor";
private int mScreenHeight;
private int mNumItems = 5;
private int mNumRowsPerItem = 4;
private double mItemScreenSizeFactor = 5 / 4;
public ListView getListView() {
return mListView;
}
/**
* Each item is screen height * this factor tall.
*/
public double getItemScreenSizeFactor() {
return mItemScreenSizeFactor;
}
/**
* @return The number of rows per item.
*/
public int getNumRowsPerItem() {
return mNumRowsPerItem;
}
/**
* @return The number of items in the list.
*/
public int getNumItems() {
return mNumItems;
}
/**
* @param position The position
* @return The label (closest thing to a value) for the item at position
*/
public String getLabelForPosition(int position) {
return "position " + position;
}
/**
* Get the currently selected view.
*/
public InternalSelectionView getSelectedView() {
return (InternalSelectionView) getListView().getSelectedView();
}
/**
* Get the screen height.
*/
public int getScreenHeight() {
return mScreenHeight;
}
/**
* Initialize a bundle suitable for sending as the params of the intent that
* launches this activity.
* @param numItems The number of items in the list.
* @param numRowsPerItem The number of rows per item.
* @param itemScreenHeightFactor see {@link #getScreenHeight()}
* @return the intialized bundle.
*/
public static Bundle getBundleFor(int numItems, int numRowsPerItem, double itemScreenHeightFactor) {
Bundle bundle = new Bundle();
bundle.putInt(BUNDLE_PARAM_NUM_ITEMS, numItems);
bundle.putInt(BUNDLE_PARAM_NUM_ROWS_PER_ITEM, numRowsPerItem);
bundle.putDouble(BUNDLE_PARAM_ITEM_SCREEN_HEIGHT_FACTOR, itemScreenHeightFactor);
return bundle;
}
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
mScreenHeight = size.y;
Bundle extras = getIntent().getExtras();
if (extras != null) {
initFromBundle(extras);
}
mListView = new ListView(this);
mListView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
mListView.setDrawSelectorOnTop(false);
mListView.setAdapter(new MyAdapter());
mListView.setItemsCanFocus(true);
setContentView(mListView);
}
private void initFromBundle(Bundle icicle) {
int numItems = icicle.getInt(BUNDLE_PARAM_NUM_ITEMS, -1);
if (numItems != -1) {
mNumItems = numItems;
}
int numRowsPerItem = icicle.getInt(BUNDLE_PARAM_NUM_ROWS_PER_ITEM, -1);
if (numRowsPerItem != -1) {
mNumRowsPerItem = numRowsPerItem;
}
double screenHeightFactor = icicle.getDouble(BUNDLE_PARAM_ITEM_SCREEN_HEIGHT_FACTOR, -1.0);
if (screenHeightFactor > 0) {
mItemScreenSizeFactor = screenHeightFactor;
}
}
private class MyAdapter extends BaseAdapter {
public int getCount() {
return mNumItems;
}
public Object getItem(int position) {
return getLabelForPosition(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
InternalSelectionView item =
new InternalSelectionView(
parent.getContext(),
mNumRowsPerItem,
getLabelForPosition(position));
item.setDesiredHeight((int) (mScreenHeight * mItemScreenSizeFactor));
return item;
}
}
}