diff --git a/.gitignore b/.gitignore index ce624d5..51aa3ed 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,4 @@ fabric.properties # *.iml # modules.xml app/src/main/java/io/devsummit/devsummit/Remote/ApiUtils.java +.idea/misc.xml diff --git a/app/build.gradle b/app/build.gradle index 97f9ac0..5b41bdd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,6 +20,7 @@ repositories { } apply plugin: 'io.fabric' +apply plugin: 'realm-android' android { compileSdkVersion 26 @@ -40,6 +41,9 @@ android { } productFlavors { } + configurations.all { + resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9' + } } dependencies { @@ -64,6 +68,9 @@ dependencies { compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') { transitive = true; } + compile 'de.hdodenhof:circleimageview:2.1.0' + compile 'com.squareup.picasso:picasso:2.5.2' + } diff --git a/app/src/main/java/io/devsummit/android/Activities/LoginActivity.java b/app/src/main/java/io/devsummit/android/Activities/LoginActivity.java index d16fd69..f19661a 100644 --- a/app/src/main/java/io/devsummit/android/Activities/LoginActivity.java +++ b/app/src/main/java/io/devsummit/android/Activities/LoginActivity.java @@ -20,6 +20,7 @@ import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; +import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; @@ -36,6 +37,10 @@ import com.facebook.accountkit.ui.AccountKitConfiguration; import com.facebook.accountkit.ui.LoginType; +import io.devsummit.android.Helpers.RealmHelper; +import io.devsummit.android.Models.login.Photo; +import io.devsummit.android.Models.login.ProfileData; +import io.fabric.sdk.android.Fabric; import java.util.ArrayList; import java.util.List; @@ -47,7 +52,8 @@ import io.devsummit.android.R; import io.devsummit.android.Remote.APIService; import io.devsummit.android.Remote.ApiUtils; -import io.fabric.sdk.android.Fabric; +import io.realm.Realm; +import io.realm.RealmList; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -94,11 +100,19 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_login); // Set up the login form. mEmailView = (EditText) findViewById(R.id.email); - populateAutoComplete(); mLoginButton = (Button) findViewById(R.id.email_sign_in_button); mLoginPhoneButton = (Button) findViewById(R.id.phone_sign_in_button); mAPIService = ApiUtils.getAPIService(); mPasswordView = (EditText) findViewById(R.id.password); + mProgressView = findViewById(R.id.login_progress); + populateAutoComplete(); + + } + + @Override + protected void onStart() { + super.onStart(); + Realm.init(this); mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) { @@ -109,7 +123,6 @@ public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) { return false; } }); - mLoginButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { @@ -130,7 +143,8 @@ public void onClick(View view) { clickRegister(); } }); - mProgressView = findViewById(R.id.login_progress); + + authHelper.CheckTokenExpired(this); } private void clickRegister() { @@ -147,7 +161,6 @@ private void populateAutoComplete() { if (!mayRequestContacts()) { return; } - getLoaderManager().initLoader(0, null, this); } @@ -192,8 +205,6 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis * errors are presented and no actual login attempt is made. */ private void attemptLogin() { - - // Reset errors. mEmailView.setError(null); mPasswordView.setError(null); @@ -243,6 +254,7 @@ private void onLogin(String username, String password) { @Override public void onResponse(Call call, Response response) { checkResponse(response.body()); + } @Override @@ -263,7 +275,11 @@ private void checkResponse(LoginModel body) { String accessToken = body.getData().getAccessToken().toString(); String refreshToken = body.getData().getRefreshToken(); authHelper.saveAccessToken(accessToken, refreshToken); - toastMessage[0] = "Welcome! " + body.getIncluded().getFirstName(); + if(body.getProfileData() != null) { + RealmHelper rh = new RealmHelper(); + rh.receiveData(body.getProfileData()); + } + toastMessage[0] = "Welcome! " + body.getProfileData().getFirstName(); startActivity(new Intent(this, MainActivity.class)); } else if (body.getMeta().getMessage().equals("username not found") || body.getMeta().getMessage().equals("user is not registered")) { toastMessage[0] = "username not found"; @@ -301,6 +317,7 @@ public void onClick(DialogInterface dialog, int id) { showProgress(false); } + private boolean isEmailValid(String email) { //TODO: Replace this with your own logic return email.length() > 4; @@ -325,7 +342,6 @@ private void showProgress(final boolean show) { mLoginButton.setVisibility(show ? View.INVISIBLE : View.VISIBLE); mLoginPhoneButton.setVisibility(show ? View.INVISIBLE : View.VISIBLE); - mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); mProgressView.animate().setDuration(shortAnimTime).alpha( show ? 1 : 0).setListener(new AnimatorListenerAdapter() { @@ -413,7 +429,6 @@ protected void onActivityResult(final int requestCode, final int resultCode, fin public void onResponse(Call call, Response response) { checkResponse(response.body()); } - @Override public void onFailure(Call call, Throwable t) { showProgress(false); diff --git a/app/src/main/java/io/devsummit/android/Activities/MainActivity.java b/app/src/main/java/io/devsummit/android/Activities/MainActivity.java index 2d0b980..ab3a524 100644 --- a/app/src/main/java/io/devsummit/android/Activities/MainActivity.java +++ b/app/src/main/java/io/devsummit/android/Activities/MainActivity.java @@ -17,6 +17,7 @@ import io.devsummit.android.Helpers.ExitAppHelper; +import io.devsummit.android.Fragments.UserProfileFragment; import io.devsummit.android.R; import io.devsummit.android.Controllers.UserTicketController; import io.devsummit.android.Fragments.FeedFragment; @@ -27,6 +28,7 @@ public class MainActivity extends AppCompatActivity { private UserTicketController userTicketController; private ProgressBar mProgressView; private BottomNavigationView navigation; + private boolean isNavigationEnabled; @Override public void onBackPressed() { @@ -40,23 +42,30 @@ public void onBackPressed() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { - mContainer.removeAllViews(); - Fragment frag = null; - String token = authHelper.getAccessToken(); - switch (item.getItemId()) { - case R.id.navigation_home: - frag = FeedFragment.newInstance(); - break; - case R.id.tickets: - userTicketController.getUserTickets(token, MainActivity.this); - break; - } - if (frag != null) { - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - ft.add(R.id.container, frag, frag.getTag()); - ft.commit(); + if(isNavigationEnabled) { + mContainer.removeAllViews(); + Fragment frag = null; + String token = authHelper.getAccessToken(); + switch (item.getItemId()) { + case R.id.navigation_home: + frag = FeedFragment.newInstance(); + break; + case R.id.tickets: + userTicketController.getUserTickets(token, MainActivity.this); + break; + case R.id.navigation_profile: + frag = UserProfileFragment.newInstance(); + break; + } + if (frag != null) { + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.add(R.id.container, frag, frag.getTag()); + ft.commit(); + } + return true; + }else { + return false; } - return true; } }; @@ -71,13 +80,14 @@ protected void onCreate(Bundle savedInstanceState) { navigation = (BottomNavigationView) findViewById(R.id.navigation); userTicketController = new UserTicketController(MainActivity.this); mContainer = (FrameLayout) findViewById(R.id.container); - } - @Override - protected void onResume() { - super.onResume(); navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); userTicketController.getUserTickets(authHelper.getAccessToken(), MainActivity.this); + isNavigationEnabled = true; + } + + public void enableNavigation(final boolean status) { + isNavigationEnabled = status; } /** diff --git a/app/src/main/java/io/devsummit/android/Controllers/UserTicketController.java b/app/src/main/java/io/devsummit/android/Controllers/UserTicketController.java index 0c83138..f5ec1b1 100644 --- a/app/src/main/java/io/devsummit/android/Controllers/UserTicketController.java +++ b/app/src/main/java/io/devsummit/android/Controllers/UserTicketController.java @@ -1,9 +1,12 @@ package io.devsummit.android.Controllers; import android.content.Context; +import android.content.Intent; import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; +import io.devsummit.android.Activities.LoginActivity; +import io.devsummit.android.Helpers.UserAuthenticationHelper; import io.devsummit.android.R; import io.devsummit.android.Activities.MainActivity; import io.devsummit.android.Fragments.TicketFragment; @@ -22,32 +25,46 @@ public class UserTicketController { public UserTicketModel UserTickets; private APIService mAPIService; private MainActivity mMainActivity; + private UserAuthenticationHelper authHelper; public UserTicketController(MainActivity act) { mMainActivity = act; UserTickets = new UserTicketModel(); mAPIService = ApiUtils.getAPIService(); + authHelper = new UserAuthenticationHelper(act); } public void getUserTickets(String token, final Context context) { mMainActivity.showProgress(true); + mMainActivity.enableNavigation(false); mAPIService.fetchUserTicket(token).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { UserTickets = response.body(); + if(UserTickets.getMessage() == null){ AppCompatActivity activity = (AppCompatActivity) context; Fragment frag = TicketFragment.newInstance(response.body()); android.support.v4.app.FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction(); ft.add(R.id.container, frag, frag.getTag()); ft.commit(); + } else { + authHelper.removeAccessToken(); + authHelper.removeProfileData(); + Intent i = new Intent(context, LoginActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + context.startActivity(i); + } mMainActivity.showProgress(false); + mMainActivity.enableNavigation(true); + } @Override public void onFailure(Call call, Throwable t) { UserTickets = new UserTicketModel(); mMainActivity.showProgress(false); + mMainActivity.enableNavigation(true); } }); } diff --git a/app/src/main/java/io/devsummit/android/Fragments/UserProfileFragment.java b/app/src/main/java/io/devsummit/android/Fragments/UserProfileFragment.java new file mode 100644 index 0000000..7690bd1 --- /dev/null +++ b/app/src/main/java/io/devsummit/android/Fragments/UserProfileFragment.java @@ -0,0 +1,107 @@ +package io.devsummit.android.Fragments; + +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +import com.squareup.picasso.Picasso; + +import java.util.HashMap; + +import de.hdodenhof.circleimageview.CircleImageView; +import io.devsummit.android.Activities.LoginActivity; +import io.devsummit.android.Helpers.UserAuthenticationHelper; +import io.devsummit.android.Models.login.ProfileData; +import io.devsummit.android.R; +import io.realm.Realm; +import io.realm.RealmResults; + + +/** + * Created by ganesh on 27/09/17. + */ + +public class UserProfileFragment extends Fragment { + private static final String ARG_TEXT = "arg_text"; + private static final String ARG_COLOR = "arg_color"; + + private View mContent; + private TextView mNameText; + private TextView mRoleText; + private CircleImageView profileImage; + private Button mLogoutButton; + private UserAuthenticationHelper authHelper; + + public static Fragment newInstance() { + Fragment frag = new UserProfileFragment(); + Bundle args = new Bundle(); + frag.setArguments(args); + return frag; + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + authHelper = new UserAuthenticationHelper(getContext()); + return inflater.inflate(R.layout.user_profile_fragment, container, false); + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + // Get a Realm instance for this thread + + // initialize views + mContent = view.findViewById(R.id.user_profile_content); + mNameText = view.findViewById(R.id.profile_name); + mRoleText = view.findViewById(R.id.profile_role); + profileImage = view.findViewById(R.id.profile_image); + mLogoutButton = view.findViewById(R.id.btn_logout); + + } + + @Override + public void onStart() { + super.onStart(); + final Realm realm = Realm.getDefaultInstance(); + final ProfileData currentProfile = realm.where(ProfileData.class).findFirst(); + + HashMap role = new HashMap<>(); + role.put(2, "Attendee"); + role.put(3, "Booth"); + role.put(4, "Speaker"); + role.put(5, "Hackaton"); + role.put(6, "Ambassador"); + role.put(7, "User"); + role.put(8, "Partner"); + + if(currentProfile!=null && currentProfile.getFirstName() != null) { + mNameText.setText(currentProfile.getFirstName() + " " + currentProfile.getLastName()); + mRoleText.setText(role.get(currentProfile.getRoleId())); + Picasso.with(getContext()) + .load(currentProfile.getPhotos().get(0).getUrl()) + .placeholder(R.drawable.empty_profile_grey) + .into(profileImage); + } + mLogoutButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + authHelper.removeAccessToken(); + authHelper.removeProfileData(); + Intent i = new Intent(getContext(), LoginActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + }); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + } +} diff --git a/app/src/main/java/io/devsummit/android/Helpers/RealmHelper.java b/app/src/main/java/io/devsummit/android/Helpers/RealmHelper.java new file mode 100644 index 0000000..e6fd897 --- /dev/null +++ b/app/src/main/java/io/devsummit/android/Helpers/RealmHelper.java @@ -0,0 +1,57 @@ +package io.devsummit.android.Helpers; + + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import io.realm.Realm; +import io.realm.RealmModel; +/** + * Created by wlisrausr on 06/10/17. + */ + +public class RealmHelper { + public void receiveData(Object responseData) { + Class cls = responseData.getClass(); + Realm realm = Realm.getDefaultInstance(); + + try { + realm.beginTransaction(); + Object newData = cls.newInstance(); + Method[] methods = newData.getClass().getMethods(); + ArrayList setters = new ArrayList<>(); + for (int i = 0; i < methods.length; i++) { + if(methods[i].getName().startsWith("set")){ + setters.add(methods[i]); + } + } + + for (int i = 0; i < setters.size(); i++) { + Method method = setters.get(i); + String fieldName = getFieldName(method); + fieldName = fieldName.substring(0, 1).toLowerCase() + fieldName.substring(1); + Field f = newData.getClass().getDeclaredField(fieldName); + f.setAccessible(true);//Very important, this allows the setting to work. + method.invoke(newData, getPrivateStatic(newData.getClass(), fieldName, responseData)); + } + realm.copyToRealmOrUpdate((RealmModel) newData); + realm.commitTransaction(); + realm.close(); + } catch (Exception e) { + e.printStackTrace(); + realm.cancelTransaction(); + } + } + + public String getFieldName(Method method) { + return method.getName().substring(3); + } + + private static Object getPrivateStatic(Class clazz, String f, Object response) throws Exception { + Field field = clazz.getDeclaredField(f); + field.setAccessible(true); + + return field.get(response); + } + +} \ No newline at end of file diff --git a/app/src/main/java/io/devsummit/android/Helpers/UserAuthenticationHelper.java b/app/src/main/java/io/devsummit/android/Helpers/UserAuthenticationHelper.java index c9e9474..464cbc6 100644 --- a/app/src/main/java/io/devsummit/android/Helpers/UserAuthenticationHelper.java +++ b/app/src/main/java/io/devsummit/android/Helpers/UserAuthenticationHelper.java @@ -1,17 +1,26 @@ package io.devsummit.android.Helpers; +import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; import android.util.Base64; +import android.widget.Toast; import com.google.gson.Gson; import java.util.Date; +import io.devsummit.android.Activities.MainActivity; +import io.devsummit.android.Models.UserTicketModel; import io.devsummit.android.Models.authmodel.JWTModel; import io.devsummit.android.Models.authmodel.RefreshTokenModel; +import io.devsummit.android.Models.login.ProfileData; import io.devsummit.android.Remote.APIService; +import io.devsummit.android.Remote.ApiUtils; +import io.realm.Realm; +import io.realm.RealmResults; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -32,6 +41,7 @@ public class UserAuthenticationHelper { public UserAuthenticationHelper(Context context) { this.context = context; sharedPrefs = context.getSharedPreferences(USER_AUTH, 0); + mAPIService = ApiUtils.getAPIService(); } public void saveAccessToken(String accessToken, String refreshToken) { @@ -40,6 +50,42 @@ public void saveAccessToken(String accessToken, String refreshToken) { editor.putString(REFRESH_TOKEN, refreshToken).apply(); } + public void removeAccessToken(){ + SharedPreferences.Editor editor = sharedPrefs.edit(); + editor.putString(ACCESS_TOKEN, "DEFAULT").apply(); + editor.putString(REFRESH_TOKEN, "DEFAULT").apply(); + } + + public void removeProfileData(){ + final Realm realm = Realm.getDefaultInstance(); + + realm.beginTransaction(); + try{ + RealmResults row = realm.where(ProfileData.class).findAll(); + row.deleteAllFromRealm(); + realm.commitTransaction(); + + } catch (Exception ex) { + realm.cancelTransaction(); + } + } + + public void CheckTokenExpired(final Activity act){ + final String[] token = {sharedPrefs.getString(ACCESS_TOKEN, "DEFAULT")}; + if (!token[0].equals("DEFAULT")) { + JWTModel jwt = decodeToken(token[0]); + int exp = (int) Math.floor(new Date().getTime() / 1000); + + // if not expired + if (exp < jwt.getExp()) { + act.startActivity(new Intent(act, MainActivity.class)); + } else { + removeAccessToken(); + removeProfileData(); + } + } + } + public String getAccessToken() { final String[] token = {sharedPrefs.getString(ACCESS_TOKEN, "DEFAULT")}; if (token[0].equals("DEFAULT")) { @@ -48,14 +94,12 @@ public String getAccessToken() { JWTModel jwt = decodeToken(token[0]); int exp = (int) Math.floor(new Date().getTime() / 1000); - // if not expired if (exp < jwt.getExp()) { return token[0]; } String refreshToken = sharedPrefs.getString(REFRESH_TOKEN, "DEFAULT"); - mAPIService.refreshToken(refreshToken).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { @@ -67,7 +111,6 @@ public void onResponse(Call call, Response public void onFailure(Call call, Throwable t) { } }); - return token[0]; } diff --git a/app/src/main/java/io/devsummit/android/Models/LoginModel.java b/app/src/main/java/io/devsummit/android/Models/LoginModel.java index f874a9e..5096a2c 100644 --- a/app/src/main/java/io/devsummit/android/Models/LoginModel.java +++ b/app/src/main/java/io/devsummit/android/Models/LoginModel.java @@ -9,7 +9,7 @@ import io.devsummit.android.Models.basemodel.Links; import io.devsummit.android.Models.basemodel.Meta; import io.devsummit.android.Models.login.Data; -import io.devsummit.android.Models.login.Included; +import io.devsummit.android.Models.login.ProfileData; public class LoginModel { @@ -18,7 +18,7 @@ public class LoginModel { private Data data; @SerializedName("included") @Expose - private Included included; + private ProfileData profileData; @SerializedName("links") @Expose private Links links; @@ -34,12 +34,12 @@ public void setData(Data data) { this.data = data; } - public Included getIncluded() { - return included; + public ProfileData getProfileData() { + return profileData; } - public void setIncluded(Included included) { - this.included = included; + public void setProfileData(ProfileData profileData) { + this.profileData = profileData; } public Links getLinks() { diff --git a/app/src/main/java/io/devsummit/android/Models/RegisterModel.java b/app/src/main/java/io/devsummit/android/Models/RegisterModel.java index 64c2427..725732e 100644 --- a/app/src/main/java/io/devsummit/android/Models/RegisterModel.java +++ b/app/src/main/java/io/devsummit/android/Models/RegisterModel.java @@ -9,7 +9,7 @@ import io.devsummit.android.Models.basemodel.Links; import io.devsummit.android.Models.basemodel.Meta; import io.devsummit.android.Models.login.Data; -import io.devsummit.android.Models.login.Included; +import io.devsummit.android.Models.login.ProfileData; public class RegisterModel { @@ -18,7 +18,7 @@ public class RegisterModel { private Data data; @SerializedName("included") @Expose - private Included included; + private ProfileData profileData; @SerializedName("links") @Expose private Links links; @@ -34,12 +34,12 @@ public void setData(Data data) { this.data = data; } - public Included getIncluded() { - return included; + public ProfileData getProfileData() { + return profileData; } - public void setIncluded(Included included) { - this.included = included; + public void setProfileData(ProfileData profileData) { + this.profileData = profileData; } public Links getLinks() { diff --git a/app/src/main/java/io/devsummit/android/Models/UserTicketModel.java b/app/src/main/java/io/devsummit/android/Models/UserTicketModel.java index fc36b2d..04e74c3 100644 --- a/app/src/main/java/io/devsummit/android/Models/UserTicketModel.java +++ b/app/src/main/java/io/devsummit/android/Models/UserTicketModel.java @@ -29,6 +29,9 @@ public class UserTicketModel implements Serializable { @SerializedName("meta") @Expose private Meta meta; + @SerializedName("message") + @Expose + private String message; public List getData() { return data; @@ -62,4 +65,12 @@ public void setMeta(Meta meta) { this.meta = meta; } + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + } \ No newline at end of file diff --git a/app/src/main/java/io/devsummit/android/Models/login/Photo.java b/app/src/main/java/io/devsummit/android/Models/login/Photo.java index 2974727..f51d159 100644 --- a/app/src/main/java/io/devsummit/android/Models/login/Photo.java +++ b/app/src/main/java/io/devsummit/android/Models/login/Photo.java @@ -3,11 +3,16 @@ import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; -public class Photo { +import io.realm.RealmModel; +import io.realm.RealmObject; +import io.realm.annotations.PrimaryKey; + +public class Photo extends RealmObject { @SerializedName("created_at") @Expose private String createdAt; + @PrimaryKey @SerializedName("id") @Expose private Integer id; diff --git a/app/src/main/java/io/devsummit/android/Models/login/Included.java b/app/src/main/java/io/devsummit/android/Models/login/ProfileData.java similarity index 90% rename from app/src/main/java/io/devsummit/android/Models/login/Included.java rename to app/src/main/java/io/devsummit/android/Models/login/ProfileData.java index 47979e2..e5cfd9c 100644 --- a/app/src/main/java/io/devsummit/android/Models/login/Included.java +++ b/app/src/main/java/io/devsummit/android/Models/login/ProfileData.java @@ -3,9 +3,11 @@ import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; -import java.util.List; +import io.realm.RealmList; +import io.realm.RealmObject; +import io.realm.annotations.PrimaryKey; -public class Included { +public class ProfileData extends RealmObject{ @SerializedName("created_at") @Expose @@ -19,6 +21,7 @@ public class Included { @SerializedName("first_name") @Expose private String firstName; + @PrimaryKey @SerializedName("id") @Expose private Integer id; @@ -27,7 +30,7 @@ public class Included { private String lastName; @SerializedName("photos") @Expose - private List photos = null; + private RealmList photos = null; @SerializedName("referer") @Expose private String referer; @@ -92,11 +95,11 @@ public void setLastName(String lastName) { this.lastName = lastName; } - public List getPhotos() { + public RealmList getPhotos() { return photos; } - public void setPhotos(List photos) { + public void setPhotos(RealmList photos) { this.photos = photos; } diff --git a/app/src/main/res/drawable/empty_profile_grey.jpg b/app/src/main/res/drawable/empty_profile_grey.jpg new file mode 100644 index 0000000..8830fbc Binary files /dev/null and b/app/src/main/res/drawable/empty_profile_grey.jpg differ diff --git a/app/src/main/res/drawable/gradient_background.xml b/app/src/main/res/drawable/gradient_background.xml new file mode 100644 index 0000000..168cca6 --- /dev/null +++ b/app/src/main/res/drawable/gradient_background.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_account_circle_black_24dp.xml b/app/src/main/res/drawable/ic_account_circle_black_24dp.xml new file mode 100644 index 0000000..7678580 --- /dev/null +++ b/app/src/main/res/drawable/ic_account_circle_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_terrain_black_24dp.xml b/app/src/main/res/drawable/ic_terrain_black_24dp.xml new file mode 100644 index 0000000..52940f0 --- /dev/null +++ b/app/src/main/res/drawable/ic_terrain_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/rounded_button_bg.xml b/app/src/main/res/drawable/rounded_button_bg.xml new file mode 100644 index 0000000..6275132 --- /dev/null +++ b/app/src/main/res/drawable/rounded_button_bg.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/ticket_fragment.xml b/app/src/main/res/layout/ticket_fragment.xml index 8138420..3316f74 100644 --- a/app/src/main/res/layout/ticket_fragment.xml +++ b/app/src/main/res/layout/ticket_fragment.xml @@ -38,12 +38,11 @@ android:text="MY ORDERS" /> diff --git a/app/src/main/res/layout/user_profile_fragment.xml b/app/src/main/res/layout/user_profile_fragment.xml new file mode 100644 index 0000000..bffad87 --- /dev/null +++ b/app/src/main/res/layout/user_profile_fragment.xml @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +