From 9c1d903752e6c723615996925320d624c894e9ff Mon Sep 17 00:00:00 2001 From: Negue Date: Mon, 19 Oct 2015 20:25:57 +0200 Subject: [PATCH] Refactor MainDrawerBuilder / start with gempurchases --- FloatingActionMenuBehavior.java | 70 +++++++++++++++++++ Habitica/AndroidManifest.xml | 37 ++++++---- Habitica/Habitica.iml | 30 ++++---- Habitica/assets/paperboy/changelog.json | 21 ++++++ Habitica/build.gradle | 3 + Habitica/res/layout/activity_gem_purchase.xml | 30 ++++++++ Habitica/res/layout/activity_main.xml | 6 +- Habitica/res/values/strings.sidebar.xml | 1 + Habitica/res/values/strings.xml | 3 + .../android/habitica/ContentCache.java | 5 -- .../android/habitica/GemPurchaseActivity.java | 53 ++++++++++++++ .../android/habitica/MainActivity.java | 1 - .../android/habitica/PartyActivity.java | 1 - .../android/habitica/TaskFormActivity.java | 17 +++-- .../habitica/ui/MainDrawerBuilder.java | 56 ++++++++------- 15 files changed, 262 insertions(+), 72 deletions(-) create mode 100644 FloatingActionMenuBehavior.java create mode 100644 Habitica/res/layout/activity_gem_purchase.xml create mode 100644 Habitica/src/com/habitrpg/android/habitica/GemPurchaseActivity.java diff --git a/FloatingActionMenuBehavior.java b/FloatingActionMenuBehavior.java new file mode 100644 index 000000000..622f6b069 --- /dev/null +++ b/FloatingActionMenuBehavior.java @@ -0,0 +1,70 @@ +package com.habitrpg.android.habitica.ui.helpers; + +// https://gist.github.com/lodlock/e3cd12130bad70a098db + +import android.content.Context; +import android.support.design.widget.CoordinatorLayout; +import android.support.design.widget.Snackbar; +import android.support.v4.view.ViewCompat; +import android.support.v4.view.ViewPropertyAnimatorListener; +import android.util.AttributeSet; +import android.view.View; + +import com.github.clans.fab.FloatingActionMenu; + +import java.util.List; + +public class FloatingActionMenuBehavior extends CoordinatorLayout.Behavior { + private float mTranslationY; + + public FloatingActionMenuBehavior(Context context, AttributeSet attrs) { + super(); + } + + @Override + public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) { + return dependency instanceof Snackbar.SnackbarLayout; + } + + @Override + public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) { + if (child instanceof FloatingActionMenu && dependency instanceof Snackbar.SnackbarLayout) { + this.updateTranslation(parent, child, dependency); + } + + return false; + } + + private void updateTranslation(CoordinatorLayout parent, View child, View dependency) { + float translationY = this.getTranslationY(parent, child); + if (translationY != this.mTranslationY) { + ViewCompat.animate(child) + .cancel(); + if (Math.abs(translationY - this.mTranslationY) == (float) dependency.getHeight()) { + ViewCompat.animate(child) + .translationY(translationY) + .setListener((ViewPropertyAnimatorListener) null); + } else { + ViewCompat.setTranslationY(child, translationY); + } + + this.mTranslationY = translationY; + } + + } + + private float getTranslationY(CoordinatorLayout parent, View child) { + float minOffset = 0.0F; + List dependencies = parent.getDependencies(child); + int i = 0; + + for (int z = dependencies.size(); i < z; ++i) { + View view = (View) dependencies.get(i); + if (view instanceof Snackbar.SnackbarLayout && parent.doViewsOverlap(child, view)) { + minOffset = Math.min(minOffset, ViewCompat.getTranslationY(view) - (float) view.getHeight()); + } + } + + return minOffset; + } +} \ No newline at end of file diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index be6453726..71ebc3541 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -2,7 +2,8 @@ + android:versionName="0.0.4" + android:screenOrientation="portrait" > - - + + + + android:theme="@style/AppTheme" > + android:windowSoftInputMode="stateHidden|adjustResize" > @@ -37,7 +35,7 @@ + android:theme="@style/AppThemeWithActionBar" > @@ -46,7 +44,7 @@ android:name=".LoginActivity" android:label="@string/LoginActivityName" android:theme="@style/AppThemeWithActionBarBlackText" - android:windowSoftInputMode="adjustResize"> + android:windowSoftInputMode="adjustResize" > @@ -55,7 +53,7 @@ + android:label="Habitica Simple Widget" > @@ -78,7 +76,7 @@ android:name=".TaskFormActivity" android:label="@string/title_activity_task_form" android:parentActivityName=".MainActivity" - android:theme="@style/AppThemeWithActionBarBlackText"> + android:theme="@style/AppThemeWithActionBarBlackText" > @@ -87,7 +85,7 @@ android:name=".TavernActivity" android:label="@string/title_activity_tavern" android:parentActivityName=".MainActivity" - android:theme="@style/AppThemeWithOwnActionBar"> + android:theme="@style/AppThemeWithOwnActionBar" > @@ -95,7 +93,16 @@ + android:parentActivityName=".MainActivity" > + + + diff --git a/Habitica/Habitica.iml b/Habitica/Habitica.iml index b48ca7789..0bdfa8c30 100644 --- a/Habitica/Habitica.iml +++ b/Habitica/Habitica.iml @@ -69,11 +69,11 @@ - + - - - + + + @@ -90,6 +90,7 @@ + @@ -106,7 +107,7 @@ - + @@ -123,41 +124,42 @@ + - + + + - - - + - + - + - - + + - + diff --git a/Habitica/assets/paperboy/changelog.json b/Habitica/assets/paperboy/changelog.json index ad1998a28..c81afaa0c 100644 --- a/Habitica/assets/paperboy/changelog.json +++ b/Habitica/assets/paperboy/changelog.json @@ -1,4 +1,25 @@ [ + { + "name": "Version 0.0.5", + "items":[ + { + "type": "F", + "title": "New Floating-Action-Button with sub buttons" + }, + { + "type": "B", + "title": "Tag-Filter now fully working" + }, + { + "type": "B", + "title": "Speed up loading+saving of data" + }, + { + "type": "B", + "title": "Tasks were saved/added without a title" + } + ] + }, { "name": "Version 0.0.4", "items":[ diff --git a/Habitica/build.gradle b/Habitica/build.gradle index a80f9395c..44ae3f996 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -86,6 +86,9 @@ dependencies { compile "com.raizlabs.android:DBFlow:2.2.1" compile 'de.greenrobot:eventbus:2.4.0' + + // IAP Handling / Verification + compile 'org.solovyev.android:checkout:0.7.4@aar' } android { diff --git a/Habitica/res/layout/activity_gem_purchase.xml b/Habitica/res/layout/activity_gem_purchase.xml new file mode 100644 index 000000000..c798f7e40 --- /dev/null +++ b/Habitica/res/layout/activity_gem_purchase.xml @@ -0,0 +1,30 @@ + + + + + + + + + diff --git a/Habitica/res/layout/activity_main.xml b/Habitica/res/layout/activity_main.xml index f3ead0f0e..4f3382fc6 100644 --- a/Habitica/res/layout/activity_main.xml +++ b/Habitica/res/layout/activity_main.xml @@ -129,7 +129,7 @@ fab:fab_shadowColor="#000" fab:fab_elevationCompat="6dp" - android:src="@drawable/ic_menu_edit" + android:src="@drawable/fab_add" fab:fab_size="mini" fab:fab_label="New Daily" /> @@ -145,7 +145,7 @@ fab:fab_shadowColor="#000" fab:fab_elevationCompat="6dp" - android:src="@drawable/ic_menu_edit" + android:src="@drawable/fab_add" fab:fab_size="mini" fab:fab_label="New Todo" /> @@ -161,7 +161,7 @@ fab:fab_shadowColor="#000" fab:fab_elevationCompat="6dp" - android:src="@drawable/ic_menu_edit" + android:src="@drawable/fab_add" fab:fab_size="mini" fab:fab_label="New Reward" /> diff --git a/Habitica/res/values/strings.sidebar.xml b/Habitica/res/values/strings.sidebar.xml index ad60313ec..9fe7add6d 100644 --- a/Habitica/res/values/strings.sidebar.xml +++ b/Habitica/res/values/strings.sidebar.xml @@ -4,6 +4,7 @@ Social Tavern Party + Purchase Gems Guilds Challenges Inventory diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 7410d2ed6..9b53844aa 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -148,4 +148,7 @@ Sunday Tavern Party + Purchase Gems + + Hello world! \ No newline at end of file diff --git a/Habitica/src/com/habitrpg/android/habitica/ContentCache.java b/Habitica/src/com/habitrpg/android/habitica/ContentCache.java index 669d7ccfa..59bd15ad9 100644 --- a/Habitica/src/com/habitrpg/android/habitica/ContentCache.java +++ b/Habitica/src/com/habitrpg/android/habitica/ContentCache.java @@ -2,16 +2,11 @@ package com.habitrpg.android.habitica; import com.magicmicky.habitrpgwrapper.lib.api.ApiService; import com.magicmicky.habitrpgwrapper.lib.models.ContentResult; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; import com.magicmicky.habitrpgwrapper.lib.models.QuestBoss; import com.magicmicky.habitrpgwrapper.lib.models.QuestContent; -import com.raizlabs.android.dbflow.sql.SqlUtils; import com.raizlabs.android.dbflow.sql.builder.Condition; -import com.raizlabs.android.dbflow.sql.language.Insert; import com.raizlabs.android.dbflow.sql.language.Select; -import java.util.HashMap; - import retrofit.Callback; import retrofit.RetrofitError; import retrofit.client.Response; diff --git a/Habitica/src/com/habitrpg/android/habitica/GemPurchaseActivity.java b/Habitica/src/com/habitrpg/android/habitica/GemPurchaseActivity.java new file mode 100644 index 000000000..b5e03de64 --- /dev/null +++ b/Habitica/src/com/habitrpg/android/habitica/GemPurchaseActivity.java @@ -0,0 +1,53 @@ +package com.habitrpg.android.habitica; + +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; + +import com.habitrpg.android.habitica.ui.MainDrawerBuilder; +import com.mikepenz.materialdrawer.Drawer; + +import butterknife.ButterKnife; +import butterknife.InjectView; + +public class GemPurchaseActivity extends AppCompatActivity { + + @InjectView(R.id.toolbar) + Toolbar toolbar; + + Drawer drawer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_gem_purchase); + + // Inject Controls + ButterKnife.inject(this); + + if (toolbar != null) { + setSupportActionBar(toolbar); + + ActionBar actionBar = getSupportActionBar(); + + if (actionBar != null) { + + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setDisplayShowHomeEnabled(false); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setDisplayUseLogoEnabled(false); + actionBar.setHomeButtonEnabled(false); + } + + toolbar.setPadding(0, getResources().getDimensionPixelSize(R.dimen.tool_bar_top_padding), 0, 0); + toolbar.setTitle("Purchase Gems"); + actionBar.setTitle("Purchase Gems 2"); + } + + + drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar) + + .build(); + } +} diff --git a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java index defe73e51..8a6b9d16c 100644 --- a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java @@ -100,7 +100,6 @@ public class MainActivity extends AvatarActivityBase implements HabitRPGUserCall } drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar) - .withSelectedItem(0) .build(); filterDrawer = new DrawerBuilder() diff --git a/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java b/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java index 4091dc238..c10165e11 100644 --- a/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/PartyActivity.java @@ -43,7 +43,6 @@ public class PartyActivity extends AvatarActivityBase implements AppBarLayout.On super.onCreate(savedInstanceState); drawer = MainDrawerBuilder.CreateDefaultBuilderSettings(this, toolbar) - .withSelectedItem(0) .build(); setViewPagerAdapter(); diff --git a/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java b/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java index 2029f2034..2ba515843 100644 --- a/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/TaskFormActivity.java @@ -203,8 +203,12 @@ public class TaskFormActivity extends AppCompatActivity implements AdapterView.O } - private void saveTask(Task task) { + private boolean saveTask(Task task) { task.text = taskText.getText().toString(); + + if(task.text.isEmpty()) + return false; + task.notes = taskNotes.getText().toString(); if (this.taskDifficultySpinner.getSelectedItemPosition() == 0) { @@ -237,6 +241,8 @@ public class TaskFormActivity extends AppCompatActivity implements AdapterView.O task.setEveryX(this.frequencyPicker.getValue()); } } + + return true; } public void onItemSelected(AdapterView parent, View view, @@ -255,11 +261,10 @@ public class TaskFormActivity extends AppCompatActivity implements AdapterView.O this.task = new Task(); this.task.setType(taskType); } - this.saveTask(this.task); - - event.task = this.task; - EventBus.getDefault().post(event); - + if(this.saveTask(this.task)) { + event.task = this.task; + EventBus.getDefault().post(event); + } } @Override diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java b/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java index 1e8c7898d..4b8af7dfc 100644 --- a/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java +++ b/Habitica/src/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java @@ -7,6 +7,7 @@ import android.view.View; import android.widget.AdapterView; import com.habitrpg.android.habitica.AboutActivity; +import com.habitrpg.android.habitica.GemPurchaseActivity; import com.habitrpg.android.habitica.MainActivity; import com.habitrpg.android.habitica.PartyActivity; import com.habitrpg.android.habitica.R; @@ -20,17 +21,32 @@ import com.mikepenz.materialdrawer.model.SecondaryDrawerItem; import com.mikepenz.materialdrawer.model.SectionDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; +import java.util.HashMap; + /** * Created by Negue on 18.08.2015. */ public class MainDrawerBuilder { - static final int SIDEBAR_TASKS = 1; + // Change the identificationIDs to the position IDs so that its easier to set the selected entry + static final int SIDEBAR_TASKS = 0; static final int SIDEBAR_TAVERN = 2; static final int SIDEBAR_PARTY = 3; - static final int SIDEBAR_SETTINGS = 11; - static final int SIDEBAR_ABOUT = 12; + static final int SIDEBAR_PURCHASE = 4; + static final int SIDEBAR_SETTINGS = 6; + static final int SIDEBAR_ABOUT = 7; + + private static HashMap ClassMap = new HashMap<>(); + + static { + ClassMap.put(SIDEBAR_TASKS, MainActivity.class); + ClassMap.put(SIDEBAR_TAVERN, TavernActivity.class); + ClassMap.put(SIDEBAR_PARTY, PartyActivity.class); + ClassMap.put(SIDEBAR_PURCHASE, GemPurchaseActivity.class); + ClassMap.put(SIDEBAR_SETTINGS, PrefsActivity.class); + ClassMap.put(SIDEBAR_ABOUT, AboutActivity.class); + } public static DrawerBuilder CreateDefaultBuilderSettings(final Activity activity, Toolbar toolbar) { DrawerBuilder builder = new DrawerBuilder() @@ -48,6 +64,7 @@ public class MainDrawerBuilder { new SectionDrawerItem().withName(activity.getString(R.string.sidebar_section_social)), new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_tavern)).withIdentifier(SIDEBAR_TAVERN), new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_party)).withIdentifier(SIDEBAR_PARTY), + new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_purchaseGems)).withIdentifier(SIDEBAR_PURCHASE), /*new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_guilds)), new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_challenges)), @@ -68,30 +85,7 @@ public class MainDrawerBuilder { public boolean onItemClick(AdapterView parent, View view, int position, long id, IDrawerItem drawerItem) { // do something with the clicked item :D - Class selectedClass = null; - - switch (drawerItem.getIdentifier()) { - case SIDEBAR_TASKS: { - selectedClass = MainActivity.class; - break; - } - case SIDEBAR_TAVERN: { - selectedClass = TavernActivity.class; - break; - } - case SIDEBAR_PARTY: { - selectedClass = PartyActivity.class; - break; - } - case SIDEBAR_SETTINGS: { - selectedClass = PrefsActivity.class; - break; - } - case SIDEBAR_ABOUT: { - selectedClass = AboutActivity.class; - break; - } - } + Class selectedClass = ClassMap.get(drawerItem.getIdentifier()); if (selectedClass != null && activity.getClass() != selectedClass) { activity.startActivity(new Intent(activity, selectedClass)); @@ -106,6 +100,14 @@ public class MainDrawerBuilder { } }); + Class activityClass = activity.getClass(); + for (java.util.Map.Entry entry: ClassMap.entrySet()) { + if(entry.getValue() == activityClass){ + builder.withSelectedItem(entry.getKey()); + } + } + + return builder; } }