diff --git a/MIGRATION.md b/MIGRATION.md index 00094b3ff..3469ffc5b 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -1,5 +1,13 @@ ###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 + #### v5.5.0 * **Dropping support for API < 14. New MinSdkVersion is 14** 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 223e31b25..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") } @@ -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.1@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 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 6cd6b2e02..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 @@ -11,13 +11,15 @@ 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; +import java.util.List; + /** * 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) { @@ -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/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.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/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 diff --git a/library/build.gradle b/library/build.gradle index f63e5821e..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 { @@ -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/Drawer.java b/library/src/main/java/com/mikepenz/materialdrawer/Drawer.java index 913cf9874..ab35dfd50 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; @@ -371,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 * @@ -554,8 +567,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) { 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..c5a4cf24a --- /dev/null +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.java @@ -0,0 +1,113 @@ +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; + +import java.util.List; + +/** + * 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, List payloads) { + 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/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 new file mode 100644 index 000000000..3c0d733cf --- /dev/null +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.java @@ -0,0 +1,131 @@ +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; + +import java.util.List; + +/** + * 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, List payloads) { + //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..0e78e8f51 --- /dev/null +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.java @@ -0,0 +1,138 @@ +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; + +import java.util.List; + +/** + * 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, List payloads) { + //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/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 db3bdc4ca..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,11 +17,13 @@ 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 */ -public class ExpandableDrawerItem extends BasePrimaryDrawerItem { +public class ExpandableDrawerItem extends BaseDescribeableDrawerItem { private Drawer.OnDrawerItemClickListener mOnDrawerItemClickListener; @@ -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/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/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/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/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/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); - } - } - }; } 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); } 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); 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