Skip to content

Commit

Permalink
Added use of camera + display picture (from camera) in ItemDetailFrag…
Browse files Browse the repository at this point in the history
…ment (if available) + demo of Toast.
  • Loading branch information
bart.blommaerts committed Nov 30, 2013
1 parent 81774bb commit 4964c55
Show file tree
Hide file tree
Showing 10 changed files with 151 additions and 18 deletions.
3 changes: 3 additions & 0 deletions Workshop/src/main/AndroidManifest.xml
Expand Up @@ -36,4 +36,7 @@
</activity>
</application>

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
37 changes: 36 additions & 1 deletion Workshop/src/main/java/be/hp/workshop/AddBrownBagActivity.java
@@ -1,13 +1,18 @@
package be.hp.workshop;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import be.hp.workshop.data.model.BrownBag;
import be.hp.workshop.data.service.BrownBagService;
import be.hp.workshop.util.CameraManipulation;

public class AddBrownBagActivity extends Activity {

Expand All @@ -19,6 +24,9 @@ public class AddBrownBagActivity extends Activity {
private EditText mTitleView;
private EditText mContentView;

private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
private String imageUrl = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand All @@ -37,6 +45,20 @@ public void onClick(View view) {
mAddTask.execute((Void) null);
}
});

findViewById(R.id.add_image).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// create Intent to take a picture and return control to the calling application
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

Uri fileUri = CameraManipulation.getOutputMediaFileUri(CameraManipulation.MEDIA_TYPE_IMAGE); // create a file to save the image
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

imageUrl = fileUri.getPath();
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
});
}

public class AddBrownBagTask extends AsyncTask<Void, Void, Boolean> {
Expand All @@ -49,7 +71,7 @@ protected Boolean doInBackground(Void... params) {
@Override
protected void onPostExecute(final Boolean success) {
if (success) {
BrownBag brownBag = new BrownBag(null, mTitle, mContent, null);
BrownBag brownBag = new BrownBag(null, mTitle, mContent, null, imageUrl);
BrownBagService brownBagService = new BrownBagService();
brownBagService.insert(AddBrownBagActivity.this.getBaseContext(), brownBag);

Expand All @@ -64,4 +86,17 @@ protected void onCancelled() {
// verify nothing has been inserted
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK && imageUrl != null) {
Toast.makeText(this, "Image saved to:\n" + imageUrl, Toast.LENGTH_LONG).show();
} else if (resultCode == RESULT_CANCELED) {
// User cancelled the image capture
} else {
// Image capture failed, advise user
}
}
}
}
20 changes: 16 additions & 4 deletions Workshop/src/main/java/be/hp/workshop/ItemDetailFragment.java
@@ -1,5 +1,7 @@
package be.hp.workshop;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.Fragment;
Expand Down Expand Up @@ -55,12 +57,22 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_item_detail, container, false);

// Show the content as text in a TextView.
if (mItem != null) {
((TextView) rootView.findViewById(R.id.item_detail)).setText(mItem.getContent());
Integer imageResourceId = HardcodedImages.getHardcodedImageList().get(mItem.getImageId());
Drawable imageDrawable = getResources().getDrawable(imageResourceId);
((ImageView) rootView.findViewById(R.id.item_detail_image)).setImageDrawable(imageDrawable);
ImageView itemDetailImage = (ImageView) rootView.findViewById(R.id.item_detail_image);
String imageUrl = mItem.getImageUrl();

if (imageUrl != null && !imageUrl.equals("")) {
// get picture
Bitmap picture = BitmapFactory.decodeFile(imageUrl);
itemDetailImage.setImageBitmap(picture);
} else {
// get drawable
Integer imageResourceId = HardcodedImages.getHardcodedImageList().get(mItem.getImageId());
Drawable imageDrawable = getResources().getDrawable(imageResourceId);

itemDetailImage.setImageDrawable(imageDrawable);
}
}

return rootView;
Expand Down
Expand Up @@ -11,13 +11,15 @@ public class BrownBagContract implements BaseColumns {
public static final String COLUMN_NAME_TITLE = "title";
public static final String COLUMN_NAME_CONTENT = "content";
public static final String COLUMN_NAME_IMAGE_ID = "image_id";
public static final String COLUMN_NAME_IMAGE_URL = "image_url";

public static final String SQL_CREATE_TABLE =
"CREATE TABLE " + TABLE_NAME + " (" +
_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
COLUMN_NAME_TITLE + " TEXT," +
COLUMN_NAME_CONTENT + " TEXT," +
COLUMN_NAME_IMAGE_ID + " TEXT" +
COLUMN_NAME_IMAGE_ID + " TEXT," +
COLUMN_NAME_IMAGE_URL + " TEXT" +
" )";

public static final String SQL_DROP_TABLE =
Expand Down
Expand Up @@ -9,7 +9,7 @@
*/
public class BrownBagDbHelper extends SQLiteOpenHelper {
// If you change the database schema, you must increment the database version.
public static final int DATABASE_VERSION = 17;
public static final int DATABASE_VERSION = 20;
public static final String DATABASE_NAME = "BrownBag.db";

public BrownBagDbHelper(Context context) {
Expand Down
12 changes: 11 additions & 1 deletion Workshop/src/main/java/be/hp/workshop/data/model/BrownBag.java
Expand Up @@ -8,6 +8,15 @@ public class BrownBag {
private String title;
private String content;
private Integer imageId;
private String imageUrl;

public String getImageUrl() {
return imageUrl;
}

public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}

public Integer getImageId() {
return imageId;
Expand All @@ -17,11 +26,12 @@ public void setImageId(Integer imageId) {
this.imageId = imageId;
}

public BrownBag(String id, String title, String content, Integer imageId) {
public BrownBag(String id, String title, String content, Integer imageId, String imageUrl) {
this.id = id;
this.title = title;
this.content = content;
this.imageId = imageId;
this.imageUrl = imageUrl;
}

public String getId() {
Expand Down
Expand Up @@ -23,13 +23,8 @@ public void insert(Context context, BrownBag brownBag) {
ContentValues values = new ContentValues();
values.put(BrownBagContract.COLUMN_NAME_TITLE, brownBag.getTitle());
values.put(BrownBagContract.COLUMN_NAME_CONTENT, brownBag.getContent());

// temporary
if (brownBag.getImageId() == null) {
brownBag.setImageId(1);
}

values.put(BrownBagContract.COLUMN_NAME_IMAGE_ID, brownBag.getImageId());
values.put(BrownBagContract.COLUMN_NAME_IMAGE_URL, brownBag.getImageUrl());

db.insert(
BrownBagContract.TABLE_NAME,
Expand All @@ -47,7 +42,8 @@ public void findAll(Context context) {
BrownBagContract._ID,
BrownBagContract.COLUMN_NAME_TITLE,
BrownBagContract.COLUMN_NAME_CONTENT,
BrownBagContract.COLUMN_NAME_IMAGE_ID},
BrownBagContract.COLUMN_NAME_IMAGE_ID,
BrownBagContract.COLUMN_NAME_IMAGE_URL},
null, // The columns for the WHERE clause
null, // The values for the WHERE clause
null, // don't group the rows
Expand All @@ -66,8 +62,9 @@ private void fillBrownBagItems(Cursor cursor) {
String title = cursor.getString(cursor.getColumnIndexOrThrow(BrownBagContract.COLUMN_NAME_TITLE));
String content = cursor.getString(cursor.getColumnIndexOrThrow(BrownBagContract.COLUMN_NAME_CONTENT));
Integer imageId = cursor.getInt(cursor.getColumnIndexOrThrow(BrownBagContract.COLUMN_NAME_IMAGE_ID));
String imageUrl = cursor.getString(cursor.getColumnIndexOrThrow(BrownBagContract.COLUMN_NAME_IMAGE_URL));

BrownBag brownBag = new BrownBag(id, title, content, imageId);
BrownBag brownBag = new BrownBag(id, title, content, imageId, imageUrl);

BrownBagItems.addItem(brownBag);
}
Expand Down
52 changes: 52 additions & 0 deletions Workshop/src/main/java/be/hp/workshop/util/CameraManipulation.java
@@ -0,0 +1,52 @@
package be.hp.workshop.util;

import android.net.Uri;
import android.os.Environment;
import android.util.Log;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
* Created by bart on 11/30/13.
*/
public class CameraManipulation {

public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;

/** Create a file Uri for saving an image or video */
public static Uri getOutputMediaFileUri(int type){
return Uri.fromFile(getOutputMediaFile(type));
}

/** Create a File for saving an image or video */
private static File getOutputMediaFile(int type){
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "Workshop");

// Create the storage directory if it does not exist
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.d("Workshop", "failed to create directory");
return null;
}
}

// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE){
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg");
} else if(type == MEDIA_TYPE_VIDEO) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"VID_"+ timeStamp + ".mp4");
} else {
return null;
}

return mediaFile;
}
}
24 changes: 22 additions & 2 deletions Workshop/src/main/res/layout/activity_add_brownbag.xml
Expand Up @@ -35,15 +35,35 @@
android:layout_height="wrap_content"
android:inputType="text" />

<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:paddingTop="20dp"
android:gravity="center">

<Button android:id="@+id/add_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/add_brown_bag_add_image"
android:paddingLeft="32dp"
android:paddingRight="32dp"
android:layout_gravity="center_horizontal"
android:gravity="center" />

<Button android:id="@+id/save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/add_brown_bag_save"
android:paddingLeft="32dp"
android:paddingRight="32dp"
android:layout_gravity="right" />
android:layout_gravity="center_horizontal"
android:gravity="center" />

</LinearLayout>
</LinearLayout>

</FrameLayout>
</FrameLayout>
2 changes: 2 additions & 0 deletions Workshop/src/main/res/values/strings.xml
Expand Up @@ -8,5 +8,7 @@
<string name="action_compose">Add brown bag</string>
<string name="title_activity_add_brown_bag">Add a new brown bag</string>
<string name="add_brown_bag_save">Save</string>
<string name="add_brown_bag_add_image">Add Image</string>


</resources>

0 comments on commit 4964c55

Please sign in to comment.