From 20fb65d48f791cdc09868c6eaa839ec42f73a1df Mon Sep 17 00:00:00 2001 From: Mike Penz Date: Mon, 22 Aug 2016 19:41:11 +0200 Subject: [PATCH 1/9] * add `tag` to IDrawerImageLoader and AbstractDrawerImageLoader to allow differentiation inside the loading logic * Perhaps FIX #1489 --- MIGRATION.md | 3 +++ .../materialdrawer/util/AbstractDrawerImageLoader.java | 6 ++++++ .../com/mikepenz/materialdrawer/util/DrawerImageLoader.java | 4 +++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/MIGRATION.md b/MIGRATION.md index 00094b3ff..628c33fe7 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -1,5 +1,8 @@ ###Upgrade Notes +#### v5.5.1 +* add `void set(ImageView imageView, Uri uri, Drawable placeholder, String tag);` to `IDrawerImageLoader` interface, similar to the `tag` provided in the placeholder method + #### v5.5.0 * **Dropping support for API < 14. New MinSdkVersion is 14** diff --git a/library/src/main/java/com/mikepenz/materialdrawer/util/AbstractDrawerImageLoader.java b/library/src/main/java/com/mikepenz/materialdrawer/util/AbstractDrawerImageLoader.java index ea3a3ac28..c576a76d0 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/util/AbstractDrawerImageLoader.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/util/AbstractDrawerImageLoader.java @@ -9,6 +9,12 @@ public abstract class AbstractDrawerImageLoader implements DrawerImageLoader.IDrawerImageLoader { @Override public void set(ImageView imageView, Uri uri, Drawable placeholder) { + } + + @Override + public void set(ImageView imageView, Uri uri, Drawable placeholder, String tag) { + //for backwards compatibility call the method without tag too + set(imageView, uri, placeholder); //this won't do anything Log.i("MaterialDrawer", "you have not specified a ImageLoader implementation through the DrawerImageLoader.init(IDrawerImageLoader) method"); } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/util/DrawerImageLoader.java b/library/src/main/java/com/mikepenz/materialdrawer/util/DrawerImageLoader.java index fa2700227..ea8eda646 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/util/DrawerImageLoader.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/util/DrawerImageLoader.java @@ -53,7 +53,7 @@ public boolean setImage(ImageView imageView, Uri uri, String tag) { if (mHandleAllUris || "http".equals(uri.getScheme()) || "https".equals(uri.getScheme())) { if (imageLoader != null) { Drawable placeHolder = imageLoader.placeholder(imageView.getContext(), tag); - imageLoader.set(imageView, uri, placeHolder); + imageLoader.set(imageView, uri, placeHolder, tag); } return true; } @@ -77,6 +77,8 @@ public void setImageLoader(IDrawerImageLoader imageLoader) { public interface IDrawerImageLoader { void set(ImageView imageView, Uri uri, Drawable placeholder); + void set(ImageView imageView, Uri uri, Drawable placeholder, String tag); + void cancel(ImageView imageView); Drawable placeholder(Context ctx); From b2260bf5b514c1cbdabbaf7eb39397b5e7d573fe Mon Sep 17 00:00:00 2001 From: Mike Penz Date: Mon, 22 Aug 2016 19:41:20 +0200 Subject: [PATCH 2/9] * update sample app dependencies --- app/build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 223e31b25..05fba216a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -53,21 +53,21 @@ dependencies { // used to generate the Open Source section // https://github.com/mikepenz/AboutLibraries - compile('com.mikepenz:aboutlibraries:5.7.1@aar') { + compile('com.mikepenz:aboutlibraries:5.8.0@aar') { transitive = true exclude module: "fastadapter" } //used to provide different itemAnimators for the RecyclerView //https://github.com/mikepenz/ItemAnimators - compile 'com.mikepenz:itemanimators:0.2.4@aar' + compile 'com.mikepenz:itemanimators:0.5.0@aar' // used to provide the MiniDrawer to normal Drawer crossfade effect via a SlidingPane layout // --> https://github.com/mikepenz/MaterialDrawer/blob/develop/app/src/main/java/com/mikepenz/materialdrawer/app/MiniDrawerActivity.java // https://github.com/mikepenz/Crossfader - compile 'com.mikepenz:crossfader:1.3.7@aar' + compile 'com.mikepenz:crossfader:1.5.0@aar' // used to provide the two step crossfade DrawerLayout. Which allows to have a mini layout which transforms to a normal layout within the drawer // --> https://github.com/mikepenz/MaterialDrawer/blob/develop/app/src/main/java/com/mikepenz/materialdrawer/app/CrossfadeDrawerLayoutActvitiy.java // https://github.com/mikepenz/CrossfadeDrawerLayout - compile('com.mikepenz:crossfadedrawerlayout:0.3.4@aar') + compile('com.mikepenz:crossfadedrawerlayout:1.0.0@aar') // icon fonts used inside the sample // https://github.com/mikepenz/Android-Iconics From 823a5cc191f5749cadb9c2fd93ef77865905b5fb Mon Sep 17 00:00:00 2001 From: Mike Penz Date: Mon, 22 Aug 2016 20:13:22 +0200 Subject: [PATCH 3/9] * properly trigger onDrawerItemClickListener of the item when the `setSelection` method is called --- .../java/com/mikepenz/materialdrawer/Drawer.java | 13 +++++++++++-- .../com/mikepenz/materialdrawer/DrawerUtils.java | 14 +++++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/library/src/main/java/com/mikepenz/materialdrawer/Drawer.java b/library/src/main/java/com/mikepenz/materialdrawer/Drawer.java index 913cf9874..e63d9d181 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/Drawer.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/Drawer.java @@ -18,6 +18,7 @@ import com.mikepenz.materialdrawer.holder.DimenHolder; import com.mikepenz.materialdrawer.holder.ImageHolder; import com.mikepenz.materialdrawer.holder.StringHolder; +import com.mikepenz.materialdrawer.model.AbstractDrawerItem; import com.mikepenz.materialdrawer.model.ContainerDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.Badgeable; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; @@ -554,8 +555,16 @@ public boolean setSelectionAtPosition(int position, boolean fireOnClick) { if (mDrawerBuilder.mRecyclerView != null) { mDrawerBuilder.mAdapter.deselect(); mDrawerBuilder.mAdapter.select(position, false); - if (mDrawerBuilder.mOnDrawerItemClickListener != null && fireOnClick && position >= 0) { - mDrawerBuilder.mOnDrawerItemClickListener.onItemClick(null, position, mDrawerBuilder.mAdapter.getItem(position)); + if (fireOnClick && position >= 0) { + IDrawerItem item = mDrawerBuilder.mAdapter.getItem(position); + + if (item instanceof AbstractDrawerItem && ((AbstractDrawerItem) item).getOnDrawerItemClickListener() != null) { + ((AbstractDrawerItem) item).getOnDrawerItemClickListener().onItemClick(null, position, item); + } + + if (mDrawerBuilder.mOnDrawerItemClickListener != null) { + mDrawerBuilder.mOnDrawerItemClickListener.onItemClick(null, position, item); + } } //we set the selection on a normal item in the drawer so we have to deselect the items in the StickyDrawer diff --git a/library/src/main/java/com/mikepenz/materialdrawer/DrawerUtils.java b/library/src/main/java/com/mikepenz/materialdrawer/DrawerUtils.java index a2b1192d9..68e20173e 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/DrawerUtils.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/DrawerUtils.java @@ -9,6 +9,7 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; +import com.mikepenz.materialdrawer.model.AbstractDrawerItem; import com.mikepenz.materialdrawer.model.ContainerDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.Selectable; @@ -30,7 +31,7 @@ class DrawerUtils { * @param fireOnClick true if we should call the listener, false if not, null to not call the listener and not close the drawer */ public static void onFooterDrawerItemClick(DrawerBuilder drawer, IDrawerItem drawerItem, View v, Boolean fireOnClick) { - boolean checkable = !(drawerItem != null && drawerItem instanceof Selectable && !((Selectable) drawerItem).isSelectable()); + boolean checkable = !(drawerItem != null && drawerItem instanceof Selectable && !drawerItem.isSelectable()); if (checkable) { drawer.resetStickyFooterSelection(); @@ -55,8 +56,15 @@ public static void onFooterDrawerItemClick(DrawerBuilder drawer, IDrawerItem dra if (fireOnClick != null) { boolean consumed = false; - if (fireOnClick && drawer.mOnDrawerItemClickListener != null) { - consumed = drawer.mOnDrawerItemClickListener.onItemClick(v, -1, drawerItem); + + if (fireOnClick) { + if (drawerItem instanceof AbstractDrawerItem && ((AbstractDrawerItem) drawerItem).getOnDrawerItemClickListener() != null) { + consumed = ((AbstractDrawerItem) drawerItem).getOnDrawerItemClickListener().onItemClick(null, -1, drawerItem); + } + + if (drawer.mOnDrawerItemClickListener != null) { + consumed = drawer.mOnDrawerItemClickListener.onItemClick(v, -1, drawerItem); + } } if (!consumed) { From 1966bcd4f5f4645d2cdeeeb86e3ab683d302a6fb Mon Sep 17 00:00:00 2001 From: Mike Penz Date: Tue, 23 Aug 2016 19:44:35 +0200 Subject: [PATCH 4/9] * update gradle to v2.14.1 * update gradle build tools to v2.1.3 --- build.gradle | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 1a02c4ede..130628588 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' + classpath 'com.android.tools.build:gradle:2.1.3' classpath 'com.novoda:bintray-release:0.3.4' } } @@ -27,5 +27,5 @@ allprojects { } task wrapper(type: Wrapper) { - gradleVersion = '2.14' + gradleVersion = '2.14.1' } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fbecb19c7..3022b742b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Jun 18 19:13:54 CEST 2016 +#Tue Aug 23 19:35:06 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip From 0b706f311606e8407105cc1146422d8ba5ea5452 Mon Sep 17 00:00:00 2001 From: Mike Penz Date: Tue, 23 Aug 2016 19:44:58 +0200 Subject: [PATCH 5/9] * add new method to update the gravity of the drawer programatically * FIX #1491 --- .../java/com/mikepenz/materialdrawer/Drawer.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/library/src/main/java/com/mikepenz/materialdrawer/Drawer.java b/library/src/main/java/com/mikepenz/materialdrawer/Drawer.java index e63d9d181..ab35dfd50 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/Drawer.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/Drawer.java @@ -372,6 +372,18 @@ public ActionBarDrawerToggle getActionBarDrawerToggle() { return mDrawerBuilder.mActionBarDrawerToggle; } + /** + * sets the gravity for this drawer. + * + * @param gravity the gravity which is defined for the drawer + */ + public void setGravity(int gravity) { + DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) getSlider().getLayoutParams(); + params.gravity = gravity; + getSlider().setLayoutParams(params); + mDrawerBuilder.mDrawerGravity = gravity; + } + /** * calculates the position of an drawerItem. searching by it's identifier * From 43c368d770ff878dac0e7c6f73f8eac69c639724 Mon Sep 17 00:00:00 2001 From: Mike Penz Date: Wed, 24 Aug 2016 13:07:00 +0200 Subject: [PATCH 6/9] * renamed `BasePrimaryDrawerItem` to `BaseDescribeableDrawerItem` * base Primary-, Switch-, Toggle- `DrawerItem`s on Abstract implementations (including their secondary implementations) to return the correct type in the `with*` methods --- .../drawerItems/OverflowMenuDrawerItem.java | 4 +- .../model/AbstractBadgeableDrawerItem.java | 111 ++++++++++++++ .../model/AbstractSwitchableDrawerItem.java | 129 +++++++++++++++++ .../model/AbstractToggleableDrawerItem.java | 136 ++++++++++++++++++ ...m.java => BaseDescribeableDrawerItem.java} | 2 +- .../model/ExpandableDrawerItem.java | 2 +- .../model/PrimaryDrawerItem.java | 105 +------------- .../model/SecondaryDrawerItem.java | 2 +- .../model/SecondarySwitchDrawerItem.java | 2 +- .../model/SecondaryToggleDrawerItem.java | 2 +- .../model/SwitchDrawerItem.java | 123 +--------------- .../model/ToggleDrawerItem.java | 130 +---------------- 12 files changed, 386 insertions(+), 362 deletions(-) create mode 100644 library/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.java create mode 100644 library/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.java create mode 100644 library/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.java rename library/src/main/java/com/mikepenz/materialdrawer/model/{BasePrimaryDrawerItem.java => BaseDescribeableDrawerItem.java} (97%) diff --git a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/OverflowMenuDrawerItem.java b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/OverflowMenuDrawerItem.java index 6cd6b2e02..094352343 100644 --- a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/OverflowMenuDrawerItem.java +++ b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/OverflowMenuDrawerItem.java @@ -11,13 +11,13 @@ import com.mikepenz.google_material_typeface_library.GoogleMaterial; import com.mikepenz.iconics.IconicsDrawable; import com.mikepenz.materialdrawer.app.R; -import com.mikepenz.materialdrawer.model.BasePrimaryDrawerItem; +import com.mikepenz.materialdrawer.model.BaseDescribeableDrawerItem; import com.mikepenz.materialdrawer.model.BaseViewHolder; /** * Created by mikepenz on 03.02.15. */ -public class OverflowMenuDrawerItem extends BasePrimaryDrawerItem { +public class OverflowMenuDrawerItem extends BaseDescribeableDrawerItem { private int mMenu; public OverflowMenuDrawerItem withMenu(int menu) { diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.java new file mode 100644 index 000000000..a1962b551 --- /dev/null +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.java @@ -0,0 +1,111 @@ +package com.mikepenz.materialdrawer.model; + +import android.content.Context; +import android.support.annotation.LayoutRes; +import android.support.annotation.StringRes; +import android.view.View; +import android.widget.TextView; + +import com.mikepenz.fastadapter.utils.ViewHolderFactory; +import com.mikepenz.materialdrawer.R; +import com.mikepenz.materialdrawer.holder.BadgeStyle; +import com.mikepenz.materialdrawer.holder.StringHolder; +import com.mikepenz.materialdrawer.model.interfaces.ColorfulBadgeable; + +/** + * Created by mikepenz on 03.02.15. + */ +public abstract class AbstractBadgeableDrawerItem extends BaseDescribeableDrawerItem implements ColorfulBadgeable { + protected StringHolder mBadge; + protected BadgeStyle mBadgeStyle = new BadgeStyle(); + + @Override + public Item withBadge(StringHolder badge) { + this.mBadge = badge; + return (Item) this; + } + + @Override + public Item withBadge(String badge) { + this.mBadge = new StringHolder(badge); + return (Item) this; + } + + @Override + public Item withBadge(@StringRes int badgeRes) { + this.mBadge = new StringHolder(badgeRes); + return (Item) this; + } + + @Override + public Item withBadgeStyle(BadgeStyle badgeStyle) { + this.mBadgeStyle = badgeStyle; + return (Item) this; + } + + public StringHolder getBadge() { + return mBadge; + } + + public BadgeStyle getBadgeStyle() { + return mBadgeStyle; + } + + @Override + public int getType() { + return R.id.material_drawer_item_primary;/*"PRIMARY_ITEM"*/ + } + + @Override + @LayoutRes + public int getLayoutRes() { + return R.layout.material_drawer_item_primary; + } + + @Override + public void bindView(ViewHolder viewHolder) { + Context ctx = viewHolder.itemView.getContext(); + //bind the basic view parts + bindViewHelper(viewHolder); + + //set the text for the badge or hide + boolean badgeVisible = StringHolder.applyToOrHide(mBadge, viewHolder.badge); + //style the badge if it is visible + if (badgeVisible) { + mBadgeStyle.style(viewHolder.badge, getTextColorStateList(getColor(ctx), getSelectedTextColor(ctx))); + viewHolder.badgeContainer.setVisibility(View.VISIBLE); + } else { + viewHolder.badgeContainer.setVisibility(View.GONE); + } + + //define the typeface for our textViews + if (getTypeface() != null) { + viewHolder.badge.setTypeface(getTypeface()); + } + + //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required) + onPostBindView(this, viewHolder.itemView); + } + + @Override + public ViewHolderFactory getFactory() { + return new ItemFactory(); + } + + public static class ItemFactory implements ViewHolderFactory { + public ViewHolder create(View v) { + return new ViewHolder(v); + } + } + + public static class ViewHolder extends BaseViewHolder { + private View badgeContainer; + private TextView badge; + + public ViewHolder(View view) { + super(view); + this.badgeContainer = view.findViewById(R.id.material_drawer_badge_container); + this.badge = (TextView) view.findViewById(R.id.material_drawer_badge); + } + } +} diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.java new file mode 100644 index 000000000..6b9f5cf37 --- /dev/null +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.java @@ -0,0 +1,129 @@ +package com.mikepenz.materialdrawer.model; + +import android.support.annotation.LayoutRes; +import android.support.v7.widget.SwitchCompat; +import android.view.View; +import android.widget.CompoundButton; + +import com.mikepenz.fastadapter.utils.ViewHolderFactory; +import com.mikepenz.materialdrawer.Drawer; +import com.mikepenz.materialdrawer.R; +import com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener; +import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; + +/** + * Created by mikepenz on 03.02.15. + */ +public abstract class AbstractSwitchableDrawerItem extends BaseDescribeableDrawerItem { + + private boolean switchEnabled = true; + + private boolean checked = false; + private OnCheckedChangeListener onCheckedChangeListener = null; + + public Item withChecked(boolean checked) { + this.checked = checked; + return (Item) this; + } + + public Item withSwitchEnabled(boolean switchEnabled) { + this.switchEnabled = switchEnabled; + return (Item) this; + } + + public Item withOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) { + this.onCheckedChangeListener = onCheckedChangeListener; + return (Item) this; + } + + public Item withCheckable(boolean checkable) { + return withSelectable(checkable); + } + + public boolean isChecked() { + return checked; + } + + public boolean isSwitchEnabled() { + return switchEnabled; + } + + public OnCheckedChangeListener getOnCheckedChangeListener() { + return onCheckedChangeListener; + } + + @Override + public int getType() { + return R.id.material_drawer_item_primary_switch; + } + + @Override + @LayoutRes + public int getLayoutRes() { + return R.layout.material_drawer_item_switch; + } + + @Override + public void bindView(final ViewHolder viewHolder) { + //bind the basic view parts + bindViewHelper(viewHolder); + + //handle the switch + viewHolder.switchView.setOnCheckedChangeListener(null); + viewHolder.switchView.setChecked(checked); + viewHolder.switchView.setOnCheckedChangeListener(checkedChangeListener); + viewHolder.switchView.setEnabled(switchEnabled); + + //add a onDrawerItemClickListener here to be able to check / uncheck if the drawerItem can't be selected + withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { + @Override + public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { + if (!isSelectable()) { + checked = !checked; + viewHolder.switchView.setChecked(checked); + } + + return false; + } + }); + + //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required) + onPostBindView(this, viewHolder.itemView); + } + + @Override + public ViewHolderFactory getFactory() { + return new ItemFactory(); + } + + public static class ItemFactory implements ViewHolderFactory { + public ViewHolder create(View v) { + return new ViewHolder(v); + } + } + + public static class ViewHolder extends BaseViewHolder { + private SwitchCompat switchView; + + private ViewHolder(View view) { + super(view); + this.switchView = (SwitchCompat) view.findViewById(R.id.material_drawer_switch); + } + } + + private CompoundButton.OnCheckedChangeListener checkedChangeListener = new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isEnabled()) { + checked = isChecked; + if (getOnCheckedChangeListener() != null) { + getOnCheckedChangeListener().onCheckedChanged(AbstractSwitchableDrawerItem.this, buttonView, isChecked); + } + } else { + buttonView.setOnCheckedChangeListener(null); + buttonView.setChecked(!isChecked); + buttonView.setOnCheckedChangeListener(checkedChangeListener); + } + } + }; +} diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.java new file mode 100644 index 000000000..100a65f69 --- /dev/null +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.java @@ -0,0 +1,136 @@ +package com.mikepenz.materialdrawer.model; + +import android.support.annotation.LayoutRes; +import android.view.View; +import android.widget.CompoundButton; +import android.widget.ToggleButton; + +import com.mikepenz.fastadapter.utils.ViewHolderFactory; +import com.mikepenz.materialdrawer.Drawer; +import com.mikepenz.materialdrawer.R; +import com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener; +import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; + +/** + * Created by mikepenz on 03.02.15. + */ +public class AbstractToggleableDrawerItem extends BaseDescribeableDrawerItem { + private boolean toggleEnabled = true; + + private boolean checked = false; + private OnCheckedChangeListener onCheckedChangeListener = null; + + public Item withChecked(boolean checked) { + this.checked = checked; + return (Item) this; + } + + public Item withToggleEnabled(boolean toggleEnabled) { + this.toggleEnabled = toggleEnabled; + return (Item) this; + } + + public Item withOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) { + this.onCheckedChangeListener = onCheckedChangeListener; + return (Item) this; + } + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public boolean isToggleEnabled() { + return toggleEnabled; + } + + public void setToggleEnabled(boolean toggleEnabled) { + this.toggleEnabled = toggleEnabled; + } + + public OnCheckedChangeListener getOnCheckedChangeListener() { + return onCheckedChangeListener; + } + + public void setOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) { + this.onCheckedChangeListener = onCheckedChangeListener; + } + + @Override + public int getType() { + return R.id.material_drawer_item_primary_toggle; + } + + @Override + @LayoutRes + public int getLayoutRes() { + return R.layout.material_drawer_item_toggle; + } + + @Override + public void bindView(final ViewHolder viewHolder) { + //bind the basic view parts + bindViewHelper(viewHolder); + + //handle the toggle + viewHolder.toggle.setOnCheckedChangeListener(null); + viewHolder.toggle.setChecked(checked); + viewHolder.toggle.setOnCheckedChangeListener(checkedChangeListener); + viewHolder.toggle.setEnabled(toggleEnabled); + + //add a onDrawerItemClickListener here to be able to check / uncheck if the drawerItem can't be selected + withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { + @Override + public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { + if (!isSelectable()) { + checked = !checked; + viewHolder.toggle.setChecked(checked); + } + + return false; + } + }); + + //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required) + onPostBindView(this, viewHolder.itemView); + } + + @Override + public ViewHolderFactory getFactory() { + return new ItemFactory(); + } + + public static class ItemFactory implements ViewHolderFactory { + public ViewHolder create(View v) { + return new ViewHolder(v); + } + } + + public static class ViewHolder extends BaseViewHolder { + private ToggleButton toggle; + + private ViewHolder(View view) { + super(view); + this.toggle = (ToggleButton) view.findViewById(R.id.material_drawer_toggle); + } + } + + private CompoundButton.OnCheckedChangeListener checkedChangeListener = new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isEnabled()) { + checked = isChecked; + if (getOnCheckedChangeListener() != null) { + getOnCheckedChangeListener().onCheckedChanged(AbstractToggleableDrawerItem.this, buttonView, isChecked); + } + } else { + buttonView.setOnCheckedChangeListener(null); + buttonView.setChecked(!isChecked); + buttonView.setOnCheckedChangeListener(checkedChangeListener); + } + } + }; +} diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/BasePrimaryDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/BaseDescribeableDrawerItem.java similarity index 97% rename from library/src/main/java/com/mikepenz/materialdrawer/model/BasePrimaryDrawerItem.java rename to library/src/main/java/com/mikepenz/materialdrawer/model/BaseDescribeableDrawerItem.java index 10a5bf2c9..6df0274be 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/BasePrimaryDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/BaseDescribeableDrawerItem.java @@ -16,7 +16,7 @@ /** * Created by mikepenz on 03.02.15. */ -public abstract class BasePrimaryDrawerItem extends BaseDrawerItem { +public abstract class BaseDescribeableDrawerItem extends BaseDrawerItem { private StringHolder description; private ColorHolder descriptionTextColor; diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/ExpandableDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/ExpandableDrawerItem.java index db3bdc4ca..f9e3581ec 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/ExpandableDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/ExpandableDrawerItem.java @@ -21,7 +21,7 @@ * Created by mikepenz on 03.02.15. * NOTE: The arrow will just animate (and rotate) on APIs higher than 11 as the ViewCompat will skip this on API 10 */ -public class ExpandableDrawerItem extends BasePrimaryDrawerItem { +public class ExpandableDrawerItem extends BaseDescribeableDrawerItem { private Drawer.OnDrawerItemClickListener mOnDrawerItemClickListener; diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/PrimaryDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/PrimaryDrawerItem.java index 57411c5ca..accf6f417 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/PrimaryDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/PrimaryDrawerItem.java @@ -1,111 +1,8 @@ package com.mikepenz.materialdrawer.model; -import android.content.Context; -import android.support.annotation.LayoutRes; -import android.support.annotation.StringRes; -import android.view.View; -import android.widget.TextView; - -import com.mikepenz.fastadapter.utils.ViewHolderFactory; -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.holder.BadgeStyle; -import com.mikepenz.materialdrawer.holder.StringHolder; -import com.mikepenz.materialdrawer.model.interfaces.ColorfulBadgeable; - /** * Created by mikepenz on 03.02.15. */ -public class PrimaryDrawerItem extends BasePrimaryDrawerItem implements ColorfulBadgeable { - protected StringHolder mBadge; - protected BadgeStyle mBadgeStyle = new BadgeStyle(); - - @Override - public PrimaryDrawerItem withBadge(StringHolder badge) { - this.mBadge = badge; - return this; - } - - @Override - public PrimaryDrawerItem withBadge(String badge) { - this.mBadge = new StringHolder(badge); - return this; - } - - @Override - public PrimaryDrawerItem withBadge(@StringRes int badgeRes) { - this.mBadge = new StringHolder(badgeRes); - return this; - } - - @Override - public PrimaryDrawerItem withBadgeStyle(BadgeStyle badgeStyle) { - this.mBadgeStyle = badgeStyle; - return this; - } - - public StringHolder getBadge() { - return mBadge; - } - - public BadgeStyle getBadgeStyle() { - return mBadgeStyle; - } - - @Override - public int getType() { - return R.id.material_drawer_item_primary;/*"PRIMARY_ITEM"*/ - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_primary; - } - - @Override - public void bindView(ViewHolder viewHolder) { - Context ctx = viewHolder.itemView.getContext(); - //bind the basic view parts - bindViewHelper(viewHolder); - - //set the text for the badge or hide - boolean badgeVisible = StringHolder.applyToOrHide(mBadge, viewHolder.badge); - //style the badge if it is visible - if (badgeVisible) { - mBadgeStyle.style(viewHolder.badge, getTextColorStateList(getColor(ctx), getSelectedTextColor(ctx))); - viewHolder.badgeContainer.setVisibility(View.VISIBLE); - } else { - viewHolder.badgeContainer.setVisibility(View.GONE); - } - - //define the typeface for our textViews - if (getTypeface() != null) { - viewHolder.badge.setTypeface(getTypeface()); - } - - //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required) - onPostBindView(this, viewHolder.itemView); - } - - @Override - public ViewHolderFactory getFactory() { - return new ItemFactory(); - } - - public static class ItemFactory implements ViewHolderFactory { - public ViewHolder create(View v) { - return new ViewHolder(v); - } - } - - public static class ViewHolder extends BaseViewHolder { - private View badgeContainer; - private TextView badge; +public class PrimaryDrawerItem extends AbstractBadgeableDrawerItem { - public ViewHolder(View view) { - super(view); - this.badgeContainer = view.findViewById(R.id.material_drawer_badge_container); - this.badge = (TextView) view.findViewById(R.id.material_drawer_badge); - } - } } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/SecondaryDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/SecondaryDrawerItem.java index b0bd3ce67..04ba088ac 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/SecondaryDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/SecondaryDrawerItem.java @@ -9,7 +9,7 @@ /** * Created by mikepenz on 03.02.15. */ -public class SecondaryDrawerItem extends PrimaryDrawerItem { +public class SecondaryDrawerItem extends AbstractBadgeableDrawerItem { @Override public int getType() { diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/SecondarySwitchDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/SecondarySwitchDrawerItem.java index 790a81843..9f8c61c27 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/SecondarySwitchDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/SecondarySwitchDrawerItem.java @@ -9,7 +9,7 @@ /** * Created by mikepenz on 03.02.15. */ -public class SecondarySwitchDrawerItem extends SwitchDrawerItem { +public class SecondarySwitchDrawerItem extends AbstractSwitchableDrawerItem { @Override public int getType() { diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/SecondaryToggleDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/SecondaryToggleDrawerItem.java index 1c532b83e..05f4acd12 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/SecondaryToggleDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/SecondaryToggleDrawerItem.java @@ -9,7 +9,7 @@ /** * Created by mikepenz on 03.02.15. */ -public class SecondaryToggleDrawerItem extends ToggleDrawerItem { +public class SecondaryToggleDrawerItem extends AbstractToggleableDrawerItem { @Override public int getType() { diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/SwitchDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/SwitchDrawerItem.java index 16d46508b..f6ffe57af 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/SwitchDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/SwitchDrawerItem.java @@ -1,129 +1,8 @@ package com.mikepenz.materialdrawer.model; -import android.support.annotation.LayoutRes; -import android.support.v7.widget.SwitchCompat; -import android.view.View; -import android.widget.CompoundButton; - -import com.mikepenz.fastadapter.utils.ViewHolderFactory; -import com.mikepenz.materialdrawer.Drawer; -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener; -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; - /** * Created by mikepenz on 03.02.15. */ -public class SwitchDrawerItem extends BasePrimaryDrawerItem { - - private boolean switchEnabled = true; - - private boolean checked = false; - private OnCheckedChangeListener onCheckedChangeListener = null; - - public SwitchDrawerItem withChecked(boolean checked) { - this.checked = checked; - return this; - } - - public SwitchDrawerItem withSwitchEnabled(boolean switchEnabled) { - this.switchEnabled = switchEnabled; - return this; - } - - public SwitchDrawerItem withOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) { - this.onCheckedChangeListener = onCheckedChangeListener; - return this; - } - - public SwitchDrawerItem withCheckable(boolean checkable) { - return withSelectable(checkable); - } - - public boolean isChecked() { - return checked; - } - - public boolean isSwitchEnabled() { - return switchEnabled; - } - - public OnCheckedChangeListener getOnCheckedChangeListener() { - return onCheckedChangeListener; - } - - @Override - public int getType() { - return R.id.material_drawer_item_primary_switch; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_switch; - } - - @Override - public void bindView(final ViewHolder viewHolder) { - //bind the basic view parts - bindViewHelper(viewHolder); - - //handle the switch - viewHolder.switchView.setOnCheckedChangeListener(null); - viewHolder.switchView.setChecked(checked); - viewHolder.switchView.setOnCheckedChangeListener(checkedChangeListener); - viewHolder.switchView.setEnabled(switchEnabled); - - //add a onDrawerItemClickListener here to be able to check / uncheck if the drawerItem can't be selected - withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { - @Override - public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { - if (!isSelectable()) { - checked = !checked; - viewHolder.switchView.setChecked(checked); - } - - return false; - } - }); - - //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required) - onPostBindView(this, viewHolder.itemView); - } - - @Override - public ViewHolderFactory getFactory() { - return new ItemFactory(); - } - - public static class ItemFactory implements ViewHolderFactory { - public ViewHolder create(View v) { - return new ViewHolder(v); - } - } - - public static class ViewHolder extends BaseViewHolder { - private SwitchCompat switchView; - - private ViewHolder(View view) { - super(view); - this.switchView = (SwitchCompat) view.findViewById(R.id.material_drawer_switch); - } - } +public class SwitchDrawerItem extends AbstractSwitchableDrawerItem { - private CompoundButton.OnCheckedChangeListener checkedChangeListener = new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (isEnabled()) { - checked = isChecked; - if (getOnCheckedChangeListener() != null) { - getOnCheckedChangeListener().onCheckedChanged(SwitchDrawerItem.this, buttonView, isChecked); - } - } else { - buttonView.setOnCheckedChangeListener(null); - buttonView.setChecked(!isChecked); - buttonView.setOnCheckedChangeListener(checkedChangeListener); - } - } - }; } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/ToggleDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/ToggleDrawerItem.java index f03ff1b05..407dc43c5 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/ToggleDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/ToggleDrawerItem.java @@ -1,136 +1,8 @@ package com.mikepenz.materialdrawer.model; -import android.support.annotation.LayoutRes; -import android.view.View; -import android.widget.CompoundButton; -import android.widget.ToggleButton; - -import com.mikepenz.fastadapter.utils.ViewHolderFactory; -import com.mikepenz.materialdrawer.Drawer; -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener; -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; - /** * Created by mikepenz on 03.02.15. */ -public class ToggleDrawerItem extends BasePrimaryDrawerItem { - private boolean toggleEnabled = true; - - private boolean checked = false; - private OnCheckedChangeListener onCheckedChangeListener = null; - - public ToggleDrawerItem withChecked(boolean checked) { - this.checked = checked; - return this; - } - - public ToggleDrawerItem withToggleEnabled(boolean toggleEnabled) { - this.toggleEnabled = toggleEnabled; - return this; - } - - public ToggleDrawerItem withOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) { - this.onCheckedChangeListener = onCheckedChangeListener; - return this; - } - - public boolean isChecked() { - return checked; - } - - public void setChecked(boolean checked) { - this.checked = checked; - } - - public boolean isToggleEnabled() { - return toggleEnabled; - } - - public void setToggleEnabled(boolean toggleEnabled) { - this.toggleEnabled = toggleEnabled; - } - - public OnCheckedChangeListener getOnCheckedChangeListener() { - return onCheckedChangeListener; - } - - public void setOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) { - this.onCheckedChangeListener = onCheckedChangeListener; - } - - @Override - public int getType() { - return R.id.material_drawer_item_primary_toggle; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_toggle; - } - - @Override - public void bindView(final ViewHolder viewHolder) { - //bind the basic view parts - bindViewHelper(viewHolder); - - //handle the toggle - viewHolder.toggle.setOnCheckedChangeListener(null); - viewHolder.toggle.setChecked(checked); - viewHolder.toggle.setOnCheckedChangeListener(checkedChangeListener); - viewHolder.toggle.setEnabled(toggleEnabled); - - //add a onDrawerItemClickListener here to be able to check / uncheck if the drawerItem can't be selected - withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { - @Override - public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { - if (!isSelectable()) { - checked = !checked; - viewHolder.toggle.setChecked(checked); - } - - return false; - } - }); - - //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required) - onPostBindView(this, viewHolder.itemView); - } - - @Override - public ViewHolderFactory getFactory() { - return new ItemFactory(); - } - - public static class ItemFactory implements ViewHolderFactory { - public ViewHolder create(View v) { - return new ViewHolder(v); - } - } - - public static class ViewHolder extends BaseViewHolder { - private ToggleButton toggle; - - private ViewHolder(View view) { - super(view); - this.toggle = (ToggleButton) view.findViewById(R.id.material_drawer_toggle); - } - } +public class ToggleDrawerItem extends AbstractToggleableDrawerItem { - private CompoundButton.OnCheckedChangeListener checkedChangeListener = new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (isEnabled()) { - checked = isChecked; - if (getOnCheckedChangeListener() != null) { - getOnCheckedChangeListener().onCheckedChanged(ToggleDrawerItem.this, buttonView, isChecked); - } - } else { - buttonView.setOnCheckedChangeListener(null); - buttonView.setChecked(!isChecked); - buttonView.setOnCheckedChangeListener(checkedChangeListener); - } - } - }; } From 19617f3729bdc03cf06a981649bd6659be0b75ed Mon Sep 17 00:00:00 2001 From: Mike Penz Date: Thu, 25 Aug 2016 18:58:42 +0200 Subject: [PATCH 7/9] * udpate to the latest `FastAdapter` and update all item implementations to support the changed `bindView` interface --- .../app/drawerItems/AccountDividerDrawerItem.java | 4 +++- .../app/drawerItems/CustomPrimaryDrawerItem.java | 10 ++++++---- .../app/drawerItems/CustomUrlPrimaryDrawerItem.java | 4 +++- .../materialdrawer/app/drawerItems/IconDrawerItem.java | 4 +++- .../app/drawerItems/OverflowMenuDrawerItem.java | 4 +++- library/build.gradle | 2 +- .../model/AbstractBadgeableDrawerItem.java | 4 +++- .../materialdrawer/model/AbstractDrawerItem.java | 4 ++-- .../model/AbstractSwitchableDrawerItem.java | 4 +++- .../model/AbstractToggleableDrawerItem.java | 4 +++- .../materialdrawer/model/ContainerDrawerItem.java | 4 +++- .../materialdrawer/model/DividerDrawerItem.java | 4 +++- .../materialdrawer/model/ExpandableDrawerItem.java | 4 +++- .../mikepenz/materialdrawer/model/MiniDrawerItem.java | 4 +++- .../materialdrawer/model/MiniProfileDrawerItem.java | 4 +++- .../materialdrawer/model/ProfileDrawerItem.java | 4 +++- .../materialdrawer/model/ProfileSettingDrawerItem.java | 4 +++- .../materialdrawer/model/SectionDrawerItem.java | 4 +++- .../materialdrawer/model/interfaces/IDrawerItem.java | 4 +++- 19 files changed, 57 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/AccountDividerDrawerItem.java b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/AccountDividerDrawerItem.java index d80d8863c..1a38b8799 100644 --- a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/AccountDividerDrawerItem.java +++ b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/AccountDividerDrawerItem.java @@ -19,6 +19,8 @@ import com.mikepenz.materialdrawer.model.interfaces.IProfile; import com.mikepenz.materialize.util.UIUtils; +import java.util.List; + public class AccountDividerDrawerItem extends AbstractDrawerItem implements IProfile { @Override public int getType() { @@ -32,7 +34,7 @@ public int getLayoutRes() { } @Override - public void bindView(ViewHolder viewHolder) { + public void bindView(ViewHolder viewHolder, List payloads) { Context ctx = viewHolder.itemView.getContext(); //set the identifier from the drawerItem here. It can be used to run tests diff --git a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomPrimaryDrawerItem.java b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomPrimaryDrawerItem.java index 17ddbbcb7..6b1f829e7 100644 --- a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomPrimaryDrawerItem.java +++ b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomPrimaryDrawerItem.java @@ -1,9 +1,11 @@ package com.mikepenz.materialdrawer.app.drawerItems; import com.mikepenz.materialdrawer.holder.ColorHolder; -import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; +import com.mikepenz.materialdrawer.model.AbstractBadgeableDrawerItem; -public class CustomPrimaryDrawerItem extends PrimaryDrawerItem { +import java.util.List; + +public class CustomPrimaryDrawerItem extends AbstractBadgeableDrawerItem { private ColorHolder background; @@ -18,8 +20,8 @@ public CustomPrimaryDrawerItem withBackgroundRes(int backgroundRes) { } @Override - public void bindView(ViewHolder holder) { - super.bindView(holder); + public void bindView(ViewHolder holder, List payloads) { + super.bindView(holder, payloads); if (background != null) { background.applyToBackground(holder.itemView); diff --git a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomUrlPrimaryDrawerItem.java b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomUrlPrimaryDrawerItem.java index f517c2dc1..75b579a60 100644 --- a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomUrlPrimaryDrawerItem.java +++ b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomUrlPrimaryDrawerItem.java @@ -12,6 +12,8 @@ import com.mikepenz.materialdrawer.holder.StringHolder; import com.mikepenz.materialdrawer.model.interfaces.ColorfulBadgeable; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -63,7 +65,7 @@ public int getLayoutRes() { } @Override - public void bindView(ViewHolder viewHolder) { + public void bindView(ViewHolder viewHolder, List payloads) { Context ctx = viewHolder.itemView.getContext(); //bind the basic view parts diff --git a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/IconDrawerItem.java b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/IconDrawerItem.java index 7ed01cb18..ec19eed72 100644 --- a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/IconDrawerItem.java +++ b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/IconDrawerItem.java @@ -18,6 +18,8 @@ import com.mikepenz.materialdrawer.holder.ImageHolder; import com.mikepenz.materialdrawer.model.AbstractDrawerItem; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -166,7 +168,7 @@ public int getLayoutRes() { } @Override - public void bindView(ViewHolder viewHolder) { + public void bindView(ViewHolder viewHolder, List payloads) { Context ctx = viewHolder.itemView.getContext(); //set the identifier from the drawerItem here. It can be used to run tests diff --git a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/OverflowMenuDrawerItem.java b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/OverflowMenuDrawerItem.java index 094352343..b3ed49571 100644 --- a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/OverflowMenuDrawerItem.java +++ b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/OverflowMenuDrawerItem.java @@ -14,6 +14,8 @@ import com.mikepenz.materialdrawer.model.BaseDescribeableDrawerItem; import com.mikepenz.materialdrawer.model.BaseViewHolder; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -64,7 +66,7 @@ public int getLayoutRes() { } @Override - public void bindView(ViewHolder viewHolder) { + public void bindView(ViewHolder viewHolder, List payloads) { Context ctx = viewHolder.itemView.getContext(); //bind the basic view parts diff --git a/library/build.gradle b/library/build.gradle index f63e5821e..a1738200c 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -47,5 +47,5 @@ dependencies { // used to fill the RecyclerView with the DrawerItems // and provides single and multi selection, expandable items // https://github.com/mikepenz/FastAdapter - compile 'com.mikepenz:fastadapter:1.7.0@aar' + compile 'com.mikepenz:fastadapter:1.8.0@aar' } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.java index a1962b551..c5a4cf24a 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.java @@ -12,6 +12,8 @@ import com.mikepenz.materialdrawer.holder.StringHolder; import com.mikepenz.materialdrawer.model.interfaces.ColorfulBadgeable; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -63,7 +65,7 @@ public int getLayoutRes() { } @Override - public void bindView(ViewHolder viewHolder) { + public void bindView(ViewHolder viewHolder, List payloads) { Context ctx = viewHolder.itemView.getContext(); //bind the basic view parts bindViewHelper(viewHolder); diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractDrawerItem.java index 86d1a08ac..a8f3a1689 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractDrawerItem.java @@ -271,7 +271,7 @@ public boolean isAutoExpanding() { @Override public View generateView(Context ctx) { VH viewHolder = getFactory().create(LayoutInflater.from(ctx).inflate(getLayoutRes(), null, false)); - bindView(viewHolder); + bindView(viewHolder, Collections.emptyList()); return viewHolder.itemView; } @@ -285,7 +285,7 @@ public View generateView(Context ctx) { @Override public View generateView(Context ctx, ViewGroup parent) { VH viewHolder = getFactory().create(LayoutInflater.from(ctx).inflate(getLayoutRes(), parent, false)); - bindView(viewHolder); + bindView(viewHolder, Collections.emptyList()); return viewHolder.itemView; } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.java index 6b9f5cf37..3c0d733cf 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.java @@ -11,6 +11,8 @@ import com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -64,7 +66,7 @@ public int getLayoutRes() { } @Override - public void bindView(final ViewHolder viewHolder) { + public void bindView(final ViewHolder viewHolder, List payloads) { //bind the basic view parts bindViewHelper(viewHolder); diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.java index 100a65f69..0e78e8f51 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.java @@ -11,6 +11,8 @@ import com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -71,7 +73,7 @@ public int getLayoutRes() { } @Override - public void bindView(final ViewHolder viewHolder) { + public void bindView(final ViewHolder viewHolder, List payloads) { //bind the basic view parts bindViewHelper(viewHolder); diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/ContainerDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/ContainerDrawerItem.java index d89e62582..5eb37eb52 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/ContainerDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/ContainerDrawerItem.java @@ -12,6 +12,8 @@ import com.mikepenz.materialdrawer.holder.DimenHolder; import com.mikepenz.materialize.util.UIUtils; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -75,7 +77,7 @@ public int getLayoutRes() { } @Override - public void bindView(ViewHolder viewHolder) { + public void bindView(ViewHolder viewHolder, List payloads) { Context ctx = viewHolder.itemView.getContext(); //set the identifier from the drawerItem here. It can be used to run tests diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/DividerDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/DividerDrawerItem.java index 8239b2aa7..eaede28c6 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/DividerDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/DividerDrawerItem.java @@ -10,6 +10,8 @@ import com.mikepenz.materialdrawer.R; import com.mikepenz.materialize.util.UIUtils; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -26,7 +28,7 @@ public int getLayoutRes() { } @Override - public void bindView(ViewHolder viewHolder) { + public void bindView(ViewHolder viewHolder, List payloads) { Context ctx = viewHolder.itemView.getContext(); //set the identifier from the drawerItem here. It can be used to run tests diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/ExpandableDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/ExpandableDrawerItem.java index f9e3581ec..b516bbdbd 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/ExpandableDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/ExpandableDrawerItem.java @@ -17,6 +17,8 @@ import com.mikepenz.materialdrawer.icons.MaterialDrawerFont; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; +import java.util.List; + /** * Created by mikepenz on 03.02.15. * NOTE: The arrow will just animate (and rotate) on APIs higher than 11 as the ViewCompat will skip this on API 10 @@ -81,7 +83,7 @@ public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { }; @Override - public void bindView(ViewHolder viewHolder) { + public void bindView(ViewHolder viewHolder, List payloads) { Context ctx = viewHolder.itemView.getContext(); //bind the basic view parts bindViewHelper(viewHolder); diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/MiniDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/MiniDrawerItem.java index b2eae7b72..dce563579 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/MiniDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/MiniDrawerItem.java @@ -17,6 +17,8 @@ import com.mikepenz.materialdrawer.holder.StringHolder; import com.mikepenz.materialize.util.UIUtils; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -113,7 +115,7 @@ public int getLayoutRes() { } @Override - public void bindView(ViewHolder viewHolder) { + public void bindView(ViewHolder viewHolder, List payloads) { Context ctx = viewHolder.itemView.getContext(); //set a different height for this item diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/MiniProfileDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/MiniProfileDrawerItem.java index 602bdaf12..21a2f1e5a 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/MiniProfileDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/MiniProfileDrawerItem.java @@ -18,6 +18,8 @@ import com.mikepenz.materialdrawer.holder.StringHolder; import com.mikepenz.materialdrawer.model.interfaces.IProfile; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -129,7 +131,7 @@ public int getLayoutRes() { } @Override - public void bindView(ViewHolder viewHolder) { + public void bindView(ViewHolder viewHolder, List payloads) { if (customHeight != null) { RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) viewHolder.itemView.getLayoutParams(); lp.height = customHeight.asPixel(viewHolder.itemView.getContext()); diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/ProfileDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/ProfileDrawerItem.java index e3498dcb4..bfea5e46b 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/ProfileDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/ProfileDrawerItem.java @@ -29,6 +29,8 @@ import com.mikepenz.materialdrawer.util.DrawerUIUtils; import com.mikepenz.materialize.util.UIUtils; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -193,7 +195,7 @@ public int getLayoutRes() { } @Override - public void bindView(ViewHolder viewHolder) { + public void bindView(ViewHolder viewHolder, List payloads) { Context ctx = viewHolder.itemView.getContext(); //set the identifier from the drawerItem here. It can be used to run tests diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/ProfileSettingDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/ProfileSettingDrawerItem.java index 5df2c188f..ba5fe0140 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/ProfileSettingDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/ProfileSettingDrawerItem.java @@ -26,6 +26,8 @@ import com.mikepenz.materialdrawer.util.DrawerUIUtils; import com.mikepenz.materialize.util.UIUtils; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -206,7 +208,7 @@ public int getLayoutRes() { } @Override - public void bindView(ViewHolder viewHolder) { + public void bindView(ViewHolder viewHolder, List payloads) { //get the context Context ctx = viewHolder.itemView.getContext(); diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.java index c0c9b4dfc..994561840 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.java @@ -16,6 +16,8 @@ import com.mikepenz.materialdrawer.model.interfaces.Typefaceable; import com.mikepenz.materialize.util.UIUtils; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -102,7 +104,7 @@ public Typeface getTypeface() { } @Override - public void bindView(ViewHolder viewHolder) { + public void bindView(ViewHolder viewHolder, List payloads) { Context ctx = viewHolder.itemView.getContext(); //set the identifier from the drawerItem here. It can be used to run tests diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IDrawerItem.java b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IDrawerItem.java index 5bb20fe08..650d105df 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IDrawerItem.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IDrawerItem.java @@ -7,6 +7,8 @@ import com.mikepenz.fastadapter.IItem; +import java.util.List; + /** * Created by mikepenz on 03.02.15. */ @@ -34,7 +36,7 @@ public interface IDrawerItem extends IIte VH getViewHolder(ViewGroup parent); - void bindView(VH holder); + void bindView(VH holder, List payloads); boolean equals(long id); } From b4d5378cd6861b175e08662879db668486da6115 Mon Sep 17 00:00:00 2001 From: Mike Penz Date: Thu, 25 Aug 2016 19:12:39 +0200 Subject: [PATCH 8/9] * update AboutLibraries --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 05fba216a..13bf053a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -53,7 +53,7 @@ dependencies { // used to generate the Open Source section // https://github.com/mikepenz/AboutLibraries - compile('com.mikepenz:aboutlibraries:5.8.0@aar') { + compile('com.mikepenz:aboutlibraries:5.8.1@aar') { transitive = true exclude module: "fastadapter" } From 65790b579b89e756a821a895ee6a38f0afd63206 Mon Sep 17 00:00:00 2001 From: Mike Penz Date: Thu, 25 Aug 2016 19:12:49 +0200 Subject: [PATCH 9/9] * [release] v5.6.0 **NOTE IF YOU USE THE FASTADAPTER** * This release bring a breaking interface change. Your items now have to implement `bindView(ViewHolder holder, List payloads)` instead of `bindView(VH holder)`. * The additional payload can be used to implement a more performant view updating when only parts of the item have changed. Please also refer to the `DiffUtils` which may provide the payload. --- MIGRATION.md | 5 +++++ README.md | 2 +- app/build.gradle | 4 ++-- gradle.properties | 4 ++-- library/build.gradle | 4 ++-- .../src/main/res/values/library_materialdrawer_strings.xml | 2 +- 6 files changed, 13 insertions(+), 8 deletions(-) diff --git a/MIGRATION.md b/MIGRATION.md index 628c33fe7..3469ffc5b 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -1,5 +1,10 @@ ###Upgrade Notes +#### v5.6.0 +**IMPORTANT IF YOU IMPLEMENT CUSTOM-DRAWER-ITEMS OR USE THE FASTADAPTER** +* This release brings a breaking interface change. Your items now have to implement `bindView(ViewHolder holder, List payloads)` instead of `bindView(VH holder)`. + * The additional payload can be used to implement a more performant view updating when only parts of the item have changed. Please also refer to the `DiffUtils` which may provide the payload. + #### v5.5.1 * add `void set(ImageView imageView, Uri uri, Drawable placeholder, String tag);` to `IDrawerImageLoader` interface, similar to the `tag` provided in the placeholder method diff --git a/README.md b/README.md index 64307a878..99f1cbeef 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ You can find some frequently asked questions and other resources in the [WIKI / ##1. Provide the gradle dependency ```gradle -compile('com.mikepenz:materialdrawer:5.5.0@aar') { +compile('com.mikepenz:materialdrawer:5.6.0@aar') { transitive = true } ``` diff --git a/app/build.gradle b/app/build.gradle index 13bf053a6..51af8b129 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { defaultConfig { minSdkVersion setup.minSdk targetSdkVersion setup.targetSdk - versionCode 550 - versionName "5.5.0" + versionCode 560 + versionName "5.6.0" setProperty("archivesBaseName", "-v$versionName-c$versionCode") } diff --git a/gradle.properties b/gradle.properties index 7d6c93736..f9ebe1515 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Maven stuff -VERSION_NAME=5.5.0 -VERSION_CODE=550 +VERSION_NAME=5.6.0 +VERSION_CODE=560 GROUP=com.mikepenz POM_DESCRIPTION=MaterialDrawer Library POM_URL=https://github.com/mikepenz/MaterialDrawer diff --git a/library/build.gradle b/library/build.gradle index a1738200c..a519f4a3e 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -8,8 +8,8 @@ android { defaultConfig { minSdkVersion setup.minSdk targetSdkVersion setup.targetSdk - versionCode 550 - versionName '5.5.0' + versionCode 560 + versionName '5.6.0' } buildTypes { release { diff --git a/library/src/main/res/values/library_materialdrawer_strings.xml b/library/src/main/res/values/library_materialdrawer_strings.xml index 01bab2d76..23f65891b 100755 --- a/library/src/main/res/values/library_materialdrawer_strings.xml +++ b/library/src/main/res/values/library_materialdrawer_strings.xml @@ -10,7 +10,7 @@ MaterialDrawer the flexible, easy to use, all in one drawer library for your Android project. ]]> - 5.5.0 + 5.6.0 https://github.com/mikepenz/MaterialDrawer apache_2_0 true