From b39a223c05ba7094b2141f303e1d7edbb48737d5 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 16 Nov 2015 22:22:04 +0100 Subject: [PATCH 1/2] Basic sidebar header --- Habitica/build.gradle | 1 + .../res/drawable-mdpi/sidebar_background.png | Bin 0 -> 13083 bytes .../android/habitica/AvatarActivityBase.java | 22 +++++ .../android/habitica/GemPurchaseActivity.java | 29 ++++++- .../android/habitica/MainActivity.java | 12 +-- .../android/habitica/PartyActivity.java | 5 +- .../android/habitica/TavernActivity.java | 24 +++++- .../habitica/ui/MainDrawerBuilder.java | 29 ++++++- .../PartyMemberRecyclerViewAdapter.java | 2 +- .../habitica/userpicture/UserPicture.java | 78 ++++++++++++------ .../userpicture/UserPictureRunnable.java | 11 +++ 11 files changed, 174 insertions(+), 39 deletions(-) create mode 100644 Habitica/res/drawable-mdpi/sidebar_background.png create mode 100644 Habitica/src/com/habitrpg/android/habitica/userpicture/UserPictureRunnable.java diff --git a/Habitica/build.gradle b/Habitica/build.gradle index 6d8fe2ec9..50a00c954 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.0.1' compile 'com.android.support:design:23.0.1' diff --git a/Habitica/res/drawable-mdpi/sidebar_background.png b/Habitica/res/drawable-mdpi/sidebar_background.png new file mode 100644 index 0000000000000000000000000000000000000000..dcc03e6b45da98463f2d69d1465f02e91adae2b6 GIT binary patch literal 13083 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 Z1Cwk$4q6Pq|JwymSwTa-MAr2A{{a(b3*`U+ literal 0 HcmV?d00001 diff --git a/Habitica/src/com/habitrpg/android/habitica/AvatarActivityBase.java b/Habitica/src/com/habitrpg/android/habitica/AvatarActivityBase.java index 241ab081b..98ce2fa44 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 @@ -92,6 +99,9 @@ public abstract class AvatarActivityBase extends InstabugAppCompatActivity { avatarInHeader = new AvatarWithBarsViewModel(this, avatar_with_bars); + accountHeader = MainDrawerBuilder.CreateDefaultAccountHeader(this).build(); + drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar, accountHeader) + .build(); // titleTextView = new TextView(this); // titleTextView.setTextAppearance(this, android.R.style.TextAppearance_Material_Widget_ActionBar_Title_Inverse); @@ -102,4 +112,16 @@ public abstract class AvatarActivityBase extends InstabugAppCompatActivity { protected void setTitle(String text){ toolbar.setTitle(text); } + + public void updateSidebar() { + final IProfile profile = accountHeader.getProfiles().get(0); + 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 f97ac4724..5ce17a8a8 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; @@ -29,7 +39,7 @@ public class GemPurchaseActivity extends AppCompatActivity { Toolbar toolbar; Drawer drawer; - + AccountHeader accountHeader; // endregion // region IAP @@ -64,9 +74,24 @@ public class GemPurchaseActivity extends AppCompatActivity { actionBar.setTitle("Purchase Gems 2"); } - 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); + 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/MainActivity.java b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java index 15cf81365..d3f8cd6b0 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,12 @@ 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.model.ProfileDrawerItem; 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.mikepenz.materialdrawer.model.interfaces.IProfile; 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 +129,6 @@ public class MainActivity extends AvatarActivityBase implements HabitRPGUserCall return; } - drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar) - .build(); filterDrawer = new DrawerBuilder() .withActivity(this) @@ -610,7 +612,7 @@ public class MainActivity extends AvatarActivityBase implements HabitRPGUserCall adapter.dailyResetOffset = User.getPreferences().getDayStart(); } updateHeader(); - + updateSidebar(); displayDeathDialogIfNeeded(); } }); @@ -731,7 +733,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 +777,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 5897b8134..28847e1fa 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 cf19ccb70..d2bcbe546 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,25 @@ 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); + 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 62e2ee5e6..2940b0a7b 100644 --- a/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java +++ b/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java @@ -13,13 +13,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; @@ -48,7 +52,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); @@ -57,6 +79,7 @@ public class MainDrawerBuilder { } builder.withHeaderDivider(false) + .withAccountHeader(accountHeader) .addDrawerItems( new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_tasks)).withIdentifier(SIDEBAR_TASKS), @@ -74,8 +97,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) { @@ -176,15 +208,15 @@ public class UserPicture { yOffset = 0; } - if (this.hasMount && !((this.hasBackground && layerNumber == 1) || + if (this.hasPetMount && !((this.hasBackground && layerNumber == 1) || (!this.hasBackground && layerNumber == 0) || - (this.hasPet && layerNumber == this.layers.size()-2) || - (!this.hasPet && layerNumber == this.layers.size()-1) + (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); +} From 012278e4b95d00457ec2784ec4e001f281075007 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 18 Nov 2015 16:08:59 +0100 Subject: [PATCH 2/2] add email to sidebar --- Habitica/assets/migrations/Habitica/2.sql | 1 + Habitica/res/values/colors.xml | 14 ------- Habitica/res/values/styles.xml | 2 +- .../android/habitica/AvatarActivityBase.java | 5 +++ .../android/habitica/GemPurchaseActivity.java | 6 ++- .../android/habitica/HabitDatabase.java | 2 +- .../android/habitica/TavernActivity.java | 6 ++- .../habitica/userpicture/UserPicture.java | 21 ---------- .../lib/models/Authentication.java | 38 ++++++++++++++++++- .../lib/models/HabitRPGUser.java | 13 +++++++ .../lib/models/LocalAuthentication.java | 24 +++++++++++- 11 files changed, 91 insertions(+), 41 deletions(-) diff --git a/Habitica/assets/migrations/Habitica/2.sql b/Habitica/assets/migrations/Habitica/2.sql index e69de29bb..725b4aa5a 100644 --- a/Habitica/assets/migrations/Habitica/2.sql +++ 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/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 2d69eed8c..a47adeefe 100644 --- a/Habitica/src/com/habitrpg/android/habitica/AvatarActivityBase.java +++ b/Habitica/src/com/habitrpg/android/habitica/AvatarActivityBase.java @@ -109,6 +109,11 @@ public abstract class AvatarActivityBase extends InstabugAppCompatActivity { 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) { diff --git a/Habitica/src/com/habitrpg/android/habitica/GemPurchaseActivity.java b/Habitica/src/com/habitrpg/android/habitica/GemPurchaseActivity.java index 9c9bd69d6..46f29228a 100644 --- a/Habitica/src/com/habitrpg/android/habitica/GemPurchaseActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/GemPurchaseActivity.java @@ -82,7 +82,11 @@ public class GemPurchaseActivity extends AppCompatActivity { HabitRPGUser user = new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).querySingle(); final IProfile profile = accountHeader.getProfiles().get(0); - profile.withName(user.getProfile().getName()); + 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); 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/TavernActivity.java b/Habitica/src/com/habitrpg/android/habitica/TavernActivity.java index 600bb8257..4db05f2d0 100644 --- a/Habitica/src/com/habitrpg/android/habitica/TavernActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/TavernActivity.java @@ -88,7 +88,11 @@ public class TavernActivity extends AppCompatActivity { private void updateSidebar() { final IProfile profile = accountHeader.getProfiles().get(0); - profile.withName(User.getProfile().getName()); + 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); diff --git a/Habitica/src/com/habitrpg/android/habitica/userpicture/UserPicture.java b/Habitica/src/com/habitrpg/android/habitica/userpicture/UserPicture.java index 124e7f852..438f5a385 100644 --- a/Habitica/src/com/habitrpg/android/habitica/userpicture/UserPicture.java +++ b/Habitica/src/com/habitrpg/android/habitica/userpicture/UserPicture.java @@ -155,18 +155,8 @@ public class UserPicture { currentCacheFileName = layersHash.concat(".png"); // does it already exist? -<<<<<<< HEAD return BitmapUtils.loadFromFile(currentCacheFileName); } -======= - Bitmap cache = BitmapUtils.loadFromFile(currentCacheFileName); - - // yes => load image to bitmap - if (cache != null) { - imageView.setImageBitmap(cache); - return; - } ->>>>>>> d0ae3a5b4a54a09409b3701d256c7715181ae781 private void generateImage(List layerNames) { Integer layerNumber = 0; @@ -219,26 +209,15 @@ public class UserPicture { yOffset = 0; } -<<<<<<< HEAD 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) -======= - 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) ->>>>>>> d0ae3a5b4a54a09409b3701d256c7715181ae781 )) { yOffset = 0; } -<<<<<<< HEAD if (this.hasPetMount && layerNumber == this.layers.size()-1) { -======= - if (this.hasPet && layerNumber == this.layers.size() - 1) { ->>>>>>> d0ae3a5b4a54a09409b3701d256c7715181ae781 xOffset = 0; yOffset = 43; } diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/Authentication.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/Authentication.java index 5c793daa1..97547d114 100644 --- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/Authentication.java +++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/Authentication.java @@ -1,7 +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. */ -public class Authentication { +@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 index aa1bdeaeb..46d28351e 100644 --- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/LocalAuthentication.java +++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/LocalAuthentication.java @@ -1,7 +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. */ -public class LocalAuthentication { +@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; } }