diff --git a/Habitica/assets/migrations/Habitica/2.sql b/Habitica/assets/migrations/Habitica/2.sql new file mode 100644 index 000000000..725b4aa5a --- /dev/null +++ b/Habitica/assets/migrations/Habitica/2.sql @@ -0,0 +1 @@ +ALTER TABLE HabitRPGUser ADD COLUMN authentication_id varchar(255); \ No newline at end of file diff --git a/Habitica/build.gradle b/Habitica/build.gradle index 41478587e..f5fcf8509 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -49,6 +49,7 @@ dependencies { compile('com.mikepenz:materialdrawer:4.3.8@aar') { transitive = true } + compile 'com.mikepenz:google-material-typeface:2.2.0.1@aar' compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:design:23.1.1' diff --git a/Habitica/res/drawable-mdpi/sidebar_background.png b/Habitica/res/drawable-mdpi/sidebar_background.png new file mode 100644 index 000000000..dcc03e6b4 Binary files /dev/null and b/Habitica/res/drawable-mdpi/sidebar_background.png differ diff --git a/Habitica/res/values/colors.xml b/Habitica/res/values/colors.xml index 474f9ea10..5423b95ad 100644 --- a/Habitica/res/values/colors.xml +++ b/Habitica/res/values/colors.xml @@ -83,20 +83,6 @@ #555555 #FFFFFFFF - - #303030 - - #000 - #de9a9a9a - #8AFFFFFF - #de9a9a9a - #42FFFFFF - #1FFFFFFF - - #202020 - @color/brand - #FFF - #ffd8dcdd #c3c2c6 diff --git a/Habitica/res/values/styles.xml b/Habitica/res/values/styles.xml index 57fca5b64..30bb6f697 100644 --- a/Habitica/res/values/styles.xml +++ b/Habitica/res/values/styles.xml @@ -30,7 +30,7 @@ @color/material_drawer_hint_text @color/material_drawer_divider @color/material_drawer_selected - @color/brand + @color/brand_200 @color/material_drawer_header_selection_text @style/PopupTheme diff --git a/Habitica/src/com/habitrpg/android/habitica/AvatarActivityBase.java b/Habitica/src/com/habitrpg/android/habitica/AvatarActivityBase.java index 288d50ec6..a47adeefe 100644 --- a/Habitica/src/com/habitrpg/android/habitica/AvatarActivityBase.java +++ b/Habitica/src/com/habitrpg/android/habitica/AvatarActivityBase.java @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica; +import android.graphics.Bitmap; import android.os.Bundle; import android.support.design.widget.CollapsingToolbarLayout; import android.support.design.widget.TabLayout; @@ -12,9 +13,14 @@ import android.widget.TextView; import com.crashlytics.android.Crashlytics; import com.crashlytics.android.core.CrashlyticsCore; import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel; +import com.habitrpg.android.habitica.ui.MainDrawerBuilder; +import com.habitrpg.android.habitica.userpicture.UserPicture; +import com.habitrpg.android.habitica.userpicture.UserPictureRunnable; import com.instabug.wrapper.support.activity.InstabugAppCompatActivity; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.mikepenz.materialdrawer.AccountHeader; import com.mikepenz.materialdrawer.Drawer; +import com.mikepenz.materialdrawer.model.interfaces.IProfile; import butterknife.ButterKnife; import butterknife.InjectView; @@ -44,6 +50,7 @@ public abstract class AvatarActivityBase extends InstabugAppCompatActivity { TextView titleTextView; + AccountHeader accountHeader; Drawer drawer; //endregion @@ -91,10 +98,29 @@ public abstract class AvatarActivityBase extends InstabugAppCompatActivity { viewPager.setBackgroundColor(getResources().getColor(R.color.white)); avatarInHeader = new AvatarWithBarsViewModel(this, avatar_with_bars); - + accountHeader = MainDrawerBuilder.CreateDefaultAccountHeader(this).build(); + drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar, accountHeader) + .build(); } protected void setTitle(String text) { toolbar.setTitle(text); } + + public void updateSidebar() { + final IProfile profile = accountHeader.getProfiles().get(0); + if (User.getAuthentication() != null) { + if (User.getAuthentication().getLocalAuthentication() != null) { + profile.withEmail(User.getAuthentication().getLocalAuthentication().getEmail()); + } + } + profile.withName(User.getProfile().getName()); + new UserPicture(User, this, true, false).setPictureWithRunnable(new UserPictureRunnable() { + public void run(Bitmap avatar) { + profile.withIcon(avatar); + accountHeader.updateProfile(profile); + } + }); + accountHeader.updateProfile(profile); + } } diff --git a/Habitica/src/com/habitrpg/android/habitica/GemPurchaseActivity.java b/Habitica/src/com/habitrpg/android/habitica/GemPurchaseActivity.java index a18154491..46f29228a 100644 --- a/Habitica/src/com/habitrpg/android/habitica/GemPurchaseActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/GemPurchaseActivity.java @@ -1,14 +1,24 @@ package com.habitrpg.android.habitica; import android.content.Intent; +import android.graphics.Bitmap; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import com.habitrpg.android.habitica.prefs.PrefsActivity; import com.habitrpg.android.habitica.ui.MainDrawerBuilder; +import com.habitrpg.android.habitica.userpicture.UserPicture; +import com.habitrpg.android.habitica.userpicture.UserPictureRunnable; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.mikepenz.materialdrawer.AccountHeader; import com.mikepenz.materialdrawer.Drawer; +import com.mikepenz.materialdrawer.model.ProfileDrawerItem; +import com.mikepenz.materialdrawer.model.interfaces.IProfile; +import com.raizlabs.android.dbflow.sql.builder.Condition; +import com.raizlabs.android.dbflow.sql.language.Select; import org.solovyev.android.checkout.ActivityCheckout; import org.solovyev.android.checkout.BillingRequests; @@ -28,7 +38,7 @@ public class GemPurchaseActivity extends AppCompatActivity { Toolbar toolbar; Drawer drawer; - + AccountHeader accountHeader; // endregion // region IAP @@ -63,9 +73,28 @@ public class GemPurchaseActivity extends AppCompatActivity { actionBar.setTitle("Purchase Gems"); } - drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar) + accountHeader = MainDrawerBuilder.CreateDefaultAccountHeader(this).build(); + Drawer drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar, accountHeader) + .withSelectedItem(2) .build(); + HostConfig hostConfig = PrefsActivity.fromContext(this); + HabitRPGUser user = new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).querySingle(); + + final IProfile profile = accountHeader.getProfiles().get(0); + if (user.getAuthentication() != null) { + if (user.getAuthentication().getLocalAuthentication() != null) { + profile.withEmail(user.getAuthentication().getLocalAuthentication().getEmail()); + } + } profile.withName(user.getProfile().getName()); + new UserPicture(user, this, true, false).setPictureWithRunnable(new UserPictureRunnable() { + public void run(Bitmap avatar) { + profile.withIcon(avatar); + accountHeader.updateProfile(profile); + } + }); + accountHeader.updateProfile(profile); + checkout.start(); // you only need this if this activity starts purchase process checkout.createPurchaseFlow(new RequestListener() { diff --git a/Habitica/src/com/habitrpg/android/habitica/HabitDatabase.java b/Habitica/src/com/habitrpg/android/habitica/HabitDatabase.java index 911a29482..19b1af154 100644 --- a/Habitica/src/com/habitrpg/android/habitica/HabitDatabase.java +++ b/Habitica/src/com/habitrpg/android/habitica/HabitDatabase.java @@ -10,5 +10,5 @@ public class HabitDatabase { public static final String NAME = "Habitica"; - public static final int VERSION = 1; + public static final int VERSION = 2; } diff --git a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java index 59dcca97a..95dc7203d 100644 --- a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java @@ -3,6 +3,7 @@ package com.habitrpg.android.habitica; import android.content.DialogInterface; import android.content.Intent; import android.databinding.DataBindingUtil; +import android.graphics.Bitmap; import android.graphics.Color; import android.os.Bundle; import android.support.design.widget.Snackbar; @@ -45,6 +46,7 @@ import com.habitrpg.android.habitica.ui.adapter.IReceiveNewEntries; import com.habitrpg.android.habitica.ui.fragments.TaskRecyclerViewFragment; import com.habitrpg.android.habitica.ui.helpers.Debounce; import com.habitrpg.android.habitica.userpicture.UserPicture; +import com.habitrpg.android.habitica.userpicture.UserPictureRunnable; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; import com.magicmicky.habitrpgwrapper.lib.models.SuppressedModals; import com.magicmicky.habitrpgwrapper.lib.models.Tag; @@ -55,10 +57,10 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag; import com.mikepenz.materialdrawer.Drawer; import com.mikepenz.materialdrawer.DrawerBuilder; -import com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener; import com.mikepenz.materialdrawer.model.SectionDrawerItem; import com.mikepenz.materialdrawer.model.SwitchDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; +import com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener; import com.raizlabs.android.dbflow.runtime.FlowContentObserver; import com.raizlabs.android.dbflow.runtime.transaction.BaseTransaction; import com.raizlabs.android.dbflow.runtime.transaction.TransactionListener; @@ -125,8 +127,6 @@ public class MainActivity extends AvatarActivityBase implements HabitRPGUserCall return; } - drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar) - .build(); filterDrawer = new DrawerBuilder() .withActivity(this) @@ -610,7 +610,7 @@ public class MainActivity extends AvatarActivityBase implements HabitRPGUserCall adapter.dailyResetOffset = User.getPreferences().getDayStart(); } updateHeader(); - + updateSidebar(); displayDeathDialogIfNeeded(); } }); @@ -731,7 +731,7 @@ public class MainActivity extends AvatarActivityBase implements HabitRPGUserCall detailView.setText(this.getString(R.string.levelup_detail, level)); ImageView avatarView = (ImageView)customView.findViewById(R.id.avatarView); - UserPicture userPicture = new UserPicture(User, this, false, false, false); + UserPicture userPicture = new UserPicture(User, this, false, false); userPicture.setPictureOn(avatarView); } @@ -775,7 +775,7 @@ public class MainActivity extends AvatarActivityBase implements HabitRPGUserCall AvatarWithBarsViewModel.setHpBarData(hpBar, User.getStats(), this); ImageView avatarView = (ImageView)customView.findViewById(R.id.avatarView); - UserPicture userPicture = new UserPicture(User, this, false, false, false); + UserPicture userPicture = new UserPicture(User, this, false, false); userPicture.setPictureOn(avatarView); } diff --git a/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java b/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java index 400a2bcf0..f5300e5b6 100644 --- a/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java @@ -42,9 +42,6 @@ public class PartyActivity extends AvatarActivityBase implements AppBarLayout.On protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar) - .build(); - setViewPagerAdapter(); this.hostConfig = PrefsActivity.fromContext(this); @@ -56,7 +53,7 @@ public class PartyActivity extends AvatarActivityBase implements AppBarLayout.On return; updateUserAvatars(); - + updateSidebar(); final ContentCache contentCache = new ContentCache(mAPIHelper.apiService); diff --git a/Habitica/src/com/habitrpg/android/habitica/TavernActivity.java b/Habitica/src/com/habitrpg/android/habitica/TavernActivity.java index 17c59b92d..4db05f2d0 100644 --- a/Habitica/src/com/habitrpg/android/habitica/TavernActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/TavernActivity.java @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica; +import android.graphics.Bitmap; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; @@ -15,8 +16,13 @@ import com.habitrpg.android.habitica.prefs.PrefsActivity; import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel; import com.habitrpg.android.habitica.ui.MainDrawerBuilder; import com.habitrpg.android.habitica.ui.fragments.ChatListFragment; +import com.habitrpg.android.habitica.userpicture.UserPicture; +import com.habitrpg.android.habitica.userpicture.UserPictureRunnable; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.mikepenz.materialdrawer.AccountHeader; import com.mikepenz.materialdrawer.Drawer; +import com.mikepenz.materialdrawer.model.ProfileDrawerItem; +import com.mikepenz.materialdrawer.model.interfaces.IProfile; import com.raizlabs.android.dbflow.sql.builder.Condition; import com.raizlabs.android.dbflow.sql.language.Select; @@ -36,6 +42,8 @@ public class TavernActivity extends AppCompatActivity { private APIHelper mAPIHelper; private HabitRPGUser User; + private AccountHeader accountHeader; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -60,7 +68,8 @@ public class TavernActivity extends AppCompatActivity { toolbar.setTitleTextColor(this.getResources().getColor(R.color.white)); } - Drawer drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar) + accountHeader = MainDrawerBuilder.CreateDefaultAccountHeader(this).build(); + Drawer drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar, accountHeader) .withSelectedItem(2) .build(); @@ -70,12 +79,29 @@ public class TavernActivity extends AppCompatActivity { User = new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).querySingle(); avatarInHeader.updateData(User); + updateSidebar(); mAPIHelper = new APIHelper(this, hostConfig); setFragment(new ChatListFragment(this, "habitrpg", mAPIHelper, User, true)); } + private void updateSidebar() { + final IProfile profile = accountHeader.getProfiles().get(0); + if (User.getAuthentication() != null) { + if (User.getAuthentication().getLocalAuthentication() != null) { + profile.withEmail(User.getAuthentication().getLocalAuthentication().getEmail()); + } + } profile.withName(User.getProfile().getName()); + new UserPicture(User, this, true, false).setPictureWithRunnable(new UserPictureRunnable() { + public void run(Bitmap avatar) { + profile.withIcon(avatar); + accountHeader.updateProfile(profile); + } + }); + accountHeader.updateProfile(profile); + } + // This could be moved into an abstract BaseActivity // class for being re-used by several instances protected void setFragment(Fragment fragment) { diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java b/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java index 52b5a92de..03ca582d0 100644 --- a/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java +++ b/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java @@ -12,13 +12,17 @@ import com.habitrpg.android.habitica.PartyActivity; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.TavernActivity; import com.habitrpg.android.habitica.prefs.PrefsActivity; +import com.mikepenz.materialdrawer.AccountHeader; +import com.mikepenz.materialdrawer.AccountHeaderBuilder; import com.mikepenz.materialdrawer.Drawer; import com.mikepenz.materialdrawer.DrawerBuilder; import com.mikepenz.materialdrawer.model.DividerDrawerItem; import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; +import com.mikepenz.materialdrawer.model.ProfileDrawerItem; import com.mikepenz.materialdrawer.model.SecondaryDrawerItem; import com.mikepenz.materialdrawer.model.SectionDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; +import com.mikepenz.materialdrawer.model.interfaces.IProfile; import java.util.HashMap; @@ -47,7 +51,25 @@ public class MainDrawerBuilder { ClassMap.put(SIDEBAR_ABOUT, AboutActivity.class); } - public static DrawerBuilder CreateDefaultBuilderSettings(final Activity activity, Toolbar toolbar) { + public static AccountHeaderBuilder CreateDefaultAccountHeader(final Activity activity) { + AccountHeaderBuilder builder = new AccountHeaderBuilder() + .withActivity(activity) + .withHeaderBackground(R.drawable.sidebar_background) + .addProfiles( + new ProfileDrawerItem() + ) + .withOnAccountHeaderListener(new AccountHeader.OnAccountHeaderListener() { + @Override + public boolean onProfileChanged(View view, IProfile profile, boolean currentProfile) { + return false; + } + }) + .withSelectionListEnabledForSingleProfile(false); + return builder; + } + + + public static DrawerBuilder CreateDefaultBuilderSettings(final Activity activity, Toolbar toolbar, AccountHeader accountHeader) { DrawerBuilder builder = new DrawerBuilder() .withActivity(activity); @@ -56,6 +78,7 @@ public class MainDrawerBuilder { } builder.withHeaderDivider(false) + .withAccountHeader(accountHeader) .addDrawerItems( new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_tasks)).withIdentifier(SIDEBAR_TASKS), @@ -73,8 +96,8 @@ public class MainDrawerBuilder { new DividerDrawerItem(), //new SecondaryDrawerItem().withName(activity.getString(R.string.sidebar_news)), - new SecondaryDrawerItem().withName(activity.getString(R.string.sidebar_settings)).withIdentifier(SIDEBAR_SETTINGS), - new SecondaryDrawerItem().withName(activity.getString(R.string.sidebar_about)).withIdentifier(SIDEBAR_ABOUT) + new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_settings)).withIdentifier(SIDEBAR_SETTINGS), + new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_about)).withIdentifier(SIDEBAR_ABOUT) ) .withStickyFooterDivider(false) diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/PartyMemberRecyclerViewAdapter.java b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/PartyMemberRecyclerViewAdapter.java index bab226d25..fa22dd846 100644 --- a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/PartyMemberRecyclerViewAdapter.java +++ b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/PartyMemberRecyclerViewAdapter.java @@ -91,7 +91,7 @@ public class PartyMemberRecyclerViewAdapter extends RecyclerView.Adapter layerNames = this.getLayerNames(); + + Bitmap cache = this.getCachedImage(layerNames); + + // yes => load image to bitmap + if(cache != null){ + imageView.setImageBitmap(cache); + return; + } + + // no => generate it + generateImage(layerNames); + } + + public void setPictureWithRunnable(UserPictureRunnable runnable) { + this.runnable = runnable; + List layerNames = this.getLayerNames(); + + Bitmap cache = this.getCachedImage(layerNames); + + // yes => load image to bitmap + if(cache != null){ + runnable.run(cache); + return; + } + + generateImage(layerNames); + } + + private List getLayerNames() { List layerNames = this.user.getAvatarLayerNames(); String mountName = this.user.getItems().getCurrentMount(); - if (mountName != null && !mountName.isEmpty() && hasMount) { + if (mountName != null && !mountName.isEmpty() && hasPetMount) { layerNames.add(0, "Mount_Body_" + mountName); layerNames.add("Mount_Head_" + mountName); } String petName = this.user.getItems().getCurrentPet(); - if (petName != null && !petName.isEmpty() && hasPet) { + if (petName != null && !petName.isEmpty() && hasPetMount) { layerNames.add("Pet-" + petName); - this.hasPet = true; + this.hasPetMount = true; } String backgroundName = this.user.getPreferences().getBackground(); @@ -106,7 +140,10 @@ public class UserPicture { this.hasBackground = true; } + return layerNames; + } + private Bitmap getCachedImage(List layerNames) { // get layer hash value String fullLayerString = ""; @@ -118,15 +155,10 @@ public class UserPicture { currentCacheFileName = layersHash.concat(".png"); // does it already exist? - Bitmap cache = BitmapUtils.loadFromFile(currentCacheFileName); + return BitmapUtils.loadFromFile(currentCacheFileName); + } - // yes => load image to bitmap - if (cache != null) { - imageView.setImageBitmap(cache); - return; - } - - // no => generate it + private void generateImage(List layerNames) { Integer layerNumber = 0; this.numOfTasks.set(layerNames.size()); for (String layer : layerNames) { @@ -177,15 +209,15 @@ public class UserPicture { yOffset = 0; } - if (this.hasMount && !((this.hasBackground && layerNumber == 1) || - (!this.hasBackground && layerNumber == 0) || - (this.hasPet && layerNumber == this.layers.size() - 2) || - (!this.hasPet && layerNumber == this.layers.size() - 1) + if (this.hasPetMount && !((this.hasBackground && layerNumber == 1) || + (!this.hasBackground && layerNumber == 0) || + (this.hasPetMount && layerNumber == this.layers.size()-2) || + (!this.hasPetMount && layerNumber == this.layers.size()-1) )) { yOffset = 0; } - if (this.hasPet && layerNumber == this.layers.size() - 1) { + if (this.hasPetMount && layerNumber == this.layers.size()-1) { xOffset = 0; yOffset = 43; } diff --git a/Habitica/src/com/habitrpg/android/habitica/userpicture/UserPictureRunnable.java b/Habitica/src/com/habitrpg/android/habitica/userpicture/UserPictureRunnable.java new file mode 100644 index 000000000..d35d8a718 --- /dev/null +++ b/Habitica/src/com/habitrpg/android/habitica/userpicture/UserPictureRunnable.java @@ -0,0 +1,11 @@ +package com.habitrpg.android.habitica.userpicture; + +import android.graphics.Bitmap; + +/** + * Created by viirus on 16/11/15. + */ +public interface UserPictureRunnable { + + void run(Bitmap avatarBitmap); +} diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/Authentication.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/Authentication.java new file mode 100644 index 000000000..97547d114 --- /dev/null +++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/Authentication.java @@ -0,0 +1,43 @@ +package com.magicmicky.habitrpgwrapper.lib.models; + +import com.google.gson.annotations.SerializedName; +import com.habitrpg.android.habitica.HabitDatabase; +import com.raizlabs.android.dbflow.annotation.Column; +import com.raizlabs.android.dbflow.annotation.ForeignKey; +import com.raizlabs.android.dbflow.annotation.ForeignKeyReference; +import com.raizlabs.android.dbflow.annotation.NotNull; +import com.raizlabs.android.dbflow.annotation.PrimaryKey; +import com.raizlabs.android.dbflow.annotation.Table; +import com.raizlabs.android.dbflow.structure.BaseModel; + +/** + * Created by admin on 18/11/15. + */ +@Table(databaseName = HabitDatabase.NAME) +public class Authentication extends BaseModel { + + @Column + @PrimaryKey + @NotNull + String user_id; + + @SerializedName("local") + @Column + @ForeignKey(references = {@ForeignKeyReference(columnName = "localauthentication_user_id", + columnType = String.class, + foreignColumnName = "user_id")}) + public LocalAuthentication localAuthentication; + + public LocalAuthentication getLocalAuthentication() { return localAuthentication; } + + public void setLocalAuthentication(LocalAuthentication LocalAuthentication) {this.localAuthentication = LocalAuthentication; } + + @Override + public void save() { + + if (localAuthentication != null) + localAuthentication.user_id = user_id; + + super.save(); + } +} diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java index 04f3bd196..3982fa66a 100644 --- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java +++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java @@ -1,5 +1,6 @@ package com.magicmicky.habitrpgwrapper.lib.models; +import com.google.gson.annotations.SerializedName; import com.habitrpg.android.habitica.HabitDatabase; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import com.raizlabs.android.dbflow.annotation.Column; @@ -65,6 +66,13 @@ public class HabitRPGUser extends BaseModel { foreignColumnName = "user_id")}) private Items items; + @Column + @ForeignKey(references = {@ForeignKeyReference(columnName = "authentication_id", + columnType = String.class, + foreignColumnName = "user_id")}) + @SerializedName("auth") + private Authentication authentication; + public Preferences getPreferences() { return preferences; } @@ -141,6 +149,10 @@ public class HabitRPGUser extends BaseModel { return this.balance; } + public Authentication getAuthentication() { return authentication; } + + public void setAuthentication(Authentication authentication) {this.authentication = authentication; } + @OneToMany(methods = {OneToMany.Method.SAVE, OneToMany.Method.DELETE}, variableName = "habits") public List getHabits() { if(habits == null) { @@ -207,6 +219,7 @@ public class HabitRPGUser extends BaseModel { stats.id = id; profile.user_Id = id; items.user_id = id; + authentication.user_id = id; ArrayList allTasks = new ArrayList(); diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/LocalAuthentication.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/LocalAuthentication.java new file mode 100644 index 000000000..46d28351e --- /dev/null +++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/LocalAuthentication.java @@ -0,0 +1,29 @@ +package com.magicmicky.habitrpgwrapper.lib.models; + +import com.habitrpg.android.habitica.HabitDatabase; +import com.raizlabs.android.dbflow.annotation.Column; +import com.raizlabs.android.dbflow.annotation.NotNull; +import com.raizlabs.android.dbflow.annotation.PrimaryKey; +import com.raizlabs.android.dbflow.annotation.Table; +import com.raizlabs.android.dbflow.structure.BaseModel; + +/** + * Created by admin on 18/11/15. + */ +@Table(databaseName = HabitDatabase.NAME) +public class LocalAuthentication extends BaseModel { + + @Column + @PrimaryKey + @NotNull + String user_id; + + @Column + String email, username; + + public String getEmail() { return email; } + public String getUsername() { return username; } + + public void setEmail(String email) {this.email = email; } + public void setUsername(String username) {this.username = username; } +}