package com.webshrub.citizencomplaint.androidapp; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.location.LocationManager; import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.provider.MediaStore; import android.provider.Settings; import android.view.View; import android.view.View.OnClickListener; import android.widget.*; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import static com.webshrub.citizencomplaint.androidapp.CitizenComplaintConstants.*; public class CitizenComplaintPhotoCaptureActivity extends CitizenComplaintActivity implements OnClickListener { private Uri imageUri; private DisplayImageOptions options = new DisplayImageOptions.Builder() .showStubImage(R.drawable.camera) .showImageForEmptyUri(R.drawable.ic_empty) .showImageOnFail(R.drawable.ic_error) .cacheInMemory() .cacheOnDisc() .bitmapConfig(Bitmap.Config.RGB_565) .build(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.citizen_complaint_photo_capture_activity); findViewById(R.id.button1).setOnClickListener(this); findViewById(R.id.button3).setOnClickListener(this); CitizenComplaint citizenComplaint = getIntent().getExtras().getParcelable(CITIZEN_COMPLAINT); TextView category = (TextView) findViewById(R.id.categoryTextView); category.setText(citizenComplaint.getComplaintCategory()); TextView complaint = (TextView) findViewById(R.id.complaintTextView); complaint.setText(citizenComplaint.getSelectedTemplateString()); if (savedInstanceState != null && savedInstanceState.containsKey(COMPLAINT_IMAGE_URI)) { imageUri = Uri.parse(savedInstanceState.getString(COMPLAINT_IMAGE_URI)); ImageView imageView = ((ImageView) findViewById(R.id.imageView1)); ImageLoader.getInstance().displayImage(imageUri.toString(), imageView, options); } } @Override protected void onSaveInstanceState(Bundle outState) { if (imageUri != null) { outState.putString(COMPLAINT_IMAGE_URI, imageUri.toString()); } super.onSaveInstanceState(outState); } @SuppressWarnings("unchecked") @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: { showUploadPhotoDialog(); break; } case R.id.button3: { CitizenComplaint citizenComplaint = getIntent().getExtras().getParcelable(CITIZEN_COMPLAINT); if (imageUri != null) { String compressedImagePath = CitizenComplaintUtility.getCompressedImagePath(CitizenComplaintUtility.getAbsoluteFilePath(this, imageUri.toString()), COMPLAINT_IMAGE_WIDTH, COMPLAINT_IMAGE_HEIGHT); citizenComplaint.setSelectedComplaintImageUri(compressedImagePath); } SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); String profileThumbnailImageUriString = preferences.getString(PROFILE_THUMBNAIL_IMAGE_URI, ""); citizenComplaint.setProfileThumbnailImageUri(profileThumbnailImageUriString); if (CitizenComplaintUtility.isDeviceOnline(this)) { new CitizenComplaintInsertDetailsTask(this, citizenComplaint).execute(); } else { Toast.makeText(this, "Not connected to internet.", Toast.LENGTH_SHORT).show(); } break; } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); ImageView imageView = ((ImageView) findViewById(R.id.imageView1)); switch (requestCode) { case IMAGE_CAPTURE_REQUEST: if (resultCode == RESULT_OK) { ImageLoader.getInstance().displayImage(imageUri.toString(), imageView, options); } break; case IMAGE_SELECT_REQUEST: if (resultCode == RESULT_OK) { imageUri = intent.getData(); ImageLoader.getInstance().displayImage(imageUri.toString(), imageView, options); } default: break; } } @Override protected void onStart() { super.onStart(); // Check if the GPS setting is currently enabled on the device. This verification should be done during onStart() because the system calls this method // when the user returns to the activity, which ensures the desired location provider is enabled each time the activity resumes from the stopped state. LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); if (!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { showSettingsDialog(); } } public void showSettingsDialog() { AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); alertDialog.setCancelable(false); alertDialog.setTitle(getString(R.string.enableLocationServices)); alertDialog.setMessage(getString(R.string.locationProvidersDisabled)); alertDialog.setPositiveButton(getString(R.string.enable), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(intent); } }); alertDialog.show(); } private void showUploadPhotoDialog() { Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.citizen_complaint_upload_photo_dialog); ListView listView = (ListView) dialog.findViewById(R.id.listview1); listView.setOnItemClickListener(new CitizenComplaintUploadPhotoOnItemClickListener(dialog)); dialog.setCancelable(true); dialog.setTitle("Upload Photo"); dialog.show(); } private class CitizenComplaintUploadPhotoOnItemClickListener implements AdapterView.OnItemClickListener { private Dialog dialog; public CitizenComplaintUploadPhotoOnItemClickListener(Dialog dialog) { this.dialog = dialog; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent newIntent; dialog.dismiss(); switch (position) { case 0: newIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); imageUri = CitizenComplaintUtility.getOutputMediaFileUri(MEDIA_TYPE_IMAGE); newIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(newIntent, IMAGE_CAPTURE_REQUEST); break; case 1: newIntent = new Intent(); newIntent.setType("image/*"); newIntent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(newIntent, IMAGE_SELECT_REQUEST); break; } } } }