From 2745a50502d99c9fd75b4b79fdbb57a44d669209 Mon Sep 17 00:00:00 2001 From: Dmitro Boiko Date: Thu, 29 Jun 2017 18:50:27 +0300 Subject: [PATCH 1/4] fixed bugs with UI of profiles, add logic for editprofile, fixed bug with closing qr code, add chooser for taking photo. --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 27 ++- .../OnChooserPhotoDialogListener.java | 12 ++ .../java/com/tecsynt/nynja/models/Phone.java | 42 ++++ .../com/tecsynt/nynja/models/UserPerson.java | 79 ++++++++ .../mvp/presenters/EditProfilePresenter.java | 42 ++++ .../mvp/presenters/MyProfilePresenter.java | 14 +- .../nynja/mvp/view/EditProfileView.java | 15 ++ .../tecsynt/nynja/mvp/view/MyProfileView.java | 2 + .../server/com/softwarejoint/bert/Bert.java | 3 - .../com/softwarejoint/bert/BertDecoder.java | 1 - .../bert/model/ServerResponse.java | 2 - .../ui/activities/EditProfileActivity.java | 11 +- .../activities/QRCodeGeneratorActivity.java | 29 ++- .../tecsynt/nynja/ui/base/BaseActivity.java | 67 +++++++ .../nynja/ui/base/BaseDialogFragment.java | 33 ++++ .../tecsynt/nynja/ui/base/BaseFragment.java | 3 + .../nynja/ui/dialogs/ChooserPhotoDialog.java | 81 ++++++++ .../profile/EditProfileFragment.java | 54 +++++- .../fragments/profile/MyProfileFragment.java | 183 ++++++++++++++++-- .../com/tecsynt/nynja/utils/ImageUtils.java | 54 ++++++ .../com/tecsynt/nynja/utils/StringUtils.java | 20 ++ .../tecsynt/nynja/utils/ValidationUtils.java | 7 + app/src/main/res/anim/slide_out_down.xml | 5 + app/src/main/res/anim/slide_up_dialog.xml | 5 + .../main/res/layout/dialog_chooser_photo.xml | 45 +++++ .../main/res/layout/fragment_my_profile.xml | 46 ++--- app/src/main/res/values/strings.xml | 5 + app/src/main/res/values/styles.xml | 13 ++ app/src/main/res/xml/provider_paths.xml | 4 + build.gradle | 2 +- 31 files changed, 836 insertions(+), 74 deletions(-) create mode 100644 app/src/main/java/com/tecsynt/nynja/intetfaces/OnChooserPhotoDialogListener.java create mode 100644 app/src/main/java/com/tecsynt/nynja/models/Phone.java create mode 100644 app/src/main/java/com/tecsynt/nynja/models/UserPerson.java create mode 100644 app/src/main/java/com/tecsynt/nynja/mvp/presenters/EditProfilePresenter.java create mode 100644 app/src/main/java/com/tecsynt/nynja/mvp/view/EditProfileView.java create mode 100644 app/src/main/java/com/tecsynt/nynja/ui/base/BaseDialogFragment.java create mode 100644 app/src/main/java/com/tecsynt/nynja/ui/dialogs/ChooserPhotoDialog.java create mode 100644 app/src/main/java/com/tecsynt/nynja/utils/ImageUtils.java create mode 100644 app/src/main/java/com/tecsynt/nynja/utils/StringUtils.java create mode 100644 app/src/main/res/anim/slide_out_down.xml create mode 100644 app/src/main/res/anim/slide_up_dialog.xml create mode 100644 app/src/main/res/layout/dialog_chooser_photo.xml create mode 100644 app/src/main/res/xml/provider_paths.xml diff --git a/app/build.gradle b/app/build.gradle index 570367950b..a3923fcaf9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -122,12 +122,14 @@ dependencies { compile "io.reactivex.rxjava2:rxandroid:2.0.1" compile "io.reactivex.rxjava2:rxjava:$rxJavaVersion" -// MQTT + //MQTT compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.0.2' compile ('org.eclipse.paho:org.eclipse.paho.android.service:1.0.2') { exclude module: 'support-v4' } + //RXPermissions + compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar' androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d50fe7de70..3d49d7c04f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,16 +1,21 @@ - + + + - - + + + + + - - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/tecsynt/nynja/intetfaces/OnChooserPhotoDialogListener.java b/app/src/main/java/com/tecsynt/nynja/intetfaces/OnChooserPhotoDialogListener.java new file mode 100644 index 0000000000..4419d9389c --- /dev/null +++ b/app/src/main/java/com/tecsynt/nynja/intetfaces/OnChooserPhotoDialogListener.java @@ -0,0 +1,12 @@ +package com.tecsynt.nynja.intetfaces; + +/* + * Created by Bo on 29.06.2017. + */ + +public interface OnChooserPhotoDialogListener { + + void onCameraClick(); + + void onGalleryClick(); +} diff --git a/app/src/main/java/com/tecsynt/nynja/models/Phone.java b/app/src/main/java/com/tecsynt/nynja/models/Phone.java new file mode 100644 index 0000000000..63183c9ff2 --- /dev/null +++ b/app/src/main/java/com/tecsynt/nynja/models/Phone.java @@ -0,0 +1,42 @@ +package com.tecsynt.nynja.models; + +/* + * Created by Bo on 29.06.2017. + */ + +import android.os.Parcel; +import android.os.Parcelable; + +public class Phone implements Parcelable { + + private String phone; + + public Phone() { + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.phone); + } + + protected Phone(Parcel in) { + this.phone = in.readString(); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public Phone createFromParcel(Parcel source) { + return new Phone(source); + } + + @Override + public Phone[] newArray(int size) { + return new Phone[size]; + } + }; +} diff --git a/app/src/main/java/com/tecsynt/nynja/models/UserPerson.java b/app/src/main/java/com/tecsynt/nynja/models/UserPerson.java new file mode 100644 index 0000000000..ef88e8af5b --- /dev/null +++ b/app/src/main/java/com/tecsynt/nynja/models/UserPerson.java @@ -0,0 +1,79 @@ +package com.tecsynt.nynja.models; + +/* + * Created by Bo on 29.06.2017. + */ + +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.ArrayList; +import java.util.List; + +public class UserPerson implements Parcelable { + + private String name; + private String surname; + private List phoneList = new ArrayList<>(); + + public UserPerson() { + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } + + public List getPhoneList() { + return phoneList; + } + + public void setPhoneList(List phoneList) { + this.phoneList = phoneList; + } + + public String getFullName() { + return (name + " " + surname).trim(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.name); + dest.writeString(this.surname); + dest.writeTypedList(this.phoneList); + } + + protected UserPerson(Parcel in) { + this.name = in.readString(); + this.surname = in.readString(); + this.phoneList = in.createTypedArrayList(Phone.CREATOR); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public UserPerson createFromParcel(Parcel source) { + return new UserPerson(source); + } + + @Override + public UserPerson[] newArray(int size) { + return new UserPerson[size]; + } + }; +} diff --git a/app/src/main/java/com/tecsynt/nynja/mvp/presenters/EditProfilePresenter.java b/app/src/main/java/com/tecsynt/nynja/mvp/presenters/EditProfilePresenter.java new file mode 100644 index 0000000000..5bead7ce65 --- /dev/null +++ b/app/src/main/java/com/tecsynt/nynja/mvp/presenters/EditProfilePresenter.java @@ -0,0 +1,42 @@ +package com.tecsynt.nynja.mvp.presenters; + +import android.text.TextUtils; + +import com.arellomobile.mvp.InjectViewState; +import com.arellomobile.mvp.MvpPresenter; +import com.tecsynt.nynja.models.UserPerson; +import com.tecsynt.nynja.mvp.view.EditProfileView; +import com.tecsynt.nynja.utils.StringUtils; + +/** + * Date: 25.06.17 + * Time: 04:10 + * + * @author Max Chervatiuk + * Email: duo.blood@gmail.com + */ +@InjectViewState +public class EditProfilePresenter extends MvpPresenter { + + private void showErrorMessage(String errorMessage) { + getViewState().onErrorMessage(errorMessage); + } + + public void saveClick(String firstName, String lastName) { + if (StringUtils.isNotEmpty(firstName) && firstName.length() > 2) { + //// FIXME: 29.06.2017 update on server + UserPerson userPerson = new UserPerson(); + userPerson.setName(firstName); + userPerson.setSurname(lastName); + getViewState().onSaveClick(userPerson); + } else { + String errorMessage; + if (TextUtils.isEmpty(firstName)) { + errorMessage = "FirstName cannot be empty."; + } else { + errorMessage = "FirstName length should be at least 2 symbols."; + } + showErrorMessage(errorMessage); + } + } +} diff --git a/app/src/main/java/com/tecsynt/nynja/mvp/presenters/MyProfilePresenter.java b/app/src/main/java/com/tecsynt/nynja/mvp/presenters/MyProfilePresenter.java index 081a3334da..f046f5d34c 100644 --- a/app/src/main/java/com/tecsynt/nynja/mvp/presenters/MyProfilePresenter.java +++ b/app/src/main/java/com/tecsynt/nynja/mvp/presenters/MyProfilePresenter.java @@ -11,19 +11,23 @@ import com.tecsynt.nynja.mvp.view.MyProfileView; @InjectViewState public class MyProfilePresenter extends MvpPresenter { - public void navigateToEditProfileScreen() { + public void clickOnEditProfile() { getViewState().navigateToEditProfile(); } - public void navigateToQrCodeScreen() { + public void clickOnQrCode() { getViewState().navigateToQqCode(); } - public void navigateToCameraScreen() { + public void clickOnCamera() { + getViewState().navigateToCamera(); } - public void navigateToGalleryScreen() { + public void clickOnGallery() { + getViewState().navigateToGallery(); } - + public void showChooserImageDialog() { + getViewState().showChooserImageDialog(); + } } diff --git a/app/src/main/java/com/tecsynt/nynja/mvp/view/EditProfileView.java b/app/src/main/java/com/tecsynt/nynja/mvp/view/EditProfileView.java new file mode 100644 index 0000000000..dfc51e6678 --- /dev/null +++ b/app/src/main/java/com/tecsynt/nynja/mvp/view/EditProfileView.java @@ -0,0 +1,15 @@ +package com.tecsynt.nynja.mvp.view; + +/* + * Created by Bo on 29.06.2017. + */ + +import com.arellomobile.mvp.MvpView; +import com.tecsynt.nynja.models.UserPerson; + +public interface EditProfileView extends MvpView { + + void onErrorMessage(String errorMessage); + + void onSaveClick(UserPerson userPerson); +} diff --git a/app/src/main/java/com/tecsynt/nynja/mvp/view/MyProfileView.java b/app/src/main/java/com/tecsynt/nynja/mvp/view/MyProfileView.java index 482da5f0f6..d59739f4f1 100644 --- a/app/src/main/java/com/tecsynt/nynja/mvp/view/MyProfileView.java +++ b/app/src/main/java/com/tecsynt/nynja/mvp/view/MyProfileView.java @@ -16,4 +16,6 @@ public interface MyProfileView extends MvpView { void navigateToCamera(); void navigateToGallery(); + + void showChooserImageDialog(); } diff --git a/app/src/main/java/com/tecsynt/nynja/server/com/softwarejoint/bert/Bert.java b/app/src/main/java/com/tecsynt/nynja/server/com/softwarejoint/bert/Bert.java index 987023d8a6..005adfb6ac 100644 --- a/app/src/main/java/com/tecsynt/nynja/server/com/softwarejoint/bert/Bert.java +++ b/app/src/main/java/com/tecsynt/nynja/server/com/softwarejoint/bert/Bert.java @@ -1,10 +1,7 @@ package com.tecsynt.nynja.server.com.softwarejoint.bert; -import android.annotation.SuppressLint; - import java.nio.charset.Charset; import java.util.ArrayList; -import java.util.HashMap; abstract class Bert { diff --git a/app/src/main/java/com/tecsynt/nynja/server/com/softwarejoint/bert/BertDecoder.java b/app/src/main/java/com/tecsynt/nynja/server/com/softwarejoint/bert/BertDecoder.java index e3f696afd0..600737a6dd 100644 --- a/app/src/main/java/com/tecsynt/nynja/server/com/softwarejoint/bert/BertDecoder.java +++ b/app/src/main/java/com/tecsynt/nynja/server/com/softwarejoint/bert/BertDecoder.java @@ -8,7 +8,6 @@ import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; -import java.util.Objects; @SuppressWarnings("WeakerAccess") public class BertDecoder extends Bert implements DistributionHeader { diff --git a/app/src/main/java/com/tecsynt/nynja/server/com/softwarejoint/bert/model/ServerResponse.java b/app/src/main/java/com/tecsynt/nynja/server/com/softwarejoint/bert/model/ServerResponse.java index f851127e2d..db1d5c0874 100644 --- a/app/src/main/java/com/tecsynt/nynja/server/com/softwarejoint/bert/model/ServerResponse.java +++ b/app/src/main/java/com/tecsynt/nynja/server/com/softwarejoint/bert/model/ServerResponse.java @@ -2,8 +2,6 @@ package com.tecsynt.nynja.server.com.softwarejoint.bert.model; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.util.Log; - import com.tecsynt.nynja.server.com.softwarejoint.bert.BertAtom; import com.tecsynt.nynja.server.com.softwarejoint.bert.BertTuple; diff --git a/app/src/main/java/com/tecsynt/nynja/ui/activities/EditProfileActivity.java b/app/src/main/java/com/tecsynt/nynja/ui/activities/EditProfileActivity.java index 60655216bd..70ba86202b 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/activities/EditProfileActivity.java +++ b/app/src/main/java/com/tecsynt/nynja/ui/activities/EditProfileActivity.java @@ -4,8 +4,10 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; +import com.tecsynt.nynja.models.UserPerson; import com.tecsynt.nynja.ui.base.BaseActivity; import com.tecsynt.nynja.ui.fragments.profile.EditProfileFragment; +import com.tecsynt.nynja.ui.fragments.profile.MyProfileFragment; /** * Created by dmitro.boiko on 27/06/2017. @@ -13,11 +15,14 @@ import com.tecsynt.nynja.ui.fragments.profile.EditProfileFragment; public class EditProfileActivity extends BaseActivity { - public static Intent getLaunchEditProfileActivity(Context context) { - return new Intent(context, EditProfileActivity.class); + public static Intent getLaunchEditProfileActivity(Context context, UserPerson userPerson) { + Intent intent = new Intent(context, EditProfileActivity.class); + intent.putExtra(MyProfileFragment.EDIT_PROFILE_TAG, userPerson); + return intent; } - @Override protected void onCreate(Bundle savedInstanceState) { + @Override + protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EditProfileFragment fragment = new EditProfileFragment(); fragment.setArguments(getIntent().getExtras()); diff --git a/app/src/main/java/com/tecsynt/nynja/ui/activities/QRCodeGeneratorActivity.java b/app/src/main/java/com/tecsynt/nynja/ui/activities/QRCodeGeneratorActivity.java index 78631d301d..bbe1de4717 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/activities/QRCodeGeneratorActivity.java +++ b/app/src/main/java/com/tecsynt/nynja/ui/activities/QRCodeGeneratorActivity.java @@ -8,10 +8,13 @@ import android.widget.ImageView; import com.google.zxing.WriterException; import com.tecsynt.nynja.R; +import com.tecsynt.nynja.models.UserPerson; import com.tecsynt.nynja.ui.base.BaseActivity; +import com.tecsynt.nynja.ui.fragments.profile.MyProfileFragment; import com.tecsynt.nynja.utils.ZxingEncoder; import butterknife.BindView; +import butterknife.OnClick; /** @@ -23,21 +26,31 @@ public class QRCodeGeneratorActivity extends BaseActivity { @BindView(R.id.qr_code_qrcodegeneratoractivity) ImageView qrCode; - public static Intent getLaunchQRCodeGeneratorActivity(Context context) { - return new Intent(context, QRCodeGeneratorActivity.class); + public static Intent getLaunchQRCodeGeneratorActivity(Context context, UserPerson userPerson) { + Intent intent = new Intent(context, QRCodeGeneratorActivity.class); + intent.putExtra(MyProfileFragment.EDIT_PROFILE_TAG, userPerson); + return intent; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_qr_code_generator); - - try { - Bitmap qrCodeBitmap = ZxingEncoder.getInstance().generate_QR_CODE("TEST DATA"); - qrCode.setImageBitmap(qrCodeBitmap); - } catch (WriterException e) { - e.printStackTrace(); + if (getIntent() != null && getIntent().getExtras() != null) { + try { + //// FIXME: 29.06.2017 add real data + UserPerson userPerson = getIntent().getParcelableExtra(MyProfileFragment.EDIT_PROFILE_TAG); + String data = userPerson.getPhoneList().get(0) + ";" + userPerson.getFullName(); + Bitmap qrCodeBitmap = ZxingEncoder.getInstance().generate_QR_CODE(data); + qrCode.setImageBitmap(qrCodeBitmap); + } catch (WriterException e) { + e.printStackTrace(); + } } + } + @OnClick(android.R.id.content) + public void onContentClick() { + finish(); } } diff --git a/app/src/main/java/com/tecsynt/nynja/ui/base/BaseActivity.java b/app/src/main/java/com/tecsynt/nynja/ui/base/BaseActivity.java index f6dafecc5b..368eef3ffc 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/base/BaseActivity.java +++ b/app/src/main/java/com/tecsynt/nynja/ui/base/BaseActivity.java @@ -1,8 +1,17 @@ package com.tecsynt.nynja.ui.base; +import android.app.ProgressDialog; +import android.content.Context; +import android.os.Bundle; import android.support.annotation.LayoutRes; +import android.support.annotation.Nullable; +import android.support.annotation.StringRes; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; import com.arellomobile.mvp.MvpAppCompatActivity; +import com.tbruyelle.rxpermissions2.RxPermissions; import butterknife.ButterKnife; @@ -13,9 +22,67 @@ import butterknife.ButterKnife; public abstract class BaseActivity extends MvpAppCompatActivity { + private ProgressDialog mProgressDialog; + protected RxPermissions rxPermissions; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + rxPermissions = new RxPermissions(this); + } + @Override public void setContentView(@LayoutRes int layoutResID) { super.setContentView(layoutResID); ButterKnife.bind(this); } + + @Override + public void setContentView(View view) { + super.setContentView(view); + ButterKnife.bind(this); + } + + @Override + public void setContentView(View view, ViewGroup.LayoutParams params) { + super.setContentView(view, params); + ButterKnife.bind(this); + } + + private void showDialog(@Nullable String message) { + mProgressDialog = new ProgressDialog(this, ProgressDialog.STYLE_SPINNER); + mProgressDialog.setMessage(message); + mProgressDialog.setCancelable(false); + mProgressDialog.show(); + } + + public void showProgressDialog(@StringRes int messageResId) { + showDialog(getString(messageResId)); + } + + public void showProgressDialog(@Nullable String message) { + showDialog(message); + } + + public void hideProgressDialog() { + if (mProgressDialog != null) { + mProgressDialog.cancel(); + mProgressDialog = null; + } + } + + public void hideKeyboard() { + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + View v = this.getCurrentFocus(); + if (v != null) { + imm.hideSoftInputFromWindow(v.getWindowToken(), 0); + v.clearFocus(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + hideProgressDialog(); + } } diff --git a/app/src/main/java/com/tecsynt/nynja/ui/base/BaseDialogFragment.java b/app/src/main/java/com/tecsynt/nynja/ui/base/BaseDialogFragment.java new file mode 100644 index 0000000000..d4924a1d27 --- /dev/null +++ b/app/src/main/java/com/tecsynt/nynja/ui/base/BaseDialogFragment.java @@ -0,0 +1,33 @@ +package com.tecsynt.nynja.ui.base; + +/* + * Created by Bo on 29.06.2017. + */ + + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatDialogFragment; +import android.view.View; + +import butterknife.ButterKnife; +import butterknife.Unbinder; + +public class BaseDialogFragment extends AppCompatDialogFragment { + + protected Unbinder unbinder; + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + unbinder = ButterKnife.bind(this, view); + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (unbinder != null) { + unbinder.unbind(); + } + } +} diff --git a/app/src/main/java/com/tecsynt/nynja/ui/base/BaseFragment.java b/app/src/main/java/com/tecsynt/nynja/ui/base/BaseFragment.java index 0be48943ee..dbb0c20ed0 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/base/BaseFragment.java +++ b/app/src/main/java/com/tecsynt/nynja/ui/base/BaseFragment.java @@ -5,6 +5,7 @@ import android.support.annotation.Nullable; import android.view.View; import com.arellomobile.mvp.MvpAppCompatFragment; +import com.tbruyelle.rxpermissions2.RxPermissions; import butterknife.ButterKnife; import butterknife.Unbinder; @@ -17,11 +18,13 @@ import butterknife.Unbinder; public abstract class BaseFragment extends MvpAppCompatFragment { private Unbinder mUnBinder; + protected RxPermissions rxPermissions; @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mUnBinder = ButterKnife.bind(this, view); + rxPermissions = new RxPermissions(getActivity()); } @Override diff --git a/app/src/main/java/com/tecsynt/nynja/ui/dialogs/ChooserPhotoDialog.java b/app/src/main/java/com/tecsynt/nynja/ui/dialogs/ChooserPhotoDialog.java new file mode 100644 index 0000000000..9187c5f658 --- /dev/null +++ b/app/src/main/java/com/tecsynt/nynja/ui/dialogs/ChooserPhotoDialog.java @@ -0,0 +1,81 @@ +package com.tecsynt.nynja.ui.dialogs; + +/* + * Created by Bo on 29.06.2017. + */ + +import android.app.Dialog; +import android.app.DialogFragment; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.support.v4.app.FragmentManager; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; + +import com.tecsynt.nynja.R; +import com.tecsynt.nynja.intetfaces.OnChooserPhotoDialogListener; +import com.tecsynt.nynja.ui.base.BaseDialogFragment; + +import butterknife.OnClick; + +public class ChooserPhotoDialog extends BaseDialogFragment { + + private OnChooserPhotoDialogListener chooserPhotoDialogListener; + + private static ChooserPhotoDialog newInstance(OnChooserPhotoDialogListener chooserPhotoDialogListener) { + ChooserPhotoDialog chooserPhotoDialog = new ChooserPhotoDialog(); + chooserPhotoDialog.setChooserPhotoDialogListener(chooserPhotoDialogListener); + return chooserPhotoDialog; + } + + public static void show(OnChooserPhotoDialogListener onChooserPhotoDialogListener, FragmentManager fragmentManager) { + ChooserPhotoDialog chooserPhotoDialog = ChooserPhotoDialog.newInstance(onChooserPhotoDialogListener); + chooserPhotoDialog.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.AppTheme_FullWidthDialog); + chooserPhotoDialog.show(fragmentManager, chooserPhotoDialog.getClass().getSimpleName()); + } + + public void setChooserPhotoDialogListener(OnChooserPhotoDialogListener chooserPhotoDialogListener) { + this.chooserPhotoDialogListener = chooserPhotoDialogListener; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + Dialog dialog = super.onCreateDialog(savedInstanceState); + Window window = dialog.getWindow(); + if (window != null) { + dialog.getWindow().setGravity(Gravity.BOTTOM); + dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + dialog.getWindow().getAttributes().windowAnimations = R.style.SlidingBottomDialogAnimation; + } + return dialog; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.dialog_chooser_photo, container, false); + } + + + @OnClick(R.id.camera_dialog_chooser_photo) + public void onCameraClick() { + chooserPhotoDialogListener.onCameraClick(); + dismiss(); + } + + @OnClick(R.id.gallery_dialog_chooser_photo) + public void onGalleryClick() { + chooserPhotoDialogListener.onGalleryClick(); + dismiss(); + } + + @OnClick(R.id.cancel_dialog_chooser_photo) + public void onCancelClick() { + dismiss(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/EditProfileFragment.java b/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/EditProfileFragment.java index 50025a9df4..d41ba278c6 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/EditProfileFragment.java +++ b/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/EditProfileFragment.java @@ -1,23 +1,75 @@ package com.tecsynt.nynja.ui.fragments.profile; +import android.app.Activity; +import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.design.widget.TextInputEditText; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import com.arellomobile.mvp.presenter.InjectPresenter; import com.tecsynt.nynja.R; +import com.tecsynt.nynja.models.UserPerson; +import com.tecsynt.nynja.mvp.presenters.EditProfilePresenter; +import com.tecsynt.nynja.mvp.view.EditProfileView; import com.tecsynt.nynja.ui.base.BaseFragment; +import com.tecsynt.nynja.utils.StringUtils; + +import butterknife.BindView; +import butterknife.OnClick; /** * Created by dmitro.boiko on 27/06/2017. */ -public class EditProfileFragment extends BaseFragment { +public class EditProfileFragment extends BaseFragment implements EditProfileView { + + @BindView(R.id.first_name_edt_first_name) + TextInputEditText firstName; + + @BindView(R.id.last_name_edt_first_name) + TextInputEditText lastName; + + @InjectPresenter + EditProfilePresenter editProfilePresenter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_edit_profile, container, false); } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + if (getArguments() != null) { + UserPerson userPerson = getArguments().getParcelable(MyProfileFragment.EDIT_PROFILE_TAG); + setUserModel(userPerson); + } + } + + private void setUserModel(UserPerson userPerson) { + firstName.setText(userPerson.getName()); + lastName.setText(userPerson.getSurname()); + } + + @OnClick(R.id.next_button_fragmenteditprofile) + public void onSaveButtonClick() { + editProfilePresenter.saveClick(StringUtils.getText(firstName), StringUtils.getText(lastName)); + } + + @Override + public void onErrorMessage(String errorMessage) { + + } + + @Override + public void onSaveClick(UserPerson userPerson) { + Intent intent = new Intent(); + intent.putExtra(MyProfileFragment.EDIT_PROFILE_TAG, userPerson); + getActivity().setResult(Activity.RESULT_OK, intent); + getActivity().finish(); + } } diff --git a/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/MyProfileFragment.java b/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/MyProfileFragment.java index 76520cdf06..10602abd71 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/MyProfileFragment.java +++ b/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/MyProfileFragment.java @@ -1,64 +1,221 @@ package com.tecsynt.nynja.ui.fragments.profile; +import android.Manifest; +import android.app.Activity; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; import android.os.Bundle; +import android.provider.MediaStore; import android.support.annotation.Nullable; +import android.support.v4.content.FileProvider; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; import com.arellomobile.mvp.presenter.InjectPresenter; +import com.tecsynt.nynja.BuildConfig; import com.tecsynt.nynja.R; +import com.tecsynt.nynja.intetfaces.OnChooserPhotoDialogListener; +import com.tecsynt.nynja.models.UserPerson; import com.tecsynt.nynja.mvp.presenters.MyProfilePresenter; import com.tecsynt.nynja.mvp.view.MyProfileView; import com.tecsynt.nynja.ui.activities.EditProfileActivity; import com.tecsynt.nynja.ui.activities.QRCodeGeneratorActivity; import com.tecsynt.nynja.ui.base.BaseFragment; +import com.tecsynt.nynja.ui.dialogs.ChooserPhotoDialog; +import com.tecsynt.nynja.utils.ImageUtils; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +import butterknife.BindView; import butterknife.OnClick; +import butterknife.Optional; /** * Created by dmitro.boiko on 27/06/2017. **/ -public class MyProfileFragment extends BaseFragment implements MyProfileView { +public class MyProfileFragment extends BaseFragment implements MyProfileView, + OnChooserPhotoDialogListener { + + private static final int IMAGE_REQUEST_CODE = 42; + private static final int GALLERY_REQUEST_CODE = 43; + private static final int EDIT_PROFILE_REQUEST_CODE = 44; + public static final String EDIT_PROFILE_TAG = "edit_profile"; + + @BindView(R.id.userphoto_myprofilefragment) + ImageView userPhoto; + @BindView(R.id.username_myprofilefragment) + TextView userName; @InjectPresenter MyProfilePresenter mPresenter; + private String photoPath; + private UserPerson userPerson; + @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_my_profile, container, false); } - @OnClick(R.id.edit_name_myprofilefragment) + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + //// FIXME: 29.06.2017 set real user info + userPerson = new UserPerson(); + userPerson.setName("Marshall"); + userPerson.setSurname("Taplits"); + setUserModel(userPerson); + } + + @OnClick(R.id.username_myprofilefragment) public void onEditNameClick() { - mPresenter.navigateToEditProfileScreen(); + mPresenter.clickOnEditProfile(); } @OnClick(R.id.qrcode_myprofilefragment) public void oncQrCodeClick() { - mPresenter.navigateToQrCodeScreen(); + mPresenter.clickOnQrCode(); + } + + @Optional + @OnClick({R.id.photo_myprofilefragment, R.id.userphoto_myprofilefragment}) + public void onPhotoClick() { + mPresenter.showChooserImageDialog(); } - @OnClick(R.id.photo_myprofilefragment) - public void oncPhotoClick() { - mPresenter.navigateToGalleryScreen(); + @Override + public void navigateToEditProfile() { + startActivityForResult(EditProfileActivity.getLaunchEditProfileActivity(getContext(), + userPerson), EDIT_PROFILE_REQUEST_CODE); } - @Override public void navigateToEditProfile() { - startActivity(EditProfileActivity.getLaunchEditProfileActivity(getContext())); + @Override + public void navigateToQqCode() { + startActivity(QRCodeGeneratorActivity.getLaunchQRCodeGeneratorActivity(getContext(), userPerson)); } - @Override public void navigateToQqCode() { - startActivity(QRCodeGeneratorActivity.getLaunchQRCodeGeneratorActivity(getContext())); + @Override + public void navigateToCamera() { + rxPermissions. + request(Manifest.permission.CAMERA) + .subscribe(granted -> { + if (granted) { + startPhotoActivity(); + } else { + //// FIXME: 29.06.2017 message? + } + }); } - @Override public void navigateToCamera() { + private void startPhotoActivity() { + Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + if (takePictureIntent.resolveActivity(getContext().getPackageManager()) != null) { + File photoFile = null; + try { + photoFile = ImageUtils.createImageFile(getContext()); + photoPath = photoFile.getAbsolutePath(); + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + Uri photoURI = FileProvider.getUriForFile(getContext(), + BuildConfig.APPLICATION_ID + ".fileprovider", + photoFile); + takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); + startActivityForResult(takePictureIntent, IMAGE_REQUEST_CODE); + } + } + } + @Override + public void navigateToGallery() { + rxPermissions. + request(Manifest.permission.READ_EXTERNAL_STORAGE) + .subscribe(granted -> { + if (granted) { + startGalleryActivity(); + } else { + //// FIXME: 29.06.2017 message? + } + }); } - @Override public void navigateToGallery() { + @Override + public void showChooserImageDialog() { + ChooserPhotoDialog.show(this, getChildFragmentManager()); + } + @Override + + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == Activity.RESULT_OK) { + if (requestCode == IMAGE_REQUEST_CODE) { + decodePhoto(); + } else if (requestCode == GALLERY_REQUEST_CODE && data != null) { + decodePhotoFromGallery(data); + } else if (requestCode == EDIT_PROFILE_REQUEST_CODE && data != null) { + UserPerson userPerson = data.getParcelableExtra(EDIT_PROFILE_TAG); + setUserModel(userPerson); + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + private void setUserModel(UserPerson userPerson) { + this.userPerson = userPerson; + userName.setText(this.userPerson.getFullName()); + } + + private void decodePhotoFromGallery(Intent data) { + try { + Uri imageUri = data.getData(); + Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), imageUri); + setUserAvatar(bitmap); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void startGalleryActivity() { + Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + startActivityForResult(galleryIntent, GALLERY_REQUEST_CODE); + } + + private void decodePhoto() { + Uri imageUri = Uri.parse(photoPath); + try { + File file = new File(imageUri.getPath()); + InputStream ims = new FileInputStream(file); + setUserAvatar(BitmapFactory.decodeStream(ims)); + //// FIXME: 29.06.2017 should we add photo to gallery?? + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void setUserAvatar(Bitmap bitmap) { + userPhoto.setImageBitmap(ImageUtils.circleTransform(bitmap)); + userPhoto.setPadding(0, 0, 0, 0); + } + + @Override + public void onCameraClick() { + mPresenter.clickOnCamera(); + } + + @Override + public void onGalleryClick() { + mPresenter.clickOnGallery(); } } diff --git a/app/src/main/java/com/tecsynt/nynja/utils/ImageUtils.java b/app/src/main/java/com/tecsynt/nynja/utils/ImageUtils.java new file mode 100644 index 0000000000..dd40acacab --- /dev/null +++ b/app/src/main/java/com/tecsynt/nynja/utils/ImageUtils.java @@ -0,0 +1,54 @@ +package com.tecsynt.nynja.utils; + +/* + * Created by Bo on 29.06.2017. + */ + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.os.Environment; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class ImageUtils { + + public static File createImageFile(Context context) throws IOException { + // Create an image file name + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); + String imageFileName = "JPEG_" + timeStamp + "_"; + File storageDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES); + return File.createTempFile( + imageFileName, /* prefix */ + ".jpg", /* suffix */ + storageDir /* directory */ + ); + } + + public static Bitmap circleTransform(Bitmap source) { + int size = Math.min(source.getWidth(), source.getHeight()); + + int x = (source.getWidth() - size) / 2; + int y = (source.getHeight() - size) / 2; + + Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size); + if (squaredBitmap != source) { + source.recycle(); + } + Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig()); + Canvas canvas = new Canvas(bitmap); + Paint paint = new Paint(); + BitmapShader shader = new BitmapShader(squaredBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP); + paint.setShader(shader); + paint.setAntiAlias(true); + float r = size / 2f; + canvas.drawCircle(r, r, r, paint); + squaredBitmap.recycle(); + return bitmap; + } +} diff --git a/app/src/main/java/com/tecsynt/nynja/utils/StringUtils.java b/app/src/main/java/com/tecsynt/nynja/utils/StringUtils.java new file mode 100644 index 0000000000..27bd2fd5c0 --- /dev/null +++ b/app/src/main/java/com/tecsynt/nynja/utils/StringUtils.java @@ -0,0 +1,20 @@ +package com.tecsynt.nynja.utils; + +/* + * Created by Bo on 29.06.2017. + */ + +import android.support.annotation.Nullable; +import android.text.TextUtils; +import android.widget.TextView; + +public class StringUtils { + + public static boolean isNotEmpty(String data) { + return data != null && !TextUtils.isEmpty(data.trim()); + } + + public static String getText(@Nullable TextView view) { + return view != null ? view.getText().toString() : ""; + } +} diff --git a/app/src/main/java/com/tecsynt/nynja/utils/ValidationUtils.java b/app/src/main/java/com/tecsynt/nynja/utils/ValidationUtils.java index 4ba30bd2cf..129ef6ecea 100644 --- a/app/src/main/java/com/tecsynt/nynja/utils/ValidationUtils.java +++ b/app/src/main/java/com/tecsynt/nynja/utils/ValidationUtils.java @@ -1,5 +1,7 @@ package com.tecsynt.nynja.utils; +import android.util.Patterns; + /** * Created by Max Chervatiuk on 22.06.17. * Email: duo.blood@gmail.com @@ -10,4 +12,9 @@ package com.tecsynt.nynja.utils; public class ValidationUtils { //// TODO: 22.06.17 Implement class + + public static boolean isEmailVaild(String email) { + return email != null && Patterns.EMAIL_ADDRESS.matcher(email).matches(); + } + } diff --git a/app/src/main/res/anim/slide_out_down.xml b/app/src/main/res/anim/slide_out_down.xml new file mode 100644 index 0000000000..0f33954217 --- /dev/null +++ b/app/src/main/res/anim/slide_out_down.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_up_dialog.xml b/app/src/main/res/anim/slide_up_dialog.xml new file mode 100644 index 0000000000..3c613f3bc1 --- /dev/null +++ b/app/src/main/res/anim/slide_up_dialog.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_chooser_photo.xml b/app/src/main/res/layout/dialog_chooser_photo.xml new file mode 100644 index 0000000000..a357fe1595 --- /dev/null +++ b/app/src/main/res/layout/dialog_chooser_photo.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_my_profile.xml b/app/src/main/res/layout/fragment_my_profile.xml index 317294d816..7e6556dd15 100644 --- a/app/src/main/res/layout/fragment_my_profile.xml +++ b/app/src/main/res/layout/fragment_my_profile.xml @@ -44,38 +44,24 @@ android:src="@drawable/qr_code" /> - + android:paddingStart="42dp" + tools:text="Marshall Taplits" + android:drawablePadding="8dp" + android:textColor="@color/colorAccent" + android:textSize="31sp" /> - - - - + android:textSize="20sp" /> \ 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 a24595f733..00ab602cd9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -12,4 +12,9 @@ Last Name --- --- + + Camera + Choose from gallery + Cancel + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 1a06fc201e..40fec0ed2d 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -25,4 +25,17 @@ + + + + diff --git a/app/src/main/res/xml/provider_paths.xml b/app/src/main/res/xml/provider_paths.xml new file mode 100644 index 0000000000..21c6b01f50 --- /dev/null +++ b/app/src/main/res/xml/provider_paths.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 53dc8ba6a9..15429c62eb 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.1' + classpath 'com.android.tools.build:gradle:2.3.2' classpath 'me.tatarka:gradle-retrolambda:3.6.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files -- GitLab From ffd66482c13f91f37ddca3d7d1bbfa49bed99518 Mon Sep 17 00:00:00 2001 From: Dmitro Boiko Date: Thu, 29 Jun 2017 21:44:45 +0300 Subject: [PATCH 2/4] refactor bundle, add temp scanner for QR Code, code refactoring --- app/build.gradle | 9 ++- app/google-services.json | 71 +++++++++++++++++++ .../mobile}/ExampleInstrumentedTest.java | 2 +- app/src/main/AndroidManifest.xml | 25 ++++--- .../nynja => ninja/mobile}/NynjaApp.java | 8 +-- .../mobile}/data/DataManager.java | 4 +- .../mobile}/data/models/Country.java | 2 +- .../mobile}/injection/ActivityContext.java | 2 +- .../injection/ApplicationComponent.java | 2 +- .../mobile}/injection/ApplicationContext.java | 2 +- .../mobile}/injection/ApplicationModule.java | 2 +- .../OnChooserPhotoDialogListener.java | 2 +- .../nynja => ninja/mobile}/models/Phone.java | 2 +- .../mobile}/models/UserPerson.java | 2 +- .../mvp/presenters/EditProfilePresenter.java | 8 +-- .../mvp/presenters/LoginPresenter.java | 4 +- .../mvp/presenters/MyProfilePresenter.java | 4 +- .../mvp/presenters/SplashPresenter.java | 4 +- .../mobile}/mvp/view/EditProfileView.java | 4 +- .../mobile}/mvp/view/LoginView.java | 2 +- .../mobile}/mvp/view/MyProfileView.java | 2 +- .../mobile}/mvp/view/SplashView.java | 2 +- .../mobile}/server/PahoService.java | 2 +- .../server/com/softwarejoint/bert/Bert.java | 2 +- .../com/softwarejoint/bert/BertAtom.java | 2 +- .../com/softwarejoint/bert/BertDecoder.java | 2 +- .../com/softwarejoint/bert/BertEncoder.java | 2 +- .../com/softwarejoint/bert/BertTuple.java | 2 +- .../bert/DistributionHeader.java | 2 +- .../softwarejoint/bert/model/InitModel.java | 2 +- .../bert/model/ServerResponse.java | 6 +- .../ui/activities/EditProfileActivity.java | 10 +-- .../mobile}/ui/activities/MainActivity.java | 6 +- .../ui/activities/ProfileActivity.java | 10 +-- .../activities/QRCodeGeneratorActivity.java | 12 ++-- .../ui/activities/QRCodeReaderActivity.java | 71 +++++++++++++++++++ .../ui/activities/RegistrationActivity.java | 6 +- .../mobile}/ui/activities/SplashActivity.java | 8 +-- .../ui/activities/WelcomeActivity.java | 10 +-- .../ui/adapters/WelcomePagerAdapter.java | 4 +- .../mobile}/ui/base/BaseActivity.java | 2 +- .../mobile}/ui/base/BaseDialogFragment.java | 2 +- .../mobile}/ui/base/BaseFragment.java | 2 +- .../ui/dialogs/ChooserPhotoDialog.java | 8 +-- .../profile/EditProfileFragment.java | 14 ++-- .../fragments/profile/MyProfileFragment.java | 46 +++++++----- .../profile/UserProfileFragment.java | 6 +- .../ui/fragments/signin/CodeFragment.java | 6 +- .../ui/fragments/signin/InfoFragment.java | 4 +- .../ui/fragments/signin/LoginFragment.java | 20 +++--- .../ui/fragments/welcome/WelcomeFragment.java | 6 +- .../mobile}/ui/views/CirclePageIndicator.java | 4 +- .../mobile}/ui/views/HintEditText.java | 4 +- .../mobile}/ui/views/wheel/Circle.java | 2 +- .../mobile}/ui/views/wheel/DrawUtils.java | 2 +- .../mobile}/ui/views/wheel/TextDrawable.java | 2 +- .../mobile}/ui/views/wheel/WheelView.java | 14 ++-- .../ui/views/wheel/adapter/WheelAdapter.java | 4 +- .../wheel/adapter/WheelArrayAdapter.java | 2 +- .../FadingSelectionTransformer.java | 4 +- .../transformer/ScalingItemTransformer.java | 6 +- .../transformer/SimpleItemTransformer.java | 6 +- .../transformer/WheelItemTransformer.java | 4 +- .../WheelSelectionTransformer.java | 4 +- .../mobile}/utils/ImageUtils.java | 2 +- .../mobile}/utils/PhoneWatcher.java | 4 +- .../mobile}/utils/StringUtils.java | 2 +- .../mobile}/utils/ValidationUtils.java | 2 +- .../mobile}/utils/ZxingEncoder.java | 2 +- app/src/main/res/layout/activity_main.xml | 2 +- .../main/res/layout/activity_registration.xml | 4 +- app/src/main/res/layout/activity_welcome.xml | 4 +- .../main/res/layout/fragment_input_phone.xml | 4 +- .../main/res/layout/fragment_my_profile.xml | 19 +++-- app/src/main/res/xml/provider_paths.xml | 2 +- .../mobile}/ExampleUnitTest.java | 2 +- build.gradle | 1 + 77 files changed, 364 insertions(+), 184 deletions(-) create mode 100644 app/google-services.json rename app/src/androidTest/java/com/{tecsynt/nynja => ninja/mobile}/ExampleInstrumentedTest.java (96%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/NynjaApp.java (85%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/data/DataManager.java (81%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/data/models/Country.java (97%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/injection/ActivityContext.java (89%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/injection/ApplicationComponent.java (90%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/injection/ApplicationContext.java (89%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/injection/ApplicationModule.java (94%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/intetfaces/OnChooserPhotoDialogListener.java (79%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/models/Phone.java (95%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/models/UserPerson.java (98%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/mvp/presenters/EditProfilePresenter.java (86%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/mvp/presenters/LoginPresenter.java (83%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/mvp/presenters/MyProfilePresenter.java (88%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/mvp/presenters/SplashPresenter.java (74%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/mvp/view/EditProfileView.java (73%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/mvp/view/LoginView.java (86%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/mvp/view/MyProfileView.java (90%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/mvp/view/SplashView.java (82%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/server/PahoService.java (98%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/server/com/softwarejoint/bert/Bert.java (98%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/server/com/softwarejoint/bert/BertAtom.java (92%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/server/com/softwarejoint/bert/BertDecoder.java (99%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/server/com/softwarejoint/bert/BertEncoder.java (99%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/server/com/softwarejoint/bert/BertTuple.java (70%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/server/com/softwarejoint/bert/DistributionHeader.java (93%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/server/com/softwarejoint/bert/model/InitModel.java (67%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/server/com/softwarejoint/bert/model/ServerResponse.java (89%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/activities/EditProfileActivity.java (76%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/activities/MainActivity.java (68%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/activities/ProfileActivity.java (85%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/activities/QRCodeGeneratorActivity.java (85%) create mode 100644 app/src/main/java/com/ninja/mobile/ui/activities/QRCodeReaderActivity.java rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/activities/RegistrationActivity.java (80%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/activities/SplashActivity.java (81%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/activities/WelcomeActivity.java (82%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/adapters/WelcomePagerAdapter.java (85%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/base/BaseActivity.java (98%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/base/BaseDialogFragment.java (95%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/base/BaseFragment.java (96%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/dialogs/ChooserPhotoDialog.java (93%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/fragments/profile/EditProfileFragment.java (86%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/fragments/profile/MyProfileFragment.java (83%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/fragments/profile/UserProfileFragment.java (80%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/fragments/signin/CodeFragment.java (81%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/fragments/signin/InfoFragment.java (58%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/fragments/signin/LoginFragment.java (86%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/fragments/welcome/WelcomeFragment.java (83%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/views/CirclePageIndicator.java (99%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/views/HintEditText.java (97%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/views/wheel/Circle.java (98%) mode change 100755 => 100644 rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/views/wheel/DrawUtils.java (98%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/views/wheel/TextDrawable.java (96%) mode change 100755 => 100644 rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/views/wheel/WheelView.java (99%) mode change 100755 => 100644 rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/views/wheel/adapter/WheelAdapter.java (89%) mode change 100755 => 100644 rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/views/wheel/adapter/WheelArrayAdapter.java (87%) mode change 100755 => 100644 rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/views/wheel/transformer/FadingSelectionTransformer.java (83%) mode change 100755 => 100644 rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/views/wheel/transformer/ScalingItemTransformer.java (80%) mode change 100755 => 100644 rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/views/wheel/transformer/SimpleItemTransformer.java (76%) mode change 100755 => 100644 rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/views/wheel/transformer/WheelItemTransformer.java (74%) mode change 100755 => 100644 rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/ui/views/wheel/transformer/WheelSelectionTransformer.java (60%) mode change 100755 => 100644 rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/utils/ImageUtils.java (98%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/utils/PhoneWatcher.java (97%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/utils/StringUtils.java (92%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/utils/ValidationUtils.java (92%) rename app/src/main/java/com/{tecsynt/nynja => ninja/mobile}/utils/ZxingEncoder.java (99%) rename app/src/test/java/com/{tecsynt/nynja => ninja/mobile}/ExampleUnitTest.java (92%) diff --git a/app/build.gradle b/app/build.gradle index a3923fcaf9..0f6cbc9c7f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,7 +8,7 @@ android { buildToolsVersion "25.0.2" defaultConfig { - applicationId "com.tecsynt.nynja" + applicationId "com.nynja.mobile.communicator" minSdkVersion 17 //noinspection OldTargetApi targetSdkVersion 25 @@ -79,6 +79,7 @@ ext { daggerVersion = "2.10" moxyVersion = "1.4.6" rxJavaVersion = '2.1.0' + gcmLibraryVersion = '11.0.0' } dependencies { @@ -90,6 +91,7 @@ dependencies { compile "com.android.support:design:$supportLibraryVersion" compile 'com.android.support.constraint:constraint-layout:1.0.2' + compile 'com.google.android.gms:play-services:11.0.1' compile 'com.googlecode.libphonenumber:libphonenumber:8.5.2' //Logging @@ -131,9 +133,14 @@ dependencies { //RXPermissions compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar' + //Barcode scanner + compile 'me.dm7.barcodescanner:zbar:1.9.3' + androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) testCompile 'junit:junit:4.12' } + +apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000000..408d65ad23 --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,71 @@ +{ + "project_info": { + "project_number": "812739686465", + "project_id": "test-6d28a" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:812739686465:android:f34dd5122c81bed8", + "android_client_info": { + "package_name": "test.bo.kotlin" + } + }, + "oauth_client": [ + { + "client_id": "812739686465-g5khrfjrfqp11pdnon75tk5r5se0te4f.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAb71NYx7QM9bvFBSt--KkjQjayAsDjRu0" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 1, + "other_platform_oauth_client": [] + }, + "ads_service": { + "status": 1 + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:812739686465:android:1a9adeff9fbd3f48", + "android_client_info": { + "package_name": "com.nynja.mobile.communicator" + } + }, + "oauth_client": [ + { + "client_id": "812739686465-g5khrfjrfqp11pdnon75tk5r5se0te4f.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAb71NYx7QM9bvFBSt--KkjQjayAsDjRu0" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 1, + "other_platform_oauth_client": [] + }, + "ads_service": { + "status": 1 + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/tecsynt/nynja/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/ninja/mobile/ExampleInstrumentedTest.java similarity index 96% rename from app/src/androidTest/java/com/tecsynt/nynja/ExampleInstrumentedTest.java rename to app/src/androidTest/java/com/ninja/mobile/ExampleInstrumentedTest.java index e993f1ce37..7adea0d2eb 100644 --- a/app/src/androidTest/java/com/tecsynt/nynja/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/com/ninja/mobile/ExampleInstrumentedTest.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja; +package com.ninja.mobile; import android.content.Context; import android.support.test.InstrumentationRegistry; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3d49d7c04f..b015e8e6d3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="com.ninja.mobile"> @@ -17,7 +17,7 @@ - + @@ -37,21 +37,26 @@ - + - + - + + + + = Build.VERSION_CODES.LOLLIPOP) { + builder = new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert); + } else { + builder = new AlertDialog.Builder(this); + } + builder.setTitle("QR Scanner") + .setMessage("Format: " + rawResult.getBarcodeFormat().getName() + + " Result: " + rawResult.getContents()) + .setPositiveButton(android.R.string.yes, (dialog, which) -> { + // continue with delete + finish(); + }) + .show(); + } + + @OnClick(android.R.id.content) + public void onContentClick() { + finish(); + } +} diff --git a/app/src/main/java/com/tecsynt/nynja/ui/activities/RegistrationActivity.java b/app/src/main/java/com/ninja/mobile/ui/activities/RegistrationActivity.java similarity index 80% rename from app/src/main/java/com/tecsynt/nynja/ui/activities/RegistrationActivity.java rename to app/src/main/java/com/ninja/mobile/ui/activities/RegistrationActivity.java index 4313ffc4f0..f6d7e9c162 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/activities/RegistrationActivity.java +++ b/app/src/main/java/com/ninja/mobile/ui/activities/RegistrationActivity.java @@ -1,11 +1,11 @@ -package com.tecsynt.nynja.ui.activities; +package com.ninja.mobile.ui.activities; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import com.tecsynt.nynja.R; -import com.tecsynt.nynja.ui.base.BaseActivity; +import com.ninja.mobile.R; +import com.ninja.mobile.ui.base.BaseActivity; public class RegistrationActivity extends BaseActivity { diff --git a/app/src/main/java/com/tecsynt/nynja/ui/activities/SplashActivity.java b/app/src/main/java/com/ninja/mobile/ui/activities/SplashActivity.java similarity index 81% rename from app/src/main/java/com/tecsynt/nynja/ui/activities/SplashActivity.java rename to app/src/main/java/com/ninja/mobile/ui/activities/SplashActivity.java index cd1a29f462..edb948d1a2 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/activities/SplashActivity.java +++ b/app/src/main/java/com/ninja/mobile/ui/activities/SplashActivity.java @@ -1,13 +1,13 @@ -package com.tecsynt.nynja.ui.activities; +package com.ninja.mobile.ui.activities; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; -import com.tecsynt.nynja.R; -import com.tecsynt.nynja.server.PahoService; -import com.tecsynt.nynja.ui.base.BaseActivity; +import com.ninja.mobile.R; +import com.ninja.mobile.server.PahoService; +import com.ninja.mobile.ui.base.BaseActivity; /** * Created by Max Chervatiuk on 22.06.17. diff --git a/app/src/main/java/com/tecsynt/nynja/ui/activities/WelcomeActivity.java b/app/src/main/java/com/ninja/mobile/ui/activities/WelcomeActivity.java similarity index 82% rename from app/src/main/java/com/tecsynt/nynja/ui/activities/WelcomeActivity.java rename to app/src/main/java/com/ninja/mobile/ui/activities/WelcomeActivity.java index 334ddf0698..37172dc72d 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/activities/WelcomeActivity.java +++ b/app/src/main/java/com/ninja/mobile/ui/activities/WelcomeActivity.java @@ -1,12 +1,12 @@ -package com.tecsynt.nynja.ui.activities; +package com.ninja.mobile.ui.activities; import android.os.Bundle; import android.support.v4.view.ViewPager; -import com.tecsynt.nynja.R; -import com.tecsynt.nynja.ui.adapters.WelcomePagerAdapter; -import com.tecsynt.nynja.ui.base.BaseActivity; -import com.tecsynt.nynja.ui.views.CirclePageIndicator; +import com.ninja.mobile.R; +import com.ninja.mobile.ui.adapters.WelcomePagerAdapter; +import com.ninja.mobile.ui.base.BaseActivity; +import com.ninja.mobile.ui.views.CirclePageIndicator; import butterknife.BindView; import butterknife.OnClick; diff --git a/app/src/main/java/com/tecsynt/nynja/ui/adapters/WelcomePagerAdapter.java b/app/src/main/java/com/ninja/mobile/ui/adapters/WelcomePagerAdapter.java similarity index 85% rename from app/src/main/java/com/tecsynt/nynja/ui/adapters/WelcomePagerAdapter.java rename to app/src/main/java/com/ninja/mobile/ui/adapters/WelcomePagerAdapter.java index e2d3af7d4e..d09d6b0eb1 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/adapters/WelcomePagerAdapter.java +++ b/app/src/main/java/com/ninja/mobile/ui/adapters/WelcomePagerAdapter.java @@ -1,10 +1,10 @@ -package com.tecsynt.nynja.ui.adapters; +package com.ninja.mobile.ui.adapters; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; -import com.tecsynt.nynja.ui.fragments.welcome.WelcomeFragment; +import com.ninja.mobile.ui.fragments.welcome.WelcomeFragment; /** * Created by Max Chervatiuk on 24.06.17. diff --git a/app/src/main/java/com/tecsynt/nynja/ui/base/BaseActivity.java b/app/src/main/java/com/ninja/mobile/ui/base/BaseActivity.java similarity index 98% rename from app/src/main/java/com/tecsynt/nynja/ui/base/BaseActivity.java rename to app/src/main/java/com/ninja/mobile/ui/base/BaseActivity.java index 368eef3ffc..4b2925e6dd 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/base/BaseActivity.java +++ b/app/src/main/java/com/ninja/mobile/ui/base/BaseActivity.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.base; +package com.ninja.mobile.ui.base; import android.app.ProgressDialog; import android.content.Context; diff --git a/app/src/main/java/com/tecsynt/nynja/ui/base/BaseDialogFragment.java b/app/src/main/java/com/ninja/mobile/ui/base/BaseDialogFragment.java similarity index 95% rename from app/src/main/java/com/tecsynt/nynja/ui/base/BaseDialogFragment.java rename to app/src/main/java/com/ninja/mobile/ui/base/BaseDialogFragment.java index d4924a1d27..ca8e325eb7 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/base/BaseDialogFragment.java +++ b/app/src/main/java/com/ninja/mobile/ui/base/BaseDialogFragment.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.base; +package com.ninja.mobile.ui.base; /* * Created by Bo on 29.06.2017. diff --git a/app/src/main/java/com/tecsynt/nynja/ui/base/BaseFragment.java b/app/src/main/java/com/ninja/mobile/ui/base/BaseFragment.java similarity index 96% rename from app/src/main/java/com/tecsynt/nynja/ui/base/BaseFragment.java rename to app/src/main/java/com/ninja/mobile/ui/base/BaseFragment.java index dbb0c20ed0..a5dc28de7f 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/base/BaseFragment.java +++ b/app/src/main/java/com/ninja/mobile/ui/base/BaseFragment.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.base; +package com.ninja.mobile.ui.base; import android.os.Bundle; import android.support.annotation.Nullable; diff --git a/app/src/main/java/com/tecsynt/nynja/ui/dialogs/ChooserPhotoDialog.java b/app/src/main/java/com/ninja/mobile/ui/dialogs/ChooserPhotoDialog.java similarity index 93% rename from app/src/main/java/com/tecsynt/nynja/ui/dialogs/ChooserPhotoDialog.java rename to app/src/main/java/com/ninja/mobile/ui/dialogs/ChooserPhotoDialog.java index 9187c5f658..388c4dbfdb 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/dialogs/ChooserPhotoDialog.java +++ b/app/src/main/java/com/ninja/mobile/ui/dialogs/ChooserPhotoDialog.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.dialogs; +package com.ninja.mobile.ui.dialogs; /* * Created by Bo on 29.06.2017. @@ -16,9 +16,9 @@ import android.view.View; import android.view.ViewGroup; import android.view.Window; -import com.tecsynt.nynja.R; -import com.tecsynt.nynja.intetfaces.OnChooserPhotoDialogListener; -import com.tecsynt.nynja.ui.base.BaseDialogFragment; +import com.ninja.mobile.R; +import com.ninja.mobile.intetfaces.OnChooserPhotoDialogListener; +import com.ninja.mobile.ui.base.BaseDialogFragment; import butterknife.OnClick; diff --git a/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/EditProfileFragment.java b/app/src/main/java/com/ninja/mobile/ui/fragments/profile/EditProfileFragment.java similarity index 86% rename from app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/EditProfileFragment.java rename to app/src/main/java/com/ninja/mobile/ui/fragments/profile/EditProfileFragment.java index d41ba278c6..3f1e84764e 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/EditProfileFragment.java +++ b/app/src/main/java/com/ninja/mobile/ui/fragments/profile/EditProfileFragment.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.fragments.profile; +package com.ninja.mobile.ui.fragments.profile; import android.app.Activity; import android.content.Intent; @@ -10,12 +10,12 @@ import android.view.View; import android.view.ViewGroup; import com.arellomobile.mvp.presenter.InjectPresenter; -import com.tecsynt.nynja.R; -import com.tecsynt.nynja.models.UserPerson; -import com.tecsynt.nynja.mvp.presenters.EditProfilePresenter; -import com.tecsynt.nynja.mvp.view.EditProfileView; -import com.tecsynt.nynja.ui.base.BaseFragment; -import com.tecsynt.nynja.utils.StringUtils; +import com.ninja.mobile.R; +import com.ninja.mobile.models.UserPerson; +import com.ninja.mobile.mvp.presenters.EditProfilePresenter; +import com.ninja.mobile.mvp.view.EditProfileView; +import com.ninja.mobile.ui.base.BaseFragment; +import com.ninja.mobile.utils.StringUtils; import butterknife.BindView; import butterknife.OnClick; diff --git a/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/MyProfileFragment.java b/app/src/main/java/com/ninja/mobile/ui/fragments/profile/MyProfileFragment.java similarity index 83% rename from app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/MyProfileFragment.java rename to app/src/main/java/com/ninja/mobile/ui/fragments/profile/MyProfileFragment.java index 10602abd71..6a4b6d7f24 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/MyProfileFragment.java +++ b/app/src/main/java/com/ninja/mobile/ui/fragments/profile/MyProfileFragment.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.fragments.profile; +package com.ninja.mobile.ui.fragments.profile; import android.Manifest; import android.app.Activity; @@ -17,17 +17,18 @@ import android.widget.ImageView; import android.widget.TextView; import com.arellomobile.mvp.presenter.InjectPresenter; -import com.tecsynt.nynja.BuildConfig; -import com.tecsynt.nynja.R; -import com.tecsynt.nynja.intetfaces.OnChooserPhotoDialogListener; -import com.tecsynt.nynja.models.UserPerson; -import com.tecsynt.nynja.mvp.presenters.MyProfilePresenter; -import com.tecsynt.nynja.mvp.view.MyProfileView; -import com.tecsynt.nynja.ui.activities.EditProfileActivity; -import com.tecsynt.nynja.ui.activities.QRCodeGeneratorActivity; -import com.tecsynt.nynja.ui.base.BaseFragment; -import com.tecsynt.nynja.ui.dialogs.ChooserPhotoDialog; -import com.tecsynt.nynja.utils.ImageUtils; +import com.ninja.mobile.BuildConfig; +import com.ninja.mobile.R; +import com.ninja.mobile.intetfaces.OnChooserPhotoDialogListener; +import com.ninja.mobile.models.UserPerson; +import com.ninja.mobile.mvp.presenters.MyProfilePresenter; +import com.ninja.mobile.mvp.view.MyProfileView; +import com.ninja.mobile.ui.activities.EditProfileActivity; +import com.ninja.mobile.ui.activities.QRCodeGeneratorActivity; +import com.ninja.mobile.ui.activities.QRCodeReaderActivity; +import com.ninja.mobile.ui.base.BaseFragment; +import com.ninja.mobile.ui.dialogs.ChooserPhotoDialog; +import com.ninja.mobile.utils.ImageUtils; import java.io.File; import java.io.FileInputStream; @@ -48,6 +49,7 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, private static final int IMAGE_REQUEST_CODE = 42; private static final int GALLERY_REQUEST_CODE = 43; private static final int EDIT_PROFILE_REQUEST_CODE = 44; + private static final int QR_SCAN_REQUEST_CODE = 45; public static final String EDIT_PROFILE_TAG = "edit_profile"; @BindView(R.id.userphoto_myprofilefragment) @@ -94,6 +96,18 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, mPresenter.showChooserImageDialog(); } + @OnClick(R.id.scanner) + public void onScannerClick() { + //// FIXME: 29.06.2017 change place for call + rxPermissions + .request(Manifest.permission.CAMERA) + .subscribe(granted -> { + if (granted) { + startActivityForResult(QRCodeReaderActivity.getLaunchQRCodeReaderActivity(getContext()), QR_SCAN_REQUEST_CODE); + } + }); + } + @Override public void navigateToEditProfile() { startActivityForResult(EditProfileActivity.getLaunchEditProfileActivity(getContext(), @@ -107,8 +121,8 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, @Override public void navigateToCamera() { - rxPermissions. - request(Manifest.permission.CAMERA) + rxPermissions + .request(Manifest.permission.CAMERA) .subscribe(granted -> { if (granted) { startPhotoActivity(); @@ -140,8 +154,8 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, @Override public void navigateToGallery() { - rxPermissions. - request(Manifest.permission.READ_EXTERNAL_STORAGE) + rxPermissions + .request(Manifest.permission.READ_EXTERNAL_STORAGE) .subscribe(granted -> { if (granted) { startGalleryActivity(); diff --git a/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/UserProfileFragment.java b/app/src/main/java/com/ninja/mobile/ui/fragments/profile/UserProfileFragment.java similarity index 80% rename from app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/UserProfileFragment.java rename to app/src/main/java/com/ninja/mobile/ui/fragments/profile/UserProfileFragment.java index beb142124f..71e3f4300e 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/fragments/profile/UserProfileFragment.java +++ b/app/src/main/java/com/ninja/mobile/ui/fragments/profile/UserProfileFragment.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.fragments.profile; +package com.ninja.mobile.ui.fragments.profile; import android.os.Bundle; import android.support.annotation.Nullable; @@ -6,8 +6,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.tecsynt.nynja.R; -import com.tecsynt.nynja.ui.base.BaseFragment; +import com.ninja.mobile.R; +import com.ninja.mobile.ui.base.BaseFragment; /** * Created by dmitro.boiko on 27/06/2017. diff --git a/app/src/main/java/com/tecsynt/nynja/ui/fragments/signin/CodeFragment.java b/app/src/main/java/com/ninja/mobile/ui/fragments/signin/CodeFragment.java similarity index 81% rename from app/src/main/java/com/tecsynt/nynja/ui/fragments/signin/CodeFragment.java rename to app/src/main/java/com/ninja/mobile/ui/fragments/signin/CodeFragment.java index 5e4776704f..1e8ceea20d 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/fragments/signin/CodeFragment.java +++ b/app/src/main/java/com/ninja/mobile/ui/fragments/signin/CodeFragment.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.fragments.signin; +package com.ninja.mobile.ui.fragments.signin; import android.os.Bundle; import android.support.annotation.Nullable; @@ -6,8 +6,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.tecsynt.nynja.R; -import com.tecsynt.nynja.ui.base.BaseFragment; +import com.ninja.mobile.R; +import com.ninja.mobile.ui.base.BaseFragment; /** * Created by Max Chervatiuk on 23.06.17. diff --git a/app/src/main/java/com/tecsynt/nynja/ui/fragments/signin/InfoFragment.java b/app/src/main/java/com/ninja/mobile/ui/fragments/signin/InfoFragment.java similarity index 58% rename from app/src/main/java/com/tecsynt/nynja/ui/fragments/signin/InfoFragment.java rename to app/src/main/java/com/ninja/mobile/ui/fragments/signin/InfoFragment.java index 08affaea3f..dcc49fa5ab 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/fragments/signin/InfoFragment.java +++ b/app/src/main/java/com/ninja/mobile/ui/fragments/signin/InfoFragment.java @@ -1,6 +1,6 @@ -package com.tecsynt.nynja.ui.fragments.signin; +package com.ninja.mobile.ui.fragments.signin; -import com.tecsynt.nynja.ui.base.BaseFragment; +import com.ninja.mobile.ui.base.BaseFragment; /** * Created by Max Chervatiuk on 23.06.17. diff --git a/app/src/main/java/com/tecsynt/nynja/ui/fragments/signin/LoginFragment.java b/app/src/main/java/com/ninja/mobile/ui/fragments/signin/LoginFragment.java similarity index 86% rename from app/src/main/java/com/tecsynt/nynja/ui/fragments/signin/LoginFragment.java rename to app/src/main/java/com/ninja/mobile/ui/fragments/signin/LoginFragment.java index b9601a9fb8..704edcc425 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/fragments/signin/LoginFragment.java +++ b/app/src/main/java/com/ninja/mobile/ui/fragments/signin/LoginFragment.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.fragments.signin; +package com.ninja.mobile.ui.fragments.signin; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; @@ -14,15 +14,15 @@ import com.arellomobile.mvp.presenter.InjectPresenter; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; -import com.tecsynt.nynja.R; -import com.tecsynt.nynja.data.models.Country; -import com.tecsynt.nynja.mvp.presenters.LoginPresenter; -import com.tecsynt.nynja.mvp.view.LoginView; -import com.tecsynt.nynja.ui.activities.ProfileActivity; -import com.tecsynt.nynja.ui.base.BaseFragment; -import com.tecsynt.nynja.ui.views.wheel.TextDrawable; -import com.tecsynt.nynja.ui.views.wheel.WheelView; -import com.tecsynt.nynja.ui.views.wheel.adapter.WheelArrayAdapter; +import com.ninja.mobile.R; +import com.ninja.mobile.data.models.Country; +import com.ninja.mobile.mvp.presenters.LoginPresenter; +import com.ninja.mobile.mvp.view.LoginView; +import com.ninja.mobile.ui.activities.ProfileActivity; +import com.ninja.mobile.ui.base.BaseFragment; +import com.ninja.mobile.ui.views.wheel.TextDrawable; +import com.ninja.mobile.ui.views.wheel.WheelView; +import com.ninja.mobile.ui.views.wheel.adapter.WheelArrayAdapter; import java.io.InputStream; import java.io.InputStreamReader; diff --git a/app/src/main/java/com/tecsynt/nynja/ui/fragments/welcome/WelcomeFragment.java b/app/src/main/java/com/ninja/mobile/ui/fragments/welcome/WelcomeFragment.java similarity index 83% rename from app/src/main/java/com/tecsynt/nynja/ui/fragments/welcome/WelcomeFragment.java rename to app/src/main/java/com/ninja/mobile/ui/fragments/welcome/WelcomeFragment.java index 1292a6c75a..e54383ea83 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/fragments/welcome/WelcomeFragment.java +++ b/app/src/main/java/com/ninja/mobile/ui/fragments/welcome/WelcomeFragment.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.fragments.welcome; +package com.ninja.mobile.ui.fragments.welcome; import android.os.Bundle; import android.support.annotation.Nullable; @@ -6,8 +6,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.tecsynt.nynja.R; -import com.tecsynt.nynja.ui.base.BaseFragment; +import com.ninja.mobile.R; +import com.ninja.mobile.ui.base.BaseFragment; /** * Created by Max Chervatiuk on 24.06.17. diff --git a/app/src/main/java/com/tecsynt/nynja/ui/views/CirclePageIndicator.java b/app/src/main/java/com/ninja/mobile/ui/views/CirclePageIndicator.java similarity index 99% rename from app/src/main/java/com/tecsynt/nynja/ui/views/CirclePageIndicator.java rename to app/src/main/java/com/ninja/mobile/ui/views/CirclePageIndicator.java index edab43cb94..ca1d66888d 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/views/CirclePageIndicator.java +++ b/app/src/main/java/com/ninja/mobile/ui/views/CirclePageIndicator.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.views; +package com.ninja.mobile.ui.views; import android.content.Context; import android.content.res.TypedArray; @@ -16,7 +16,7 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; -import com.tecsynt.nynja.R; +import com.ninja.mobile.R; import static android.graphics.Paint.ANTI_ALIAS_FLAG; import static android.graphics.Paint.Style; diff --git a/app/src/main/java/com/tecsynt/nynja/ui/views/HintEditText.java b/app/src/main/java/com/ninja/mobile/ui/views/HintEditText.java similarity index 97% rename from app/src/main/java/com/tecsynt/nynja/ui/views/HintEditText.java rename to app/src/main/java/com/ninja/mobile/ui/views/HintEditText.java index 69e9068c01..40d28ca75f 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/views/HintEditText.java +++ b/app/src/main/java/com/ninja/mobile/ui/views/HintEditText.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.views; +package com.ninja.mobile.ui.views; import android.content.Context; import android.graphics.Canvas; @@ -7,7 +7,7 @@ import android.graphics.Rect; import android.support.v7.widget.AppCompatEditText; import android.util.AttributeSet; -import com.tecsynt.nynja.R; +import com.ninja.mobile.R; /** * Date: 25.06.17 diff --git a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/Circle.java b/app/src/main/java/com/ninja/mobile/ui/views/wheel/Circle.java old mode 100755 new mode 100644 similarity index 98% rename from app/src/main/java/com/tecsynt/nynja/ui/views/wheel/Circle.java rename to app/src/main/java/com/ninja/mobile/ui/views/wheel/Circle.java index 6d4fa88118..33a66766a7 --- a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/Circle.java +++ b/app/src/main/java/com/ninja/mobile/ui/views/wheel/Circle.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.views.wheel; +package com.ninja.mobile.ui.views.wheel; import android.graphics.Rect; diff --git a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/DrawUtils.java b/app/src/main/java/com/ninja/mobile/ui/views/wheel/DrawUtils.java similarity index 98% rename from app/src/main/java/com/tecsynt/nynja/ui/views/wheel/DrawUtils.java rename to app/src/main/java/com/ninja/mobile/ui/views/wheel/DrawUtils.java index e48945324a..1d88068e58 100644 --- a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/DrawUtils.java +++ b/app/src/main/java/com/ninja/mobile/ui/views/wheel/DrawUtils.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.views.wheel; +package com.ninja.mobile.ui.views.wheel; import android.graphics.Canvas; import android.graphics.Paint; diff --git a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/TextDrawable.java b/app/src/main/java/com/ninja/mobile/ui/views/wheel/TextDrawable.java old mode 100755 new mode 100644 similarity index 96% rename from app/src/main/java/com/tecsynt/nynja/ui/views/wheel/TextDrawable.java rename to app/src/main/java/com/ninja/mobile/ui/views/wheel/TextDrawable.java index 2339232945..cfe27b80c2 --- a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/TextDrawable.java +++ b/app/src/main/java/com/ninja/mobile/ui/views/wheel/TextDrawable.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.views.wheel; +package com.ninja.mobile.ui.views.wheel; import android.graphics.Canvas; import android.graphics.Color; diff --git a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/WheelView.java b/app/src/main/java/com/ninja/mobile/ui/views/wheel/WheelView.java old mode 100755 new mode 100644 similarity index 99% rename from app/src/main/java/com/tecsynt/nynja/ui/views/wheel/WheelView.java rename to app/src/main/java/com/ninja/mobile/ui/views/wheel/WheelView.java index fd439e164f..64ef55802c --- a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/WheelView.java +++ b/app/src/main/java/com/ninja/mobile/ui/views/wheel/WheelView.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.tecsynt.nynja.ui.views.wheel; +package com.ninja.mobile.ui.views.wheel; import android.content.Context; import android.content.res.TypedArray; @@ -35,12 +35,12 @@ import android.view.VelocityTracker; import android.view.View; import android.view.ViewGroup; -import com.tecsynt.nynja.R; -import com.tecsynt.nynja.ui.views.wheel.adapter.WheelAdapter; -import com.tecsynt.nynja.ui.views.wheel.transformer.FadingSelectionTransformer; -import com.tecsynt.nynja.ui.views.wheel.transformer.ScalingItemTransformer; -import com.tecsynt.nynja.ui.views.wheel.transformer.WheelItemTransformer; -import com.tecsynt.nynja.ui.views.wheel.transformer.WheelSelectionTransformer; +import com.ninja.mobile.R; +import com.ninja.mobile.ui.views.wheel.adapter.WheelAdapter; +import com.ninja.mobile.ui.views.wheel.transformer.FadingSelectionTransformer; +import com.ninja.mobile.ui.views.wheel.transformer.ScalingItemTransformer; +import com.ninja.mobile.ui.views.wheel.transformer.WheelItemTransformer; +import com.ninja.mobile.ui.views.wheel.transformer.WheelSelectionTransformer; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/adapter/WheelAdapter.java b/app/src/main/java/com/ninja/mobile/ui/views/wheel/adapter/WheelAdapter.java old mode 100755 new mode 100644 similarity index 89% rename from app/src/main/java/com/tecsynt/nynja/ui/views/wheel/adapter/WheelAdapter.java rename to app/src/main/java/com/ninja/mobile/ui/views/wheel/adapter/WheelAdapter.java index 06c84d49f0..354c9d5bc7 --- a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/adapter/WheelAdapter.java +++ b/app/src/main/java/com/ninja/mobile/ui/views/wheel/adapter/WheelAdapter.java @@ -1,8 +1,8 @@ -package com.tecsynt.nynja.ui.views.wheel.adapter; +package com.ninja.mobile.ui.views.wheel.adapter; import android.graphics.drawable.Drawable; -import com.tecsynt.nynja.ui.views.wheel.WheelView; +import com.ninja.mobile.ui.views.wheel.WheelView; /** *

diff --git a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/adapter/WheelArrayAdapter.java b/app/src/main/java/com/ninja/mobile/ui/views/wheel/adapter/WheelArrayAdapter.java old mode 100755 new mode 100644 similarity index 87% rename from app/src/main/java/com/tecsynt/nynja/ui/views/wheel/adapter/WheelArrayAdapter.java rename to app/src/main/java/com/ninja/mobile/ui/views/wheel/adapter/WheelArrayAdapter.java index 9b041784e1..acf622bcf2 --- a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/adapter/WheelArrayAdapter.java +++ b/app/src/main/java/com/ninja/mobile/ui/views/wheel/adapter/WheelArrayAdapter.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.ui.views.wheel.adapter; +package com.ninja.mobile.ui.views.wheel.adapter; import java.util.List; diff --git a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/FadingSelectionTransformer.java b/app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/FadingSelectionTransformer.java old mode 100755 new mode 100644 similarity index 83% rename from app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/FadingSelectionTransformer.java rename to app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/FadingSelectionTransformer.java index 88909d0e1c..f352e4ed74 --- a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/FadingSelectionTransformer.java +++ b/app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/FadingSelectionTransformer.java @@ -1,8 +1,8 @@ -package com.tecsynt.nynja.ui.views.wheel.transformer; +package com.ninja.mobile.ui.views.wheel.transformer; import android.graphics.drawable.Drawable; -import com.tecsynt.nynja.ui.views.wheel.WheelView; +import com.ninja.mobile.ui.views.wheel.WheelView; public class FadingSelectionTransformer implements WheelSelectionTransformer { diff --git a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/ScalingItemTransformer.java b/app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/ScalingItemTransformer.java old mode 100755 new mode 100644 similarity index 80% rename from app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/ScalingItemTransformer.java rename to app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/ScalingItemTransformer.java index 2f40d948f1..01189df7f5 --- a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/ScalingItemTransformer.java +++ b/app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/ScalingItemTransformer.java @@ -1,9 +1,9 @@ -package com.tecsynt.nynja.ui.views.wheel.transformer; +package com.ninja.mobile.ui.views.wheel.transformer; import android.graphics.Rect; -import com.tecsynt.nynja.ui.views.wheel.Circle; -import com.tecsynt.nynja.ui.views.wheel.WheelView; +import com.ninja.mobile.ui.views.wheel.Circle; +import com.ninja.mobile.ui.views.wheel.WheelView; public class ScalingItemTransformer implements WheelItemTransformer { diff --git a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/SimpleItemTransformer.java b/app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/SimpleItemTransformer.java old mode 100755 new mode 100644 similarity index 76% rename from app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/SimpleItemTransformer.java rename to app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/SimpleItemTransformer.java index 291365f413..0f7440390c --- a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/SimpleItemTransformer.java +++ b/app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/SimpleItemTransformer.java @@ -1,9 +1,9 @@ -package com.tecsynt.nynja.ui.views.wheel.transformer; +package com.ninja.mobile.ui.views.wheel.transformer; import android.graphics.Rect; -import com.tecsynt.nynja.ui.views.wheel.Circle; -import com.tecsynt.nynja.ui.views.wheel.WheelView; +import com.ninja.mobile.ui.views.wheel.Circle; +import com.ninja.mobile.ui.views.wheel.WheelView; public class SimpleItemTransformer implements WheelItemTransformer { diff --git a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/WheelItemTransformer.java b/app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/WheelItemTransformer.java old mode 100755 new mode 100644 similarity index 74% rename from app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/WheelItemTransformer.java rename to app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/WheelItemTransformer.java index 919d9d2b5a..47be16e626 --- a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/WheelItemTransformer.java +++ b/app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/WheelItemTransformer.java @@ -1,8 +1,8 @@ -package com.tecsynt.nynja.ui.views.wheel.transformer; +package com.ninja.mobile.ui.views.wheel.transformer; import android.graphics.Rect; -import com.tecsynt.nynja.ui.views.wheel.WheelView; +import com.ninja.mobile.ui.views.wheel.WheelView; public interface WheelItemTransformer { diff --git a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/WheelSelectionTransformer.java b/app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/WheelSelectionTransformer.java old mode 100755 new mode 100644 similarity index 60% rename from app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/WheelSelectionTransformer.java rename to app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/WheelSelectionTransformer.java index 34c9a00550..a63f67c912 --- a/app/src/main/java/com/tecsynt/nynja/ui/views/wheel/transformer/WheelSelectionTransformer.java +++ b/app/src/main/java/com/ninja/mobile/ui/views/wheel/transformer/WheelSelectionTransformer.java @@ -1,8 +1,8 @@ -package com.tecsynt.nynja.ui.views.wheel.transformer; +package com.ninja.mobile.ui.views.wheel.transformer; import android.graphics.drawable.Drawable; -import com.tecsynt.nynja.ui.views.wheel.WheelView; +import com.ninja.mobile.ui.views.wheel.WheelView; public interface WheelSelectionTransformer { diff --git a/app/src/main/java/com/tecsynt/nynja/utils/ImageUtils.java b/app/src/main/java/com/ninja/mobile/utils/ImageUtils.java similarity index 98% rename from app/src/main/java/com/tecsynt/nynja/utils/ImageUtils.java rename to app/src/main/java/com/ninja/mobile/utils/ImageUtils.java index dd40acacab..6872a07a51 100644 --- a/app/src/main/java/com/tecsynt/nynja/utils/ImageUtils.java +++ b/app/src/main/java/com/ninja/mobile/utils/ImageUtils.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.utils; +package com.ninja.mobile.utils; /* * Created by Bo on 29.06.2017. diff --git a/app/src/main/java/com/tecsynt/nynja/utils/PhoneWatcher.java b/app/src/main/java/com/ninja/mobile/utils/PhoneWatcher.java similarity index 97% rename from app/src/main/java/com/tecsynt/nynja/utils/PhoneWatcher.java rename to app/src/main/java/com/ninja/mobile/utils/PhoneWatcher.java index c0e16ca9bf..f9ddd7b850 100644 --- a/app/src/main/java/com/tecsynt/nynja/utils/PhoneWatcher.java +++ b/app/src/main/java/com/ninja/mobile/utils/PhoneWatcher.java @@ -1,9 +1,9 @@ -package com.tecsynt.nynja.utils; +package com.ninja.mobile.utils; import android.text.Editable; import android.text.TextWatcher; -import com.tecsynt.nynja.ui.views.HintEditText; +import com.ninja.mobile.ui.views.HintEditText; /** * Date: 25.06.17 diff --git a/app/src/main/java/com/tecsynt/nynja/utils/StringUtils.java b/app/src/main/java/com/ninja/mobile/utils/StringUtils.java similarity index 92% rename from app/src/main/java/com/tecsynt/nynja/utils/StringUtils.java rename to app/src/main/java/com/ninja/mobile/utils/StringUtils.java index 27bd2fd5c0..24773ccb48 100644 --- a/app/src/main/java/com/tecsynt/nynja/utils/StringUtils.java +++ b/app/src/main/java/com/ninja/mobile/utils/StringUtils.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.utils; +package com.ninja.mobile.utils; /* * Created by Bo on 29.06.2017. diff --git a/app/src/main/java/com/tecsynt/nynja/utils/ValidationUtils.java b/app/src/main/java/com/ninja/mobile/utils/ValidationUtils.java similarity index 92% rename from app/src/main/java/com/tecsynt/nynja/utils/ValidationUtils.java rename to app/src/main/java/com/ninja/mobile/utils/ValidationUtils.java index 129ef6ecea..84a0d8b565 100644 --- a/app/src/main/java/com/tecsynt/nynja/utils/ValidationUtils.java +++ b/app/src/main/java/com/ninja/mobile/utils/ValidationUtils.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.utils; +package com.ninja.mobile.utils; import android.util.Patterns; diff --git a/app/src/main/java/com/tecsynt/nynja/utils/ZxingEncoder.java b/app/src/main/java/com/ninja/mobile/utils/ZxingEncoder.java similarity index 99% rename from app/src/main/java/com/tecsynt/nynja/utils/ZxingEncoder.java rename to app/src/main/java/com/ninja/mobile/utils/ZxingEncoder.java index 0183746c73..8fd0dcd079 100644 --- a/app/src/main/java/com/tecsynt/nynja/utils/ZxingEncoder.java +++ b/app/src/main/java/com/ninja/mobile/utils/ZxingEncoder.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja.utils; +package com.ninja.mobile.utils; import android.graphics.Bitmap; import android.graphics.Color; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 5474db71cd..9d71988b72 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,7 +5,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="com.tecsynt.nynja.ui.activities.MainActivity"> + tools:context="com.ninja.mobile.ui.activities.MainActivity"> + tools:context="com.ninja.mobile.ui.activities.RegistrationActivity"> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_welcome.xml b/app/src/main/res/layout/activity_welcome.xml index 7d8002f9f5..b80b19f020 100644 --- a/app/src/main/res/layout/activity_welcome.xml +++ b/app/src/main/res/layout/activity_welcome.xml @@ -5,14 +5,14 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="com.tecsynt.nynja.ui.activities.WelcomeActivity"> + tools:context="com.ninja.mobile.ui.activities.WelcomeActivity"> - - + + + @@ -49,18 +60,18 @@ android:id="@+id/username_myprofilefragment" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center" android:layout_marginTop="17dp" android:background="@android:color/transparent" android:drawableEnd="@drawable/v_icon_edit" + android:drawablePadding="8dp" android:gravity="end" android:maxLines="1" - android:layout_gravity="center" android:paddingEnd="42dp" android:paddingStart="42dp" - tools:text="Marshall Taplits" - android:drawablePadding="8dp" android:textColor="@color/colorAccent" - android:textSize="31sp" /> + android:textSize="31sp" + tools:text="Marshall Taplits" /> - + \ No newline at end of file diff --git a/app/src/test/java/com/tecsynt/nynja/ExampleUnitTest.java b/app/src/test/java/com/ninja/mobile/ExampleUnitTest.java similarity index 92% rename from app/src/test/java/com/tecsynt/nynja/ExampleUnitTest.java rename to app/src/test/java/com/ninja/mobile/ExampleUnitTest.java index 15fe8beed7..6fe237bfe5 100644 --- a/app/src/test/java/com/tecsynt/nynja/ExampleUnitTest.java +++ b/app/src/test/java/com/ninja/mobile/ExampleUnitTest.java @@ -1,4 +1,4 @@ -package com.tecsynt.nynja; +package com.ninja.mobile; import org.junit.Test; diff --git a/build.gradle b/build.gradle index 15429c62eb..f627b4144c 100644 --- a/build.gradle +++ b/build.gradle @@ -7,6 +7,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:2.3.2' classpath 'me.tatarka:gradle-retrolambda:3.6.1' + classpath 'com.google.gms:google-services:3.0.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } -- GitLab From ea24d4ca13bb534f24f31768d42857109de1c0bc Mon Sep 17 00:00:00 2001 From: BoykoDmytro Date: Fri, 30 Jun 2017 18:44:37 +0300 Subject: [PATCH 3/4] add models, add glide for user profile, fixed bugs, add multidex --- app/build.gradle | 5 +- .../main/java/com/ninja/mobile/NynjaApp.java | 11 +- .../java/com/ninja/mobile/models/Account.java | 74 ++++++++++++ .../models/{UserPerson.java => Person.java} | 37 +++--- .../java/com/ninja/mobile/models/Room.java | 67 +++++++++++ .../java/com/ninja/mobile/models/Roster.java | 80 +++++++++++++ .../java/com/ninja/mobile/models/User.java | 81 +++++++++++++ .../mvp/presenters/EditProfilePresenter.java | 9 +- .../mobile/mvp/view/EditProfileView.java | 4 +- .../ui/activities/EditProfileActivity.java | 6 +- .../activities/QRCodeGeneratorActivity.java | 12 +- .../profile/EditProfileFragment.java | 12 +- .../fragments/profile/MyProfileFragment.java | 109 ++++++++++-------- .../com/ninja/mobile/utils/RealPathUtil.java | 68 +++++++++++ .../ninja/mobile/utils/ValidationUtils.java | 4 + .../main/res/layout/fragment_my_profile.xml | 2 +- app/src/main/res/xml/provider_paths.xml | 2 +- build.gradle | 2 +- 18 files changed, 498 insertions(+), 87 deletions(-) create mode 100644 app/src/main/java/com/ninja/mobile/models/Account.java rename app/src/main/java/com/ninja/mobile/models/{UserPerson.java => Person.java} (58%) create mode 100644 app/src/main/java/com/ninja/mobile/models/Room.java create mode 100644 app/src/main/java/com/ninja/mobile/models/Roster.java create mode 100644 app/src/main/java/com/ninja/mobile/models/User.java create mode 100644 app/src/main/java/com/ninja/mobile/utils/RealPathUtil.java diff --git a/app/build.gradle b/app/build.gradle index 0f6cbc9c7f..4e71f7ff09 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,6 +17,7 @@ android { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true + multiDexEnabled true } compileOptions { @@ -90,8 +91,10 @@ dependencies { compile "com.android.support:appcompat-v7:$supportLibraryVersion" compile "com.android.support:design:$supportLibraryVersion" compile 'com.android.support.constraint:constraint-layout:1.0.2' + compile 'com.android.support:multidex:1.0.1' - compile 'com.google.android.gms:play-services:11.0.1' + + compile 'com.google.android.gms:play-services-maps:11.0.1' compile 'com.googlecode.libphonenumber:libphonenumber:8.5.2' //Logging diff --git a/app/src/main/java/com/ninja/mobile/NynjaApp.java b/app/src/main/java/com/ninja/mobile/NynjaApp.java index 044fea0f09..b83abc4d47 100644 --- a/app/src/main/java/com/ninja/mobile/NynjaApp.java +++ b/app/src/main/java/com/ninja/mobile/NynjaApp.java @@ -2,6 +2,8 @@ package com.ninja.mobile; import android.app.Application; import android.content.Context; +import android.support.multidex.MultiDex; +import android.support.multidex.MultiDexApplication; import com.ninja.mobile.injection.ApplicationComponent; import com.ninja.mobile.injection.ApplicationModule; @@ -14,7 +16,7 @@ import timber.log.Timber; * Email: duo.blood@gmail.com */ -public class NynjaApp extends Application { +public class NynjaApp extends MultiDexApplication { private ApplicationComponent mApplicationComponent; @@ -29,6 +31,13 @@ public class NynjaApp extends Application { } + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(base); + MultiDex.install(this); + } + + public static NynjaApp get(Context context) { return (NynjaApp) context.getApplicationContext(); } diff --git a/app/src/main/java/com/ninja/mobile/models/Account.java b/app/src/main/java/com/ninja/mobile/models/Account.java new file mode 100644 index 0000000000..d623022c75 --- /dev/null +++ b/app/src/main/java/com/ninja/mobile/models/Account.java @@ -0,0 +1,74 @@ +package com.ninja.mobile.models; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Created by dmitro.boiko on 30/06/2017. + */ + +public class Account implements Parcelable { + + public long id; + public String status; + public Person person = new Person(); + public Roster roster = new Roster(); + + public Account() { + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Person getPerson() { + return person; + } + + public void setPerson(Person person) { + this.person = person; + } + + public Roster getRoster() { + return roster; + } + + public void setRoster(Roster roster) { + this.roster = roster; + } + + + @Override public int describeContents() { return 0; } + + @Override public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(this.id); + dest.writeString(this.status); + dest.writeParcelable(this.person, flags); + dest.writeParcelable(this.roster, flags); + } + + protected Account(Parcel in) { + this.id = in.readLong(); + this.status = in.readString(); + this.person = in.readParcelable(Person.class.getClassLoader()); + this.roster = in.readParcelable(Roster.class.getClassLoader()); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override public Account createFromParcel(Parcel source) {return new Account(source);} + + @Override public Account[] newArray(int size) {return new Account[size];} + }; +} diff --git a/app/src/main/java/com/ninja/mobile/models/UserPerson.java b/app/src/main/java/com/ninja/mobile/models/Person.java similarity index 58% rename from app/src/main/java/com/ninja/mobile/models/UserPerson.java rename to app/src/main/java/com/ninja/mobile/models/Person.java index 2b454ea252..f8c7aa47fb 100644 --- a/app/src/main/java/com/ninja/mobile/models/UserPerson.java +++ b/app/src/main/java/com/ninja/mobile/models/Person.java @@ -10,13 +10,15 @@ import android.os.Parcelable; import java.util.ArrayList; import java.util.List; -public class UserPerson implements Parcelable { +public class Person implements Parcelable { private String name; private String surname; + private String phoneNumber; private List phoneList = new ArrayList<>(); - public UserPerson() { + public Person() { + phoneList.add(new Phone()); } public String getName() { @@ -47,33 +49,34 @@ public class UserPerson implements Parcelable { return (name + " " + surname).trim(); } - @Override - public int describeContents() { - return 0; + public String getPhoneNumber() { + return phoneNumber; } - @Override - public void writeToParcel(Parcel dest, int flags) { + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + + @Override public int describeContents() { return 0; } + + @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.name); dest.writeString(this.surname); + dest.writeString(this.phoneNumber); dest.writeTypedList(this.phoneList); } - protected UserPerson(Parcel in) { + protected Person(Parcel in) { this.name = in.readString(); this.surname = in.readString(); + this.phoneNumber = in.readString(); this.phoneList = in.createTypedArrayList(Phone.CREATOR); } - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { - @Override - public UserPerson createFromParcel(Parcel source) { - return new UserPerson(source); - } + public static final Creator CREATOR = new Creator() { + @Override public Person createFromParcel(Parcel source) {return new Person(source);} - @Override - public UserPerson[] newArray(int size) { - return new UserPerson[size]; - } + @Override public Person[] newArray(int size) {return new Person[size];} }; } diff --git a/app/src/main/java/com/ninja/mobile/models/Room.java b/app/src/main/java/com/ninja/mobile/models/Room.java new file mode 100644 index 0000000000..5b8896991b --- /dev/null +++ b/app/src/main/java/com/ninja/mobile/models/Room.java @@ -0,0 +1,67 @@ +package com.ninja.mobile.models; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by dmitro.boiko on 30/06/2017. + */ + +class Room implements Parcelable { + + private long id; + private String title; + private List roommembers = new ArrayList<>(); + + public Room() { + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List getRoommembers() { + return roommembers; + } + + public void setRoommembers(List roommembers) { + this.roommembers = roommembers; + } + + + @Override public int describeContents() { return 0; } + + @Override public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(this.id); + dest.writeString(this.title); + dest.writeList(this.roommembers); + } + + protected Room(Parcel in) { + this.id = in.readLong(); + this.title = in.readString(); + this.roommembers = new ArrayList<>(); + in.readList(this.roommembers, Account.class.getClassLoader()); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override public Room createFromParcel(Parcel source) {return new Room(source);} + + @Override public Room[] newArray(int size) {return new Room[size];} + }; +} diff --git a/app/src/main/java/com/ninja/mobile/models/Roster.java b/app/src/main/java/com/ninja/mobile/models/Roster.java new file mode 100644 index 0000000000..db8bcaa08d --- /dev/null +++ b/app/src/main/java/com/ninja/mobile/models/Roster.java @@ -0,0 +1,80 @@ +package com.ninja.mobile.models; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by dmitro.boiko on 30/06/2017. + */ + +public class Roster implements Parcelable { + + private List contacts = new ArrayList<>(); + private List roomlist = new ArrayList<>(); + private long contactssize; + private long roomlistsize; + + public Roster() { + roomlist.add(new Room()); + } + + + public List getContacts() { + return contacts; + } + + public void setContacts(List contacts) { + this.contacts = contacts; + } + + public List getRoomlist() { + return roomlist; + } + + public void setRoomlist(List roomlist) { + this.roomlist = roomlist; + } + + public long getContactssize() { + return contactssize; + } + + public void setContactssize(long contactssize) { + this.contactssize = contactssize; + } + + public long getRoomlistsize() { + return roomlistsize; + } + + public void setRoomlistsize(long roomlistsize) { + this.roomlistsize = roomlistsize; + } + + + @Override public int describeContents() { return 0; } + + @Override public void writeToParcel(Parcel dest, int flags) { + dest.writeList(this.contacts); + dest.writeTypedList(this.roomlist); + dest.writeLong(this.contactssize); + dest.writeLong(this.roomlistsize); + } + + protected Roster(Parcel in) { + this.contacts = new ArrayList<>(); + in.readList(this.contacts, Account.class.getClassLoader()); + this.roomlist = in.createTypedArrayList(Room.CREATOR); + this.contactssize = in.readLong(); + this.roomlistsize = in.readLong(); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override public Roster createFromParcel(Parcel source) {return new Roster(source);} + + @Override public Roster[] newArray(int size) {return new Roster[size];} + }; +} diff --git a/app/src/main/java/com/ninja/mobile/models/User.java b/app/src/main/java/com/ninja/mobile/models/User.java new file mode 100644 index 0000000000..d958a54424 --- /dev/null +++ b/app/src/main/java/com/ninja/mobile/models/User.java @@ -0,0 +1,81 @@ +package com.ninja.mobile.models; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by dmitro.boiko on 30/06/2017. + */ + +public class User implements Parcelable { + + public long userid; + public String phonenumber; + public String status; + + public List accounts = new ArrayList<>(); + + public User() { + } + + public long getUserid() { + return userid; + } + + public void setUserid(long userid) { + this.userid = userid; + } + + public String getPhonenumber() { + return phonenumber; + } + + public void setPhonenumber(String phonenumber) { + this.phonenumber = phonenumber; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public List getAccounts() { + return accounts; + } + + public void setAccounts(List accounts) { + this.accounts = accounts; + } + + public Account getAccount() { + return getAccounts().get(0); + } + + @Override public int describeContents() { return 0; } + + @Override public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(this.userid); + dest.writeString(this.phonenumber); + dest.writeString(this.status); + dest.writeTypedList(this.accounts); + } + + protected User(Parcel in) { + this.userid = in.readLong(); + this.phonenumber = in.readString(); + this.status = in.readString(); + this.accounts = in.createTypedArrayList(Account.CREATOR); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override public User createFromParcel(Parcel source) {return new User(source);} + + @Override public User[] newArray(int size) {return new User[size];} + }; +} diff --git a/app/src/main/java/com/ninja/mobile/mvp/presenters/EditProfilePresenter.java b/app/src/main/java/com/ninja/mobile/mvp/presenters/EditProfilePresenter.java index 735e4af94c..1c3df1e4ff 100644 --- a/app/src/main/java/com/ninja/mobile/mvp/presenters/EditProfilePresenter.java +++ b/app/src/main/java/com/ninja/mobile/mvp/presenters/EditProfilePresenter.java @@ -4,9 +4,9 @@ import android.text.TextUtils; import com.arellomobile.mvp.InjectViewState; import com.arellomobile.mvp.MvpPresenter; -import com.ninja.mobile.models.UserPerson; +import com.ninja.mobile.models.Person; import com.ninja.mobile.mvp.view.EditProfileView; -import com.ninja.mobile.utils.StringUtils; +import com.ninja.mobile.utils.ValidationUtils; /** * Date: 25.06.17 @@ -23,13 +23,14 @@ public class EditProfilePresenter extends MvpPresenter { } public void saveClick(String firstName, String lastName) { - if (StringUtils.isNotEmpty(firstName) && firstName.length() > 2) { + if (ValidationUtils.isNameVaild(firstName)) { //// FIXME: 29.06.2017 update on server - UserPerson userPerson = new UserPerson(); + Person userPerson = new Person(); userPerson.setName(firstName); userPerson.setSurname(lastName); getViewState().onSaveClick(userPerson); } else { + //// FIXME: 30/06/2017 add error messages String errorMessage; if (TextUtils.isEmpty(firstName)) { errorMessage = "FirstName cannot be empty."; diff --git a/app/src/main/java/com/ninja/mobile/mvp/view/EditProfileView.java b/app/src/main/java/com/ninja/mobile/mvp/view/EditProfileView.java index 30145e83b0..ec57500bd7 100644 --- a/app/src/main/java/com/ninja/mobile/mvp/view/EditProfileView.java +++ b/app/src/main/java/com/ninja/mobile/mvp/view/EditProfileView.java @@ -5,11 +5,11 @@ package com.ninja.mobile.mvp.view; */ import com.arellomobile.mvp.MvpView; -import com.ninja.mobile.models.UserPerson; +import com.ninja.mobile.models.Person; public interface EditProfileView extends MvpView { void onErrorMessage(String errorMessage); - void onSaveClick(UserPerson userPerson); + void onSaveClick(Person userPerson); } diff --git a/app/src/main/java/com/ninja/mobile/ui/activities/EditProfileActivity.java b/app/src/main/java/com/ninja/mobile/ui/activities/EditProfileActivity.java index 3638eb35ac..47b5bd44cb 100644 --- a/app/src/main/java/com/ninja/mobile/ui/activities/EditProfileActivity.java +++ b/app/src/main/java/com/ninja/mobile/ui/activities/EditProfileActivity.java @@ -4,7 +4,7 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; -import com.ninja.mobile.models.UserPerson; +import com.ninja.mobile.models.User; import com.ninja.mobile.ui.base.BaseActivity; import com.ninja.mobile.ui.fragments.profile.EditProfileFragment; import com.ninja.mobile.ui.fragments.profile.MyProfileFragment; @@ -15,9 +15,9 @@ import com.ninja.mobile.ui.fragments.profile.MyProfileFragment; public class EditProfileActivity extends BaseActivity { - public static Intent getLaunchEditProfileActivity(Context context, UserPerson userPerson) { + public static Intent getLaunchEditProfileActivity(Context context, User user) { Intent intent = new Intent(context, EditProfileActivity.class); - intent.putExtra(MyProfileFragment.EDIT_PROFILE_TAG, userPerson); + intent.putExtra(MyProfileFragment.EDIT_PROFILE_TAG, user); return intent; } diff --git a/app/src/main/java/com/ninja/mobile/ui/activities/QRCodeGeneratorActivity.java b/app/src/main/java/com/ninja/mobile/ui/activities/QRCodeGeneratorActivity.java index d3b0ddb2a0..f7ac1a7acc 100644 --- a/app/src/main/java/com/ninja/mobile/ui/activities/QRCodeGeneratorActivity.java +++ b/app/src/main/java/com/ninja/mobile/ui/activities/QRCodeGeneratorActivity.java @@ -8,7 +8,8 @@ import android.widget.ImageView; import com.google.zxing.WriterException; import com.ninja.mobile.R; -import com.ninja.mobile.models.UserPerson; +import com.ninja.mobile.models.Person; +import com.ninja.mobile.models.User; import com.ninja.mobile.ui.base.BaseActivity; import com.ninja.mobile.ui.fragments.profile.MyProfileFragment; import com.ninja.mobile.utils.ZxingEncoder; @@ -26,9 +27,9 @@ public class QRCodeGeneratorActivity extends BaseActivity { @BindView(R.id.qr_code_qrcodegeneratoractivity) ImageView qrCode; - public static Intent getLaunchQRCodeGeneratorActivity(Context context, UserPerson userPerson) { + public static Intent getLaunchQRCodeGeneratorActivity(Context context, User user) { Intent intent = new Intent(context, QRCodeGeneratorActivity.class); - intent.putExtra(MyProfileFragment.EDIT_PROFILE_TAG, userPerson); + intent.putExtra(MyProfileFragment.EDIT_PROFILE_TAG, user); return intent; } @@ -39,8 +40,9 @@ public class QRCodeGeneratorActivity extends BaseActivity { if (getIntent() != null && getIntent().getExtras() != null) { try { //// FIXME: 29.06.2017 add real data - UserPerson userPerson = getIntent().getParcelableExtra(MyProfileFragment.EDIT_PROFILE_TAG); - String data = userPerson.getPhoneList().get(0) + ";" + userPerson.getFullName(); + User user = getIntent().getParcelableExtra(MyProfileFragment.EDIT_PROFILE_TAG); + Person person = user.getAccounts().get(0).getPerson(); + String data = person.getPhoneNumber() + ";" + person.getFullName(); Bitmap qrCodeBitmap = ZxingEncoder.getInstance().generate_QR_CODE(data); qrCode.setImageBitmap(qrCodeBitmap); } catch (WriterException e) { diff --git a/app/src/main/java/com/ninja/mobile/ui/fragments/profile/EditProfileFragment.java b/app/src/main/java/com/ninja/mobile/ui/fragments/profile/EditProfileFragment.java index 3f1e84764e..ac15d68b88 100644 --- a/app/src/main/java/com/ninja/mobile/ui/fragments/profile/EditProfileFragment.java +++ b/app/src/main/java/com/ninja/mobile/ui/fragments/profile/EditProfileFragment.java @@ -11,7 +11,7 @@ import android.view.ViewGroup; import com.arellomobile.mvp.presenter.InjectPresenter; import com.ninja.mobile.R; -import com.ninja.mobile.models.UserPerson; +import com.ninja.mobile.models.Person; import com.ninja.mobile.mvp.presenters.EditProfilePresenter; import com.ninja.mobile.mvp.view.EditProfileView; import com.ninja.mobile.ui.base.BaseFragment; @@ -45,12 +45,12 @@ public class EditProfileFragment extends BaseFragment implements EditProfileView public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (getArguments() != null) { - UserPerson userPerson = getArguments().getParcelable(MyProfileFragment.EDIT_PROFILE_TAG); - setUserModel(userPerson); + Person person = getArguments().getParcelable(MyProfileFragment.EDIT_PROFILE_TAG); + setUserModel(person); } } - private void setUserModel(UserPerson userPerson) { + private void setUserModel(Person userPerson) { firstName.setText(userPerson.getName()); lastName.setText(userPerson.getSurname()); } @@ -66,9 +66,9 @@ public class EditProfileFragment extends BaseFragment implements EditProfileView } @Override - public void onSaveClick(UserPerson userPerson) { + public void onSaveClick(Person user) { Intent intent = new Intent(); - intent.putExtra(MyProfileFragment.EDIT_PROFILE_TAG, userPerson); + intent.putExtra(MyProfileFragment.EDIT_PROFILE_TAG, user); getActivity().setResult(Activity.RESULT_OK, intent); getActivity().finish(); } diff --git a/app/src/main/java/com/ninja/mobile/ui/fragments/profile/MyProfileFragment.java b/app/src/main/java/com/ninja/mobile/ui/fragments/profile/MyProfileFragment.java index 6a4b6d7f24..3ba03807e8 100644 --- a/app/src/main/java/com/ninja/mobile/ui/fragments/profile/MyProfileFragment.java +++ b/app/src/main/java/com/ninja/mobile/ui/fragments/profile/MyProfileFragment.java @@ -2,9 +2,9 @@ package com.ninja.mobile.ui.fragments.profile; import android.Manifest; import android.app.Activity; +import android.content.ContentResolver; import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; +import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; @@ -17,10 +17,13 @@ import android.widget.ImageView; import android.widget.TextView; import com.arellomobile.mvp.presenter.InjectPresenter; +import com.bumptech.glide.Glide; import com.ninja.mobile.BuildConfig; import com.ninja.mobile.R; import com.ninja.mobile.intetfaces.OnChooserPhotoDialogListener; -import com.ninja.mobile.models.UserPerson; +import com.ninja.mobile.models.Account; +import com.ninja.mobile.models.Person; +import com.ninja.mobile.models.User; import com.ninja.mobile.mvp.presenters.MyProfilePresenter; import com.ninja.mobile.mvp.view.MyProfileView; import com.ninja.mobile.ui.activities.EditProfileActivity; @@ -29,15 +32,15 @@ import com.ninja.mobile.ui.activities.QRCodeReaderActivity; import com.ninja.mobile.ui.base.BaseFragment; import com.ninja.mobile.ui.dialogs.ChooserPhotoDialog; import com.ninja.mobile.utils.ImageUtils; +import com.ninja.mobile.utils.RealPathUtil; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; import butterknife.BindView; import butterknife.OnClick; import butterknife.Optional; +import jp.wasabeef.glide.transformations.CropCircleTransformation; /** * Created by dmitro.boiko on 27/06/2017. @@ -61,7 +64,7 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, MyProfilePresenter mPresenter; private String photoPath; - private UserPerson userPerson; + private User user; @Nullable @Override @@ -69,15 +72,19 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, return inflater.inflate(R.layout.fragment_my_profile, container, false); } - @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); //// FIXME: 29.06.2017 set real user info - userPerson = new UserPerson(); - userPerson.setName("Marshall"); - userPerson.setSurname("Taplits"); - setUserModel(userPerson); + user = new User(); + Person person = new Person(); + person.setName("Marshall"); + person.setSurname("Taplits"); + person.setPhoneNumber("+380 56 234 567"); + Account account = new Account(); + account.setPerson(person); + user.getAccounts().add(account); + setPersonModel(person); } @OnClick(R.id.username_myprofilefragment) @@ -111,25 +118,17 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, @Override public void navigateToEditProfile() { startActivityForResult(EditProfileActivity.getLaunchEditProfileActivity(getContext(), - userPerson), EDIT_PROFILE_REQUEST_CODE); + user), EDIT_PROFILE_REQUEST_CODE); } @Override public void navigateToQqCode() { - startActivity(QRCodeGeneratorActivity.getLaunchQRCodeGeneratorActivity(getContext(), userPerson)); + startActivity(QRCodeGeneratorActivity.getLaunchQRCodeGeneratorActivity(getContext(), user)); } @Override public void navigateToCamera() { - rxPermissions - .request(Manifest.permission.CAMERA) - .subscribe(granted -> { - if (granted) { - startPhotoActivity(); - } else { - //// FIXME: 29.06.2017 message? - } - }); + startPhotoActivity(); } private void startPhotoActivity() { @@ -154,15 +153,7 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, @Override public void navigateToGallery() { - rxPermissions - .request(Manifest.permission.READ_EXTERNAL_STORAGE) - .subscribe(granted -> { - if (granted) { - startGalleryActivity(); - } else { - //// FIXME: 29.06.2017 message? - } - }); + startGalleryActivity(); } @Override @@ -179,23 +170,33 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, } else if (requestCode == GALLERY_REQUEST_CODE && data != null) { decodePhotoFromGallery(data); } else if (requestCode == EDIT_PROFILE_REQUEST_CODE && data != null) { - UserPerson userPerson = data.getParcelableExtra(EDIT_PROFILE_TAG); - setUserModel(userPerson); + Person person = data.getParcelableExtra(EDIT_PROFILE_TAG); + setPersonModel(person); } } super.onActivityResult(requestCode, resultCode, data); } - private void setUserModel(UserPerson userPerson) { - this.userPerson = userPerson; - userName.setText(this.userPerson.getFullName()); + private void setPersonModel(Person person) { + this.user.getAccount().setPerson(person); + userName.setText(person.getFullName()); } private void decodePhotoFromGallery(Intent data) { try { - Uri imageUri = data.getData(); - Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), imageUri); - setUserAvatar(bitmap); + String[] proj = {MediaStore.Images.Media.DATA}; + ContentResolver contentResolver = getContext().getContentResolver(); + if (contentResolver != null) { + Cursor cursor = contentResolver.query(data.getData(), proj, null, null, null); + if (cursor != null) { + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + String string = cursor.getString(column_index); + File file = new File(string); + cursor.close(); + setUserAvatar(file); + } + } } catch (Exception e) { e.printStackTrace(); } @@ -210,26 +211,44 @@ public class MyProfileFragment extends BaseFragment implements MyProfileView, Uri imageUri = Uri.parse(photoPath); try { File file = new File(imageUri.getPath()); - InputStream ims = new FileInputStream(file); - setUserAvatar(BitmapFactory.decodeStream(ims)); + setUserAvatar(file); //// FIXME: 29.06.2017 should we add photo to gallery?? } catch (Exception e) { e.printStackTrace(); } } - private void setUserAvatar(Bitmap bitmap) { - userPhoto.setImageBitmap(ImageUtils.circleTransform(bitmap)); + private void setUserAvatar(File file) { + Glide.with(this) + .load(file) + .bitmapTransform(new CropCircleTransformation(getContext())) + .into(userPhoto); userPhoto.setPadding(0, 0, 0, 0); } @Override public void onCameraClick() { - mPresenter.clickOnCamera(); + rxPermissions + .request(Manifest.permission.CAMERA) + .subscribe(granted -> { + if (granted) { + mPresenter.clickOnCamera(); + } else { + //// FIXME: 29.06.2017 message? + } + }); } @Override public void onGalleryClick() { - mPresenter.clickOnGallery(); + rxPermissions + .request(Manifest.permission.READ_EXTERNAL_STORAGE) + .subscribe(granted -> { + if (granted) { + mPresenter.clickOnGallery(); + } else { + //// FIXME: 29.06.2017 message? + } + }); } } diff --git a/app/src/main/java/com/ninja/mobile/utils/RealPathUtil.java b/app/src/main/java/com/ninja/mobile/utils/RealPathUtil.java new file mode 100644 index 0000000000..e8a9c0b3e0 --- /dev/null +++ b/app/src/main/java/com/ninja/mobile/utils/RealPathUtil.java @@ -0,0 +1,68 @@ +package com.ninja.mobile.utils; + +/** + * Created by dmitro.boiko on 30/06/2017. + */ + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.CursorLoader; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build; +import android.provider.DocumentsContract; +import android.provider.MediaStore; + +import java.io.File; + +public class RealPathUtil { + + public static File getFile(Context context, Uri uri) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return new File(getRealPathFromURI_API11to18(context, uri)); + } else { + return new File(getRealPathFromURI_API19(context, uri)); + } + } + + @SuppressLint("NewApi") + private static String getRealPathFromURI_API19(Context context, Uri uri) { + String filePath = ""; + + String[] column = {MediaStore.Images.Media.DATA}; + + // where id is equal to + String sel = MediaStore.Images.Media._ID + "=?"; + + Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, + column, sel, null, null); + if (cursor != null) { + int columnIndex = cursor.getColumnIndex(column[0]); + + if (cursor.moveToFirst()) { + filePath = cursor.getString(columnIndex); + } + cursor.close(); + } + return filePath; + } + + + @SuppressLint("NewApi") + private static String getRealPathFromURI_API11to18(Context context, Uri contentUri) { + String[] proj = {MediaStore.Images.Media.DATA}; + String result = null; + + CursorLoader cursorLoader = new CursorLoader( + context, + contentUri, proj, null, null, null); + Cursor cursor = cursorLoader.loadInBackground(); + + if (cursor != null) { + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + result = cursor.getString(column_index); + } + return result; + } +} diff --git a/app/src/main/java/com/ninja/mobile/utils/ValidationUtils.java b/app/src/main/java/com/ninja/mobile/utils/ValidationUtils.java index 84a0d8b565..bde7837867 100644 --- a/app/src/main/java/com/ninja/mobile/utils/ValidationUtils.java +++ b/app/src/main/java/com/ninja/mobile/utils/ValidationUtils.java @@ -17,4 +17,8 @@ public class ValidationUtils { return email != null && Patterns.EMAIL_ADDRESS.matcher(email).matches(); } + public static boolean isNameVaild(String data) { + return StringUtils.isNotEmpty(data) && data.length() > 2; + } + } diff --git a/app/src/main/res/layout/fragment_my_profile.xml b/app/src/main/res/layout/fragment_my_profile.xml index 7ecb2f5e59..dc7d37fe28 100644 --- a/app/src/main/res/layout/fragment_my_profile.xml +++ b/app/src/main/res/layout/fragment_my_profile.xml @@ -80,7 +80,7 @@ android:layout_height="wrap_content" android:layout_marginTop="9dp" android:gravity="center" - android:text="+380 56 234 567" + tools:text="+380 56 234 567" android:textColor="@android:color/white" android:textSize="20sp" /> \ No newline at end of file diff --git a/app/src/main/res/xml/provider_paths.xml b/app/src/main/res/xml/provider_paths.xml index 444d4229e0..6dca53c9ac 100644 --- a/app/src/main/res/xml/provider_paths.xml +++ b/app/src/main/res/xml/provider_paths.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/build.gradle b/build.gradle index f627b4144c..3be8b2c8f3 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.2' + classpath 'com.android.tools.build:gradle:2.3.3' classpath 'me.tatarka:gradle-retrolambda:3.6.1' classpath 'com.google.gms:google-services:3.0.0' // NOTE: Do not place your application dependencies here; they belong -- GitLab From 998b11e0d5759b295e1538695a82fd4c7e35b5c0 Mon Sep 17 00:00:00 2001 From: BoykoDmytro Date: Fri, 30 Jun 2017 19:00:43 +0300 Subject: [PATCH 4/4] optimize imports, update multidex. --- app/src/main/java/com/ninja/mobile/NynjaApp.java | 9 --------- .../mobile/ui/fragments/profile/MyProfileFragment.java | 1 - .../main/java/com/ninja/mobile/utils/RealPathUtil.java | 1 - 3 files changed, 11 deletions(-) diff --git a/app/src/main/java/com/ninja/mobile/NynjaApp.java b/app/src/main/java/com/ninja/mobile/NynjaApp.java index b83abc4d47..1a5d03b940 100644 --- a/app/src/main/java/com/ninja/mobile/NynjaApp.java +++ b/app/src/main/java/com/ninja/mobile/NynjaApp.java @@ -1,8 +1,6 @@ package com.ninja.mobile; -import android.app.Application; import android.content.Context; -import android.support.multidex.MultiDex; import android.support.multidex.MultiDexApplication; import com.ninja.mobile.injection.ApplicationComponent; @@ -31,13 +29,6 @@ public class NynjaApp extends MultiDexApplication { } - @Override - protected void attachBaseContext(Context base) { - super.attachBaseContext(base); - MultiDex.install(this); - } - - public static NynjaApp get(Context context) { return (NynjaApp) context.getApplicationContext(); } diff --git a/app/src/main/java/com/ninja/mobile/ui/fragments/profile/MyProfileFragment.java b/app/src/main/java/com/ninja/mobile/ui/fragments/profile/MyProfileFragment.java index 3ba03807e8..dccb83bb8a 100644 --- a/app/src/main/java/com/ninja/mobile/ui/fragments/profile/MyProfileFragment.java +++ b/app/src/main/java/com/ninja/mobile/ui/fragments/profile/MyProfileFragment.java @@ -32,7 +32,6 @@ import com.ninja.mobile.ui.activities.QRCodeReaderActivity; import com.ninja.mobile.ui.base.BaseFragment; import com.ninja.mobile.ui.dialogs.ChooserPhotoDialog; import com.ninja.mobile.utils.ImageUtils; -import com.ninja.mobile.utils.RealPathUtil; import java.io.File; import java.io.IOException; diff --git a/app/src/main/java/com/ninja/mobile/utils/RealPathUtil.java b/app/src/main/java/com/ninja/mobile/utils/RealPathUtil.java index e8a9c0b3e0..3ddf162978 100644 --- a/app/src/main/java/com/ninja/mobile/utils/RealPathUtil.java +++ b/app/src/main/java/com/ninja/mobile/utils/RealPathUtil.java @@ -10,7 +10,6 @@ import android.content.CursorLoader; import android.database.Cursor; import android.net.Uri; import android.os.Build; -import android.provider.DocumentsContract; import android.provider.MediaStore; import java.io.File; -- GitLab