From 3e1399997f18d274b97ef4ae8c81e8d423666a57 Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:11:15 +0700 Subject: [PATCH 01/19] #16 add realm --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index c2eea8e..9538f0d 100644 --- a/build.gradle +++ b/build.gradle @@ -6,6 +6,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' + classpath "io.realm:realm-gradle-plugin:3.7.2" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From 509eb706f99de96a2337714d21692cd540330c56 Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:12:02 +0700 Subject: [PATCH 02/19] update gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) 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 From 400ef1ff2fc98c16b3143d921a12f6db9f4fa1bd Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:12:21 +0700 Subject: [PATCH 03/19] #16 add realm --- app/build.gradle | 7 +++++++ 1 file changed, 7 insertions(+) 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' + } From 85bff376d15ba9a16322e6f2cece82ad34cb8beb Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:12:45 +0700 Subject: [PATCH 04/19] #16 save profile to realm --- .../android/Activities/LoginActivity.java | 73 +++++++++++++++++-- 1 file changed, 67 insertions(+), 6 deletions(-) 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..2d852e8 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,9 @@ import com.facebook.accountkit.ui.AccountKitConfiguration; import com.facebook.accountkit.ui.LoginType; +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 +51,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 +99,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 +122,6 @@ public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) { return false; } }); - mLoginButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { @@ -130,7 +142,8 @@ public void onClick(View view) { clickRegister(); } }); - mProgressView = findViewById(R.id.login_progress); + + authHelper.CheckTokenExpired(this); } private void clickRegister() { @@ -243,6 +256,7 @@ private void onLogin(String username, String password) { @Override public void onResponse(Call call, Response response) { checkResponse(response.body()); + } @Override @@ -263,7 +277,10 @@ 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) { + this.saveProfileData(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 +318,51 @@ public void onClick(DialogInterface dialog, int id) { showProgress(false); } + private void saveProfileData(ProfileData pd){ + + + // Get a Realm instance for this thread + Realm realm = Realm.getDefaultInstance(); + + try { + // Persist your data in a transaction + realm.beginTransaction(); + ProfileData checkProfile = realm.where(ProfileData.class).findFirst(); + ProfileData newProfileData = checkProfile != null ? checkProfile : realm.createObject(ProfileData.class, pd.getId()); + + if (checkProfile == null) { + newProfileData.setCreatedAt(pd.getCreatedAt()); + newProfileData.setEmail(pd.getEmail()); + newProfileData.setFcmtoken(pd.getFcmtoken()); + newProfileData.setUsername(pd.getUsername()); + newProfileData.setFirstName(pd.getFirstName()); + newProfileData.setLastName(pd.getLastName()); + newProfileData.setReferer(pd.getReferer()); + newProfileData.setRoleId(pd.getRoleId()); + newProfileData.setSocialId(pd.getSocialId()); + newProfileData.setUpdatedAt(pd.getUpdatedAt()); + RealmList list = pd.getPhotos(); + if (!list.isManaged()) { // if the 'list' is managed, all items in it is also managed + RealmList managedImageList = new RealmList<>(); + for (Photo item : list) { + if (item.isManaged()) { + managedImageList.add(item); + } else { + managedImageList.add(realm.copyToRealm(item)); + } + } + list = managedImageList; + } + newProfileData.setPhotos(list); + realm.commitTransaction(); + } + + } catch (Exception exc){ + realm.cancelTransaction(); + } + + } + private boolean isEmailValid(String email) { //TODO: Replace this with your own logic return email.length() > 4; @@ -413,7 +475,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); From aaca9e908f46e06222ac7fcaf6f1c9f2a8a5562c Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:13:19 +0700 Subject: [PATCH 05/19] add user profile screen --- .../android/Activities/MainActivity.java | 50 +++++++++++-------- 1 file changed, 30 insertions(+), 20 deletions(-) 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; } /** From debb032c340cd1fca1dfef9be6481fab480d0525 Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:13:47 +0700 Subject: [PATCH 06/19] add token validation handler --- .../Controllers/UserTicketController.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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..b422b71 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,45 @@ 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(); + 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); } }); } From fe9dc94a5e569212309590e10ff721a7522fc873 Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:14:05 +0700 Subject: [PATCH 07/19] add user profile --- .../Fragments/UserProfileFragment.java | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 app/src/main/java/io/devsummit/android/Fragments/UserProfileFragment.java 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..d23b11a --- /dev/null +++ b/app/src/main/java/io/devsummit/android/Fragments/UserProfileFragment.java @@ -0,0 +1,110 @@ +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"); + + mNameText.setText(currentProfile.getFirstName() + " " + currentProfile.getLastName()); + mRoleText.setText(role.get(currentProfile.getRoleId())); + Picasso.with(getContext()).load(currentProfile.getPhotos().get(0).getUrl()).into(profileImage); + mLogoutButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + authHelper.removeAccessToken(); + realm.beginTransaction(); + try{ + RealmResults row = realm.where(ProfileData.class).findAll(); + row.deleteAllFromRealm(); + realm.commitTransaction(); + + } catch (Exception ex) { + realm.cancelTransaction(); + } + Intent i = new Intent(getContext(), LoginActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + }); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + } +} From 16231102ddc11cb2e479c2af3dcdd0bb772b2b72 Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:14:37 +0700 Subject: [PATCH 08/19] add user token expiry checker and remove token method --- .../Helpers/UserAuthenticationHelper.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) 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..6c955f3 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,23 @@ 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.Remote.APIService; +import io.devsummit.android.Remote.ApiUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -32,12 +38,36 @@ 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) { SharedPreferences.Editor editor = sharedPrefs.edit(); editor.putString(ACCESS_TOKEN, accessToken).apply(); 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 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)); + } + } + + + + } public String getAccessToken() { From 16f1e84df6e28405eebaae2c7e1d430816bf8310 Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:15:08 +0700 Subject: [PATCH 09/19] #16 refactor login model --- .../java/io/devsummit/android/Models/LoginModel.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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() { From cb34fad2bcfb750b7fa4c539bdbb63c1997c9f1a Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:15:32 +0700 Subject: [PATCH 10/19] #16 refactor register model --- .../io/devsummit/android/Models/RegisterModel.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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() { From 5041f55b8c6be41a9580a2d91c8d82ebcb4e6641 Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:15:52 +0700 Subject: [PATCH 11/19] refactor user ticket model --- .../io/devsummit/android/Models/UserTicketModel.java | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 From a49f2c0ad98625d2c7363df60aa7d1457234f9f5 Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:16:12 +0700 Subject: [PATCH 12/19] refactor included model --- .../android/Models/login/Included.java | 143 ------------------ 1 file changed, 143 deletions(-) delete mode 100644 app/src/main/java/io/devsummit/android/Models/login/Included.java diff --git a/app/src/main/java/io/devsummit/android/Models/login/Included.java b/app/src/main/java/io/devsummit/android/Models/login/Included.java deleted file mode 100644 index 47979e2..0000000 --- a/app/src/main/java/io/devsummit/android/Models/login/Included.java +++ /dev/null @@ -1,143 +0,0 @@ -package io.devsummit.android.Models.login; - -import com.google.gson.annotations.Expose; -import com.google.gson.annotations.SerializedName; - -import java.util.List; - -public class Included { - - @SerializedName("created_at") - @Expose - private String createdAt; - @SerializedName("email") - @Expose - private String email; - @SerializedName("fcmtoken") - @Expose - private String fcmtoken; - @SerializedName("first_name") - @Expose - private String firstName; - @SerializedName("id") - @Expose - private Integer id; - @SerializedName("last_name") - @Expose - private String lastName; - @SerializedName("photos") - @Expose - private List photos = null; - @SerializedName("referer") - @Expose - private String referer; - @SerializedName("role_id") - @Expose - private Integer roleId; - @SerializedName("social_id") - @Expose - private String socialId; - @SerializedName("updated_at") - @Expose - private String updatedAt; - @SerializedName("username") - @Expose - private String username; - - public String getCreatedAt() { - return createdAt; - } - - public void setCreatedAt(String createdAt) { - this.createdAt = createdAt; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getFcmtoken() { - return fcmtoken; - } - - public void setFcmtoken(String fcmtoken) { - this.fcmtoken = fcmtoken; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public List getPhotos() { - return photos; - } - - public void setPhotos(List photos) { - this.photos = photos; - } - - public String getReferer() { - return referer; - } - - public void setReferer(String referer) { - this.referer = referer; - } - - public Integer getRoleId() { - return roleId; - } - - public void setRoleId(Integer roleId) { - this.roleId = roleId; - } - - public String getSocialId() { - return socialId; - } - - public void setSocialId(String socialId) { - this.socialId = socialId; - } - - public String getUpdatedAt() { - return updatedAt; - } - - public void setUpdatedAt(String updatedAt) { - this.updatedAt = updatedAt; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - -} From e610fc883a160bdd1e56b89814ad362de2f921d9 Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:16:37 +0700 Subject: [PATCH 13/19] #16 extends photo with realm object --- .../main/java/io/devsummit/android/Models/login/Photo.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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..04698e5 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,7 +3,10 @@ import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; -public class Photo { +import io.realm.RealmModel; +import io.realm.RealmObject; + +public class Photo extends RealmObject { @SerializedName("created_at") @Expose From 86e7751a651c013e66620e4e48388fb9678af999 Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:16:58 +0700 Subject: [PATCH 14/19] #16 extends profile data with realm object --- .../android/Models/login/ProfileData.java | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 app/src/main/java/io/devsummit/android/Models/login/ProfileData.java diff --git a/app/src/main/java/io/devsummit/android/Models/login/ProfileData.java b/app/src/main/java/io/devsummit/android/Models/login/ProfileData.java new file mode 100644 index 0000000..1665af2 --- /dev/null +++ b/app/src/main/java/io/devsummit/android/Models/login/ProfileData.java @@ -0,0 +1,151 @@ +package io.devsummit.android.Models.login; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +import io.realm.Realm; +import io.realm.RealmList; +import io.realm.RealmObject; +import io.realm.annotations.PrimaryKey; +import io.realm.annotations.RealmClass; +import io.realm.annotations.RealmModule; + +public class ProfileData extends RealmObject{ + + @SerializedName("created_at") + @Expose + private String createdAt; + @SerializedName("email") + @Expose + private String email; + @SerializedName("fcmtoken") + @Expose + private String fcmtoken; + @SerializedName("first_name") + @Expose + private String firstName; + @PrimaryKey + @SerializedName("id") + @Expose + private Integer id; + @SerializedName("last_name") + @Expose + private String lastName; + @SerializedName("photos") + @Expose + private RealmList photos = null; + @SerializedName("referer") + @Expose + private String referer; + @SerializedName("role_id") + @Expose + private Integer roleId; + @SerializedName("social_id") + @Expose + private String socialId; + @SerializedName("updated_at") + @Expose + private String updatedAt; + @SerializedName("username") + @Expose + private String username; + + public String getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(String createdAt) { + this.createdAt = createdAt; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getFcmtoken() { + return fcmtoken; + } + + public void setFcmtoken(String fcmtoken) { + this.fcmtoken = fcmtoken; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public RealmList getPhotos() { + return photos; + } + + public void setPhotos(RealmList photos) { + this.photos = photos; + } + + public String getReferer() { + return referer; + } + + public void setReferer(String referer) { + this.referer = referer; + } + + public Integer getRoleId() { + return roleId; + } + + public void setRoleId(Integer roleId) { + this.roleId = roleId; + } + + public String getSocialId() { + return socialId; + } + + public void setSocialId(String socialId) { + this.socialId = socialId; + } + + public String getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(String updatedAt) { + this.updatedAt = updatedAt; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + +} From 400df007c160f4a702ce8b27dab63cc10ac894fa Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:17:17 +0700 Subject: [PATCH 15/19] add gradient bg --- app/src/main/res/drawable/gradient_background.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 app/src/main/res/drawable/gradient_background.xml 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 From 4bbd7089c948d17b09a2af30225ba201a624db09 Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:18:00 +0700 Subject: [PATCH 16/19] add assets and modify styling --- .../main/res/drawable/ic_account_circle_black_24dp.xml | 9 +++++++++ app/src/main/res/drawable/ic_terrain_black_24dp.xml | 9 +++++++++ app/src/main/res/drawable/rounded_button_bg.xml | 10 ++++++++++ app/src/main/res/menu/navigation.xml | 5 +++++ app/src/main/res/values/colors.xml | 2 +- app/src/main/res/values/strings.xml | 1 + 6 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable/ic_account_circle_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_terrain_black_24dp.xml create mode 100644 app/src/main/res/drawable/rounded_button_bg.xml 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/menu/navigation.xml b/app/src/main/res/menu/navigation.xml index fd5417e..17629a5 100644 --- a/app/src/main/res/menu/navigation.xml +++ b/app/src/main/res/menu/navigation.xml @@ -11,6 +11,11 @@ android:icon="@drawable/ic_rss_feed_black_24dp" android:title="@string/title_home" /> + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3efcdae..7e2a012 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,7 +1,7 @@ #2a3da6 - #060b29 + #0a1035 #FFA500 #FFA500 #FFD740 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5f292df..fac69af 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -41,6 +41,7 @@ MainActivity Home + Profile Schedule Setting Tickets From 80c80a88dd37bc75c5bff9a9942df9ec4b1779d0 Mon Sep 17 00:00:00 2001 From: caudaganesh Date: Wed, 4 Oct 2017 22:18:42 +0700 Subject: [PATCH 17/19] add user profile fragment --- .../main/res/layout/user_profile_fragment.xml | 173 ++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 app/src/main/res/layout/user_profile_fragment.xml 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +