();
+ for (int i = 0, count = jArray.length(); i < count; i++) {
+ try {
+ JSONObject jsonObject = jArray.getJSONObject(i);
+ stringArray.add(jsonObject.toString());
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
}
+ return stringArray;
+ }
- private void addNoteFromJsonObj(JSONObject noteObject, Date time) throws JSONException {
- Note addNote = new Note(
- noteObject.getString("id"),
- Float.parseFloat(noteObject.getJSONObject("location").getString("lat")),
- Float.parseFloat(noteObject.getJSONObject("location").getString("lng")),
- noteObject.getJSONObject("location").getString("address"),
- noteObject.getString("title"),
- noteObject.getString("body"),
- time.toString(),
- noteObject.getBoolean("is_public"),
- noteObject.getInt("likes"),
- noteObject.getString("avatar"),
- noteObject.getString("owner_id"),
- jsonArrayToStringArray(noteObject.getJSONArray("tags"))
- );
- listOfNotes.add(addNote);
+ private void addNoteFromJsonObj(JSONObject noteObject, Date time) throws JSONException {
+ Note addNote = new Note(
+ noteObject.getString("id"),
+ Float.parseFloat(noteObject.getJSONObject("location").getString("lat")),
+ Float.parseFloat(noteObject.getJSONObject("location").getString("lng")),
+ noteObject.getJSONObject("location").getString("address"),
+ noteObject.getString("title"),
+ noteObject.getString("body"),
+ time.toString(),
+ noteObject.getBoolean("is_public"),
+ noteObject.getInt("likes"),
+ noteObject.getString("avatar"),
+ noteObject.getString("owner_id"),
+ jsonArrayToStringArray(noteObject.getJSONArray("tags"))
+ );
+ listOfNotes.add(addNote);
- }
+ }
- // click on listView item
- class ItemClickedListener implements AdapterView.OnItemClickListener {
- @Override
- public void onItemClick(AdapterView> parent, View view, final int position, long id) {
- //create and configure dialog
- final Note note = listOfNotes.get(position);
- final Dialog noteViewDialog = new Dialog(getActivity());
- noteViewDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
- noteViewDialog.setContentView(R.layout.note_display_full);
+ // click on listView item
+ class ItemClickedListener implements AdapterView.OnItemClickListener {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, final int position, long id) {
+ //create and configure dialog
+ final Note note = listOfNotes.get(position);
+ final Dialog noteViewDialog = new Dialog(getActivity());
+ noteViewDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ noteViewDialog.setContentView(R.layout.note_display_full);
// noteViewDialog.setTitle("You wrote...");
- WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
- lp.copyFrom(noteViewDialog.getWindow().getAttributes());
- lp.width = WindowManager.LayoutParams.MATCH_PARENT;
- lp.height = WindowManager.LayoutParams.MATCH_PARENT;
- noteViewDialog.show();
+ WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
+ lp.copyFrom(noteViewDialog.getWindow().getAttributes());
+ lp.width = WindowManager.LayoutParams.MATCH_PARENT;
+ lp.height = WindowManager.LayoutParams.MATCH_PARENT;
+ noteViewDialog.show();
// dialog.getWindow().setAttributes(lp);
diff --git a/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/SettingsFragment.java b/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/SettingsFragment.java
index b77b215..96e09cb 100644
--- a/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/SettingsFragment.java
+++ b/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/SettingsFragment.java
@@ -1,57 +1,56 @@
package com.android_app.matan.ara.sagi.thesocialnotework;
-import android.*;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.util.Base64;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageButton;
import android.widget.ImageView;
+import android.widget.TextView;
import android.widget.Toast;
-public class SettingsFragment extends Fragment {
- private static final String ARG_PARAM1 = "param1";
- private static final String ARG_PARAM2 = "param2";
- private static final String TAG = "Settings" ;
- private static final int REQUEST_IMAGE_CAPTURE = 1;
- private Button cameraBtn;
+import com.android.volley.Response;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+
+public class SettingsFragment extends Fragment implements View.OnClickListener, TextWatcher {
+ private static final String TAG = "[TSN/Settings]" ;
+ private MainActivity parent;
+ private ImageButton cameraBtn;
private ImageView avatarImage;
-// private OnFragmentInteractionListener mListener;
+ private EditText txt_username, txt_password, txt_email;
+ private Uri currentImgUri;
+ private TextView lbl_num_of_notes, lbl_num_of_liked;
+ private User user;
+ private Button btn_save;
public SettingsFragment() {
// Required empty public constructor
-
}
- /**
- * Use this factory method to create a new instance of
- * this fragment using the provided parameters.
- *
- * @param param1 Parameter 1.
- * @param param2 Parameter 2.
- * @return A new instance of fragment SettingsFragment.
- */
- // TODO: Rename and change types and number of parameters
- public static SettingsFragment newInstance(String param1, String param2) {
- SettingsFragment fragment = new SettingsFragment();
- Bundle args = new Bundle();
- args.putString(ARG_PARAM1, param1);
- args.putString(ARG_PARAM2, param2);
- fragment.setArguments(args);
- return fragment;
- }
+
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -63,19 +62,40 @@ public class SettingsFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_settings, container, false);
+ this.parent = (MainActivity)getActivity();
+ Utils.showLoadingDialog(parent, "Just a sec...", "");
+ this.user = parent.getUser();
+ Log.d(TAG, "onCreateView: "+user.toString());
+ this.cameraBtn = (ImageButton) view.findViewById(R.id.btn_camera);
+ this.cameraBtn.setOnClickListener(this);
+ this.avatarImage = (ImageView) view.findViewById(R.id.settings_userAvater_iamgeView);
+ this.txt_email = (EditText)view.findViewById(R.id.txt_email);
+ this.txt_email.addTextChangedListener(this);
+ this.txt_password = (EditText)view.findViewById(R.id.txt_password);
+ this.txt_password.addTextChangedListener(this);
+ this.txt_username = (EditText)view.findViewById(R.id.txt_username);
+ this.lbl_num_of_notes = (TextView)view.findViewById(R.id.lbl_num_of_notes);
+ this.lbl_num_of_liked = (TextView)view.findViewById(R.id.lbl_num_of_liked);
+ this.btn_save = (Button)view.findViewById(R.id.btn_save);
+ this.btn_save.setOnClickListener(this);
- cameraBtn = (Button) view.findViewById(R.id.camera_button);
- cameraBtn.setOnClickListener(cameraBtnListener);
- avatarImage = (ImageView) view.findViewById(R.id.settings_userAvater_iamgeView);
+ this.txt_username.setEnabled(false);
+
+ //Populate The data
+ Utils.URLtoImageView(avatarImage, user.getAvatar());
+ this.txt_username.setText(""+user.getUsername());
+ this.txt_password.setText(""+user.getPassword());
+ Log.d(TAG, "onCreateView: The FUCKING EMAIL IS --------------->>>" + user.getEmail());
+ this.txt_email.setText(""+user.getEmail());
+
+ this.lbl_num_of_notes.setText(""+user.getNumber_of_notes()); //TODO
+ this.lbl_num_of_liked.setText(""+user.getLiked_notes().size());
+
+
+ Utils.dismissLoadingDialog();
return view;
}
-// // TODO: Rename method, update argument and hook method into UI event
-// public void onButtonPressed(Uri uri) {
-// if (mListener != null) {
-// mListener.onFragmentInteraction(uri);
-// }
-// }
@Override
public void onAttach(Context context) {
@@ -84,67 +104,120 @@ public class SettingsFragment extends Fragment {
@Override
public void onDetach() {
- super.onDetach();
- }
-
-// /**
-// * This interface must be implemented by activities that contain this
-// * fragment to allow an interaction in this fragment to be communicated
-// * to the activity and potentially other fragments contained in that
-// * activity.
-// *
-// * See the Android Training lesson Communicating with Other Fragments for more information.
-// */
-// public interface OnFragmentInteractionListener {
-// // TODO: Update argument type and name
-// void onFragmentInteraction(Uri uri);
-// }
-
-
-
-
- private View.OnClickListener cameraBtnListener = new View.OnClickListener()
- {
-
- public void onClick(View v)
- {
- if (ActivityCompat.checkSelfPermission((MainActivity) getActivity(),
- Manifest.permission.CAMERA)
- == PackageManager.PERMISSION_GRANTED) {
- Log.d(TAG, "in camera Button");
- Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
- startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
- }
- else{
- Toast.makeText(getActivity(), "No Location Permissions granted.\n\"An App is nothing without its permissions\"", Toast.LENGTH_LONG).show();
-
- }
-
- }
-
- };
-
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- Log.d(TAG, "on activity result");
- Log.d(TAG, "requestCode: "+requestCode);
- Log.d(TAG, "resultCode: "+resultCode);
- Log.d(TAG, "Activity.RESULT_OK: "+Activity.RESULT_OK);
- if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
- Log.d(TAG, "inside if");
-
- Bundle extras = data.getExtras();
- Bitmap imageBitmap= (Bitmap) extras.get("data");
- Log.d(TAG, "bitmap: "+imageBitmap.toString());
-
-// Bitmap imageBitmap = (Bitmap) extras.get("data");
- avatarImage.setImageBitmap(imageBitmap);
-
- }
+ super.onDetach();
}
+ @Override
+ public void onClick(View view) {
+ switch(view.getId()){
+ case R.id.btn_camera:
+ //check for permission
+// ActivityCompat.requestPermissions(parent, new String[]{Manifest.permission.CAMERA}, 1);
+ if ((ActivityCompat.checkSelfPermission(parent, android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)
+ &&(ActivityCompat.checkSelfPermission(parent, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) {
+ openCamera(view);
+ }else{
+ Toast.makeText(getActivity(), "No Camera or Storage Permissions granted.\n\"An App is nothing without its permissions\"", Toast.LENGTH_LONG).show();
+
+ }
+
+ break;
+ case R.id.btn_save:
+ user.updateUser(parent);
+ break;
+ }
+ }
+
+ /**
+ * creates a new camera intent
+ * @param v
+ */
+ protected void openCamera(View v) {
+ Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
+ createDir();
+ Long currentImageTimeStamp = System.currentTimeMillis();
+ String timeStamp = Long.toString(currentImageTimeStamp);
+ File photo = new File(Utils.PHOTOS_DIR_PATH, timeStamp + ".jpg");
+ currentImgUri = Uri.fromFile(photo);
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, currentImgUri);
+ Log.d(TAG, "openCamera: Image URI is: " + currentImgUri);
+ startActivityForResult(intent, 1);
+ }
+
+ protected void createDir() {
+ File f = new File(Utils.PHOTOS_DIR_PATH);
+ f.mkdirs();
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resaultCode, Intent intent) {
+ super.onActivityResult(requestCode, requestCode, intent);
+ if (resaultCode == Activity.RESULT_OK) {
+ if (currentImgUri != null) {
+ saveImage();
+ Log.d(TAG, "onActivityResult: Image Capured!! - Now Upload That Shit!!");
+ } else { //capturing failed
+ Toast.makeText(getActivity(), "Failed to Get Photo, Try Again", Toast.LENGTH_LONG).show();
+ Log.e(TAG, "onActivityResult: Image URI returned as NULL - Orientation Fail");
+ }
+ } else {
+ Log.i(TAG, "onActivityResult: User Canceled Image taking");
+
+ }
+ }
+
+ private void saveImage() {
+ Utils.showLoadingDialog(parent, "Saving Image...", "This Can Take a while");
+ File myFile = new File(currentImgUri.getPath());
+
+ JSONObject payload = new JSONObject();
+ try {
+ payload.put("image", ImageToBase64(myFile.getAbsolutePath()));
+ } catch (JSONException e) {
+ e.printStackTrace();
+ Utils.dismissLoadingDialog();
+ Toast.makeText(parent, "Failed to upload image.. Try Again", Toast.LENGTH_LONG).show();
+ }
+ VolleyUtilSingleton.getInstance(parent).post(Utils.BASE_URL + Utils.UPLOAD_IMAGE_PATH, payload, new Response.Listener() {
+ @Override
+ public void onResponse(JSONObject response) {
+ Log.d(TAG, "onResponse: "+response.toString());
+ try {
+ user.setAvatar(response.getString("image_url"));
+ //Populate The data
+ Utils.URLtoImageView(avatarImage, user.getAvatar());
+ user.updateUser(parent);
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ Utils.dismissLoadingDialog();
+ }
+ }, Utils.genericErrorListener);
+ }
+
+ private String ImageToBase64(String filePath){
+ Bitmap bm = BitmapFactory.decodeFile(filePath);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ bm.compress(Bitmap.CompressFormat.JPEG, 50, baos); //bm is the bitmap object
+ byte[] b = baos.toByteArray();
+ Log.d(TAG, "ImageToBase64: "+b.length/1000);
+ return Base64.encodeToString(b, Base64.DEFAULT);
+ }
+
+ @Override
+ public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+ user.setEmail(txt_email.getText().toString());
+ user.setPassword(txt_password.getText().toString());
+ }
+
+ @Override
+ public void afterTextChanged(Editable editable) {
+
+ }
}
diff --git a/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/SplashActivity.java b/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/SplashActivity.java
index d8b6e40..480db6f 100644
--- a/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/SplashActivity.java
+++ b/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/SplashActivity.java
@@ -1,16 +1,11 @@
package com.android_app.matan.ara.sagi.thesocialnotework;
-import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
-import android.support.v7.graphics.drawable.DrawableWrapper;
-import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
-import android.widget.LinearLayout;
import java.util.Random;
@@ -18,7 +13,6 @@ public class SplashActivity extends AppCompatActivity {
private ImageView background;
private int timerDelay = 3500;
- private final String TAG = "Splash Screen Activity";
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -33,8 +27,8 @@ public class SplashActivity extends AppCompatActivity {
} else {
background.setImageDrawable( getResources().getDrawable(rand_splash()));
}
- SharedPreferences sharedPref = this.getSharedPreferences(MainActivity.LOCAL_DATA_TSN, Context.MODE_PRIVATE);
- final String userData = sharedPref.getString("UserData", null);
+
+ final String userData = Utils.getUserFromSharedPrefs(this);
Thread timerThread = new Thread(){
public void run(){
diff --git a/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/User.java b/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/User.java
index d7ebd89..c295897 100644
--- a/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/User.java
+++ b/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/User.java
@@ -1,6 +1,15 @@
package com.android_app.matan.ara.sagi.thesocialnotework;
+import android.content.Context;
+import android.content.SharedPreferences;
import android.util.Log;
+import android.widget.Toast;
+
+import com.android.volley.Response;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
import java.util.Vector;
@@ -21,9 +30,13 @@ public class User {
public static final String TAG = "[TSN/User]", ATTARS_DELIMETER="||" , LIKED_NOTES_DELIMETER="|";
protected String id, password, email, avatar, username;
protected Vector liked_notes;
+ protected int number_of_notes;
+ protected User self;
public User(String serializedUserData){
+ self = this;
liked_notes = new Vector<>();
+ number_of_notes = 0;
String[] array = serializedUserData.split("\\|\\|");
for (int i = 0 ; i < array.length ; i ++){
switch (i){
@@ -52,6 +65,14 @@ public class User {
}
}
+ public int getNumber_of_notes() {
+ return number_of_notes;
+ }
+
+ public void setNumber_of_notes(int number_of_notes) {
+ this.number_of_notes = number_of_notes;
+ }
+
public String getId() {
return id;
}
@@ -119,7 +140,7 @@ public class User {
for (int i = 0; i < liked_notes.size(); i++) {
result += liked_notes.get(i);
if(i != liked_notes.size() - 1){
- result+=";";
+ result+=User.LIKED_NOTES_DELIMETER;
}
}
return result;
@@ -129,6 +150,46 @@ public class User {
return "Id: "+id+" UserName: " + username +" Password: " +password +" email: " + email+ " Avatar: " +avatar+" Liked Notes: "+liked_notes.toString();
}
+ public void updateUser(final MainActivity activity){
+ Log.d(TAG, "updateUser: ================================");
+ VolleyUtilSingleton.getInstance(activity).post(Utils.BASE_URL + "/user/upsert", this.toJSON(), new Response.Listener() {
+ @Override
+ public void onResponse(JSONObject response) {
+ try {
+ if(response.get("status").equals("OK")){
+ Log.d(TAG, "onResponse: In OKOKOKOK");
+ activity.updateNavAvatar();
+ Utils.updateUserSharedPref(self.Serialise());
+ activity.updateNavAvatar();
+ }
+ } catch (JSONException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }, Utils.genericErrorListener);
+ }
+
+ public JSONObject toJSON() {
+ JSONObject json = new JSONObject();
+ JSONArray liked = new JSONArray();
+ for (int i = 0; i < liked_notes.size(); i++) {
+ liked.put(liked_notes.get(i));
+ }
+ try {
+ json.put("id", this.id);
+ json.put("password", this.password);
+ json.put("username", this.username);
+ json.put("email", this.email);
+ json.put("avatar", this.avatar);
+ json.put("liked_notes_id", liked);
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+
+ return json;
+ }
}
diff --git a/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/Utils.java b/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/Utils.java
index ae76b56..c6a0369 100644
--- a/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/Utils.java
+++ b/app/src/main/java/com/android_app/matan/ara/sagi/thesocialnotework/Utils.java
@@ -2,6 +2,7 @@ package com.android_app.matan.ara.sagi.thesocialnotework;
import android.app.ProgressDialog;
import android.content.Context;
+import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
@@ -11,6 +12,7 @@ import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.AsyncTask;
+import android.os.Environment;
import android.util.Log;
import android.widget.ImageView;
@@ -37,11 +39,14 @@ import java.util.HashMap;
public class Utils {
public static final String TAG = "Utils";
- public static final String BASE_URL = "http://thesocialnotework-api.appspot.com/api";
+ public static final String BASE_URL = "http://thesocialnotework-api.appspot.com/api", UPLOAD_IMAGE_PATH="/file/upload";
public static ProgressDialog progress;
private static HashMap bitmapHash = new HashMap<>();
+ public static final String PHOTOS_DIR_PATH = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/TheSocialNotework/";
+
private static boolean mLocationPermission = false;
private static boolean mCameraPermission = false;
+ private static SharedPreferences prefs;
public static Bitmap getBitmapFromURL(String url) {
@@ -74,6 +79,7 @@ public class Utils {
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "genericErrorListener");
error.printStackTrace();
+ Utils.dismissLoadingDialog();
}
};
@@ -142,7 +148,8 @@ public class Utils {
private static class setUserAvatar extends AsyncTask {
private ImageView iv;
private String url;
- public setUserAvatar(ImageView imageView, String url){
+
+ public setUserAvatar(ImageView imageView, String url) {
this.iv = imageView;
this.url = url;
}
@@ -151,14 +158,13 @@ public class Utils {
protected Bitmap doInBackground(Void... v) {
// Bitmap b;
- return Utils.getBitmapFromURL(url);
+ return Utils.getBitmapFromURL(url);
}
@Override
- protected void onPostExecute(Bitmap b){
- iv.setImageBitmap(b);
- //getRoundedCornerBitmap(b, 20);
+ protected void onPostExecute(Bitmap b) {
+ iv.setImageBitmap(b);
}
}
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) {
@@ -204,6 +210,28 @@ public class Utils {
return mLocationPermission;
}
+ public static String getUserFromSharedPrefs(Context contexst){
+ if(prefs == null){
+ prefs = contexst.getSharedPreferences(MainActivity.LOCAL_DATA_TSN, Context.MODE_PRIVATE);
+ }
+ return prefs.getString("UserData", null);
+ };
+
+ public static void updateUserSharedPref(String data) throws Exception {
+ if(prefs == null) throw new Exception("Prefs are not available");
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putString("UserData", data);
+ editor.commit();
+ }
+
+ public static void removeUserDataFromPrefs() throws Exception{
+ if(prefs == null) throw new Exception("Prefs are not available");
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.remove("UserData");
+ editor.commit();
+ }
+
+
}
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index 799fe50..ae25b3d 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -1,20 +1,138 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="Nuber Of Notes: "
+ android:id="@+id/textView3"
+ android:textStyle="bold"
+ android:layout_weight="0.25" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+