/**
AirCasting - Share your Air!
Copyright (C) 2011-2012 HabitatMap, Inc.
This program 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.
This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
You can contact the authors by email at <info@habitatmap.org>
*/
package pl.llp.aircasting.activity;
import pl.llp.aircasting.Intents;
import pl.llp.aircasting.R;
import pl.llp.aircasting.activity.task.OpenSessionTask;
import pl.llp.aircasting.activity.task.SimpleProgressTask;
import pl.llp.aircasting.android.Logger;
import pl.llp.aircasting.helper.CSVHelper;
import pl.llp.aircasting.helper.SettingsHelper;
import pl.llp.aircasting.helper.ShareHelper;
import pl.llp.aircasting.model.Session;
import pl.llp.aircasting.model.SessionManager;
import pl.llp.aircasting.storage.repository.SessionRepository;
import android.app.Application;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.google.inject.Inject;
import roboguice.inject.InjectResource;
import roboguice.inject.InjectView;
import java.io.IOException;
public class ShareSessionActivity extends DialogActivity implements View.OnClickListener
{
@InjectView(R.id.share_file) Button shareFile;
@InjectView(R.id.share_link) Button shareLink;
@InjectResource(R.string.share_title) String shareTitle;
@InjectResource(R.string.share_file) String shareChooserTitle;
@InjectResource(R.string.session_file_template) String shareText;
@Inject ShareHelper shareHelper;
@Inject SessionManager sessionManager;
@Inject CSVHelper csvHelper;
@Inject SessionRepository sessionRepository;
@Inject SettingsHelper settingsHelper;
@Inject Application context;
private Session session;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.share_session);
shareFile.setOnClickListener(this);
shareLink.setOnClickListener(this);
}
@Override
protected void onResume()
{
super.onResume();
if (getIntent().hasExtra(Intents.SESSION_ID)) {
long sessionId = getIntent().getLongExtra(Intents.SESSION_ID, 0);
session = sessionRepository.loadShallow(sessionId);
} else {
session = sessionManager.getSession();
}
if(session.isLocationless())
{
shareLink.setVisibility(View.GONE);
}
else
{
shareLink.setVisibility(View.VISIBLE);
}
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.share_link:
shareLink();
break;
case R.id.share_file:
shareFile();
break;
}
}
private void shareLink() {
if (session.getLocation() != null) {
shareHelper.shareLink(this, session);
} else if (settingsHelper.hasCredentials()) {
Toast.makeText(context, R.string.session_not_uploaded, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, R.string.account_reminder, Toast.LENGTH_LONG).show();
}
finish();
}
private void shareFile() {
if (sessionManager.isRecording()) {
session = sessionManager.getSession();
prepareAndShare();
} else {
loadSession();
}
}
private void prepareAndShare() {
//noinspection unchecked
new SimpleProgressTask<Void, Void, Uri>(this) {
@Override
protected Uri doInBackground(Void... voids) {
try {
return csvHelper.prepareCSV(session);
} catch (IOException e) {
Logger.e("Error while creating session CSV", e);
return null;
}
}
@Override
protected void onPostExecute(Uri uri) {
super.onPostExecute(uri);
if (uri == null) {
Toast.makeText(context, R.string.unknown_error, Toast.LENGTH_SHORT).show();
} else {
Intents.shareCSV(ShareSessionActivity.this, uri, shareChooserTitle, shareTitle, shareText);
}
finish();
}
}.execute();
}
private void loadSession() {
long id = getIntent().getLongExtra(Intents.SESSION_ID, 0);
new OpenSessionTask(this) {
@Override
protected Session doInBackground(Long... ids) {
session = sessionRepository.loadFully(ids[0], this);
return session;
}
@Override
protected void onPostExecute(Session session) {
super.onPostExecute(session);
prepareAndShare();
}
}.execute(id);
}
}