package org.igarape.copcast.views;
import android.app.ActionBar;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.hardware.Camera;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import org.igarape.copcast.R;
import org.igarape.copcast.service.BackgroundVideoRecorder;
import org.igarape.copcast.service.GcmIntentService;
import org.igarape.copcast.service.LocationService;
import org.igarape.copcast.service.UploadService;
import org.igarape.copcast.utils.Globals;
import org.igarape.copcast.utils.HttpResponseCallback;
import org.igarape.copcast.utils.NetworkUtils;
import static org.igarape.copcast.utils.FileUtils.formatMegaBytes;
import static org.igarape.copcast.utils.Globals.getDirectorySize;
import static org.igarape.copcast.utils.Globals.getDirectoryUploadedSize;
public class MainActivity extends Activity implements SurfaceHolder.Callback {
private static final String TAG = MainActivity.class.getName();
public static SurfaceView mSurfaceView;
public static SurfaceHolder mSurfaceHolder;
public static Camera mCamera;
public static boolean mPreviewRunning;
private BroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSurfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
ActionBar ab = getActionBar(); //needs import android.app.ActionBar;
ab.setTitle(Globals.getUserName());
ab.setSubtitle(Globals.getUserLogin(this));
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(UploadService.UPLOAD_PROGRESS_ACTION)) {
long size = intent.getLongExtra(UploadService.FILE_SIZE, 0);
Log.d(TAG, "Progress upload received:" + size);
Globals.setDirectoryUploadedSize(getDirectoryUploadedSize() + size);
((ProgressBar) findViewById(R.id.progressBar)).setProgress(getDirectoryUploadedSize().intValue());
((TextView) findViewById(R.id.uploadingLabel)).setText(getString(R.string.uploading_size, formatMegaBytes(getDirectoryUploadedSize()), formatMegaBytes(getDirectorySize())));
} else if (intent.getAction().equals(GcmIntentService.START_STREAMING)) {
Toast.makeText(getApplicationContext(), "START STREAMING", Toast.LENGTH_LONG).show();
} else if (intent.getAction().equals(GcmIntentService.STOP_STREAMING)) {
Toast.makeText(getApplicationContext(), "STOP STREAMING", Toast.LENGTH_LONG).show();
} else {
findViewById(R.id.uploadLayout).setVisibility(View.VISIBLE);
findViewById(R.id.uploadingLayout).setVisibility(View.GONE);
findViewById(R.id.streamLayout).setVisibility(View.GONE);
Intent intentAux = new Intent(MainActivity.this, UploadService.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
stopService(intentAux);
if (intent.getAction().equals(UploadService.CANCEL_UPLOAD_ACTION)) {
Toast.makeText(getApplicationContext(), getString(R.string.upload_stopped), Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), getString(R.string.upload_completed), Toast.LENGTH_LONG).show();
}
}
}
};
NetworkUtils.get(getApplicationContext(), "/pictures/small/show", new HttpResponseCallback() {
@Override
public void unauthorized() {
}
@Override
public void failure(int statusCode) {
}
@Override
public void noConnection() {
}
@Override
public void badConnection() {
}
@Override
public void badRequest() {
}
@Override
public void badResponse() {
}
@Override
public void success(byte[] response) {
final byte[] responseBody = response;
runOnUiThread(new Runnable() {
@Override
public void run() {
Bitmap bm = BitmapFactory.decodeByteArray(responseBody, 0, responseBody.length);
Globals.setUserImage(bm);
getActionBar().setIcon(new BitmapDrawable(MainActivity.this.getResources(), bm));
}
});
}
});
((ProgressBar)findViewById(R.id.progressBar)).setMax(getDirectorySize().intValue());
((TextView)findViewById(R.id.uploadingLabel)).setText(getString(R.string.uploading_size, 0, formatMegaBytes(getDirectorySize())));
((TextView)findViewById(R.id.uploadData)).setText(getString(R.string.upload_data_size, formatMegaBytes(getDirectorySize())));
final Button starMissionButton = (Button) findViewById(R.id.startMissionButton);
starMissionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
starMissionButton.setVisibility(View.GONE);
findViewById(R.id.settingsLayout).setVisibility(View.VISIBLE);
((TextView)findViewById(R.id.welcome)).setText(getString(R.string.mission_start));
((TextView)findViewById(R.id.welcomeDesc)).setText(getString(R.string.mission_start_desc));
findViewById(R.id.uploadLayout).setVisibility(View.GONE);
findViewById(R.id.uploadingLayout).setVisibility(View.GONE);
findViewById(R.id.streamLayout).setVisibility(View.VISIBLE);
findViewById(R.id.recBall).setVisibility(View.VISIBLE);
Intent intent = new Intent(MainActivity.this, BackgroundVideoRecorder.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startService(intent);
intent = new Intent(MainActivity.this, LocationService.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startService(intent);
}
});
final Button endMissionButton = (Button) findViewById(R.id.endMissionButton);
endMissionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
starMissionButton.setVisibility(View.VISIBLE);
findViewById(R.id.settingsLayout).setVisibility(View.GONE);
((TextView)findViewById(R.id.welcome)).setText(getString(R.string.welcome));
((TextView)findViewById(R.id.welcomeDesc)).setText(getString(R.string.welcome_desc));
findViewById(R.id.uploadLayout).setVisibility(View.VISIBLE);
findViewById(R.id.uploadingLayout).setVisibility(View.GONE);
findViewById(R.id.streamLayout).setVisibility(View.GONE);
findViewById(R.id.recBall).setVisibility(View.INVISIBLE);
Intent intent = new Intent(MainActivity.this, BackgroundVideoRecorder.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
stopService(intent);
intent = new Intent(MainActivity.this, LocationService.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
stopService(intent);
}
});
((Button) findViewById(R.id.uploadButton)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (NetworkUtils.canUpload(getApplicationContext(), getIntent())) {
findViewById(R.id.uploadLayout).setVisibility(View.GONE);
findViewById(R.id.uploadingLayout).setVisibility(View.VISIBLE);
findViewById(R.id.streamLayout).setVisibility(View.GONE);
Intent intent = new Intent(MainActivity.this, UploadService.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startService(intent);
} else {
Toast.makeText(getApplicationContext(), getString(R.string.upload_disabled), Toast.LENGTH_LONG).show();
}
}
});
((ImageView) findViewById(R.id.uploadCancelButton)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
findViewById(R.id.uploadLayout).setVisibility(View.VISIBLE);
findViewById(R.id.uploadingLayout).setVisibility(View.GONE);
findViewById(R.id.streamLayout).setVisibility(View.GONE);
Intent intent = new Intent(MainActivity.this, UploadService.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
stopService(intent);
}
});
((Button)findViewById(R.id.pauseRecordingButton)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getApplicationContext(), getString(R.string.under_construction), Toast.LENGTH_LONG).show();
}
});
}
@Override
protected void onDestroy() {
Globals.clear(MainActivity.this);
super.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
} else if (id == R.id.action_logout){
logout();
return true;
}
return super.onOptionsItemSelected(item);
}
private void logout() {
Globals.clear(MainActivity.this);
stopService(new Intent(MainActivity.this, BackgroundVideoRecorder.class));
stopService(new Intent(MainActivity.this, LocationService.class));
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
startActivity(intent);
MainActivity.this.finish();
}
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
@Override
protected void onStart() {
super.onStart();
IntentFilter filter = new IntentFilter(UploadService.UPLOAD_PROGRESS_ACTION);
filter.addAction(UploadService.CANCEL_UPLOAD_ACTION);
filter.addAction(UploadService.COMPLETED_UPLOAD_ACTION);
filter.addAction(GcmIntentService.START_STREAMING);
filter.addAction(GcmIntentService.STOP_STREAMING);
LocalBroadcastManager.getInstance(this).registerReceiver((receiver), filter);
}
@Override
protected void onStop() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);
super.onStop();
}
}