/*------------------------------------------------------------------------------
** Ident: Sogeti Smart Mobile Solutions
** Author: rene
** Copyright: (c) Apr 24, 2011 Sogeti Nederland B.V. All Rights Reserved.
**------------------------------------------------------------------------------
** Sogeti Nederland B.V. | No part of this file may be reproduced
** Distributed Software Engineering | or transmitted in any form or by any
** Lange Dreef 17 | means, electronic or mechanical, for the
** 4131 NJ Vianen | purpose, without the express written
** The Netherlands | permission of the copyright holder.
*------------------------------------------------------------------------------
*
* This file is part of OpenGPSTracker.
*
* OpenGPSTracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenGPSTracker is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenGPSTracker. If not, see <http://www.gnu.org/licenses/>.
*
*/
package nl.sogeti.android.gpstracker.actions;
import nl.sogeti.android.gpstracker.R;
import nl.sogeti.android.gpstracker.actions.utils.ProgressListener;
import nl.sogeti.android.gpstracker.adapter.BreadcrumbsAdapter;
import nl.sogeti.android.gpstracker.adapter.BreadcrumbsTracks;
import nl.sogeti.android.gpstracker.db.GPStracking.MetaData;
import nl.sogeti.android.gpstracker.util.Constants;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Spinner;
/**
* Empty Activity that pops up the dialog to describe the track
*
* @version $Id: NameTrack.java 888 2011-03-14 19:44:44Z rcgroot@gmail.com $
* @author rene (c) Jul 27, 2010, Sogeti B.V.
*/
public class DescribeTrack extends Activity implements ProgressListener
{
private static final int DIALOG_TRACKDESCRIPTION = 42;
protected static final String TAG = "OGT.DescribeTrack";
private static final String ACTIVITY_ID = "ACTIVITY_ID";
private static final String BUNDLE_ID = "BUNDLE_ID";
private boolean finishedLoading = false;
private Spinner mActivitySpinner;
private Spinner mBundleSpinner;
private EditText mDescriptionText;
private CheckBox mPublicCheck;
private Button mOkayButton;
private boolean paused;
private Uri mTrackUri;
private final DialogInterface.OnClickListener mTrackDescriptionDialogListener = new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
switch (which)
{
case DialogInterface.BUTTON_POSITIVE:
Uri metadataUri = Uri.withAppendedPath(mTrackUri, "metadata");
Integer activityId = BreadcrumbsTracks.getIdForActivity((String) mActivitySpinner.getSelectedItem());
Integer bundleId = BreadcrumbsTracks.getIdForBundle(activityId, (String) mBundleSpinner.getSelectedItem());
saveBreadcrumbsPreference(mActivitySpinner.getSelectedItemPosition(), mBundleSpinner.getSelectedItemPosition());
String description = mDescriptionText.getText().toString();
String isPublic = Boolean.toString(mPublicCheck.isChecked());
ContentValues[] metaValues = { buildContentValues(BreadcrumbsTracks.ACTIVITY_ID, activityId.toString()),
buildContentValues(BreadcrumbsTracks.BUNDLE_ID, bundleId.toString()), buildContentValues(BreadcrumbsTracks.DESCRIPTION, description),
buildContentValues(BreadcrumbsTracks.ISPUBLIC, isPublic), };
getContentResolver().bulkInsert(metadataUri, metaValues);
Intent data = new Intent();
data.setData(mTrackUri);
if( getIntent().getExtras() != null && getIntent().getExtras().containsKey(Constants.NAME))
{
data.putExtra(Constants.NAME, getIntent().getExtras().getString(Constants.NAME));
}
setResult(RESULT_OK, data);
break;
case DialogInterface.BUTTON_NEGATIVE:
break;
default:
Log.e(TAG, "Unknown option ending dialog:" + which);
break;
}
finish();
}
};
private BreadcrumbsAdapter mBreadcrumbAdapter;
private ProgressBar mProgressSpinner;
private AlertDialog mDialog;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setVisible(false);
paused = false;
mTrackUri = this.getIntent().getData();
}
@Override
protected void onPause()
{
super.onPause();
paused = true;
}
/*
* (non-Javadoc)
* @see com.google.android.maps.MapActivity#onPause()
*/
@Override
protected void onResume()
{
super.onResume();
if (mTrackUri != null)
{
showDialog(DIALOG_TRACKDESCRIPTION);
}
else
{
Log.e(TAG, "Describing track without a track URI supplied.");
finish();
}
}
@Override
protected Dialog onCreateDialog(int id)
{
LayoutInflater factory = null;
View view = null;
Builder builder = null;
switch (id)
{
case DIALOG_TRACKDESCRIPTION:
builder = new AlertDialog.Builder(this);
factory = LayoutInflater.from(this);
view = factory.inflate(R.layout.describedialog, null);
mActivitySpinner = (Spinner) view.findViewById(R.id.activity);
mBundleSpinner = (Spinner) view.findViewById(R.id.bundle);
mDescriptionText = (EditText) view.findViewById(R.id.description);
mPublicCheck = (CheckBox) view.findViewById(R.id.public_checkbox);
mProgressSpinner = (ProgressBar) view.findViewById(R.id.progressSpinner);
builder.setTitle(R.string.dialog_description_title).setMessage(R.string.dialog_description_message).setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(R.string.btn_okay, mTrackDescriptionDialogListener)
.setNegativeButton(R.string.btn_cancel, mTrackDescriptionDialogListener).setView(view);
mDialog = builder.create();
setUiEnabled(finishedLoading);
mDialog.setOnDismissListener(new OnDismissListener()
{
public void onDismiss(DialogInterface dialog)
{
if (!paused)
{
finish();
}
}
});
return mDialog;
default:
return super.onCreateDialog(id);
}
}
@Override
protected void onPrepareDialog(int id, Dialog dialog)
{
switch (id)
{
case DIALOG_TRACKDESCRIPTION:
setUiEnabled(finishedLoading);
connectBreadcrumbs();
break;
default:
super.onPrepareDialog(id, dialog);
break;
}
}
private void connectBreadcrumbs()
{
mBreadcrumbAdapter = new BreadcrumbsAdapter(this, this);
boolean authorized = mBreadcrumbAdapter.connectionSetup();
if (!authorized)
{
mBreadcrumbAdapter.requestBreadcrumbsOauthToken(this);
}
}
private void saveBreadcrumbsPreference(int activityPosition, int bundlePosition)
{
Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();
editor.putInt(ACTIVITY_ID, activityPosition);
editor.putInt(BUNDLE_ID, bundlePosition);
editor.commit();
}
private void loadBreadcrumbsPreference()
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int activityPos = prefs.getInt(ACTIVITY_ID, 0);
activityPos = activityPos < mActivitySpinner.getCount() ? activityPos : 0;
mActivitySpinner.setSelection(activityPos);
int bundlePos = prefs.getInt(BUNDLE_ID, 0);
bundlePos = bundlePos < mBundleSpinner.getCount() ? bundlePos : 0;
mBundleSpinner.setSelection(bundlePos);
}
private ContentValues buildContentValues(String key, String value)
{
ContentValues contentValues = new ContentValues();
contentValues.put(MetaData.KEY, key);
contentValues.put(MetaData.VALUE, value);
return contentValues;
}
public void started()
{
finishedLoading = false;
}
public void finished(Uri result)
{
finishedLoading = true;
setUiEnabled(finishedLoading);
}
public void showError(String task, String errorMessage, Exception exception)
{
setUiEnabled(true);
finish();
}
// Ignored only spinner
public void setIndeterminate(boolean indeterminate){}
public void setMax(int max){}
public void increaseProgress(int value){}
private void setUiEnabled(boolean enabled)
{
if (mProgressSpinner != null)
{
if (enabled)
{
mProgressSpinner.setVisibility(View.GONE);
}
else
{
mProgressSpinner.setVisibility(View.VISIBLE);
}
}
if( mDialog != null )
{
mOkayButton = mDialog.getButton(AlertDialog.BUTTON_POSITIVE);
}
for (View view : new View[] { mActivitySpinner, mBundleSpinner, mDescriptionText, mPublicCheck, mOkayButton })
{
if (view != null)
{
view.setEnabled(enabled);
}
}
if (enabled)
{
mActivitySpinner.setAdapter(mBreadcrumbAdapter.getBreadcrumbsTracks().getActivityAdapter(this));
mBundleSpinner.setAdapter(mBreadcrumbAdapter.getBreadcrumbsTracks().getBundleAdapter(this));
loadBreadcrumbsPreference();
}
}
}