/* * Copyright (c) 2012 Denis Solonenko. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v2.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html */ package ru.orangesoftware.financisto2.activity; import android.app.Activity; import android.content.Intent; import android.view.View; import android.widget.LinearLayout; import android.widget.ListAdapter; import android.widget.TextView; import java.util.ArrayList; import ru.orangesoftware.financisto2.R; import ru.orangesoftware.financisto2.db.DatabaseAdapter; import ru.orangesoftware.financisto2.db.DatabaseAdapter_; import ru.orangesoftware.financisto2.db.DatabaseHelper; import ru.orangesoftware.financisto2.model.MyEntity; import ru.orangesoftware.financisto2.model.Project; import ru.orangesoftware.financisto2.utils.MyPreferences; import ru.orangesoftware.financisto2.utils.TransactionUtils; import static ru.orangesoftware.financisto2.activity.AbstractActivity.setVisibility; /** * Created by IntelliJ IDEA. * User: denis.solonenko * Date: 7/2/12 9:25 PM */ public class ProjectSelector { private final Activity activity; private final DatabaseAdapter db; private final ActivityLayout x; private final boolean isShowProject; private View projectNode; private TextView projectText; private ArrayList<Project> projects; private ListAdapter projectAdapter; private long selectedProjectId = 0; public ProjectSelector(Activity activity, ActivityLayout x) { this.activity = activity; this.db = DatabaseAdapter_.getInstance_(activity); this.x = x; this.isShowProject = MyPreferences.isShowProject(activity); } public void fetchProjects() { projects = db.getActiveProjectsList(true); projectAdapter = TransactionUtils.createProjectAdapter(activity, projects); } public void createNode(LinearLayout layout) { if (isShowProject) { projectText = x.addListNodePlus(layout, R.id.project, R.id.project_add, R.string.project, R.string.no_project); projectNode = (View) projectText.getTag(); } } public void onClick(int id) { switch (id) { case R.id.project: pickProject(); break; case R.id.project_add: { ProjectActivity_.intent(activity).startForResult(R.id.project_add); break; } } } private void pickProject() { int selectedProjectPos = MyEntity.indexOf(projects, selectedProjectId); x.selectPosition(activity, R.id.project, R.string.project, projectAdapter, selectedProjectPos); } public void onSelectedPos(int id, int selectedPos) { switch(id) { case R.id.project: onProjectSelected(selectedPos); break; } } private void onProjectSelected(int selectedPos) { Project p = projects.get(selectedPos); selectProject(p); } public void selectProject(long projectId) { if (isShowProject) { Project p = MyEntity.find(projects, projectId); selectProject(p); } } private void selectProject(Project p) { if (isShowProject && p != null) { projectText.setText(p.title); selectedProjectId = p.id; } } public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { switch (requestCode) { case R.id.project_add: onNewProject(data); break; } } } private void onNewProject(Intent data) { fetchProjects(); long projectId = data.getLongExtra(DatabaseHelper.EntityColumns.ID, -1); if (projectId != -1) { selectProject(projectId); } } public void setProjectNodeVisible(boolean visible) { if (isShowProject) { setVisibility(projectNode, visible ? View.VISIBLE : View.GONE); } } public long getSelectedProjectId() { return projectNode == null || projectNode.getVisibility() == View.GONE ? 0 : selectedProjectId; } }