package se.slide.timy;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.NavUtils;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.analytics.tracking.android.EasyTracker;
import se.slide.timy.db.DatabaseManager;
import se.slide.timy.model.Color;
import se.slide.timy.model.Project;
import java.util.List;
public class ProjectActivity extends FragmentActivity {
public static final int ACTIVITY_CODE = 0;
private int mPosition = 0;
public static final String EXTRA_PROJECT_ID = "project_id";
public static final String EXTRA_PROJECT_NAME = "project_name";
public static final String EXTRA_PROJECT_COLOR_ID = "project_colorid";
ColorAdapter mAdapter;
ImageView mCheckmark;
EditText mName;
Project mProject;
GridView mGridview;
TextView mSelectColor;
/*
* (non-Javadoc)
* @see android.support.v4.app.FragmentActivity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
DatabaseManager.init(this);
setContentView(R.layout.project_dialog);
List<Color> colors = DatabaseManager.getInstance().getColors();
Intent i = getIntent();
if (i != null && i.hasExtra(EXTRA_PROJECT_ID)) {
int id = i.getIntExtra(EXTRA_PROJECT_ID, -1);
List<Project> projects = DatabaseManager.getInstance().getProject(id);
if (projects.size() > 0)
mProject = projects.get(0);
}
mName = (EditText) findViewById(R.id.name);
if (mProject != null)
mName.setText(mProject.getName());
mGridview = (GridView) findViewById(R.id.gridview);
mAdapter = new ColorAdapter(this, colors, mProject);
mGridview.setAdapter(mAdapter);
mGridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
for (int i = 0; i < mGridview.getChildCount(); i++) {
View view = mGridview.getChildAt(i);
ImageView image = (ImageView) view.findViewById(R.id.checkmark);
image.setVisibility(View.INVISIBLE);
}
mCheckmark = (ImageView) v.findViewById(R.id.checkmark);
mCheckmark.setVisibility(View.VISIBLE);
mPosition = position;
}
});
mSelectColor = (TextView) findViewById(R.id.select_color);
if (colors == null || colors.size() < 1)
mSelectColor.setText(R.string.no_color);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.project_activity, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// This ID represents the Home or Up button. In the case of this
// activity, the Up button is shown. Use NavUtils to allow users
// to navigate up one level in the application structure. For
// more details, see the Navigation pattern on Android Design:
//
// http://developer.android.com/design/patterns/navigation.html#up-vs-back
//
// TODO: If Settings has multiple levels, Up should navigate up
// that hierarchy.
NavUtils.navigateUpFromSameTask(this);
return true;
case R.id.menu_cancel:
finishActivity(RESULT_CANCELED);
finish();
return true;
case R.id.menu_done:
if (mName.getText().toString().trim().length() < 1)
return true;
Color color = mAdapter.getColor(mPosition);
String colorId = "1"; // Default color
if (color != null)
colorId = color.getId();
Intent result = new Intent();
result.putExtra(EXTRA_PROJECT_NAME, mName.getText().toString());
result.putExtra(EXTRA_PROJECT_COLOR_ID, colorId);
if (mProject != null)
result.putExtra(EXTRA_PROJECT_ID, mProject.getId());
setResult(RESULT_OK, result);
finishActivity(RESULT_OK);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onStart() {
super.onStart();
EasyTracker.getInstance(this).activityStart(this);
}
@Override
public void onStop() {
super.onStop();
EasyTracker.getInstance(this).activityStop(this);
}
public class ColorAdapter extends BaseAdapter {
private Context mContext;
private List<Color> mColors;
private Project mProject;
public ColorAdapter(Context c, List<Color> colors, Project project) {
mContext = c;
mColors = colors;
mProject = project;
}
public Color getColor(int id) {
if (mColors == null || mColors.size() == 0 || mColors.size() < id)
return null;
return mColors.get(id);
}
public int getCount() {
return mColors.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
View view;
if (convertView == null) { // if it's not recycled, initialize some
// attributes
convertView = getLayoutInflater().inflate(R.layout.color_item, null);
holder = new ViewHolder();
holder.frame = (FrameLayout) convertView.findViewById(R.id.color);
holder.checkmark = (ImageView) convertView.findViewById(R.id.checkmark);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (mProject != null && mColors.get(position).getId().equals(mProject.getColorId())) {
holder.checkmark.setVisibility(View.VISIBLE);
mCheckmark = holder.checkmark;
}
holder.frame.setBackgroundColor(android.graphics.Color.parseColor(mColors.get(position)
.getBackgroundColor()));
return convertView;
}
/* private view holder class */
private class ViewHolder {
FrameLayout frame;
ImageView checkmark;
}
}
}