Skip to content

Instantly share code, notes, and snippets.

@ainulfi3
Created October 12, 2017 19:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ainulfi3/00e3633a9dbb2689f25e650a99850a56 to your computer and use it in GitHub Desktop.
Save ainulfi3/00e3633a9dbb2689f25e650a99850a56 to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
{
"Users" : {
"Tutees" : {
"glk3Wi1lZZOQkt2UNsGit02DEym2" : {
"FullName" : "ainul jasni",
"UserName" : "ainulfi3",
"profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/tutorpal-1.appspot.com/o/profileImageUrl%2Fglk3Wi1lZZOQkt2UNsGit02DEym2?alt=media&token=f22fc4bb-39f0-49ec-ad05-aae7513fce0e"
}
},
"Tutors" : {
"yE6ALyKEjVOoNLZcHEvHmeYkqON2" : {
"FullName" : "hai im ainul ",
"UserName" : "ainul",
"profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/tutorpal-1.appspot.com/o/profileImageUrl%2FyE6ALyKEjVOoNLZcHEvHmeYkqON2?alt=media&token=aa63a6f2-0154-4c27-b7ba-d8de89ee64bc"
}
}
}
}
package com.example.cqaai.tutorpal.activity;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.google.android.gms.common.data.BitmapTeleporter;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.example.cqaai.tutorpal.Firebase.FirebaseDatabaseHelper;
import com.example.cqaai.tutorpal.Firebase.FirebaseUserEntity;
import com.example.cqaai.tutorpal.Helper.Helper;
import com.example.cqaai.tutorpal.R;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class EditProfileActivity extends AppCompatActivity {
private Button changeFullname, changeUsername, btnChangeFullname, btnChangeUsername, btnChangeEmail, btnChangePassword, btnSendResetEmail, btnRemoveUser,
changeEmail, changePassword, sendEmail, remove, signOut, mUpload;
private EditText fullName, userName, oldEmail, newEmail, password, newPassword;
private ProgressBar progressBar;
private FirebaseAuth.AuthStateListener authListener;
private FirebaseAuth auth;
private DatabaseReference mTutorDatabase;
private ImageView mProfileImage;
private Uri resultUri;
private String userID;
private String mFullName;
private String mUserName;
private String mProfileImageUrl;
// private static final String TAG = EditProfileActivity.class.getSimpleName();
//
// private EditText editProfileName;
//
// private EditText editProfileCountry;
//
// private EditText editProfilePhoneNumber;
//
// private EditText editProfileHobby;
//
// private EditText editProfileBirthday;
//
// private FirebaseAuth.AuthStateListener authStateListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_profile);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setTitle("Edit Profile Information");
btnChangeFullname = (Button) findViewById(R.id.change_fullname_button);
btnChangeUsername = (Button) findViewById(R.id.change_username_button);
btnChangeEmail = (Button) findViewById(R.id.change_email_button);
btnChangePassword = (Button) findViewById(R.id.change_password_button);
btnSendResetEmail = (Button) findViewById(R.id.sending_pass_reset_button);
btnRemoveUser = (Button) findViewById(R.id.remove_user_button);
changeFullname = (Button) findViewById(R.id.changeFullName);
changeUsername = (Button) findViewById(R.id.changeUsername);
changeEmail = (Button) findViewById(R.id.changeEmail);
changePassword = (Button) findViewById(R.id.changePass);
sendEmail = (Button) findViewById(R.id.send);
remove = (Button) findViewById(R.id.remove);
signOut = (Button) findViewById(R.id.sign_out);
mUpload = (Button) findViewById(R.id.btn_upload);
fullName = (EditText) findViewById(R.id.full_name);
userName = (EditText) findViewById(R.id.user_name);
oldEmail = (EditText) findViewById(R.id.old_email);
newEmail = (EditText) findViewById(R.id.new_email);
password = (EditText) findViewById(R.id.password);
newPassword = (EditText) findViewById(R.id.newPassword);
mProfileImage = (ImageView) findViewById(R.id.profileImage);
fullName.setVisibility(View.GONE);
userName.setVisibility(View.GONE);
oldEmail.setVisibility(View.GONE);
newEmail.setVisibility(View.GONE);
password.setVisibility(View.GONE);
newPassword.setVisibility(View.GONE);
changeFullname.setVisibility(View.GONE);
changeUsername.setVisibility(View.GONE);
changeEmail.setVisibility(View.GONE);
changePassword.setVisibility(View.GONE);
sendEmail.setVisibility(View.GONE);
remove.setVisibility(View.GONE);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
if (progressBar != null) {
progressBar.setVisibility(View.GONE);
}
//get firebase auth instance
auth = FirebaseAuth.getInstance();
//get current user
userID = auth.getCurrentUser().getUid();
mTutorDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child("Tutors").child(userID);
getUserInfo();
mProfileImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 1);
}
});
//get current user
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
authListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user == null) {
// user auth state is changed - user is null
// launch login activity
startActivity(new Intent(EditProfileActivity.this, LoginActivity.class));
finish();
}
}
};
//change full name
btnChangeFullname.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
changeFullname.setVisibility(View.VISIBLE);
changeUsername.setVisibility(View.GONE);
fullName.setVisibility(View.VISIBLE);
userName.setVisibility(View.GONE);
oldEmail.setVisibility(View.GONE);
newEmail.setVisibility(View.GONE);
password.setVisibility(View.GONE);
newPassword.setVisibility(View.GONE);
changeEmail.setVisibility(View.GONE);
changePassword.setVisibility(View.GONE);
sendEmail.setVisibility(View.GONE);
remove.setVisibility(View.GONE);
}
});
//change full name
btnChangeUsername.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
changeFullname.setVisibility(View.GONE);
changeUsername.setVisibility(View.VISIBLE);
fullName.setVisibility(View.GONE);
userName.setVisibility(View.VISIBLE);
oldEmail.setVisibility(View.GONE);
newEmail.setVisibility(View.GONE);
password.setVisibility(View.GONE);
newPassword.setVisibility(View.GONE);
changeEmail.setVisibility(View.GONE);
changePassword.setVisibility(View.GONE);
sendEmail.setVisibility(View.GONE);
remove.setVisibility(View.GONE);
}
});
//INITIATE change username BUTTON FUNCTION
btnChangeEmail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
changeFullname.setVisibility(View.GONE);
changeUsername.setVisibility(View.GONE);
fullName.setVisibility(View.GONE);
userName.setVisibility(View.GONE);
oldEmail.setVisibility(View.VISIBLE);
newEmail.setVisibility(View.VISIBLE);
password.setVisibility(View.GONE);
newPassword.setVisibility(View.GONE);
changeEmail.setVisibility(View.VISIBLE);
changePassword.setVisibility(View.GONE);
sendEmail.setVisibility(View.GONE);
remove.setVisibility(View.GONE);
}
});
changeFullname.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
saveUserInformationFullName();
}
});
changeUsername.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
saveUserInformationUsername();
}
});
mUpload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
uploadProfileImage();
}
});
changeEmail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressBar.setVisibility(View.VISIBLE);
if (user != null && !newEmail.getText().toString().trim().equals("")) {
user.updateEmail(newEmail.getText().toString().trim())
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(EditProfileActivity.this, "Email address is updated. Please sign in with new email id!", Toast.LENGTH_LONG).show();
signOut();
progressBar.setVisibility(View.GONE);
} else {
Toast.makeText(EditProfileActivity.this, "Failed to update email!", Toast.LENGTH_LONG).show();
progressBar.setVisibility(View.GONE);
}
}
});
} else if (newEmail.getText().toString().trim().equals("")) {
newEmail.setError("Enter email");
progressBar.setVisibility(View.GONE);
}
}
});
btnChangePassword.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
changeFullname.setVisibility(View.GONE);
changeUsername.setVisibility(View.GONE);
fullName.setVisibility(View.GONE);
userName.setVisibility(View.GONE);
oldEmail.setVisibility(View.GONE);
newEmail.setVisibility(View.GONE);
password.setVisibility(View.GONE);
newPassword.setVisibility(View.VISIBLE);
changeEmail.setVisibility(View.GONE);
changePassword.setVisibility(View.VISIBLE);
sendEmail.setVisibility(View.GONE);
remove.setVisibility(View.GONE);
}
});
changePassword.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressBar.setVisibility(View.VISIBLE);
if (user != null && !newPassword.getText().toString().trim().equals("")) {
if (newPassword.getText().toString().trim().length() < 6) {
newPassword.setError("Password too short, enter minimum 6 characters");
progressBar.setVisibility(View.GONE);
} else {
user.updatePassword(newPassword.getText().toString().trim())
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(EditProfileActivity.this, "Password is updated, sign in with new password!", Toast.LENGTH_SHORT).show();
signOut();
progressBar.setVisibility(View.GONE);
} else {
Toast.makeText(EditProfileActivity.this, "Failed to update password!", Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
}
});
}
} else if (newPassword.getText().toString().trim().equals("")) {
newPassword.setError("Enter password");
progressBar.setVisibility(View.GONE);
}
}
});
btnSendResetEmail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
changeFullname.setVisibility(View.GONE);
changeUsername.setVisibility(View.GONE);
fullName.setVisibility(View.GONE);
userName.setVisibility(View.GONE);
oldEmail.setVisibility(View.VISIBLE);
newEmail.setVisibility(View.GONE);
password.setVisibility(View.GONE);
newPassword.setVisibility(View.GONE);
changeEmail.setVisibility(View.GONE);
changePassword.setVisibility(View.GONE);
sendEmail.setVisibility(View.VISIBLE);
remove.setVisibility(View.GONE);
}
});
sendEmail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressBar.setVisibility(View.VISIBLE);
if (!oldEmail.getText().toString().trim().equals("")) {
auth.sendPasswordResetEmail(oldEmail.getText().toString().trim())
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(EditProfileActivity.this, "Reset password email is sent!", Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
} else {
Toast.makeText(EditProfileActivity.this, "Failed to send reset email!", Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
}
});
} else {
oldEmail.setError("Enter email");
progressBar.setVisibility(View.GONE);
}
}
});
btnRemoveUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressBar.setVisibility(View.VISIBLE);
if (user != null) {
user.delete()
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(EditProfileActivity.this, "Your profile is deleted:( Create a account now!", Toast.LENGTH_SHORT).show();
startActivity(new Intent(EditProfileActivity.this, RegisterActivity.class));
finish();
progressBar.setVisibility(View.GONE);
} else {
Toast.makeText(EditProfileActivity.this, "Failed to delete your account!", Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
}
});
}
}
});
signOut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
signOut();
}
});
}
//To display data from database
private void getUserInfo() {
mTutorDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists() && dataSnapshot.getChildrenCount()>0){
Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
if(map.get("FullName")!=null){
mFullName = map.get("FullName").toString();
fullName.setText(mFullName);
}
if(map.get("UserName")!=null){
mUserName = map.get("UserName").toString();
userName.setText("@"+mUserName);
}
if(map.get("profileImageUrl")!=null){
mProfileImageUrl = map.get("profileImageUrl").toString();
Glide.with(getApplication()).load(mProfileImageUrl).into(mProfileImage);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void uploadProfileImage() {
if(resultUri != null) {
StorageReference filePath = FirebaseStorage.getInstance().getReference().child("profileImageUrl").child(userID);
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(getApplication().getContentResolver(), resultUri);
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
;
// bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
// byte[] data = baos.toByteArray();
//
// UploadTask uploadTask = mountainsRef.putBytes(data);
// uploadTask.addOnFailureListener(new OnFailureListener() {
// @Override
// public void onFailure(@NonNull Exception exception) {
// // Handle unsuccessful uploads
// }
// }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
// @Override
// public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
// Uri downloadUrl = taskSnapshot.getDownloadUrl();
// }
// });
// StorageReference riversRef = storageRef.child("images/"+file.getLastPathSegment());
// uploadTask = riversRef.putFile(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos);
byte[] data = baos.toByteArray();
UploadTask uploadTask = filePath.putBytes(data);
Toast.makeText(EditProfileActivity.this, "Uploading..", Toast.LENGTH_SHORT).show();
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
finish();
return;
}
});
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Uri downloadUrl = taskSnapshot.getDownloadUrl();
Map newImage = new HashMap();
newImage.put("profileImageUrl", downloadUrl.toString());
mTutorDatabase.updateChildren(newImage);
return;
}
});
}else{
finish();
}
// if(resultUri != null){
// StorageReference filePath = FirebaseStorage.getInstance().getReference().child("profile_images").child(userID);
// Bitmap bitmap = null;
//
// try {
// bitmap = MediaStore.Images.Media.getBitmap(getApplication().getContentResolver(), resultUri);
// } catch (IOException e) {
// e.printStackTrace();
// }
// //compress image
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
// bitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos);
// byte [] data = baos.toByteArray();
// UploadTask uploadTask = filePath.putBytes(data);
//
// uploadTask.addOnFailureListener(new OnFailureListener() {
// @Override
// public void onFailure(@NonNull Exception e) {
// finish();
// return;
// }
// });
//
// uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
// @Override
// public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// @SuppressWarnings("VisibleForTests") Uri downloadUri = taskSnapshot.getDownloadUrl();
//
// Map newImage = new HashMap();
// newImage.put("profileImageUrl", downloadUri.toString());
// mTutorDatabase.updateChildren(newImage);
//
// finish();
// return;
// }
// });
// }else{
// finish();
//
// }
}
private void saveUserInformationUsername() {
mUserName = userName.getText().toString();
Map userInfo = new HashMap();
userInfo.put("UserName", mUserName);
mTutorDatabase.updateChildren(userInfo);
Toast.makeText(this, "Changed succesful", Toast.LENGTH_SHORT).show();
return;
}
private void saveUserInformationFullName() {
mFullName = fullName.getText().toString();
Map userInfo = new HashMap();
userInfo.put("FullName", mFullName);
// userInfo.put("UserName", mUserName);
mTutorDatabase.updateChildren(userInfo);
Toast.makeText(this, "Changed succesful", Toast.LENGTH_SHORT).show();
return;
}
//sign out method
public void signOut() {
auth.signOut();
}
@Override
protected void onResume() {
super.onResume();
progressBar.setVisibility(View.GONE);
}
@Override
public void onStart() {
super.onStart();
auth.addAuthStateListener(authListener);
}
@Override
public void onStop() {
super.onStop();
if (authListener != null) {
auth.removeAuthStateListener(authListener);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && resultCode == Activity.RESULT_OK){
final Uri imageUri = data.getData();
resultUri = imageUri;
mProfileImage.setImageURI(resultUri);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<!--This layout renders the navigation drawer header part with a profile image, name and website. -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/view_container"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:gravity="bottom"
android:orientation="vertical"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/gradient_background">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="40dp"
android:paddingLeft="20dp"
android:paddingRight="20dp">
<ImageView
android:id="@+id/imageProfile"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/ic_launcher_round" />
<Button
android:layout_marginLeft="20dp"
android:id="@+id/editProfile"
android:layout_width="100dp"
android:textSize="@dimen/_10sdp"
android:layout_height="wrap_content"
android:background="@drawable/my_button_white_border"
android:text="@string/edit_profile" />
</LinearLayout>
<TextView
android:paddingLeft="20dp"
android:id="@+id/FullName"
android:text="@string/your_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
<TextView
android:paddingLeft="20dp"
android:id="@+id/UserName"
android:text="@string/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment