From 07713aff1cbfa2df320df1409b98e40fd8c9bc07 Mon Sep 17 00:00:00 2001 From: cimenmus Date: Thu, 26 Oct 2017 22:29:02 +0300 Subject: [PATCH] address on register --- .../android/activity/RegisterActivity.java | 171 +++++++++++++----- .../pizzalink/android/api/ApiEndPoints.java | 3 +- .../pizzalink/android/api/ApiInterface.java | 13 +- .../pizzalink/android/helper/ViewHelper.java | 10 +- .../model/{ZoneModel.java => CityModel.java} | 8 +- .../pizzalink/android/model/ZoneeModel.java | 89 +++++++++ .../android/view/PizzalinkDropdownView.java | 59 ++++++ app/src/main/res/layout/activity_register.xml | 29 ++- .../res/layout/layout_pizzalink_dropdown.xml | 2 +- .../layout/layout_pizzalink_drowdown_view.xml | 43 +++++ app/src/main/res/values/attrs.xml | 4 + app/src/main/res/values/strings.xml | 1 + 12 files changed, 353 insertions(+), 79 deletions(-) rename app/src/main/java/ch/pizzalink/android/model/{ZoneModel.java => CityModel.java} (89%) create mode 100644 app/src/main/java/ch/pizzalink/android/model/ZoneeModel.java create mode 100644 app/src/main/java/ch/pizzalink/android/view/PizzalinkDropdownView.java create mode 100644 app/src/main/res/layout/layout_pizzalink_drowdown_view.xml diff --git a/app/src/main/java/ch/pizzalink/android/activity/RegisterActivity.java b/app/src/main/java/ch/pizzalink/android/activity/RegisterActivity.java index 477a0a7..f9fe85d 100644 --- a/app/src/main/java/ch/pizzalink/android/activity/RegisterActivity.java +++ b/app/src/main/java/ch/pizzalink/android/activity/RegisterActivity.java @@ -2,10 +2,8 @@ package ch.pizzalink.android.activity; import android.content.Intent; import android.os.Bundle; -import android.util.Log; import android.view.View; import android.widget.Button; -import android.widget.RelativeLayout; import com.afollestad.materialdialogs.MaterialDialog; @@ -27,12 +25,12 @@ import ch.pizzalink.android.api.ResponseObject; import ch.pizzalink.android.helper.DialogHelper; import ch.pizzalink.android.helper.SharedPrefsHelper; import ch.pizzalink.android.helper.ViewHelper; -import ch.pizzalink.android.model.ZoneModel; +import ch.pizzalink.android.model.CityModel; import ch.pizzalink.android.model.CountryModel; import ch.pizzalink.android.model.UserModel; -import ch.pizzalink.android.view.PizzalinkDropdown; +import ch.pizzalink.android.model.ZoneeModel; +import ch.pizzalink.android.view.PizzalinkDropdownView; import ch.pizzalink.android.view.PizzalinkEditText; -import ch.pizzalink.android.view.PizzalinkToolbar; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -43,22 +41,27 @@ public class RegisterActivity extends BaseActivity { @BindViews({ R.id.firstnamePizzalinkEditText, R.id.lasstnamePizzalinkEditText, R.id.telephonePizzalinkEditText, R.id.emailPizzalinkEditText, R.id.passwordPizzalinkEditText, R.id.passwordAgainPizzalinkEditText, - R.id.address1PizzalinkEditText, R.id.cityPizzalinkEditText}) + R.id.address1PizzalinkEditText}) List pizzalinkEditTextList; - @BindView(R.id.zonePizzalinkDropdown) PizzalinkDropdown zonePizzalinkDropdown; - @BindView(R.id.postcodePizzalinkDrowpdown) PizzalinkDropdown postcodePizzalinkDrowpdown; - @BindView(R.id.countryPizzalinkDropdown) PizzalinkDropdown countryPizzalinkDropdown; + @BindView(R.id.cityPizzalinkDropdown) PizzalinkDropdownView cityPizzalinkDropdown; + @BindView(R.id.postcodePizzalinkDrowpdown) PizzalinkDropdownView postcodePizzalinkDrowpdown; + @BindView(R.id.countryPizzalinkDropdown) PizzalinkDropdownView countryPizzalinkDropdown; + @BindView(R.id.zoneePizzalinkDropdown) PizzalinkDropdownView zoneePizzalinkDropdown; @BindString(R.string.alert_fill_all_fields) String fillAllFieldsText; @BindString(R.string.alert_invalid_email) String validEmailText; @BindString(R.string.alert_passwords_not_matched) String passwordsNotMatchedText; @BindString(R.string.alert_invalid_post_code) String invalidPostCodeText; + @BindString(R.string.alert_select_country_first) String selectCountryFirstText; - private ArrayList zoneList = new ArrayList<>(); + + private ArrayList cityList = new ArrayList<>(); private ArrayList countryList = new ArrayList<>(); - private ZoneModel selectedZoneModel; + private ArrayList zoneeList = new ArrayList<>(); + private CityModel selectedCityModel; private CountryModel selectedCountryModel; + private ZoneeModel selectedZoneeModel; private int activeRequestCount = 0; private ReentrantLock lock = new ReentrantLock(); @@ -68,16 +71,36 @@ public class RegisterActivity extends BaseActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); ButterKnife.bind(this); - getZoneList(); + getCityList(); getCountryList(); - //setTestFields(); + setTestFields(); } - @OnClick(R.id.registerButton) - protected void onClick(){ - ViewHelper.hideKeyboard(); - if(checkFields()) - registerUser(); + @OnClick({R.id.cityPizzalinkDropdown, R.id.postcodePizzalinkDrowpdown, + R.id.countryPizzalinkDropdown, R.id.zoneePizzalinkDropdown, + R.id.registerButton}) + protected void onClick(View view){ + switch (view.getId()){ + case R.id.cityPizzalinkDropdown: + showCityDialog(); + break; + case R.id.countryPizzalinkDropdown: + showCountryDialog(); + break; + case R.id.zoneePizzalinkDropdown: + if(selectedCountryModel != null){ + getZoneeList(); + } + else { + DialogHelper.showAlertDialog(BaseActivity.currentActivity, selectCountryFirstText); + } + break; + case R.id.registerButton: + ViewHelper.hideKeyboard(); + if(checkFields()) + registerUser(); + break; + } } private boolean checkFields(){ @@ -107,9 +130,18 @@ public class RegisterActivity extends BaseActivity { return false; } - if(zonePizzalinkDropdown.isEmpty() || + if(cityPizzalinkDropdown.isEmpty() || postcodePizzalinkDrowpdown.isEmpty() || - countryPizzalinkDropdown.isEmpty()){ + countryPizzalinkDropdown.isEmpty() || + zoneePizzalinkDropdown.isEmpty()){ + DialogHelper.showAlertDialog(this, fillAllFieldsText); + return false; + } + + + if(selectedCityModel == null || + selectedCountryModel == null || + selectedZoneeModel == null){ DialogHelper.showAlertDialog(this, fillAllFieldsText); return false; } @@ -117,15 +149,15 @@ public class RegisterActivity extends BaseActivity { return true; } - private void getZoneList(){ + private void getCityList(){ if(activeRequestCount == 0) DialogHelper.showLoadingDialog(); - Call> call = ApiService.apiInterface.getZoneList(); - call.enqueue(new Callback>() { + Call> call = ApiService.apiInterface.getCityList(); + call.enqueue(new Callback>() { @Override - public void onResponse(Call> call, Response> response) { + public void onResponse(Call> call, Response> response) { decreaseActiveRequestCount(); @@ -135,7 +167,7 @@ public class RegisterActivity extends BaseActivity { if(response.isSuccessful() && response.body().getData() != null && response.body().isSuccess()){ - fillAndNotifyZoneList(response.body().getData()); + fillAndNotifyCityList(response.body().getData()); } else if(activeRequestCount == 0){ ApiErrorUtils.parseError(response); @@ -143,7 +175,7 @@ public class RegisterActivity extends BaseActivity { } @Override - public void onFailure(Call> call, Throwable t) { + public void onFailure(Call> call, Throwable t) { decreaseActiveRequestCount(); if(activeRequestCount == 0){ DialogHelper.hideLoadingDialog(); @@ -194,10 +226,35 @@ public class RegisterActivity extends BaseActivity { }); } - private void fillAndNotifyZoneList(ArrayList zones){ - ZoneModel.checkNull(zones); - zoneList.clear(); - zoneList.addAll(zones); + private void getZoneeList(){ + DialogHelper.showLoadingDialog(); + Call> call = ApiService.apiInterface.getZoneeList(selectedCountryModel.getId()); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + DialogHelper.hideLoadingDialog(); + if(response.isSuccessful() && + response.body().getData() != null && + response.body().isSuccess()){ + fillAndNotifyZoneeList(response.body().getData()); + } + else { + ApiErrorUtils.parseError(response); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + DialogHelper.hideLoadingDialog(); + DialogHelper.showFailedDialog(); + } + }); + } + + private void fillAndNotifyCityList(ArrayList cities){ + CityModel.checkNull(cities); + cityList.clear(); + cityList.addAll(cities); } private void fillAndNotifyCountryList(ArrayList countries){ @@ -206,6 +263,13 @@ public class RegisterActivity extends BaseActivity { countryList.addAll(countries); } + private void fillAndNotifyZoneeList(ArrayList zonees){ + ZoneeModel.checkNull(zonees); + zoneeList.clear(); + zoneeList.addAll(zonees); + showZoneeDialog(); + } + private void registerUser(){ DialogHelper.showLoadingDialog(); Call> call = ApiService.apiInterface.register(getRegisterParams()); @@ -245,34 +309,26 @@ public class RegisterActivity extends BaseActivity { params.put("password1", pizzalinkEditTextList.get(5).getText()); params.put("address_1", pizzalinkEditTextList.get(6).getText()); params.put("address_2", ""); - params.put("city", pizzalinkEditTextList.get(7).getText()); - params.put("postcode", postcodePizzalinkDrowpdown.getText()); - params.put("zone_id", selectedZoneModel.getStoreId()); + params.put("city", selectedCityModel.getCity()); + params.put("postcode", selectedCityModel.getPostcode()); params.put("country_id", selectedCountryModel.getId()); + params.put("zone_id", selectedZoneeModel.getZoneId()); return params; } - private void onZoneDropdownClicked(View view){ - Log.i("vdknvkd", "vıjıwf"); - } - - private void onCountryDropdownClicked(View view){ - Log.i("vdknvkd", "vıjıwf"); - } - - private void showZoneDialog(){ + private void showCityDialog(){ final ArrayList zoneNameList = new ArrayList<>(); - for(ZoneModel zone : zoneList){ + for(CityModel zone : cityList){ zoneNameList.add(zone.getCity()); } DialogHelper.showListDialog(zoneNameList, new MaterialDialog.ListCallback() { @Override public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) { - selectedZoneModel = zoneList.get(position); - zonePizzalinkDropdown.setText(selectedZoneModel.getCity()); - postcodePizzalinkDrowpdown.setText(selectedZoneModel.getPostcode()); + selectedCityModel = cityList.get(position); + cityPizzalinkDropdown.setText(selectedCityModel.getCity()); + postcodePizzalinkDrowpdown.setText(selectedCityModel.getPostcode()); } }); } @@ -293,16 +349,31 @@ public class RegisterActivity extends BaseActivity { }); } + private void showZoneeDialog(){ + + final ArrayList zoneeNameList = new ArrayList<>(); + for(ZoneeModel zonee : zoneeList){ + zoneeNameList.add(zonee.getName()); + } + + DialogHelper.showListDialog(zoneeNameList, new MaterialDialog.ListCallback() { + @Override + public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) { + selectedZoneeModel = zoneeList.get(position); + zoneePizzalinkDropdown.setText(selectedZoneeModel.getName()); + } + }); + } + private void setTestFields(){ pizzalinkEditTextList.get(0).getEditText().setText("testname"); pizzalinkEditTextList.get(1).getEditText().setText("testsurname"); - pizzalinkEditTextList.get(2).getEditText().setText("1234567890"); - pizzalinkEditTextList.get(3).getEditText().setText("test3@test.com"); + pizzalinkEditTextList.get(2).getEditText().setText("1234567891"); + pizzalinkEditTextList.get(3).getEditText().setText("test4@test.com"); pizzalinkEditTextList.get(4).getEditText().setText("test"); pizzalinkEditTextList.get(5).getEditText().setText("test"); pizzalinkEditTextList.get(6).getEditText().setText("test address 1"); - pizzalinkEditTextList.get(7).getEditText().setText("test"); - postcodePizzalinkDrowpdown.setText("1234"); + //postcodePizzalinkDrowpdown.setText("1234"); } private synchronized void increaseActiveRequestCount(){ diff --git a/app/src/main/java/ch/pizzalink/android/api/ApiEndPoints.java b/app/src/main/java/ch/pizzalink/android/api/ApiEndPoints.java index 1a201ac..6d680cf 100644 --- a/app/src/main/java/ch/pizzalink/android/api/ApiEndPoints.java +++ b/app/src/main/java/ch/pizzalink/android/api/ApiEndPoints.java @@ -21,8 +21,9 @@ public class ApiEndPoints { public static final String API_CREATE_ORDER = PREFIX + "addOrder2" + SUFFIX + "&token="; public static final String API_CHECK_UPDATE = PREFIX + "checkUpdate" + SUFFIX; public static final String API_FORGOT_PASSWORD = PREFIX + "forgotPassword" + SUFFIX; - public static final String API_GET_ZONE_LIST = PREFIX + "getCities" + SUFFIX; + public static final String API_GET_CITY_LIST = PREFIX + "getCities" + SUFFIX; public static final String API_GET_COUNTRY_LIST = PREFIX + "getCountries" + SUFFIX; + public static final String API_GET_ZONE_LIST = PREFIX + "getZones" + SUFFIX; public static final String API_GET_CUSTOMER_PROFILE = PREFIX + "getCustomerInfo" + SUFFIX; public static final String API_UPDATE_PASSWORD = PREFIX + "passwordUpdate" + SUFFIX + "&token="; public static final String API_DELETE_ADDRESS = PREFIX + "deleteAddress" + SUFFIX + "&token="; diff --git a/app/src/main/java/ch/pizzalink/android/api/ApiInterface.java b/app/src/main/java/ch/pizzalink/android/api/ApiInterface.java index 0177aa1..4dd1f75 100644 --- a/app/src/main/java/ch/pizzalink/android/api/ApiInterface.java +++ b/app/src/main/java/ch/pizzalink/android/api/ApiInterface.java @@ -7,13 +7,12 @@ import ch.pizzalink.android.model.AddressModel; import ch.pizzalink.android.model.AppVersionModel; import ch.pizzalink.android.model.CountryModel; import ch.pizzalink.android.model.DeleteAddressResponseModel; -import ch.pizzalink.android.model.PaymentMethodModel; import ch.pizzalink.android.model.PaymentMethodsResponseModel; import ch.pizzalink.android.model.RemoveProductFromCartResponseModel; import ch.pizzalink.android.model.ShippingMethodModel; -import ch.pizzalink.android.model.ShippingMethodsResponseModel; import ch.pizzalink.android.model.StoreInfoModel; -import ch.pizzalink.android.model.ZoneModel; +import ch.pizzalink.android.model.CityModel; +import ch.pizzalink.android.model.ZoneeModel; import ch.pizzalink.android.model.cart.CartInfoModel; import ch.pizzalink.android.model.CategoryModel; import ch.pizzalink.android.model.OrderModel; @@ -109,12 +108,16 @@ public interface ApiInterface { @POST(ApiEndPoints.API_FORGOT_PASSWORD) Call forgotPassword(@Field("email") String emailAddress); - @GET(ApiEndPoints.API_GET_ZONE_LIST) - Call> getZoneList(); + @GET(ApiEndPoints.API_GET_CITY_LIST) + Call> getCityList(); @GET(ApiEndPoints.API_GET_COUNTRY_LIST) Call> getCountryList(); + @FormUrlEncoded + @POST(ApiEndPoints.API_GET_ZONE_LIST) + Call> getZoneeList(@Field("country_id") String countryId); + @GET(ApiEndPoints.API_GET_CUSTOMER_PROFILE) Call> getCustomerProfile(@Query("token") String token); diff --git a/app/src/main/java/ch/pizzalink/android/helper/ViewHelper.java b/app/src/main/java/ch/pizzalink/android/helper/ViewHelper.java index 4830c7b..a42888f 100644 --- a/app/src/main/java/ch/pizzalink/android/helper/ViewHelper.java +++ b/app/src/main/java/ch/pizzalink/android/helper/ViewHelper.java @@ -1,6 +1,8 @@ package ch.pizzalink.android.helper; import android.app.Activity; +import android.content.Context; +import android.view.View; import android.view.inputmethod.InputMethodManager; import ch.pizzalink.android.activity.BaseActivity; @@ -21,8 +23,12 @@ public class ViewHelper { } public static void hideKeyboard() { - InputMethodManager imm = (InputMethodManager) BaseActivity.currentActivity.getSystemService(Activity.INPUT_METHOD_SERVICE); - imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); // hide + View view = BaseActivity.currentActivity.getCurrentFocus(); + if (view != null) { + InputMethodManager imm = (InputMethodManager) BaseActivity.currentActivity. + getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } } public static void showKeyboard() { diff --git a/app/src/main/java/ch/pizzalink/android/model/ZoneModel.java b/app/src/main/java/ch/pizzalink/android/model/CityModel.java similarity index 89% rename from app/src/main/java/ch/pizzalink/android/model/ZoneModel.java rename to app/src/main/java/ch/pizzalink/android/model/CityModel.java index cc748a9..3aea25a 100644 --- a/app/src/main/java/ch/pizzalink/android/model/ZoneModel.java +++ b/app/src/main/java/ch/pizzalink/android/model/CityModel.java @@ -9,7 +9,7 @@ import java.util.ArrayList; * Created by cimenmus on 23.10.2017. */ -public class ZoneModel { +public class CityModel { @Expose @SerializedName("shipping_point_id") private String shippingPointId; @Expose @SerializedName("store_id") private String storeId; @@ -47,9 +47,9 @@ public class ZoneModel { } } - public static void checkNull(ArrayList cityList){ - for (ZoneModel zoneModel : cityList){ - zoneModel.checkNull(); + public static void checkNull(ArrayList cityList){ + for (CityModel cityModel : cityList){ + cityModel.checkNull(); } } diff --git a/app/src/main/java/ch/pizzalink/android/model/ZoneeModel.java b/app/src/main/java/ch/pizzalink/android/model/ZoneeModel.java new file mode 100644 index 0000000..48da617 --- /dev/null +++ b/app/src/main/java/ch/pizzalink/android/model/ZoneeModel.java @@ -0,0 +1,89 @@ +package ch.pizzalink.android.model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +import java.util.ArrayList; + +/** + * Created by cimenmus on 26.10.2017. + */ + +public class ZoneeModel { + + @Expose @SerializedName("zone_id") private String zoneId; + @Expose @SerializedName("country_id") private String countryId; + + private String name; + private String code; + private String status; + + private void checkNull(){ + + if(zoneId == null){ + zoneId = ""; + } + + if(countryId == null){ + countryId = ""; + } + + if(name == null){ + name = ""; + } + + if(code == null){ + code = ""; + } + + if(status == null){ + status = ""; + } + } + + public static void checkNull(ArrayList zoneeList){ + for(ZoneeModel zoneeModel : zoneeList){ + zoneeModel.checkNull(); + } + } + + public String getZoneId() { + return zoneId; + } + + public void setZoneId(String zoneId) { + this.zoneId = zoneId; + } + + public String getCountryId() { + return countryId; + } + + public void setCountryId(String countryId) { + this.countryId = countryId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/app/src/main/java/ch/pizzalink/android/view/PizzalinkDropdownView.java b/app/src/main/java/ch/pizzalink/android/view/PizzalinkDropdownView.java new file mode 100644 index 0000000..3fb8e57 --- /dev/null +++ b/app/src/main/java/ch/pizzalink/android/view/PizzalinkDropdownView.java @@ -0,0 +1,59 @@ +package ch.pizzalink.android.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import ch.pizzalink.android.R; + +/** + * Created by cimenmus on 26.10.2017. + */ + +public class PizzalinkDropdownView extends LinearLayout { + + private View rootView; + private TextView hintTextView; + private TextView textview; + private String hint; + + public PizzalinkDropdownView(Context context) { + super(context); + init(context); + } + + public PizzalinkDropdownView(Context context, AttributeSet attrs) { + super(context, attrs); + + TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.PizzalinkDropdownView, 0, 0); + try { + hint = a.getString(R.styleable.PizzalinkDropdownView_dropdownHintView); + } finally { + a.recycle(); + } + + init(context); + } + + private void init(Context context) { + rootView = (View) inflate(context, R.layout.layout_pizzalink_drowdown_view, this); + hintTextView = (TextView) rootView.findViewById(R.id.hintTextView); + textview = (TextView) rootView.findViewById(R.id.textview); + hintTextView.setText(hint); + } + + public boolean isEmpty(){ + return hintTextView.getText().toString().isEmpty(); + } + + public String getText(){ + return hintTextView.getText().toString(); + } + + public void setText(String text){ + textview.setText(text); + } +} diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml index 6a207fb..8b10bcd 100644 --- a/app/src/main/res/layout/activity_register.xml +++ b/app/src/main/res/layout/activity_register.xml @@ -81,32 +81,29 @@ app:inputType="address" app:hint="@string/addres_line_1"/> - + app:dropdownHintView="@string/city"/> - - - + app:dropdownHintView="@string/postcode"/> - + app:dropdownHintView="@string/country"/> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 06cfe6c..f8dce9e 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -28,4 +28,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ce6fd21..89b1126 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -62,6 +62,7 @@ Lütfen geçerli bir mail adresi giriniz. Şifreler uyuşmuyor.. Lütfen geçerli bir posta kodu giriniz. + Lütfen önce ülke seçimini yapınız. KAYIT OL