package com.cygnusa.hyperm; import android.annotation.SuppressLint; import android.app.Activity; import android.app.DatePickerDialog; import android.content.ContentValues; import android.content.Intent; import android.content.res.ColorStateList; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.view.animation.TranslateAnimation; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.CheckBox; import android.widget.DatePicker; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import com.bumptech.glide.Glide; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.textfield.TextInputLayout; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import com.cygnusa.hyperm.fancyshowcase.FancyShowCaseView; import com.cygnusa.hyperm.fancyshowcase.FocusShape; import com.cygnusa.hyperm.pickimage.bean.PickResult; import com.cygnusa.hyperm.pickimage.bundle.PickSetup; import com.cygnusa.hyperm.pickimage.dialog.PickImageDialog; import com.cygnusa.hyperm.pickimage.listeners.IPickCancel; import com.cygnusa.hyperm.pickimage.listeners.IPickResult; import com.cygnusa.hyperm.util.ApiService; import com.cygnusa.hyperm.util.GlobalData; import com.cygnusa.hyperm.util.MainApplication; import com.cygnusa.hyperm.util.TransparentProgressDialog; import com.cygnusa.hyperm.util.UtilService; import com.cygnusa.hyperm.widget.SubtitleCollapsingToolbarLayout; import com.cygnusa.hyperm.wrappers.ErrorResponse; import com.cygnusa.hyperm.wrappers.UserResponse; import java.io.File; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.RequestBody; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; public class MyProfileActivity extends AppCompatActivity implements IPickResult { public Calendar calendar; public Calendar calendarret; ApiService restService; TransparentProgressDialog progressDialog; AppBarLayout appBarLayout; Toolbar toolbar; ImageView userImage; FloatingActionButton editButton; FloatingActionButton cameraButton; LinearLayout bottomLayout; EditText firstName, lastName, dob, email, mobile, doj, dealer, zone, state, city, region, designation, weddingDate; Button submitButton; UserResponse MY_PROFILE = new UserResponse(); SubtitleCollapsingToolbarLayout collapsingToolbar; String IMAGE_PATH = ""; ImageButton toolEditIcon, helpIcon; CheckBox checkBoxMarried; AlertDialog.Builder alertDialogBuilder; AlertDialog alertDialog; String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+"; private ImageView dobCalendar,weddingCalendar; private int year; private int month; private int day; boolean isDOB = false; private LinearLayout linearWeddingDate; private boolean isEditable = false; public TextInputLayout editInputDob,editInputEmail,editInputWedding,getEditInputMobile; public static void hideSoftKeyboard(Activity activity) { try { InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService( Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow( activity.getCurrentFocus().getWindowToken(), 0); } catch (Exception e) { e.printStackTrace(); } } private static boolean isValidEmail(String email) { return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches(); } @SuppressLint("WrongViewCast") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_profile); setupWindowAnimations(); setupUI(findViewById(R.id.main_content)); calendar = Calendar.getInstance(); year = calendar.get(Calendar.YEAR); month = calendar.get(Calendar.MONTH); day = calendar.get(Calendar.DAY_OF_MONTH); restService = ((MainApplication) getApplication()).getClient(); appBarLayout = findViewById(R.id.appBarLayout); userImage = findViewById(R.id.userImage); toolbar = findViewById(R.id.toolbar); bottomLayout = findViewById(R.id.bottomLayout); toolEditIcon = findViewById(R.id.toolEditIcon); helpIcon = findViewById(R.id.helpIcon); helpIcon.setVisibility(View.VISIBLE); email = findViewById(R.id.email); editInputEmail = findViewById(R.id.txtemail); editInputDob = findViewById(R.id.txtInputDob); editInputWedding = findViewById(R.id.txtInputWedding); editInputWedding = findViewById(R.id.edit_mobile); mobile = findViewById(R.id.mobile); doj = findViewById(R.id.doj); dob = findViewById(R.id.dob); dealer = findViewById(R.id.dealer); zone = findViewById(R.id.zone); region = findViewById(R.id.region); state = findViewById(R.id.state); city = findViewById(R.id.city); designation = findViewById(R.id.designation); checkBoxMarried = findViewById(R.id.checkMarried); weddingDate = findViewById(R.id.weddingDate); dobCalendar = findViewById(R.id.dob_date); weddingCalendar = findViewById(R.id.weddding_date); linearWeddingDate = findViewById(R.id.linear_wedding_date); submitButton = findViewById(R.id.submitButton); email.setEnabled(false); weddingDate.setEnabled(false); dob.setEnabled(false); doj.setEnabled(false); dealer.setEnabled(false); designation.setEnabled(false); mobile.setEnabled(false); region.setEnabled(false); state.setEnabled(false); zone.setEnabled(false); city.setEnabled(false); weddingCalendar.setVisibility(View.VISIBLE); checkBoxMarried.setChecked(false); setSupportActionBar(toolbar); toolbar.setTitle(""); getSupportActionBar().setTitle(""); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); collapsingToolbar = findViewById(R.id.collapsing_toolbar); appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (Math.abs(verticalOffset) - appBarLayout.getTotalScrollRange() == 0) { toolbar.setBackgroundColor(getResources().getColor(R.color.bg_color)); toolEditIcon.setVisibility(View.VISIBLE); helpIcon.setVisibility(View.GONE); } else { toolbar.setBackgroundColor(Color.TRANSPARENT); toolEditIcon.setVisibility(View.GONE); helpIcon.setVisibility(View.VISIBLE); } } }); toolEditIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { editButton.performClick(); } }); dobCalendar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { isDOB = true; Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 18); Date date = new Date(); if (dob.getText().toString().trim().isEmpty() || dob.getText().toString().trim().equalsIgnoreCase("0000-00-00") || dob.getText().toString().trim().equalsIgnoreCase("00-00-0000") || dob.getText().toString().trim().equalsIgnoreCase("00/00/0000") || dob.getText().toString().trim().equalsIgnoreCase("0000/00/00")) { date = c.getTime(); } else { if (dob.getText().toString().trim().contains("-")) { try { date = new SimpleDateFormat("yyyy-MM-dd").parse(dob.getText().toString().trim()); } catch (ParseException e) { e.printStackTrace(); } } else { try { date = new SimpleDateFormat("dd-MMM-yyyy").parse(dob.getText().toString().trim()); } catch (ParseException e) { e.printStackTrace(); } } } c.setTime(date); DatePickerDialog dialog = new DatePickerDialog(MyProfileActivity.this, tolistener, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); try { c = Calendar.getInstance(); c.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 18); DatePicker datePicker = dialog.getDatePicker(); datePicker.setMaxDate(c.getTime().getTime()); } catch (Exception e) { e.printStackTrace(); } dialog.show(); } }); weddingCalendar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { isDOB = false; Calendar c = Calendar.getInstance(); Date date = new Date(); if (weddingDate.getText().toString().trim().isEmpty() || weddingDate.getText().toString().trim().equalsIgnoreCase("0000-00-00") || weddingDate.getText().toString().trim().equalsIgnoreCase("00-00-0000") || weddingDate.getText().toString().trim().equalsIgnoreCase("00/00/0000") || weddingDate.getText().toString().trim().equalsIgnoreCase("0000/00/00")) { date = c.getTime(); } else { if (weddingDate.getText().toString().trim().contains("-")) { try { date = new SimpleDateFormat("yyyy-MM-dd").parse(weddingDate.getText().toString().trim()); } catch (ParseException e) { e.printStackTrace(); } } else { try { date = new SimpleDateFormat("dd-MMM-yyyy").parse(weddingDate.getText().toString().trim()); } catch (ParseException e) { e.printStackTrace(); } } } c.setTime(date); DatePickerDialog dialog = new DatePickerDialog(MyProfileActivity.this, tolistener, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); try { DatePicker datePicker = dialog.getDatePicker(); datePicker.setMaxDate(c.getTime().getTime()); } catch (Exception e) { e.printStackTrace(); } dialog.show(); } }); editButton = findViewById(R.id.editButton); cameraButton = findViewById(R.id.cameraButton); cameraButton.hide(); bottomLayout.setVisibility(View.INVISIBLE); linearWeddingDate.setVisibility(View.INVISIBLE); dobCalendar.setVisibility(View.INVISIBLE); checkBoxMarried.setEnabled(false); weddingCalendar.setVisibility(View.INVISIBLE); getMyProfile(); checkBoxMarried.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean checked = ((CheckBox) v).isChecked(); if (checked) { linearWeddingDate.setVisibility(View.VISIBLE); if (!isEditable) { weddingCalendar.setVisibility(View.INVISIBLE); } else { weddingCalendar.setVisibility(View.VISIBLE); } } else { linearWeddingDate.setVisibility(View.INVISIBLE); if (!isEditable) { weddingCalendar.setVisibility(View.INVISIBLE); } else { weddingCalendar.setVisibility(View.VISIBLE); } } } }); editButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (cameraButton.getVisibility() == View.GONE) { IMAGE_PATH = ""; setUpperHintColor(getResources().getColor(R.color.bg_color_dark),editInputDob); setUpperHintColor(getResources().getColor(R.color.bg_color_dark),editInputEmail); setUpperHintColor(getResources().getColor(R.color.bg_color_dark),editInputWedding); mobile.setTextColor(getResources().getColor(R.color.material_grey300)); designation.setTextColor(getResources().getColor(R.color.material_grey300)); dealer.setTextColor(getResources().getColor(R.color.material_grey300)); doj.setTextColor(getResources().getColor(R.color.material_grey300)); zone.setTextColor(getResources().getColor(R.color.material_grey300)); region.setTextColor(getResources().getColor(R.color.material_grey300)); state.setTextColor(getResources().getColor(R.color.material_grey300)); city.setTextColor(getResources().getColor(R.color.material_grey300)); weddingDate.setHintTextColor(getResources().getColor(R.color.material_grey700)); cameraButton.show(); cameraButton.startAnimation(AnimationUtils.loadAnimation(MyProfileActivity.this, R.anim.zoomin)); slideToTop(bottomLayout); email.setEnabled(true); checkBoxMarried.setEnabled(true); dobCalendar.setVisibility(View.VISIBLE); isEditable = true; } else { setUpperHintColor(getResources().getColor(R.color.btn_bg_color),editInputDob); setUpperHintColor(getResources().getColor(R.color.btn_bg_color),editInputEmail); setUpperHintColor(getResources().getColor(R.color.btn_bg_color),editInputWedding); mobile.setTextColor(getResources().getColor(R.color.btn_bg_color)); designation.setTextColor(getResources().getColor(R.color.btn_bg_color)); doj.setTextColor(getResources().getColor(R.color.btn_bg_color)); zone.setTextColor(getResources().getColor(R.color.btn_bg_color)); region.setTextColor(getResources().getColor(R.color.btn_bg_color)); state.setTextColor(getResources().getColor(R.color.btn_bg_color)); city.setTextColor(getResources().getColor(R.color.btn_bg_color)); dealer.setTextColor(getResources().getColor(R.color.btn_bg_color)); cameraButton.startAnimation(AnimationUtils.loadAnimation(MyProfileActivity.this, R.anim.zoomout)); cameraButton.hide(); slideToBottom(bottomLayout); email.setEnabled(false); checkBoxMarried.setEnabled(false); dobCalendar.setVisibility(View.INVISIBLE); weddingCalendar.setVisibility(View.INVISIBLE); IMAGE_PATH = ""; isEditable = false; setMyProfile(); } } }); cameraButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { PickImageDialog.build(new PickSetup().setButtonOrientation(LinearLayout.HORIZONTAL)).setOnPickCancel(new IPickCancel() { @Override public void onCancelClick() { } }).show(MyProfileActivity.this); } }); submitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateProfile(); } }); helpIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showHelpScreen(); } }); } private static String displayMonth(String date) throws ParseException{ Date d = new SimpleDateFormat("dd-MM-yyyy").parse(date); Calendar cal = Calendar.getInstance(); cal.setTime(d); String monthName = new SimpleDateFormat("dd-MMM-yyyy").format(cal.getTime()); return monthName; } private void setUpperHintColor(int color, TextInputLayout txtInputLayout) { try { Field field = txtInputLayout.getClass().getDeclaredField("mFocusedTextColor"); field.setAccessible(true); int[][] states = new int[][]{ new int[]{} }; int[] colors = new int[]{ color }; ColorStateList myList = new ColorStateList(states, colors); field.set(txtInputLayout, myList); Method method = txtInputLayout.getClass().getDeclaredMethod("updateLabelState", boolean.class); method.setAccessible(true); method.invoke(txtInputLayout, true); } catch (Exception e) { e.printStackTrace(); } } public DatePickerDialog.OnDateSetListener tolistener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int y, int monthOfYear, int dayOfMonth) { year = y; month = monthOfYear; day = dayOfMonth; String datevalue = String.valueOf(day); int mval = (month + 1); String monthvalue = String.valueOf(mval); String date = "0"; String monthname = "0"; if (datevalue.length() == 1) { date = "0" + datevalue; } else { date = datevalue; } if (monthvalue.length() == 1) { monthname = "0" + monthvalue; } else { monthname = monthvalue; } //dateValue = String.valueOf(year) + "-" + (month + 1) + "-" + day + " "; String dateValue = String.valueOf(year) + "-"+monthname+"-"+date; dob.setText(dateFormate(dateValue)); if (isDOB) { dob.setText(dateFormate(dateValue)); } else { weddingDate.setText(dateFormate(dateValue)); } } }; public String dateFormate(String dte) { String date = ""; if (dte.equalsIgnoreCase("0000-00-00")) { date = "00/00/0000"; return date; } else { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date newDate = null; try { newDate = format.parse(dte); } catch (ParseException e) { e.printStackTrace(); } format = new SimpleDateFormat("dd-MMM-yyyy"); date = format.format(newDate); } return date; } public String finalDateFormat(String date) { SimpleDateFormat format1 = new SimpleDateFormat("dd-MMM-yyyy"); Date newDate = null; try { newDate = format1.parse(date); } catch (ParseException e) { e.printStackTrace(); } format1 = new SimpleDateFormat("yyyy-MM-dd"); date = format1.format(newDate); return date; } private void setupWindowAnimations() { this.overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); overridePendingTransition(R.anim.animation_f_enter, R.anim.animation_f_leave); } return super.onOptionsItemSelected(item); } @Override public void onBackPressed() { finish(); overridePendingTransition(R.anim.animation_f_enter, R.anim.animation_f_leave); } public void slideToBottom(View view) { TranslateAnimation animate = new TranslateAnimation(0, 0, 0, view.getHeight()); animate.setDuration(500); animate.setFillAfter(true); view.startAnimation(animate); view.setVisibility(View.GONE); } public void slideToTop(View view) { TranslateAnimation animate = new TranslateAnimation(0, 0, view.getHeight(), 0); animate.setDuration(500); animate.setFillAfter(true); view.startAnimation(animate); view.setVisibility(View.VISIBLE); } private void getMyProfile() { if (new UtilService().isNetworkAvailable(MyProfileActivity.this)) { progressDialog = new TransparentProgressDialog(MyProfileActivity.this); progressDialog.show(); try { restService.getProfile().enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } if (response.body() != null && response.body().getStatus() == 200) { MY_PROFILE = response.body(); if (MY_PROFILE.getData().getIs_married().equalsIgnoreCase("1")) { checkBoxMarried.setChecked(true); linearWeddingDate.setVisibility(View.VISIBLE); } setMyProfile(); } else if (response.body() != null && response.body().getStatus() == 401) { GlobalData.canLogout = true; finish(); } else if (response.body() != null) { GlobalData.showToast(getBaseContext(), response.body().getMessage(), Toast.LENGTH_SHORT).show(); } else if (response.errorBody() != null) { Gson gson = new Gson(); ErrorResponse message = gson.fromJson(response.errorBody().charStream(), ErrorResponse.class); GlobalData.showToast(getBaseContext(), message.getMessage(), Toast.LENGTH_SHORT).show(); if (message.getStatus() == 401) { GlobalData.canLogout = true; finish(); } } new Handler().postDelayed(new Runnable() { @Override public void run() { if (getPreferences(MODE_PRIVATE).getBoolean("MyProfileActivity", true)) { showHelpScreen(); getPreferences(MODE_PRIVATE).edit().putBoolean("MyProfileActivity", false).apply(); } } }, 1000); } @Override public void onFailure(Call call, Throwable t) { if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } GlobalData.showToast(getBaseContext(), "Connection Failure, try again!", Toast.LENGTH_SHORT).show(); } }); } catch (Exception e) { if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } } } else { GlobalData.showToast(getBaseContext(), "Please check your internet connection", Toast.LENGTH_SHORT).show(); } } protected void onResume() { super.onResume(); if (GlobalData.canLogout) { finish(); } } private void setMyProfile() { email.setText(MY_PROFILE.getData().getEmailid()); mobile.setText(MY_PROFILE.getData().getMobileno()); dealer.setText(MY_PROFILE.getData().getDealer().getDealer_name()); designation.setText(MY_PROFILE.getData().getRolename()); doj.setText(dateFormate(MY_PROFILE.getData().getDoj())); zone.setText(MY_PROFILE.getData().getZone()); region.setText(MY_PROFILE.getData().getZone()); state.setText(MY_PROFILE.getData().getState()); city.setText(MY_PROFILE.getData().getCity()); dob.setText(dateFormate(MY_PROFILE.getData().getDob())); weddingDate.setText(dateFormate(MY_PROFILE.getData().getMarriage_date())); collapsingToolbar.setTitle(MY_PROFILE.getData().getFname() + " " + MY_PROFILE.getData().getLname()); collapsingToolbar.setSubtitle(MY_PROFILE.getData().getRolename()); Glide.with(this).load(MY_PROFILE.getData().getProfile_photo()) .thumbnail(Glide.with(this).load(R.drawable.gif_loader)) .into(userImage); } @Override public void onPickResult(PickResult pickResult) { if (pickResult.getError() == null) { IMAGE_PATH = pickResult.getPath(); if (IMAGE_PATH != null && !IMAGE_PATH.trim().isEmpty()) { Intent intent = new Intent(MyProfileActivity.this, CropActivity.class); CropActivity.mSourceUri = pickResult.getUri(); startActivityForResult(intent, 2276); } else { userImage.setImageBitmap(pickResult.getBitmap()); } } else { GlobalData.showToast(this, pickResult.getError().getMessage(), Toast.LENGTH_LONG).show(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && requestCode == 2276) { IMAGE_PATH = data.getStringExtra("IMAGE_PATH"); Glide.with(this).load(new File(IMAGE_PATH)) .thumbnail(Glide.with(this).load(R.drawable.gif_loader)) .into(userImage); } else if (resultCode == RESULT_CANCELED && requestCode == 2276) { IMAGE_PATH = ""; } } private void showHelpScreen() { try { new FancyShowCaseView.Builder(this) .focusOn(editButton) .title("Tap here to edit profile details") .titleSize(22, 1) .closeOnTouch(true) .focusShape(FocusShape.CIRCLE) .backgroundColor(Color.parseColor("#99000000")) .build() .show(); } catch (Exception e) { e.printStackTrace(); } } public void updateProfile() { if (dob.getText().toString().trim().isEmpty() || dob.getText().toString().equalsIgnoreCase("00/00/0000")) { GlobalData.showToast(this, "Enter Date of Birth", Toast.LENGTH_SHORT).show(); return; } if (email.getText().toString().trim().isEmpty()) { GlobalData.showToast(this, "Enter email", Toast.LENGTH_SHORT).show(); return; } if (!isValidEmail(email.getText().toString())) { GlobalData.showToast(this, "Enter valid email address", Toast.LENGTH_SHORT).show(); return; } if (mobile.getText().toString().trim().isEmpty()) { GlobalData.showToast(this, "Enter mobile number", Toast.LENGTH_SHORT).show(); return; } if (checkBoxMarried.isChecked()) { if (weddingDate.getText().toString().trim().isEmpty() || weddingDate.getText().toString().equalsIgnoreCase("00/00/0000")) { GlobalData.showToast(this, "Enter wedding date", Toast.LENGTH_SHORT).show(); return; } } if (new UtilService().isNetworkAvailable(MyProfileActivity.this)) { if (IMAGE_PATH.trim().isEmpty()) { try { HashMap map = new HashMap<>(); map.put("dob", finalDateFormat(dob.getText().toString().trim())); map.put("email", email.getText().toString().trim()); map.put("is_married", checkBoxMarried.isChecked() ? "1" : "0"); if (checkBoxMarried.isChecked()) { map.put("marriage_date", finalDateFormat(weddingDate.getText().toString().trim())); } else { map.put("marriage_date", "0000-00-00"); } progressDialog = new TransparentProgressDialog(MyProfileActivity.this); progressDialog.show(); restService.postProfile(map).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } if (response.body() != null && response.body().getStatus() == 200) { MY_PROFILE = response.body(); GlobalData.showToast(MyProfileActivity.this, "Profile updated successfully", Toast.LENGTH_SHORT).show(); setMyProfile(); GlobalData.user.setData(response.body().getData()); saveUserData(); new Handler(HomeActivity.profileUpdateCallback).sendEmptyMessage(0); } else if (response.body() != null && response.body().getStatus() == 401) { GlobalData.canLogout = true; finish(); } else if (response.body() != null) { GlobalData.showToast(getBaseContext(), response.body().getMessage(), Toast.LENGTH_SHORT).show(); } else if (response.errorBody() != null) { Gson gson = new Gson(); ErrorResponse message = gson.fromJson(response.errorBody().charStream(), ErrorResponse.class); GlobalData.showToast(getBaseContext(), message.getMessage(), Toast.LENGTH_SHORT).show(); if (message.getStatus() == 401) { GlobalData.canLogout = true; finish(); } } } @Override public void onFailure(Call call, Throwable t) { if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } GlobalData.showToast(MyProfileActivity.this, "Connection Failure, try again!", Toast.LENGTH_SHORT).show(); } }); } catch (Exception e) { e.printStackTrace(); } } else { File file = new File(IMAGE_PATH); RequestBody reqFile = RequestBody.create(MediaType.parse("image/*"), file); MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), reqFile); RequestBody emailtxt = RequestBody.create(MediaType.parse("text/plain"), email.getText().toString().trim()); RequestBody dobtxt = RequestBody.create(MediaType.parse("text/plain"), finalDateFormat(dob.getText().toString().trim())); RequestBody isMarried = RequestBody.create(MediaType.parse("text/plain"), checkBoxMarried.isChecked() ? "1" : "0"); RequestBody isMarriedDate = RequestBody.create(MediaType.parse("text/plain"), "0000-00-00"); if (checkBoxMarried.isChecked()) { isMarriedDate = RequestBody.create(MediaType.parse("text/plain"), finalDateFormat(weddingDate.getText().toString().trim())); } progressDialog = new TransparentProgressDialog(MyProfileActivity.this); progressDialog.show(); restService.postProfileWithImage(body, emailtxt, dobtxt, isMarried, isMarriedDate).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } if (response.body() != null && response.body().getStatus() == 200) { MY_PROFILE = response.body(); GlobalData.showToast(MyProfileActivity.this, "Profile updated successfully", Toast.LENGTH_SHORT).show(); setMyProfile(); GlobalData.user.setData(response.body().getData()); saveUserData(); new Handler(HomeActivity.profileUpdateCallback).sendEmptyMessage(0); } else if (response.body() != null && response.body().getStatus() == 401) { GlobalData.canLogout = true; finish(); } else if (response.body() != null) { GlobalData.showToast(getBaseContext(), response.body().getMessage(), Toast.LENGTH_SHORT).show(); } else if (response.errorBody() != null) { Gson gson = new Gson(); ErrorResponse message = gson.fromJson(response.errorBody().charStream(), ErrorResponse.class); GlobalData.showToast(getBaseContext(), message.getMessage(), Toast.LENGTH_SHORT).show(); if (message.getStatus() == 401) { GlobalData.canLogout = true; finish(); } } } @Override public void onFailure(Call call, Throwable t) { if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } t.printStackTrace(); GlobalData.showToast(MyProfileActivity.this, "Connection Failure, try again!", Toast.LENGTH_SHORT).show(); } }); } } else { GlobalData.showToast(MyProfileActivity.this, "Please check your internet connection", Toast.LENGTH_SHORT).show(); } } private void showInstructions() { View view = LayoutInflater.from(MyProfileActivity.this).inflate( R.layout.profile_success, null); TextView textHead = (TextView) view.findViewById(R.id.textHead); TextView text1 = (TextView) view.findViewById(R.id.text1); TextView text2 = (TextView) view.findViewById(R.id.text2); TextView text3 = (TextView) view.findViewById(R.id.text3); view.findViewById(R.id.btn_ok).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { alertDialog.dismiss(); startActivity(new Intent(MyProfileActivity.this, HomeActivity.class)); } }); alertDialogBuilder = new AlertDialog.Builder(MyProfileActivity.this); alertDialogBuilder.setCancelable(false); alertDialogBuilder.setView(view); alertDialog = alertDialogBuilder.create(); alertDialog.show(); } private void saveUserData() { editButton.performClick(); GlobalData.sdb.delete("session", null, null); Gson gson = new Gson(); JsonElement jsonElement = gson.toJsonTree( GlobalData.user, new TypeToken() { }.getType()); ContentValues values = new ContentValues(); values.put("user", jsonElement.toString()); GlobalData.sdb.insert("session", null, values); } public void setupUI(View view) { try { if (!(view instanceof EditText)) { view.setOnTouchListener(new View.OnTouchListener() { @SuppressLint("ClickableViewAccessibility") public boolean onTouch(View v, MotionEvent event) { hideSoftKeyboard(MyProfileActivity.this); return false; } }); } if (view instanceof ViewGroup) { for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { View innerView = ((ViewGroup) view).getChildAt(i); setupUI(innerView); } } } catch (Exception e) { e.printStackTrace(); } } }