From 7da310167886dbba1b98f28b95bc87e37172b61f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Sun, 29 Sep 2019 20:18:21 +0200 Subject: [PATCH] Delete unused MaterialDrawer module --- MaterialDrawer/build.gradle | 59 - MaterialDrawer/gradle.properties | 4 - MaterialDrawer/src/main/AndroidManifest.xml | 2 - .../fonts/materialdrawerfont-font-v5.0.0.ttf | Bin 2104 -> 0 bytes .../materialdrawer/AccountHeader.java | 455 ---- .../materialdrawer/AccountHeaderBuilder.java | 1500 ------------- .../com/mikepenz/materialdrawer/Drawer.java | 1174 ---------- .../materialdrawer/DrawerBuilder.java | 1899 ----------------- .../mikepenz/materialdrawer/DrawerUtils.java | 447 ---- .../mikepenz/materialdrawer/MiniDrawer.java | 544 ----- .../materialdrawer/holder/BadgeStyle.java | 232 -- .../materialdrawer/holder/ColorHolder.java | 25 - .../materialdrawer/holder/DimenHolder.java | 34 - .../materialdrawer/holder/ImageHolder.java | 165 -- .../materialdrawer/holder/StringHolder.java | 16 - .../icons/MaterialDrawerFont.java | 145 -- .../interfaces/ICrossfader.java | 10 - .../interfaces/OnCheckedChangeListener.java | 19 - .../model/AbstractBadgeableDrawerItem.java | 107 - .../model/AbstractDrawerItem.java | 449 ---- .../model/AbstractSwitchableDrawerItem.java | 126 -- .../model/AbstractToggleableDrawerItem.java | 133 -- .../model/BaseDescribeableDrawerItem.java | 114 - .../materialdrawer/model/BaseDrawerItem.java | 356 --- .../materialdrawer/model/BaseViewHolder.java | 25 - .../model/ContainerDrawerItem.java | 149 -- .../model/DividerDrawerItem.java | 67 - .../model/ExpandableBadgeDrawerItem.java | 174 -- .../model/ExpandableDrawerItem.java | 134 -- .../materialdrawer/model/MiniDrawerItem.java | 193 -- .../model/MiniProfileDrawerItem.java | 168 -- .../model/PrimaryDrawerItem.java | 8 - .../model/ProfileDrawerItem.java | 365 ---- .../model/ProfileSettingDrawerItem.java | 318 --- .../model/SecondaryDrawerItem.java | 42 - .../model/SecondarySwitchDrawerItem.java | 42 - .../model/SecondaryToggleDrawerItem.java | 42 - .../model/SectionDrawerItem.java | 160 -- .../model/SwitchDrawerItem.java | 8 - .../model/ToggleDrawerItem.java | 8 - .../model/interfaces/Badgeable.java | 16 - .../model/interfaces/ColorfulBadgeable.java | 13 - .../model/interfaces/IDrawerItem.java | 48 - .../model/interfaces/IProfile.java | 42 - .../model/interfaces/Iconable.java | 19 - .../model/interfaces/Nameable.java | 16 - .../interfaces/OnPostBindViewListener.java | 16 - .../model/interfaces/Selectable.java | 10 - .../model/interfaces/Tagable.java | 10 - .../model/interfaces/Typefaceable.java | 12 - .../model/utils/BadgeDrawableBuilder.java | 44 - .../util/AbstractDrawerImageLoader.java | 34 - .../util/DrawerImageLoader.java | 94 - .../util/DrawerItemViewHelper.java | 95 - .../materialdrawer/util/DrawerUIUtils.java | 242 --- .../materialdrawer/util/KeyboardUtil.java | 103 - .../util/PressedEffectStateListDrawable.java | 51 - .../materialdrawer/view/BezelImageView.java | 349 --- .../res/drawable/material_drawer_badge.xml | 5 - .../drawable/material_drawer_circle_mask.xml | 20 - .../material_drawer_shadow_bottom.xml | 7 - .../material_drawer_shadow_left.9.png | Bin 15047 -> 0 bytes .../material_drawer_shadow_right.9.png | Bin 171 -> 0 bytes .../drawable/material_drawer_shadow_top.xml | 7 - .../src/main/res/layout/material_drawer.xml | 5 - .../layout/material_drawer_compact_header.xml | 114 - .../res/layout/material_drawer_fits_not.xml | 6 - .../res/layout/material_drawer_header.xml | 128 -- .../layout/material_drawer_item_container.xml | 7 - .../layout/material_drawer_item_divider.xml | 12 - .../material_drawer_item_expandable.xml | 79 - .../material_drawer_item_expandable_badge.xml | 108 - .../res/layout/material_drawer_item_mini.xml | 35 - .../material_drawer_item_mini_profile.xml | 19 - .../layout/material_drawer_item_primary.xml | 91 - .../layout/material_drawer_item_profile.xml | 75 - .../material_drawer_item_profile_setting.xml | 60 - .../layout/material_drawer_item_secondary.xml | 87 - .../material_drawer_item_secondary_switch.xml | 77 - .../material_drawer_item_secondary_toggle.xml | 78 - .../layout/material_drawer_item_section.xml | 24 - .../layout/material_drawer_item_switch.xml | 77 - .../layout/material_drawer_item_toggle.xml | 78 - .../layout/material_drawer_recycler_view.xml | 8 - .../res/layout/material_drawer_slider.xml | 25 - .../src/main/res/values-sw600dp/dimens.xml | 4 - MaterialDrawer/src/main/res/values/attrs.xml | 31 - MaterialDrawer/src/main/res/values/colors.xml | 46 - MaterialDrawer/src/main/res/values/dimens.xml | 76 - ...anslate_library_materialdrawer_strings.xml | 5 - MaterialDrawer/src/main/res/values/ids.xml | 27 - .../src/main/res/values/strings.xml | 5 - MaterialDrawer/src/main/res/values/styles.xml | 399 ---- 93 files changed, 12957 deletions(-) delete mode 100644 MaterialDrawer/build.gradle delete mode 100644 MaterialDrawer/gradle.properties delete mode 100644 MaterialDrawer/src/main/AndroidManifest.xml delete mode 100644 MaterialDrawer/src/main/assets/fonts/materialdrawerfont-font-v5.0.0.ttf delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/AccountHeader.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/AccountHeaderBuilder.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/Drawer.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/DrawerBuilder.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/DrawerUtils.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/MiniDrawer.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/BadgeStyle.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/ColorHolder.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/DimenHolder.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/ImageHolder.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/StringHolder.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/icons/MaterialDrawerFont.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/interfaces/ICrossfader.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/interfaces/OnCheckedChangeListener.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseDescribeableDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseViewHolder.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ContainerDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/DividerDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ExpandableBadgeDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ExpandableDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/MiniDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/MiniProfileDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/PrimaryDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ProfileDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ProfileSettingDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondaryDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondarySwitchDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondaryToggleDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SwitchDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ToggleDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Badgeable.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/ColorfulBadgeable.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IDrawerItem.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IProfile.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Iconable.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Nameable.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/OnPostBindViewListener.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Selectable.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Tagable.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Typefaceable.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/utils/BadgeDrawableBuilder.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/AbstractDrawerImageLoader.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerImageLoader.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerItemViewHelper.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerUIUtils.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/KeyboardUtil.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/PressedEffectStateListDrawable.java delete mode 100644 MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/view/BezelImageView.java delete mode 100644 MaterialDrawer/src/main/res/drawable/material_drawer_badge.xml delete mode 100644 MaterialDrawer/src/main/res/drawable/material_drawer_circle_mask.xml delete mode 100644 MaterialDrawer/src/main/res/drawable/material_drawer_shadow_bottom.xml delete mode 100644 MaterialDrawer/src/main/res/drawable/material_drawer_shadow_left.9.png delete mode 100644 MaterialDrawer/src/main/res/drawable/material_drawer_shadow_right.9.png delete mode 100644 MaterialDrawer/src/main/res/drawable/material_drawer_shadow_top.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_compact_header.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_fits_not.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_header.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_container.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_divider.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_expandable.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_expandable_badge.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_mini.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_mini_profile.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_primary.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_profile.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_profile_setting.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_secondary.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_secondary_switch.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_secondary_toggle.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_section.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_switch.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_item_toggle.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_recycler_view.xml delete mode 100644 MaterialDrawer/src/main/res/layout/material_drawer_slider.xml delete mode 100644 MaterialDrawer/src/main/res/values-sw600dp/dimens.xml delete mode 100644 MaterialDrawer/src/main/res/values/attrs.xml delete mode 100644 MaterialDrawer/src/main/res/values/colors.xml delete mode 100644 MaterialDrawer/src/main/res/values/dimens.xml delete mode 100644 MaterialDrawer/src/main/res/values/donottranslate_library_materialdrawer_strings.xml delete mode 100644 MaterialDrawer/src/main/res/values/ids.xml delete mode 100644 MaterialDrawer/src/main/res/values/strings.xml delete mode 100644 MaterialDrawer/src/main/res/values/styles.xml diff --git a/MaterialDrawer/build.gradle b/MaterialDrawer/build.gradle deleted file mode 100644 index f1f52f6c..00000000 --- a/MaterialDrawer/build.gradle +++ /dev/null @@ -1,59 +0,0 @@ -apply plugin: 'com.android.library' - -android { - compileSdkVersion rootProject.ext.compileSdkVersion - buildToolsVersion "28.0.3" - - defaultConfig { - minSdkVersion 14 - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 6102 - versionName "6.1.2" - - resValue "string", "materialdrawer_lib_version", "6.1.2" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' - } - debugMinify { - debuggable = true - minifyEnabled = true - proguardFiles 'proguard-android.txt' - } - } - productFlavors { - } - lintOptions { - abortOnError false - } -} - -dependencies { - implementation "androidx.appcompat:appcompat:${androidXAppCompat}" - implementation "androidx.recyclerview:recyclerview:${androidXRecyclerView}" - implementation "androidx.annotation:annotation:1.0.2" - implementation "com.google.android.material:material:${googleMaterial}" - implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.15' - - // add the constraintLayout used to create the items and headers - implementation "androidx.constraintlayout:constraintlayout:1.1.3" - - // used to base on some backwards compatible themes - // contains util classes to support various android versions, and clean up code - // comes with the awesome "Holder"-Pattern - // https://github.com/mikepenz/Materialize - api 'com.mikepenz:materialize:1.2.0' - - // used to provide out of the box icon font support. simplifies development, - // and provides scalable icons. the core is very very light - // https://github.com/mikepenz/Android-Iconics - api "com.mikepenz:iconics-core:${iconics}" - - // used to fill the RecyclerView with the DrawerItems - // and provides single and multi selection, expandable items - // https://github.com/mikepenz/FastAdapter - api 'com.mikepenz:fastadapter:3.3.0' - api 'com.mikepenz:fastadapter-extensions-expandable:3.3.0' -} \ No newline at end of file diff --git a/MaterialDrawer/gradle.properties b/MaterialDrawer/gradle.properties deleted file mode 100644 index 86351b9f..00000000 --- a/MaterialDrawer/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -POM_NAME=MaterialDrawer Library -POM_DESCRIPTION=The flexible, easy to use, all in one drawer library for your Android project. -POM_ARTIFACT_ID=materialdrawer -POM_PACKAGING=aar \ No newline at end of file diff --git a/MaterialDrawer/src/main/AndroidManifest.xml b/MaterialDrawer/src/main/AndroidManifest.xml deleted file mode 100644 index 1182871d..00000000 --- a/MaterialDrawer/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/MaterialDrawer/src/main/assets/fonts/materialdrawerfont-font-v5.0.0.ttf b/MaterialDrawer/src/main/assets/fonts/materialdrawerfont-font-v5.0.0.ttf deleted file mode 100644 index f02fa65a5736b0305cd70b317bfcd6a1ac36b52f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2104 zcmeHHUuauZ82_DfZ~k^obhc|6XUN8IBaymgU5k)PCNpKspl&9LDBE3fo0g?XNK%@< z$)0>r6d#1Cph$gD@oC5&3s!|OHgOUrf-h1kx)&ezGHkEEbMB3HMTGU)lbmzD@Avz@ z@0|0Ub3X_GyYLzeR?7u#H=J8B)w|Nr~m#LpC&s)u_cW+Jsa)|nJ z)oM36KS2Eo=U}zAG-F?$jZ$A>&(7LbC0M#40rOAt6SD*YG2=(TH%|S)?0lyihq+1p zCF+4Wg@iOyPw~2@OgYP!=WZjy#13$d_9pK-^_~B-w-Qm93f-%KIoh6I} z9)qY^ojQUr70ad=QJbq;#5|3hVg)_a7@-!&D|iRX)J*sgU|vQb;m3YFghBlq;Au@F zgBT!dBFb?$N5yXE{2B@C2nh^Rdyv*XuIHy`i25Mc7}|yhiADHRd)PzE0Iedl344g- zo($tN@irqtUXtpj-g0O0JC2GF^{q|tdhTsGV13hAaaNEs*h#AF^jlI3DyypRCFjnD zw%W^Gy-qyAJQ#YHNt}fR8%?yafbQDYYu~QjSl@Iu97jiT`3h=ikzdsO_4N(S3+ET- z6KC1^*!jSD-+9lu6feY|iRWXZjJ*2 z;UT|7df~#UjTcT`SV-q9f>ql=4p1MlJ^T3*37xP{wdNF?Z_auCC)caDGCRs>&oXA!Jx z{j5n=p|3pLApW8!o0M;PvX3=t!jt{P-}K}#;v%BHXEQ|P02x=7tR7cA*&sgW$tLCB zJlV$zc-)iy#6R@pFvi89g4MBGb5`v{%UZNs`9{5i0xMC6wW!5t7AwvPN){G1l1GEN z>6GkNd#+JW9vM4~k|x?TR#Xy4FowfB3%fI~({^>CX0>pd8>zB7*0|f&&O)j4C#!bd zZZR#DqEPFst`MmC5|Uird5Gm*^cq%Rn`BG_7@q& B7xn-E diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/AccountHeader.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/AccountHeader.java deleted file mode 100644 index 0899fca3..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/AccountHeader.java +++ /dev/null @@ -1,455 +0,0 @@ -package com.mikepenz.materialdrawer; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.os.Bundle; -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; -import pl.droidsonroids.gif.GifDrawable; -import pl.droidsonroids.gif.GifImageView; - -import android.view.View; -import android.widget.ImageView; - -import com.mikepenz.materialdrawer.holder.ImageHolder; -import com.mikepenz.materialdrawer.model.interfaces.IProfile; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * Created by mikepenz on 27.02.15. - */ -public class AccountHeader { - protected final static double NAVIGATION_DRAWER_ACCOUNT_ASPECT_RATIO = 9d / 16d; - - protected static final String BUNDLE_SELECTION_HEADER = "bundle_selection_header"; - - - protected final AccountHeaderBuilder mAccountHeaderBuilder; - - protected AccountHeader(AccountHeaderBuilder accountHeaderBuilder) { - this.mAccountHeaderBuilder = accountHeaderBuilder; - } - - /** - * the protected getter for the AccountHeaderBuilder - * - * @return the AccountHeaderBuilder - */ - protected AccountHeaderBuilder getAccountHeaderBuilder() { - return mAccountHeaderBuilder; - } - - /** - * Get the Root view for the Header - * - * @return - */ - public View getView() { - return mAccountHeaderBuilder.mAccountHeaderContainer; - } - - /** - * Set the drawer for the AccountHeader so we can use it for the select - * - * @param drawer - */ - public void setDrawer(Drawer drawer) { - mAccountHeaderBuilder.mDrawer = drawer; - } - - /** - * Returns the header background view so the dev can set everything on it - * - * @return - */ - public GifImageView getHeaderBackgroundView() { - return mAccountHeaderBuilder.mAccountHeaderBackground; - } - - /** - * set the background for the header via the ImageHolder class - * - * @param imageHolder - */ - public void setHeaderBackground(ImageHolder imageHolder) { - ImageHolder.applyTo(imageHolder, mAccountHeaderBuilder.mAccountHeaderBackground); - } - - /** - * Set the background for the Header - * - * @param headerBackground - */ - public void setBackground(Drawable headerBackground) { - mAccountHeaderBuilder.mAccountHeaderBackground.setImageDrawable(headerBackground); - } - - /** - * set the background for the header as file name - * - * @param headerBackgroundPath - * @return - */ - public void setBackground(String headerBackgroundPath) { - try { - if (headerBackgroundPath.endsWith(".gif")) { - setHeaderBackground(new ImageHolder(new GifDrawable(headerBackgroundPath))); - } - else { - setHeaderBackground(new ImageHolder(Uri.parse(headerBackgroundPath))); - } - - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** - * Set the background for the Header as resource - * - * @param headerBackgroundRes - */ - public void setBackgroundRes(@DrawableRes int headerBackgroundRes) { - mAccountHeaderBuilder.mAccountHeaderBackground.setImageResource(headerBackgroundRes); - } - - /** - * Toggle the selection list (show or hide it) - * - * @param ctx - */ - public void toggleSelectionList(Context ctx) { - mAccountHeaderBuilder.toggleSelectionList(ctx); - } - - /** - * returns if the selection list is currently shown - * - * @return - */ - public boolean isSelectionListShown() { - return mAccountHeaderBuilder.mSelectionListShown; - } - - - /** - * set this to false if you want to hide the first line of the selection box in the header (first line would be the name) - * - * @param selectionFirstLineShown - */ - public void setSelectionFirstLineShown(boolean selectionFirstLineShown) { - mAccountHeaderBuilder.mSelectionFirstLineShown = selectionFirstLineShown; - mAccountHeaderBuilder.updateHeaderAndList(); - } - - /** - * set this to false if you want to hide the second line of the selection box in the header (second line would be the e-mail) - * - * @param selectionSecondLineShown - */ - public void setSelectionSecondLineShown(boolean selectionSecondLineShown) { - mAccountHeaderBuilder.mSelectionSecondLineShown = selectionSecondLineShown; - mAccountHeaderBuilder.updateHeaderAndList(); - } - - /** - * set this to define the first line in the selection area if there is no profile - * note this will block any values from profiles! - * - * @param selectionFirstLine - */ - public void setSelectionFirstLine(String selectionFirstLine) { - mAccountHeaderBuilder.mSelectionFirstLine = selectionFirstLine; - mAccountHeaderBuilder.updateHeaderAndList(); - } - - /** - * set this to define the second line in the selection area if there is no profile - * note this will block any values from profiles! - * - * @param selectionSecondLine - */ - public void setSelectionSecondLine(String selectionSecondLine) { - mAccountHeaderBuilder.mSelectionSecondLine = selectionSecondLine; - mAccountHeaderBuilder.updateHeaderAndList(); - } - - /** - * returns the current list of profiles set for this header - * - * @return - */ - public List getProfiles() { - return mAccountHeaderBuilder.mProfiles; - } - - /** - * Set a new list of profiles for the header - * - * @param profiles - */ - public void setProfiles(List profiles) { - mAccountHeaderBuilder.mProfiles = profiles; - mAccountHeaderBuilder.updateHeaderAndList(); - } - - /** - * Selects the given profile and sets it to the new active profile - * - * @param profile - */ - public void setActiveProfile(IProfile profile) { - setActiveProfile(profile, false); - } - - /** - * Selects the given profile and sets it to the new active profile - * - * @param profile - */ - public void setActiveProfile(IProfile profile, boolean fireOnProfileChanged) { - final boolean isCurrentSelectedProfile = mAccountHeaderBuilder.switchProfiles(profile); - //if the selectionList is shown we should also update the current selected profile in the list - if (mAccountHeaderBuilder.mDrawer != null && isSelectionListShown()) { - mAccountHeaderBuilder.mDrawer.setSelection(profile.getIdentifier(), false); - } - //fire the event if enabled and a listener is set - if (fireOnProfileChanged && mAccountHeaderBuilder.mOnAccountHeaderListener != null) { - mAccountHeaderBuilder.mOnAccountHeaderListener.onProfileChanged(null, profile, isCurrentSelectedProfile); - } - } - - /** - * Selects a profile by its identifier - * - * @param identifier - */ - public void setActiveProfile(long identifier) { - setActiveProfile(identifier, false); - } - - /** - * Selects a profile by its identifier - * - * @param identifier - */ - public void setActiveProfile(long identifier, boolean fireOnProfileChanged) { - if (mAccountHeaderBuilder.mProfiles != null) { - for (IProfile profile : mAccountHeaderBuilder.mProfiles) { - if (profile != null) { - if (profile.getIdentifier() == identifier) { - setActiveProfile(profile, fireOnProfileChanged); - return; - } - } - } - } - } - - /** - * get the current active profile - * - * @return - */ - public IProfile getActiveProfile() { - return mAccountHeaderBuilder.mCurrentProfile; - } - - - /** - * Helper method to update a profile using it's identifier - * - * @param newProfile - */ - public void updateProfile(@NonNull IProfile newProfile) { - updateProfileByIdentifier(newProfile); - } - - /** - * Helper method to update a profile using it's identifier - * - * @param newProfile - */ - @Deprecated - public void updateProfileByIdentifier(@NonNull IProfile newProfile) { - int found = getPositionByIdentifier(newProfile.getIdentifier()); - if (found > -1) { - mAccountHeaderBuilder.mProfiles.set(found, newProfile); - mAccountHeaderBuilder.updateHeaderAndList(); - } - } - - - /** - * Add new profiles to the existing list of profiles - * - * @param profiles - */ - public void addProfiles(@NonNull IProfile... profiles) { - if (mAccountHeaderBuilder.mProfiles == null) { - mAccountHeaderBuilder.mProfiles = new ArrayList<>(); - } - - Collections.addAll(mAccountHeaderBuilder.mProfiles, profiles); - - mAccountHeaderBuilder.updateHeaderAndList(); - } - - /** - * Add a new profile at a specific position to the list - * - * @param profile - * @param position - */ - public void addProfile(@NonNull IProfile profile, int position) { - if (mAccountHeaderBuilder.mProfiles == null) { - mAccountHeaderBuilder.mProfiles = new ArrayList<>(); - } - mAccountHeaderBuilder.mProfiles.add(position, profile); - - mAccountHeaderBuilder.updateHeaderAndList(); - } - - /** - * remove a profile from the given position - * - * @param position - */ - public void removeProfile(int position) { - if (mAccountHeaderBuilder.mProfiles != null && mAccountHeaderBuilder.mProfiles.size() > position) { - mAccountHeaderBuilder.mProfiles.remove(position); - } - - mAccountHeaderBuilder.updateHeaderAndList(); - } - - /** - * remove the profile with the given identifier - * - * @param identifier - */ - public void removeProfileByIdentifier(long identifier) { - int found = getPositionByIdentifier(identifier); - if (found > -1) { - mAccountHeaderBuilder.mProfiles.remove(found); - } - - mAccountHeaderBuilder.updateHeaderAndList(); - } - - /** - * try to remove the given profile - * - * @param profile - */ - public void removeProfile(@NonNull IProfile profile) { - removeProfileByIdentifier(profile.getIdentifier()); - } - - /** - * Clear the header - */ - public void clear() { - mAccountHeaderBuilder.mProfiles = null; - - //calculate the profiles to set - mAccountHeaderBuilder.calculateProfiles(); - - //process and build the profiles - mAccountHeaderBuilder.buildProfiles(); - } - - /** - * gets the position of a profile by it's identifier - * - * @param identifier - * @return - */ - private int getPositionByIdentifier(long identifier) { - int found = -1; - if (mAccountHeaderBuilder.mProfiles != null && identifier != -1) { - for (int i = 0; i < mAccountHeaderBuilder.mProfiles.size(); i++) { - if (mAccountHeaderBuilder.mProfiles.get(i) != null) { - if (mAccountHeaderBuilder.mProfiles.get(i).getIdentifier() == identifier) { - found = i; - break; - } - } - } - } - return found; - } - - /** - * add the values to the bundle for saveInstanceState - * - * @param savedInstanceState - * @return - */ - public Bundle saveInstanceState(Bundle savedInstanceState) { - if (savedInstanceState != null) { - savedInstanceState.putInt(BUNDLE_SELECTION_HEADER, mAccountHeaderBuilder.getCurrentSelection()); - } - return savedInstanceState; - } - - - public interface OnAccountHeaderListener { - /** - * the event when the profile changes - * - * @param view - * @param profile - * @return if the event was consumed - */ - boolean onProfileChanged(View view, IProfile profile, boolean current); - } - - public interface OnAccountHeaderItemLongClickListener { - /** - * the event when the profile item is longClicked inside the list - * - * @param view - * @param profile - * @param current - * @return if the event was consumed - */ - boolean onProfileLongClick(View view, IProfile profile, boolean current); - } - - public interface OnAccountHeaderProfileImageListener { - /** - * the event when the profile image is clicked - * - * @param view - * @param profile - * @return if the event was consumed - */ - boolean onProfileImageClick(View view, IProfile profile, boolean current); - - /** - * the event when the profile image is long clicked - * - * @param view - * @param profile - * @return if the event was consumed - */ - boolean onProfileImageLongClick(View view, IProfile profile, boolean current); - } - - public interface OnAccountHeaderSelectionViewClickListener { - /** - * the event when the user clicks the selection list under the profile icons - * - * @param view - * @param profile - * @return if the event was consumed - */ - boolean onClick(View view, IProfile profile); - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/AccountHeaderBuilder.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/AccountHeaderBuilder.java deleted file mode 100644 index bb447671..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/AccountHeaderBuilder.java +++ /dev/null @@ -1,1500 +0,0 @@ -package com.mikepenz.materialdrawer; - -import android.app.Activity; -import android.content.Context; -import android.graphics.Typeface; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.os.Handler; -import android.text.TextUtils; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -import com.mikepenz.iconics.IconicsDrawable; -import com.mikepenz.materialdrawer.holder.ColorHolder; -import com.mikepenz.materialdrawer.holder.DimenHolder; -import com.mikepenz.materialdrawer.holder.ImageHolder; -import com.mikepenz.materialdrawer.holder.StringHolder; -import com.mikepenz.materialdrawer.icons.MaterialDrawerFont; -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.IProfile; -import com.mikepenz.materialdrawer.util.DrawerImageLoader; -import com.mikepenz.materialdrawer.util.DrawerUIUtils; -import com.mikepenz.materialdrawer.view.BezelImageView; -import com.mikepenz.materialize.util.UIUtils; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Stack; - -import androidx.annotation.ColorInt; -import androidx.annotation.ColorRes; -import androidx.annotation.DimenRes; -import androidx.annotation.DrawableRes; -import androidx.annotation.LayoutRes; -import androidx.annotation.NonNull; -import androidx.appcompat.content.res.AppCompatResources; -import androidx.constraintlayout.widget.Guideline; -import androidx.core.view.ViewCompat; -import pl.droidsonroids.gif.GifDrawable; -import pl.droidsonroids.gif.GifImageView; - -/** - * Created by mikepenz on 23.05.15. - */ -public class AccountHeaderBuilder { - // global references to views we need later - protected Guideline mStatusBarGuideline; - protected View mAccountHeader; - protected GifImageView mAccountHeaderBackground; - protected BezelImageView mCurrentProfileView; - protected ImageView mAccountSwitcherArrow; - protected TextView mCurrentProfileName; - protected TextView mCurrentProfileEmail; - protected BezelImageView mProfileFirstView; - protected BezelImageView mProfileSecondView; - protected BezelImageView mProfileThirdView; - - // global references to the profiles - protected IProfile mCurrentProfile; - protected IProfile mProfileFirst; - protected IProfile mProfileSecond; - protected IProfile mProfileThird; - - - // global stuff - protected boolean mSelectionListShown = false; - protected int mAccountHeaderTextSectionBackgroundResource = -1; - - // the activity to use - protected Activity mActivity; - - /** - * Pass the activity you use the drawer in ;) - * - * @param activity - * @return - */ - public AccountHeaderBuilder withActivity(@NonNull Activity activity) { - this.mActivity = activity; - return this; - } - - // defines if we use the compactStyle - protected boolean mCompactStyle = false; - - /** - * Defines if we should use the compact style for the header. - * - * @param compactStyle - * @return - */ - public AccountHeaderBuilder withCompactStyle(boolean compactStyle) { - this.mCompactStyle = compactStyle; - return this; - } - - // the typeface used for textViews within the AccountHeader - protected Typeface mTypeface; - - // the typeface used for name textView only. overrides mTypeface - protected Typeface mNameTypeface; - - // the typeface used for email textView only. overrides mTypeface - protected Typeface mEmailTypeface; - - /** - * Define the typeface which will be used for all textViews in the AccountHeader - * - * @param typeface - * @return - */ - public AccountHeaderBuilder withTypeface(@NonNull Typeface typeface) { - this.mTypeface = typeface; - return this; - } - - /** - * Define the typeface which will be used for name textView in the AccountHeader. - * Overrides typeface supplied to {@link AccountHeaderBuilder#withTypeface(android.graphics.Typeface)} - * - * @param typeface - * @return - * @see #withTypeface(android.graphics.Typeface) - */ - public AccountHeaderBuilder withNameTypeface(@NonNull Typeface typeface) { - this.mNameTypeface = typeface; - return this; - } - - /** - * Define the typeface which will be used for email textView in the AccountHeader. - * Overrides typeface supplied to {@link AccountHeaderBuilder#withTypeface(android.graphics.Typeface)} - * - * @param typeface - * @return - * @see #withTypeface(android.graphics.Typeface) - */ - public AccountHeaderBuilder withEmailTypeface(@NonNull Typeface typeface) { - this.mEmailTypeface = typeface; - return this; - } - - // set the account header height - protected DimenHolder mHeight; - - /** - * set the height for the header - * - * @param heightPx - * @return - */ - public AccountHeaderBuilder withHeightPx(int heightPx) { - this.mHeight = DimenHolder.fromPixel(heightPx); - return this; - } - - - /** - * set the height for the header - * - * @param heightDp - * @return - */ - public AccountHeaderBuilder withHeightDp(int heightDp) { - this.mHeight = DimenHolder.fromDp(heightDp); - return this; - } - - /** - * set the height for the header by resource - * - * @param heightRes - * @return - */ - public AccountHeaderBuilder withHeightRes(@DimenRes int heightRes) { - this.mHeight = DimenHolder.fromResource(heightRes); - return this; - } - - //the background color for the slider - protected ColorHolder mTextColor; - - /** - * set the background for the slider as color - * - * @param textColor - * @return - */ - public AccountHeaderBuilder withTextColor(@ColorInt int textColor) { - this.mTextColor = ColorHolder.fromColor(textColor); - return this; - } - - /** - * set the background for the slider as resource - * - * @param textColorRes - * @return - */ - public AccountHeaderBuilder withTextColorRes(@ColorRes int textColorRes) { - this.mTextColor = ColorHolder.fromColorRes(textColorRes); - return this; - } - - //the current selected profile is visible in the list - protected boolean mCurrentHiddenInList = false; - - /** - * hide the current selected profile from the list - * - * @param currentProfileHiddenInList - * @return - */ - public AccountHeaderBuilder withCurrentProfileHiddenInList(boolean currentProfileHiddenInList) { - mCurrentHiddenInList = currentProfileHiddenInList; - return this; - } - - //set to hide the first or second line - protected boolean mSelectionFirstLineShown = true; - protected boolean mSelectionSecondLineShown = true; - - /** - * set this to false if you want to hide the first line of the selection box in the header (first line would be the name) - * - * @param selectionFirstLineShown - * @return - * @deprecated replaced by {@link #withSelectionFirstLineShown} - */ - @Deprecated - public AccountHeaderBuilder withSelectionFistLineShown(boolean selectionFirstLineShown) { - this.mSelectionFirstLineShown = selectionFirstLineShown; - return this; - } - - /** - * set this to false if you want to hide the first line of the selection box in the header (first line would be the name) - * - * @param selectionFirstLineShown - * @return - */ - public AccountHeaderBuilder withSelectionFirstLineShown(boolean selectionFirstLineShown) { - this.mSelectionFirstLineShown = selectionFirstLineShown; - return this; - } - - /** - * set this to false if you want to hide the second line of the selection box in the header (second line would be the e-mail) - * - * @param selectionSecondLineShown - * @return - */ - public AccountHeaderBuilder withSelectionSecondLineShown(boolean selectionSecondLineShown) { - this.mSelectionSecondLineShown = selectionSecondLineShown; - return this; - } - - - //set one of these to define the text in the first or second line with in the account selector - protected String mSelectionFirstLine; - protected String mSelectionSecondLine; - - /** - * set this to define the first line in the selection area if there is no profile - * note this will block any values from profiles! - * - * @param selectionFirstLine - * @return - */ - public AccountHeaderBuilder withSelectionFirstLine(String selectionFirstLine) { - this.mSelectionFirstLine = selectionFirstLine; - return this; - } - - /** - * set this to define the second line in the selection area if there is no profile - * note this will block any values from profiles! - * - * @param selectionSecondLine - * @return - */ - public AccountHeaderBuilder withSelectionSecondLine(String selectionSecondLine) { - this.mSelectionSecondLine = selectionSecondLine; - return this; - } - - // set no divider below the header - protected boolean mPaddingBelowHeader = true; - - /** - * Set this to false if you want no padding below the Header - * - * @param paddingBelowHeader - * @return - */ - public AccountHeaderBuilder withPaddingBelowHeader(boolean paddingBelowHeader) { - this.mPaddingBelowHeader = paddingBelowHeader; - return this; - } - - // set no divider below the header - protected boolean mDividerBelowHeader = true; - - /** - * Set this to false if you want no divider below the Header - * - * @param dividerBelowHeader - * @return - */ - public AccountHeaderBuilder withDividerBelowHeader(boolean dividerBelowHeader) { - this.mDividerBelowHeader = dividerBelowHeader; - return this; - } - - // set non translucent statusBar mode - protected boolean mTranslucentStatusBar = true; - - /** - * Set or disable this if you use a translucent statusbar - * - * @param translucentStatusBar - * @return - */ - public AccountHeaderBuilder withTranslucentStatusBar(boolean translucentStatusBar) { - this.mTranslucentStatusBar = translucentStatusBar; - return this; - } - - //the background for the header - protected ImageHolder mHeaderBackground; - - /** - * set the background for the slider as color - * - * @param headerBackground - * @return - */ - public AccountHeaderBuilder withHeaderBackground(Drawable headerBackground) { - this.mHeaderBackground = new ImageHolder(headerBackground); - return this; - } - - /** - * set the background for the header as resource - * - * @param headerBackgroundRes - * @return - */ - public AccountHeaderBuilder withHeaderBackground(@DrawableRes int headerBackgroundRes) { - this.mHeaderBackground = new ImageHolder(headerBackgroundRes); - return this; - } - - /** - * set the background for the header as file name - * - * @param headerBackgroundPath - * @return - */ - public AccountHeaderBuilder withHeaderBackground(String headerBackgroundPath) { - try { - if (headerBackgroundPath.endsWith(".gif")) { - this.mHeaderBackground = new ImageHolder(new GifDrawable(headerBackgroundPath)); - } - else { - this.mHeaderBackground = new ImageHolder(Uri.parse(headerBackgroundPath)); - } - - } catch (IOException e) { - e.printStackTrace(); - } - return this; - } - - /** - * set the background for the header via the ImageHolder class - * - * @param headerBackground - * @return - */ - public AccountHeaderBuilder withHeaderBackground(ImageHolder headerBackground) { - this.mHeaderBackground = headerBackground; - return this; - } - - //background scale type - protected ImageView.ScaleType mHeaderBackgroundScaleType = null; - - /** - * define the ScaleType for the header background - * - * @param headerBackgroundScaleType - * @return - */ - public AccountHeaderBuilder withHeaderBackgroundScaleType(ImageView.ScaleType headerBackgroundScaleType) { - this.mHeaderBackgroundScaleType = headerBackgroundScaleType; - return this; - } - - //profile images in the header are shown or not - protected boolean mProfileImagesVisible = true; - - /** - * define if the profile images in the header are shown or not - * - * @param profileImagesVisible - * @return - */ - public AccountHeaderBuilder withProfileImagesVisible(boolean profileImagesVisible) { - this.mProfileImagesVisible = profileImagesVisible; - return this; - } - - //only the main profile image is visible - protected boolean mOnlyMainProfileImageVisible = false; - - /** - * define if only the main (current selected) profile image should be visible - * - * @param onlyMainProfileImageVisible - * @return - */ - public AccountHeaderBuilder withOnlyMainProfileImageVisible(boolean onlyMainProfileImageVisible) { - this.mOnlyMainProfileImageVisible = onlyMainProfileImageVisible; - return this; - } - - //show small profile images but hide MainProfileImage - protected boolean mOnlySmallProfileImagesVisible = false; - - /** - * define if only the small profile images should be visible - * - * @param onlySmallProfileImagesVisible - * @return - */ - public AccountHeaderBuilder withOnlySmallProfileImagesVisible(boolean onlySmallProfileImagesVisible) { - this.mOnlySmallProfileImagesVisible = onlySmallProfileImagesVisible; - return this; - } - - //close the drawer after a profile was clicked in the list - protected Boolean mCloseDrawerOnProfileListClick = null; - - /** - * define if the drawer should close if the user clicks on a profile item if the selection list is shown - * - * @param closeDrawerOnProfileListClick - * @return - */ - public AccountHeaderBuilder withCloseDrawerOnProfileListClick(boolean closeDrawerOnProfileListClick) { - this.mCloseDrawerOnProfileListClick = closeDrawerOnProfileListClick; - return this; - } - - //reset the drawer list to the main drawer list after the profile was clicked in the list - protected boolean mResetDrawerOnProfileListClick = true; - - /** - * define if the drawer selection list should be reseted after the user clicks on a profile item if the selection list is shown - * - * @param resetDrawerOnProfileListClick - * @return - */ - public AccountHeaderBuilder withResetDrawerOnProfileListClick(boolean resetDrawerOnProfileListClick) { - this.mResetDrawerOnProfileListClick = resetDrawerOnProfileListClick; - return this; - } - - // set the profile images clickable or not - protected boolean mProfileImagesClickable = true; - - /** - * enable or disable the profile images to be clickable - * - * @param profileImagesClickable - * @return - */ - public AccountHeaderBuilder withProfileImagesClickable(boolean profileImagesClickable) { - this.mProfileImagesClickable = profileImagesClickable; - return this; - } - - // set to use the alternative profile header switching - protected boolean mAlternativeProfileHeaderSwitching = false; - - /** - * enable the alternative profile header switching - * - * @param alternativeProfileHeaderSwitching - * @return - */ - public AccountHeaderBuilder withAlternativeProfileHeaderSwitching(boolean alternativeProfileHeaderSwitching) { - this.mAlternativeProfileHeaderSwitching = alternativeProfileHeaderSwitching; - return this; - } - - // enable 3 small header previews - protected boolean mThreeSmallProfileImages = false; - - /** - * enable the extended profile icon view with 3 small header images instead of two - * - * @param threeSmallProfileImages - * @return - */ - public AccountHeaderBuilder withThreeSmallProfileImages(boolean threeSmallProfileImages) { - this.mThreeSmallProfileImages = threeSmallProfileImages; - return this; - } - - //the delay which is waited before the drawer is closed - protected int mOnProfileClickDrawerCloseDelay = 100; - - /** - * Define the delay for the drawer close operation after a click. - * This is a small trick to improve the speed (and remove lag) if you open a new activity after a DrawerItem - * was selected. - * NOTE: Disable this by passing -1 - * - * @param onProfileClickDrawerCloseDelay the delay in MS (-1 to disable) - * @return - */ - public AccountHeaderBuilder withOnProfileClickDrawerCloseDelay(int onProfileClickDrawerCloseDelay) { - this.mOnProfileClickDrawerCloseDelay = onProfileClickDrawerCloseDelay; - return this; - } - - // the onAccountHeaderProfileImageListener to set - protected AccountHeader.OnAccountHeaderProfileImageListener mOnAccountHeaderProfileImageListener; - - /** - * set click / longClick listener for the header images - * - * @param onAccountHeaderProfileImageListener - * @return - */ - public AccountHeaderBuilder withOnAccountHeaderProfileImageListener(AccountHeader.OnAccountHeaderProfileImageListener onAccountHeaderProfileImageListener) { - this.mOnAccountHeaderProfileImageListener = onAccountHeaderProfileImageListener; - return this; - } - - // the onAccountHeaderSelectionListener to set - protected AccountHeader.OnAccountHeaderSelectionViewClickListener mOnAccountHeaderSelectionViewClickListener; - - /** - * set a onSelection listener for the selection box - * - * @param onAccountHeaderSelectionViewClickListener - * @return - */ - public AccountHeaderBuilder withOnAccountHeaderSelectionViewClickListener(AccountHeader.OnAccountHeaderSelectionViewClickListener onAccountHeaderSelectionViewClickListener) { - this.mOnAccountHeaderSelectionViewClickListener = onAccountHeaderSelectionViewClickListener; - return this; - } - - //set the selection list enabled if there is only a single profile - protected boolean mSelectionListEnabledForSingleProfile = true; - - /** - * enable or disable the selection list if there is only a single profile - * - * @param selectionListEnabledForSingleProfile - * @return - */ - public AccountHeaderBuilder withSelectionListEnabledForSingleProfile(boolean selectionListEnabledForSingleProfile) { - this.mSelectionListEnabledForSingleProfile = selectionListEnabledForSingleProfile; - return this; - } - - //set the selection enabled disabled - protected boolean mSelectionListEnabled = true; - - /** - * enable or disable the selection list - * - * @param selectionListEnabled - * @return - */ - public AccountHeaderBuilder withSelectionListEnabled(boolean selectionListEnabled) { - this.mSelectionListEnabled = selectionListEnabled; - return this; - } - - // the drawerLayout to use - protected View mAccountHeaderContainer; - - /** - * You can pass a custom view for the drawer lib. note this requires the same structure as the drawer.xml - * - * @param accountHeader - * @return - */ - public AccountHeaderBuilder withAccountHeader(@NonNull View accountHeader) { - this.mAccountHeaderContainer = accountHeader; - return this; - } - - /** - * You can pass a custom layout for the drawer lib. see the drawer.xml in layouts of this lib on GitHub - * - * @param resLayout - * @return - */ - public AccountHeaderBuilder withAccountHeader(@LayoutRes int resLayout) { - if (mActivity == null) { - throw new RuntimeException("please pass an activity first to use this call"); - } - - if (resLayout != -1) { - this.mAccountHeaderContainer = mActivity.getLayoutInflater().inflate(resLayout, null, false); - } else { - if (mCompactStyle) { - this.mAccountHeaderContainer = mActivity.getLayoutInflater().inflate(R.layout.material_drawer_compact_header, null, false); - } else { - this.mAccountHeaderContainer = mActivity.getLayoutInflater().inflate(R.layout.material_drawer_header, null, false); - } - } - - return this; - } - - // the profiles to display - protected List mProfiles; - - /** - * set the arrayList of DrawerItems for the drawer - * - * @param profiles - * @return - */ - public AccountHeaderBuilder withProfiles(@NonNull List profiles) { - if (mDrawer != null) { - mDrawer.mDrawerBuilder.idDistributor.checkIds(profiles); - } - this.mProfiles = profiles; - return this; - } - - /** - * add single ore more DrawerItems to the Drawer - * - * @param profiles - * @return - */ - public AccountHeaderBuilder addProfiles(@NonNull IProfile... profiles) { - if (this.mProfiles == null) { - this.mProfiles = new ArrayList<>(); - } - if (mDrawer != null) { - mDrawer.mDrawerBuilder.idDistributor.checkIds(profiles); - } - Collections.addAll(this.mProfiles, profiles); - - return this; - } - - // the click listener to be fired on profile or selection click - protected AccountHeader.OnAccountHeaderListener mOnAccountHeaderListener; - - /** - * add a listener for the accountHeader - * - * @param onAccountHeaderListener - * @return - */ - public AccountHeaderBuilder withOnAccountHeaderListener(AccountHeader.OnAccountHeaderListener onAccountHeaderListener) { - this.mOnAccountHeaderListener = onAccountHeaderListener; - return this; - } - - //the on long click listener to be fired on profile longClick inside the list - protected AccountHeader.OnAccountHeaderItemLongClickListener mOnAccountHeaderItemLongClickListener; - - /** - * the on long click listener to be fired on profile longClick inside the list - * - * @param onAccountHeaderItemLongClickListener - * @return - */ - public AccountHeaderBuilder withOnAccountHeaderItemLongClickListener(AccountHeader.OnAccountHeaderItemLongClickListener onAccountHeaderItemLongClickListener) { - this.mOnAccountHeaderItemLongClickListener = onAccountHeaderItemLongClickListener; - return this; - } - - // the drawer to set the AccountSwitcher for - protected Drawer mDrawer; - - /** - * @param drawer - * @return - */ - public AccountHeaderBuilder withDrawer(@NonNull Drawer drawer) { - this.mDrawer = drawer; - - //set the top padding to 0 as this would happen when the AccountHeader is created during Drawer build time - drawer.getRecyclerView().setPadding(drawer.getRecyclerView().getPaddingLeft(), 0, drawer.getRecyclerView().getPaddingRight(), drawer.getRecyclerView().getPaddingBottom()); - return this; - } - - // savedInstance to restore state - protected Bundle mSavedInstance; - - /** - * create the drawer with the values of a savedInstance - * - * @param savedInstance - * @return - */ - public AccountHeaderBuilder withSavedInstance(Bundle savedInstance) { - this.mSavedInstance = savedInstance; - return this; - } - - /** - * helper method to set the height for the header! - * - * @param height - */ - private void setHeaderHeight(int height) { - if (mAccountHeaderContainer != null) { - ViewGroup.LayoutParams params = mAccountHeaderContainer.getLayoutParams(); - if (params != null) { - params.height = height; - mAccountHeaderContainer.setLayoutParams(params); - } - - View accountHeader = mAccountHeaderContainer.findViewById(R.id.material_drawer_account_header); - if (accountHeader != null) { - // TODO why is this null? - params = accountHeader.getLayoutParams(); - if(params != null) { - params.height = height; - accountHeader.setLayoutParams(params); - } - } - - View accountHeaderBackground = mAccountHeaderContainer.findViewById(R.id.material_drawer_account_header_background); - if (accountHeaderBackground != null) { - params = accountHeaderBackground.getLayoutParams(); - params.height = height; - accountHeaderBackground.setLayoutParams(params); - } - } - } - - /** - * a small helper to handle the selectionView - * - * @param on - */ - private void handleSelectionView(IProfile profile, boolean on) { - if (on) { - if (Build.VERSION.SDK_INT >= 23) { - mAccountHeaderContainer.setForeground(AppCompatResources.getDrawable(mAccountHeaderContainer.getContext(), mAccountHeaderTextSectionBackgroundResource)); - } else { - // todo foreground thing? - } - mAccountHeaderContainer.setOnClickListener(onSelectionClickListener); - mAccountHeaderContainer.setTag(R.id.material_drawer_profile_header, profile); - } else { - if (Build.VERSION.SDK_INT >= 23) { - mAccountHeaderContainer.setForeground(null); - } else { - // TODO foreground reset - } - mAccountHeaderContainer.setOnClickListener(null); - } - } - - /** - * method to build the header view - * - * @return - */ - public AccountHeader build() { - // if the user has not set a accountHeader use the default one :D - if (mAccountHeaderContainer == null) { - withAccountHeader(-1); - } - - // get the header view within the container - mAccountHeader = mAccountHeaderContainer.findViewById(R.id.material_drawer_account_header); - mStatusBarGuideline = mAccountHeaderContainer.findViewById(R.id.material_drawer_statusbar_guideline); - - //the default min header height by default 148dp - int defaultHeaderMinHeight = mActivity.getResources().getDimensionPixelSize(R.dimen.material_drawer_account_header_height); - int statusBarHeight = UIUtils.getStatusBarHeight(mActivity, true); - - // handle the height for the header - int height; - if (mHeight != null) { - height = mHeight.asPixel(mActivity); - } else { - if (mCompactStyle) { - height = mActivity.getResources().getDimensionPixelSize(R.dimen.material_drawer_account_header_height_compact); - } else { - //calculate the header height by getting the optimal drawer width and calculating it * 9 / 16 - height = (int) (DrawerUIUtils.getOptimalDrawerWidth(mActivity) * AccountHeader.NAVIGATION_DRAWER_ACCOUNT_ASPECT_RATIO); - - //if we are lower than api 19 (>= 19 we have a translucentStatusBar) the height should be a bit lower - //probably even if we are non translucent on > 19 devices? - if (Build.VERSION.SDK_INT < 19) { - int tempHeight = height - statusBarHeight; - //if we are lower than api 19 we are not able to have a translucent statusBar so we remove the height of the statusBar from the padding - //to prevent display issues we only reduce the height if we still fit the required minHeight of 148dp (R.dimen.material_drawer_account_header_height) - //we remove additional 8dp from the defaultMinHeaderHeight as there is some buffer in the header and to prevent to large spacings - if (tempHeight > defaultHeaderMinHeight - UIUtils.convertDpToPixel(8, mActivity)) { - height = tempHeight; - } - } - } - } - - // handle everything if we have a translucent status bar which only is possible on API >= 19 - if (mTranslucentStatusBar && Build.VERSION.SDK_INT >= 21) { - mStatusBarGuideline.setGuidelineBegin(statusBarHeight); - - //in fact it makes no difference if we have a translucent statusBar or not. we want 9/16 just if we are not compact - if (mCompactStyle) { - height = height + statusBarHeight; - } else if ((height - statusBarHeight) <= defaultHeaderMinHeight) { - //if the height + statusBar of the header is lower than the required 148dp + statusBar we change the height to be able to display all the data - height = defaultHeaderMinHeight + statusBarHeight; - } - } - - //set the height for the header - setHeaderHeight(height); - - // get the background view - mAccountHeaderBackground = (GifImageView) mAccountHeaderContainer.findViewById(R.id.material_drawer_account_header_background); - // set the background - ImageHolder.applyTo(mHeaderBackground, mAccountHeaderBackground, DrawerImageLoader.Tags.ACCOUNT_HEADER.name()); - - if (mHeaderBackgroundScaleType != null) { - mAccountHeaderBackground.setScaleType(mHeaderBackgroundScaleType); - } - - // get the text color to use for the text section - int textColor = ColorHolder.color(mTextColor, mActivity, R.attr.material_drawer_header_selection_text, R.color.material_drawer_header_selection_text); - int subTextColor = ColorHolder.color(mTextColor, mActivity, R.attr.material_drawer_header_selection_subtext, R.color.material_drawer_header_selection_subtext); - - mAccountHeaderTextSectionBackgroundResource = UIUtils.getSelectableBackgroundRes(mActivity); - handleSelectionView(mCurrentProfile, true); - - // set the arrow :D - mAccountSwitcherArrow = mAccountHeaderContainer.findViewById(R.id.material_drawer_account_header_text_switcher); - mAccountSwitcherArrow.setImageDrawable(new IconicsDrawable(mActivity, MaterialDrawerFont.Icon.mdf_arrow_drop_down).sizeRes(R.dimen.material_drawer_account_header_dropdown).paddingRes(R.dimen.material_drawer_account_header_dropdown_padding).color(subTextColor)); - - //get the fields for the name - mCurrentProfileView = mAccountHeader.findViewById(R.id.material_drawer_account_header_current); - mCurrentProfileName = mAccountHeader.findViewById(R.id.material_drawer_account_header_name); - mCurrentProfileEmail = mAccountHeader.findViewById(R.id.material_drawer_account_header_email); - - //set the typeface for the AccountHeader - if (mNameTypeface != null) { - mCurrentProfileName.setTypeface(mNameTypeface); - } else if (mTypeface != null) { - mCurrentProfileName.setTypeface(mTypeface); - } - - if (mEmailTypeface != null) { - mCurrentProfileEmail.setTypeface(mEmailTypeface); - } else if (mTypeface != null) { - mCurrentProfileEmail.setTypeface(mTypeface); - } - - mCurrentProfileName.setTextColor(textColor); - mCurrentProfileEmail.setTextColor(subTextColor); - - mProfileFirstView = mAccountHeader.findViewById(R.id.material_drawer_account_header_small_first); - mProfileSecondView = mAccountHeader.findViewById(R.id.material_drawer_account_header_small_second); - mProfileThirdView = mAccountHeader.findViewById(R.id.material_drawer_account_header_small_third); - - //calculate the profiles to set - calculateProfiles(); - - //process and build the profiles - buildProfiles(); - - // try to restore all saved values again - if (mSavedInstance != null) { - int selection = mSavedInstance.getInt(AccountHeader.BUNDLE_SELECTION_HEADER, -1); - if (selection != -1) { - //predefine selection (should be the first element - if (mProfiles != null && (selection) > -1 && selection < mProfiles.size()) { - switchProfiles(mProfiles.get(selection)); - } - } - } - - //everything created. now set the header - if (mDrawer != null) { - mDrawer.setHeader(mAccountHeaderContainer, mPaddingBelowHeader, mDividerBelowHeader); - } - - //forget the reference to the activity - mActivity = null; - - return new AccountHeader(this); - } - - /** - * helper method to calculate the order of the profiles - */ - protected void calculateProfiles() { - if (mProfiles == null) { - mProfiles = new ArrayList<>(); - } - - if (mCurrentProfile == null) { - int setCount = 0; - int size = mProfiles.size(); - for (int i = 0; i < size; i++) { - if (mProfiles.size() > i && mProfiles.get(i).isSelectable()) { - if (setCount == 0 && (mCurrentProfile == null)) { - mCurrentProfile = mProfiles.get(i); - } else if (setCount == 1 && (mProfileFirst == null)) { - mProfileFirst = mProfiles.get(i); - } else if (setCount == 2 && (mProfileSecond == null)) { - mProfileSecond = mProfiles.get(i); - } else if (setCount == 3 && (mProfileThird == null)) { - mProfileThird = mProfiles.get(i); - } - setCount++; - } - } - - return; - } - - IProfile[] previousActiveProfiles = new IProfile[]{ - mCurrentProfile, - mProfileFirst, - mProfileSecond, - mProfileThird - }; - - IProfile[] newActiveProfiles = new IProfile[4]; - Stack unusedProfiles = new Stack<>(); - - // try to keep existing active profiles in the same positions - for (int i = 0; i < mProfiles.size(); i++) { - IProfile p = mProfiles.get(i); - if (p.isSelectable()) { - boolean used = false; - for (int j = 0; j < 4; j++) { - if (previousActiveProfiles[j] == p) { - newActiveProfiles[j] = p; - used = true; - break; - } - } - if (!used) { - unusedProfiles.push(p); - } - } - } - - Stack activeProfiles = new Stack<>(); - // try to fill the gaps with new available profiles - for (int i = 0; i < 4; i++) { - if (newActiveProfiles[i] != null) { - activeProfiles.push(newActiveProfiles[i]); - } else if (!unusedProfiles.isEmpty()) { - activeProfiles.push(unusedProfiles.pop()); - } - } - - Stack reversedActiveProfiles = new Stack<>(); - while (!activeProfiles.empty()) { - reversedActiveProfiles.push(activeProfiles.pop()); - } - - // reassign active profiles - if (reversedActiveProfiles.isEmpty()) { - mCurrentProfile = null; - } else { - mCurrentProfile = reversedActiveProfiles.pop(); - } - if (reversedActiveProfiles.isEmpty()) { - mProfileFirst = null; - } else { - mProfileFirst = reversedActiveProfiles.pop(); - } - if (reversedActiveProfiles.isEmpty()) { - mProfileSecond = null; - } else { - mProfileSecond = reversedActiveProfiles.pop(); - } - if (reversedActiveProfiles.isEmpty()) { - mProfileThird = null; - } else { - mProfileThird = reversedActiveProfiles.pop(); - } - } - - /** - * helper method to switch the profiles - * - * @param newSelection - * @return true if the new selection was the current profile - */ - protected boolean switchProfiles(IProfile newSelection) { - if (newSelection == null) { - return false; - } - if (mCurrentProfile == newSelection) { - return true; - } - - if (mAlternativeProfileHeaderSwitching) { - int prevSelection = -1; - if (mProfileFirst == newSelection) { - prevSelection = 1; - } else if (mProfileSecond == newSelection) { - prevSelection = 2; - } else if (mProfileThird == newSelection) { - prevSelection = 3; - } - - IProfile tmp = mCurrentProfile; - mCurrentProfile = newSelection; - - if (prevSelection == 1) { - mProfileFirst = tmp; - } else if (prevSelection == 2) { - mProfileSecond = tmp; - } else if (prevSelection == 3) { - mProfileThird = tmp; - } - } else { - if (mProfiles != null) { - ArrayList previousActiveProfiles = new ArrayList<>(Arrays.asList(mCurrentProfile, mProfileFirst, mProfileSecond, mProfileThird)); - - if (previousActiveProfiles.contains(newSelection)) { - int position = -1; - - for (int i = 0; i < 4; i++) { - if (previousActiveProfiles.get(i) == newSelection) { - position = i; - break; - } - } - - if (position != -1) { - previousActiveProfiles.remove(position); - previousActiveProfiles.add(0, newSelection); - - mCurrentProfile = previousActiveProfiles.get(0); - mProfileFirst = previousActiveProfiles.get(1); - mProfileSecond = previousActiveProfiles.get(2); - mProfileThird = previousActiveProfiles.get(3); - } - } else { - mProfileThird = mProfileSecond; - mProfileSecond = mProfileFirst; - mProfileFirst = mCurrentProfile; - mCurrentProfile = newSelection; - } - } - } - - //if we only show the small profile images we have to make sure the first (would be the current selected) profile is also shown - if (mOnlySmallProfileImagesVisible) { - mProfileThird = mProfileSecond; - mProfileSecond = mProfileFirst; - mProfileFirst = mCurrentProfile; - //mCurrentProfile = mProfileThird; - } - - buildProfiles(); - - return false; - } - - /** - * helper method to build the views for the ui - */ - protected void buildProfiles() { - mCurrentProfileView.setVisibility(View.GONE); - mAccountSwitcherArrow.setVisibility(View.GONE); - mProfileFirstView.setVisibility(View.GONE); - mProfileFirstView.setOnClickListener(null); - mProfileSecondView.setVisibility(View.GONE); - mProfileSecondView.setOnClickListener(null); - mProfileThirdView.setVisibility(View.GONE); - mProfileThirdView.setOnClickListener(null); - mCurrentProfileName.setText(""); - mCurrentProfileEmail.setText(""); - - handleSelectionView(mCurrentProfile, true); - - if (mCurrentProfile != null) { - if ((mProfileImagesVisible || mOnlyMainProfileImageVisible) && !mOnlySmallProfileImagesVisible) { - setImageOrPlaceholder(mCurrentProfileView, mCurrentProfile.getIcon()); - if (mProfileImagesClickable) { - mCurrentProfileView.setOnClickListener(onCurrentProfileClickListener); - mCurrentProfileView.setOnLongClickListener(onCurrentProfileLongClickListener); - mCurrentProfileView.disableTouchFeedback(false); - } else { - mCurrentProfileView.disableTouchFeedback(true); - } - mCurrentProfileView.setVisibility(View.VISIBLE); - - mCurrentProfileView.invalidate(); - } else if (mCompactStyle) { - mCurrentProfileView.setVisibility(View.GONE); - } - - handleSelectionView(mCurrentProfile, true); - mAccountSwitcherArrow.setVisibility(View.VISIBLE); - mCurrentProfileView.setTag(R.id.material_drawer_profile_header, mCurrentProfile); - - StringHolder.applyTo(mCurrentProfile.getName(), mCurrentProfileName); - StringHolder.applyTo(mCurrentProfile.getEmail(), mCurrentProfileEmail); - - if (mProfileFirst != null && mProfileImagesVisible && !mOnlyMainProfileImageVisible) { - setImageOrPlaceholder(mProfileFirstView, mProfileFirst.getIcon()); - mProfileFirstView.setTag(R.id.material_drawer_profile_header, mProfileFirst); - if (mProfileImagesClickable) { - mProfileFirstView.setOnClickListener(onProfileClickListener); - mProfileFirstView.setOnLongClickListener(onProfileLongClickListener); - mProfileFirstView.disableTouchFeedback(false); - } else { - mProfileFirstView.disableTouchFeedback(true); - } - mProfileFirstView.setVisibility(View.VISIBLE); - mProfileFirstView.invalidate(); - } - if (mProfileSecond != null && mProfileImagesVisible && !mOnlyMainProfileImageVisible) { - setImageOrPlaceholder(mProfileSecondView, mProfileSecond.getIcon()); - mProfileSecondView.setTag(R.id.material_drawer_profile_header, mProfileSecond); - if (mProfileImagesClickable) { - mProfileSecondView.setOnClickListener(onProfileClickListener); - mProfileSecondView.setOnLongClickListener(onProfileLongClickListener); - mProfileSecondView.disableTouchFeedback(false); - } else { - mProfileSecondView.disableTouchFeedback(true); - } - mProfileSecondView.setVisibility(View.VISIBLE); - mProfileSecondView.invalidate(); - } - if (mProfileThird != null && mThreeSmallProfileImages && mProfileImagesVisible && !mOnlyMainProfileImageVisible) { - setImageOrPlaceholder(mProfileThirdView, mProfileThird.getIcon()); - mProfileThirdView.setTag(R.id.material_drawer_profile_header, mProfileThird); - if (mProfileImagesClickable) { - mProfileThirdView.setOnClickListener(onProfileClickListener); - mProfileThirdView.setOnLongClickListener(onProfileLongClickListener); - mProfileThirdView.disableTouchFeedback(false); - } else { - mProfileThirdView.disableTouchFeedback(true); - } - mProfileThirdView.setVisibility(View.VISIBLE); - mProfileThirdView.invalidate(); - } - } else if (mProfiles != null && mProfiles.size() > 0) { - IProfile profile = mProfiles.get(0); - mAccountHeader.setTag(R.id.material_drawer_profile_header, profile); - handleSelectionView(mCurrentProfile, true); - mAccountSwitcherArrow.setVisibility(View.VISIBLE); - if (mCurrentProfile != null) { - StringHolder.applyTo(mCurrentProfile.getName(), mCurrentProfileName); - StringHolder.applyTo(mCurrentProfile.getEmail(), mCurrentProfileEmail); - } - } - - if (!mSelectionFirstLineShown) { - mCurrentProfileName.setVisibility(View.GONE); - } - if (!TextUtils.isEmpty(mSelectionFirstLine)) { - mCurrentProfileName.setText(mSelectionFirstLine); - } - if (!mSelectionSecondLineShown) { - mCurrentProfileEmail.setVisibility(View.GONE); - } - if (!TextUtils.isEmpty(mSelectionSecondLine)) { - mCurrentProfileEmail.setText(mSelectionSecondLine); - } - - //if we disabled the list - if (!mSelectionListEnabled || !mSelectionListEnabledForSingleProfile && mProfileFirst == null && (mProfiles == null || mProfiles.size() == 1)) { - mAccountSwitcherArrow.setVisibility(View.GONE); - handleSelectionView(null, false); - } - - //if we disabled the list but still have set a custom listener - if (mOnAccountHeaderSelectionViewClickListener != null) { - handleSelectionView(mCurrentProfile, true); - } - } - - /** - * small helper method to set an profile image or a placeholder - * - * @param iv - * @param imageHolder - */ - private void setImageOrPlaceholder(ImageView iv, ImageHolder imageHolder) { - //cancel previous started image loading processes - DrawerImageLoader.getInstance().cancelImage(iv); - //set the placeholder - iv.setImageDrawable(DrawerImageLoader.getInstance().getImageLoader().placeholder(iv.getContext(), DrawerImageLoader.Tags.PROFILE.name())); - //set the real image (probably also the uri) - ImageHolder.applyTo(imageHolder, iv, DrawerImageLoader.Tags.PROFILE.name()); - } - - /** - * onProfileClickListener to notify onClick on the current profile image - */ - private View.OnClickListener onCurrentProfileClickListener = new View.OnClickListener() { - @Override - public void onClick(final View v) { - onProfileImageClick(v, true); - } - }; - - /** - * onProfileClickListener to notify onClick on a profile image - */ - private View.OnClickListener onProfileClickListener = new View.OnClickListener() { - @Override - public void onClick(final View v) { - onProfileImageClick(v, false); - } - }; - - /** - * calls the mOnAccountHEaderProfileImageListener and continues with the actions afterwards - * - * @param v - * @param current - */ - private void onProfileImageClick(View v, boolean current) { - IProfile profile = (IProfile) v.getTag(R.id.material_drawer_profile_header); - - boolean consumed = false; - if (mOnAccountHeaderProfileImageListener != null) { - consumed = mOnAccountHeaderProfileImageListener.onProfileImageClick(v, profile, current); - } - - //if the event was already consumed by the click don't continue. note that this will also stop the profile change event - if (!consumed) { - onProfileClick(v, current); - } - } - - /** - * onProfileLongClickListener to call the onProfileImageLongClick on the current profile image - */ - private View.OnLongClickListener onCurrentProfileLongClickListener = new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - if (mOnAccountHeaderProfileImageListener != null) { - IProfile profile = (IProfile) v.getTag(R.id.material_drawer_profile_header); - return mOnAccountHeaderProfileImageListener.onProfileImageLongClick(v, profile, true); - } - return false; - } - }; - - /** - * onProfileLongClickListener to call the onProfileImageLongClick on a profile image - */ - private View.OnLongClickListener onProfileLongClickListener = new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - if (mOnAccountHeaderProfileImageListener != null) { - IProfile profile = (IProfile) v.getTag(R.id.material_drawer_profile_header); - return mOnAccountHeaderProfileImageListener.onProfileImageLongClick(v, profile, false); - } - return false; - } - }; - - protected void onProfileClick(View v, boolean current) { - final IProfile profile = (IProfile) v.getTag(R.id.material_drawer_profile_header); - switchProfiles(profile); - - //reset the drawer content - resetDrawerContent(v.getContext()); - - //notify the MiniDrawer about the clicked profile (only if one exists and is hooked to the Drawer - if (mDrawer != null && mDrawer.getDrawerBuilder() != null && mDrawer.getDrawerBuilder().mMiniDrawer != null) { - mDrawer.getDrawerBuilder().mMiniDrawer.onProfileClick(); - } - - //notify about the changed profile - boolean consumed = false; - if (mOnAccountHeaderListener != null) { - consumed = mOnAccountHeaderListener.onProfileChanged(v, profile, current); - } - - if (!consumed) { - if (mOnProfileClickDrawerCloseDelay > 0) { - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - if (mDrawer != null) { - mDrawer.closeDrawer(); - } - } - }, mOnProfileClickDrawerCloseDelay); - } else { - if (mDrawer != null) { - mDrawer.closeDrawer(); - } - } - } - } - - /** - * get the current selection - * - * @return - */ - protected int getCurrentSelection() { - if (mCurrentProfile != null && mProfiles != null) { - int i = 0; - for (IProfile profile : mProfiles) { - if (profile == mCurrentProfile) { - return i; - } - i++; - } - } - return -1; - } - - /** - * onSelectionClickListener to notify the onClick on the checkbox - */ - private View.OnClickListener onSelectionClickListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - boolean consumed = false; - if (mOnAccountHeaderSelectionViewClickListener != null) { - consumed = mOnAccountHeaderSelectionViewClickListener.onClick(v, (IProfile) v.getTag(R.id.material_drawer_profile_header)); - } - - if (mAccountSwitcherArrow.getVisibility() == View.VISIBLE && !consumed) { - toggleSelectionList(v.getContext()); - } - } - }; - - /** - * helper method to toggle the collection - * - * @param ctx - */ - protected void toggleSelectionList(Context ctx) { - if (mDrawer != null) { - //if we already show the list. reset everything instead - if (mDrawer.switchedDrawerContent()) { - resetDrawerContent(ctx); - mSelectionListShown = false; - } else { - //build and set the drawer selection list - buildDrawerSelectionList(); - - // update the arrow image within the drawer - mAccountSwitcherArrow.clearAnimation(); - ViewCompat.animate(mAccountSwitcherArrow).rotation(180).start(); - //mAccountSwitcherArrow.setImageDrawable(new IconicsDrawable(ctx, MaterialDrawerFont.Icon.mdf_arrow_drop_up).sizeRes(R.dimen.material_drawer_account_header_dropdown).paddingRes(R.dimen.material_drawer_account_header_dropdown_padding).color(ColorHolder.color(mTextColor, ctx, R.attr.material_drawer_header_selection_text, R.color.material_drawer_header_selection_text))); - mSelectionListShown = true; - } - } - } - - /** - * helper method to build and set the drawer selection list - */ - protected void buildDrawerSelectionList() { - int selectedPosition = -1; - int position = 0; - ArrayList profileDrawerItems = new ArrayList<>(); - if (mProfiles != null) { - for (IProfile profile : mProfiles) { - if (profile == mCurrentProfile) { - if (mCurrentHiddenInList) { - continue; - } else { - selectedPosition = mDrawer.mDrawerBuilder.getItemAdapter().getGlobalPosition(position); - } - } - if (profile instanceof IDrawerItem) { - ((IDrawerItem) profile).withSetSelected(false); - profileDrawerItems.add((IDrawerItem) profile); - } - position = position + 1; - } - } - mDrawer.switchDrawerContent(onDrawerItemClickListener, onDrawerItemLongClickListener, profileDrawerItems, selectedPosition); - } - - /** - * onDrawerItemClickListener to catch the selection for the new profile! - */ - private Drawer.OnDrawerItemClickListener onDrawerItemClickListener = new Drawer.OnDrawerItemClickListener() { - @Override - public boolean onItemClick(final View view, int position, final IDrawerItem drawerItem) { - final boolean isCurrentSelectedProfile; - if (drawerItem != null && drawerItem instanceof IProfile && drawerItem.isSelectable()) { - isCurrentSelectedProfile = switchProfiles((IProfile) drawerItem); - } else { - isCurrentSelectedProfile = false; - } - - if (mResetDrawerOnProfileListClick) { - mDrawer.setOnDrawerItemClickListener(null); - } - - //wrap the onSelection call and the reset stuff within a handler to prevent lag - if (mResetDrawerOnProfileListClick && mDrawer != null && view != null && view.getContext() != null) { - resetDrawerContent(view.getContext()); - } - - //notify the MiniDrawer about the clicked profile (only if one exists and is hooked to the Drawer - if (mDrawer != null && mDrawer.getDrawerBuilder() != null && mDrawer.getDrawerBuilder().mMiniDrawer != null) { - mDrawer.getDrawerBuilder().mMiniDrawer.onProfileClick(); - } - - boolean consumed = false; - if (drawerItem != null && drawerItem instanceof IProfile) { - if (mOnAccountHeaderListener != null) { - consumed = mOnAccountHeaderListener.onProfileChanged(view, (IProfile) drawerItem, isCurrentSelectedProfile); - } - } - - //if a custom behavior was chosen via the CloseDrawerOnProfileListClick then use this. else react on the result of the onProfileChanged listener - if (mCloseDrawerOnProfileListClick != null) { - consumed = consumed && !mCloseDrawerOnProfileListClick; - } - - //totally custom handling of the drawer behavior as otherwise the selection of the profile list is set to the Drawer - if (mDrawer != null && !consumed) { - //close the drawer after click - mDrawer.mDrawerBuilder.closeDrawerDelayed(); - } - - //consume the event to prevent setting the clicked item as selected in the already switched item list - return true; - } - }; - - /** - * onDrawerItemLongClickListener to catch the longClick for a profile - */ - private Drawer.OnDrawerItemLongClickListener onDrawerItemLongClickListener = new Drawer.OnDrawerItemLongClickListener() { - @Override - public boolean onItemLongClick(View view, int position, IDrawerItem drawerItem) { - //if a longClickListener was defined use it - if (mOnAccountHeaderItemLongClickListener != null) { - final boolean isCurrentSelectedProfile; - isCurrentSelectedProfile = drawerItem != null && drawerItem.isSelected(); - - if (drawerItem != null && drawerItem instanceof IProfile) { - return mOnAccountHeaderItemLongClickListener.onProfileLongClick(view, (IProfile) drawerItem, isCurrentSelectedProfile); - } - } - return false; - } - }; - - /** - * helper method to reset the drawer content - */ - private void resetDrawerContent(Context ctx) { - if (mDrawer != null) { - mDrawer.resetDrawerContent(); - } - - mAccountSwitcherArrow.clearAnimation(); - ViewCompat.animate(mAccountSwitcherArrow).rotation(0).start(); - //mAccountSwitcherArrow.setImageDrawable(new IconicsDrawable(ctx, MaterialDrawerFont.Icon.mdf_arrow_drop_down).sizeRes(R.dimen.material_drawer_account_header_dropdown).paddingRes(R.dimen.material_drawer_account_header_dropdown_padding).color(ColorHolder.color(mTextColor, ctx, R.attr.material_drawer_header_selection_text, R.color.material_drawer_header_selection_text))); - } - - /** - * small helper class to update the header and the list - */ - protected void updateHeaderAndList() { - //recalculate the profiles - calculateProfiles(); - //update the profiles in the header - buildProfiles(); - //if we currently show the list add the new item directly to it - if (mSelectionListShown) { - buildDrawerSelectionList(); - } - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/Drawer.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/Drawer.java deleted file mode 100644 index 91446f13..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/Drawer.java +++ /dev/null @@ -1,1174 +0,0 @@ -package com.mikepenz.materialdrawer; - -import android.app.Activity; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.core.util.Pair; -import androidx.drawerlayout.widget.DrawerLayout; -import androidx.appcompat.app.ActionBarDrawerToggle; -import androidx.recyclerview.widget.RecyclerView; -import androidx.appcompat.widget.Toolbar; -import pl.droidsonroids.gif.GifDrawable; - -import android.view.View; -import android.widget.AdapterView; -import android.widget.FrameLayout; - -import com.mikepenz.fastadapter.FastAdapter; -import com.mikepenz.fastadapter.adapters.ModelAdapter; -import com.mikepenz.fastadapter.expandable.ExpandableExtension; -import com.mikepenz.fastadapter.select.SelectExtension; -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; -import com.mikepenz.materialdrawer.model.interfaces.Iconable; -import com.mikepenz.materialdrawer.model.interfaces.Nameable; -import com.mikepenz.materialize.Materialize; -import com.mikepenz.materialize.view.ScrimInsetsRelativeLayout; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * Created by mikepenz on 03.02.15. - */ -public class Drawer { - /** - * BUNDLE param to store the selection - */ - protected static final String BUNDLE_SELECTION = "_selection"; - protected static final String BUNDLE_SELECTION_APPENDED = "_selection_appended"; - protected static final String BUNDLE_STICKY_FOOTER_SELECTION = "bundle_sticky_footer_selection"; - protected static final String BUNDLE_STICKY_FOOTER_SELECTION_APPENDED = "bundle_sticky_footer_selection_appended"; - protected static final String BUNDLE_DRAWER_CONTENT_SWITCHED = "bundle_drawer_content_switched"; - protected static final String BUNDLE_DRAWER_CONTENT_SWITCHED_APPENDED = "bundle_drawer_content_switched_appended"; - - /** - * Per the design guidelines, you should show the drawer on launch until the user manually - * expands it. This shared preference tracks this. - */ - protected static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned"; - - /** - * Per the design guidelines, you should show the drawer on launch until the user manually - * expands it. This shared preference tracks this. - */ - protected static final String PREF_USER_OPENED_DRAWER_BY_DRAGGING = "navigation_drawer_dragged_open"; - - - protected final DrawerBuilder mDrawerBuilder; - private FrameLayout mContentView; - - /** - * the protected Constructor for the result - * - * @param drawerBuilder - */ - protected Drawer(DrawerBuilder drawerBuilder) { - this.mDrawerBuilder = drawerBuilder; - } - - /** - * the protected getter of the mDrawerBuilder - * only used internally to prevent the default behavior of some public methods - * - * @return - */ - protected DrawerBuilder getDrawerBuilder() { - return this.mDrawerBuilder; - } - - /** - * Get the DrawerLayout of the current drawer - * - * @return - */ - public DrawerLayout getDrawerLayout() { - return this.mDrawerBuilder.mDrawerLayout; - } - - /** - * Sets the toolbar which should be used in combination with the drawer - * This will handle the ActionBarDrawerToggle for you. - * Do not set this if you are in a sub activity and want to handle the back arrow on your own - * - * @param activity - * @param toolbar the toolbar which is used in combination with the drawer - */ - public void setToolbar(@NonNull Activity activity, @NonNull Toolbar toolbar) { - setToolbar(activity, toolbar, false); - } - - /** - * Sets the toolbar which should be used in combination with the drawer - * This will handle the ActionBarDrawerToggle for you. - * Do not set this if you are in a sub activity and want to handle the back arrow on your own - * - * @param activity - * @param toolbar the toolbar which is used in combination with the drawer - * @param recreateActionBarDrawerToggle defines if the ActionBarDrawerToggle needs to be recreated with the new set Toolbar - */ - public void setToolbar(@NonNull Activity activity, @NonNull Toolbar toolbar, boolean recreateActionBarDrawerToggle) { - this.mDrawerBuilder.mToolbar = toolbar; - this.mDrawerBuilder.handleDrawerNavigation(activity, recreateActionBarDrawerToggle); - } - - /** - * Add a custom ActionBarDrawerToggle which will be used in combination with this drawer. - * - * @param actionBarDrawerToggle - */ - public void setActionBarDrawerToggle(@NonNull ActionBarDrawerToggle actionBarDrawerToggle) { - this.mDrawerBuilder.mActionBarDrawerToggleEnabled = true; - this.mDrawerBuilder.mActionBarDrawerToggle = actionBarDrawerToggle; - this.mDrawerBuilder.handleDrawerNavigation(null, false); - } - - /** - * Open the drawer - */ - public void openDrawer() { - if (mDrawerBuilder.mDrawerLayout != null && mDrawerBuilder.mSliderLayout != null) { - mDrawerBuilder.mDrawerLayout.openDrawer(mDrawerBuilder.mDrawerGravity); - } - } - - /** - * close the drawer - */ - public void closeDrawer() { - if (mDrawerBuilder.mDrawerLayout != null) { - mDrawerBuilder.mDrawerLayout.closeDrawer(mDrawerBuilder.mDrawerGravity); - } - } - - /** - * Get the current state of the drawer. - * True if the drawer is currently open. - * - * @return - */ - public boolean isDrawerOpen() { - if (mDrawerBuilder.mDrawerLayout != null && mDrawerBuilder.mSliderLayout != null) { - return mDrawerBuilder.mDrawerLayout.isDrawerOpen(mDrawerBuilder.mDrawerGravity); - } - return false; - } - - - /** - * set the insetsFrameLayout to display the content in fullscreen - * under the statusBar and navigationBar - * - * @param fullscreen - */ - public void setFullscreen(boolean fullscreen) { - if (mDrawerBuilder.mMaterialize != null) { - mDrawerBuilder.mMaterialize.setFullscreen(fullscreen); - } - } - - /** - * get the Materialize object used to beautify your activity - * - * @return - */ - public Materialize getMaterialize() { - return mDrawerBuilder.mMaterialize; - } - - - /** - * gets the already generated MiniDrawer or creates a new one - * - * @return - */ - public MiniDrawer getMiniDrawer() { - if (mDrawerBuilder.mMiniDrawer == null) { - mDrawerBuilder.mMiniDrawer = new MiniDrawer().withDrawer(this).withAccountHeader(mDrawerBuilder.mAccountHeader); - } - return mDrawerBuilder.mMiniDrawer; - } - - /** - * get the slider layout of the current drawer. - * This is the layout containing the ListView - * - * @return - */ - public ScrimInsetsRelativeLayout getSlider() { - return mDrawerBuilder.mSliderLayout; - } - - /** - * get the container frameLayout of the current drawer - * - * @return - */ - public FrameLayout getContent() { - if (mContentView == null && this.mDrawerBuilder.mDrawerLayout != null) { - mContentView = (FrameLayout) this.mDrawerBuilder.mDrawerLayout.findViewById(R.id.content_layout); - } - return mContentView; - } - - /** - * get the listView of the current drawer - * - * @return - */ - public RecyclerView getRecyclerView() { - return mDrawerBuilder.mRecyclerView; - } - - /** - * get the FastAdapter of the current drawer - * - * @return - */ - public FastAdapter getAdapter() { - return mDrawerBuilder.mAdapter; - } - - /** - * get the HeaderAdapter of the current drawer - * - * @return - */ - public ModelAdapter getHeaderAdapter() { - return mDrawerBuilder.mHeaderAdapter; - } - - /** - * get the ItemAdapter of the current drawer - * - * @return - */ - public ModelAdapter getItemAdapter() { - return mDrawerBuilder.mItemAdapter; - } - - /** - * get the FooterAdapter of the current drawer - * - * @return - */ - public ModelAdapter getFooterAdapter() { - return mDrawerBuilder.mFooterAdapter; - } - - /** - * get the ExpandableExtension of the current drawer - * - * @return - */ - public ExpandableExtension getExpandableExtension() { - return mDrawerBuilder.mExpandableExtension; - } - - /** - * get all drawerItems of the current drawer - * - * @return - */ - public List getDrawerItems() { - return mDrawerBuilder.getItemAdapter().getAdapterItems(); - } - - /** - * get the Header View if set else NULL - * - * @return - */ - public View getHeader() { - return mDrawerBuilder.mHeaderView; - } - - public void setHeaderBackground(String headerBackgroundPath) { - if (headerBackgroundPath.endsWith(".gif")) { - try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - mDrawerBuilder.mAccountHeader.mAccountHeaderBuilder.mAccountHeaderBackground.setImageURI(null); - mDrawerBuilder.mAccountHeader.mAccountHeaderBuilder.mAccountHeaderBackground.setImageDrawable(new GifDrawable(headerBackgroundPath)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - else { - mDrawerBuilder.mAccountHeader.mAccountHeaderBuilder.mAccountHeaderBackground.setImageURI(Uri.parse(headerBackgroundPath)); - } - } - - public void setHeaderBackground(int headerBackgroundRes) { - mDrawerBuilder.mAccountHeader.mAccountHeaderBuilder.mAccountHeaderBackground.setImageResource(headerBackgroundRes); - } - - - /** - * get the StickyHeader View if set else NULL - * - * @return - */ - public View getStickyHeader() { - return mDrawerBuilder.mStickyHeaderView; - } - - /** - * method to replace a previous set header - * - * @param view - */ - public void setHeader(@NonNull View view) { - setHeader(view, true, true); - } - - /** - * method to replace a previous set header - * - * @param view - * @param divider - */ - public void setHeader(@NonNull View view, boolean divider) { - setHeader(view, true, divider); - } - - /** - * method to replace a previous set header - * - * @param view - * @param padding - * @param divider - */ - public void setHeader(@NonNull View view, boolean padding, boolean divider) { - setHeader(view, padding, divider, null); - } - - /** - * method to replace a previous set header - * - * @param view - * @param padding - * @param divider - * @param height - */ - public void setHeader(@NonNull View view, boolean padding, boolean divider, DimenHolder height) { - mDrawerBuilder.getHeaderAdapter().clear(); - if (padding) { - mDrawerBuilder.getHeaderAdapter().add(new ContainerDrawerItem().withView(view).withDivider(divider).withHeight(height).withViewPosition(ContainerDrawerItem.Position.TOP)); - } else { - mDrawerBuilder.getHeaderAdapter().add(new ContainerDrawerItem().withView(view).withDivider(divider).withHeight(height).withViewPosition(ContainerDrawerItem.Position.NONE)); - } - //we need to set the padding so the header starts on top - mDrawerBuilder.mRecyclerView.setPadding(mDrawerBuilder.mRecyclerView.getPaddingLeft(), 0, mDrawerBuilder.mRecyclerView.getPaddingRight(), mDrawerBuilder.mRecyclerView.getPaddingBottom()); - } - - /** - * method to remove the header of the list - */ - public void removeHeader() { - mDrawerBuilder.getHeaderAdapter().clear(); - //possibly there should be also a reset of the padding so the first item starts below the toolbar - } - - /** - * get the Footer View if set else NULL - * - * @return - */ - public View getFooter() { - return mDrawerBuilder.mFooterView; - } - - /** - * get the StickyFooter View if set else NULL - * - * @return - */ - public View getStickyFooter() { - return mDrawerBuilder.mStickyFooterView; - } - - /** - * get the StickyFooter Shadow View if set else NULL - * - * @return - */ - private View getStickyFooterShadow() { - return mDrawerBuilder.mStickyFooterShadowView; - } - - /** - * get the ActionBarDrawerToggle - * - * @return - */ - 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 - * - * @param drawerItem - * @return - */ - public int getPosition(@NonNull IDrawerItem drawerItem) { - return getPosition(drawerItem.getIdentifier()); - } - - /** - * calculates the position of an drawerItem. searching by it's identifier - * - * @param identifier - * @return - */ - public int getPosition(long identifier) { - return DrawerUtils.getPositionByIdentifier(mDrawerBuilder, identifier); - } - - /** - * returns the DrawerItem by the given identifier - * - * @param identifier - * @return - */ - public IDrawerItem getDrawerItem(long identifier) { - Pair res = getAdapter().getItemById(identifier); - if (res != null) { - return res.first; - } else { - return null; - } - } - - /** - * returns the found drawerItem by the given tag - * - * @param tag - * @return - */ - public IDrawerItem getDrawerItem(Object tag) { - return DrawerUtils.getDrawerItem(getDrawerItems(), tag); - } - - /** - * calculates the position of an drawerItem. searching by it's identifier - * - * @param drawerItem - * @return - */ - public int getStickyFooterPosition(@NonNull IDrawerItem drawerItem) { - return getStickyFooterPosition(drawerItem.getIdentifier()); - } - - /** - * calculates the position of an drawerItem inside the footer. searching by it's identfier - * - * @param identifier - * @return - */ - public int getStickyFooterPosition(long identifier) { - return DrawerUtils.getStickyFooterPositionByIdentifier(mDrawerBuilder, identifier); - } - - /** - * get the current position of the selected drawer element - * - * @return - */ - public int getCurrentSelectedPosition() { - return mDrawerBuilder.mAdapter.getSelections().size() == 0 ? -1 : mDrawerBuilder.mAdapter.getSelections().iterator().next(); - } - - /** - * get the current selected item identifier - * - * @return - */ - public long getCurrentSelection() { - IDrawerItem drawerItem = mDrawerBuilder.getDrawerItem(getCurrentSelectedPosition()); - if (drawerItem != null) { - return drawerItem.getIdentifier(); - } - return -1; - } - - /** - * get the current position of the selected sticky footer element - * - * @return - */ - public int getCurrentStickyFooterSelectedPosition() { - return mDrawerBuilder.mCurrentStickyFooterSelection; - } - - /** - * deselects all selected items - */ - public void deselect() { - getAdapter().deselect(); - } - - /** - * deselects the item with the given identifier - * - * @param identifier the identifier to search for - */ - public void deselect(long identifier) { - getAdapter().deselect(getPosition(identifier)); - } - - /** - * set the current selection in the drawer - * NOTE: This will trigger onDrawerItemSelected without a view! - * - * @param identifier the identifier to search for - */ - public void setSelection(long identifier) { - setSelection(identifier, true); - } - - /** - * set the current selection in the drawer - * NOTE: This will trigger onDrawerItemSelected without a view if you pass fireOnClick = true; - * - * @param identifier the identifier to search for - * @param fireOnClick true if the click listener should be called - */ - public void setSelection(long identifier, boolean fireOnClick) { - SelectExtension select = getAdapter().getExtension(SelectExtension.class); - if (select != null) { - select.deselect(); - select.selectByIdentifier(identifier, false, true); - - //we also have to call the general notify - Pair res = getAdapter().getItemById(identifier); - if (res != null) { - Integer position = res.second; - notifySelect(position != null ? position : -1, fireOnClick); - } - } - } - - /** - * set the current selection in the footer of the drawer - * NOTE: This will trigger onDrawerItemSelected without a view if you pass fireOnClick = true; - * - * @param identifier the identifier to search for - * @param fireOnClick true if the click listener should be called - */ - public void setStickyFooterSelection(long identifier, boolean fireOnClick) { - setStickyFooterSelectionAtPosition(getStickyFooterPosition(identifier), fireOnClick); - } - - /** - * set the current selection in the drawer - * NOTE: This will trigger onDrawerItemSelected without a view! - * - * @param drawerItem the drawerItem to select (this requires a set identifier) - */ - public void setSelection(@NonNull IDrawerItem drawerItem) { - setSelection(drawerItem.getIdentifier(), true); - } - - /** - * set the current selection in the drawer - * NOTE: This will trigger onDrawerItemSelected without a view if you pass fireOnClick = true; - * - * @param drawerItem the drawerItem to select (this requires a set identifier) - * @param fireOnClick true if the click listener should be called - */ - public void setSelection(@NonNull IDrawerItem drawerItem, boolean fireOnClick) { - setSelection(drawerItem.getIdentifier(), fireOnClick); - } - - /** - * set the current selection in the drawer - * NOTE: This will trigger onDrawerItemSelected without a view! - * - * @param position the position to select - */ - public boolean setSelectionAtPosition(int position) { - return setSelectionAtPosition(position, true); - } - - /* - * set the current selection in the drawer - * NOTE: this also deselects all other selections. if you do not want this. use the direct api of the adater .getAdapter().select(position, fireOnClick) - * NOTE: This will trigger onDrawerItemSelected without a view if you pass fireOnClick = true; - * - * @param position - * @param fireOnClick - * @return true if the event was consumed - */ - public boolean setSelectionAtPosition(int position, boolean fireOnClick) { - if (mDrawerBuilder.mRecyclerView != null) { - SelectExtension select = getAdapter().getExtension(SelectExtension.class); - if (select != null) { - select.deselect(); - select.select(position, false); - notifySelect(position, fireOnClick); - } - } - return false; - } - - private void notifySelect(int position, boolean fireOnClick) { - 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 - mDrawerBuilder.resetStickyFooterSelection(); - } - - /** - * set the current selection in the footer of the drawer - * NOTE: This will trigger onDrawerItemSelected without a view! - * - * @param position the position to select - */ - public void setStickyFooterSelectionAtPosition(int position) { - setStickyFooterSelectionAtPosition(position, true); - } - - /** - * set the current selection in the footer of the drawer - * NOTE: This will trigger onDrawerItemSelected without a view if you pass fireOnClick = true; - * - * @param position - * @param fireOnClick - */ - public void setStickyFooterSelectionAtPosition(int position, boolean fireOnClick) { - DrawerUtils.setStickyFooterSelection(mDrawerBuilder, position, fireOnClick); - } - - /** - * update a specific drawer item :D - * automatically identified by its id - * - * @param drawerItem - */ - public void updateItem(@NonNull IDrawerItem drawerItem) { - updateItemAtPosition(drawerItem, getPosition(drawerItem)); - } - - /** - * update the badge for a specific drawerItem - * identified by its id - * - * @param identifier - * @param badge - */ - public void updateBadge(long identifier, StringHolder badge) { - IDrawerItem drawerItem = getDrawerItem(identifier); - if (drawerItem instanceof Badgeable) { - Badgeable badgeable = (Badgeable) drawerItem; - badgeable.withBadge(badge); - updateItem((IDrawerItem) badgeable); - } - } - - /** - * update the name for a specific drawerItem - * identified by its id - * - * @param identifier - * @param name - */ - public void updateName(long identifier, StringHolder name) { - IDrawerItem drawerItem = getDrawerItem(identifier); - if (drawerItem instanceof Nameable) { - Nameable pdi = (Nameable) drawerItem; - pdi.withName(name); - updateItem((IDrawerItem) pdi); - } - } - - /** - * update the name for a specific drawerItem - * identified by its id - * - * @param identifier - * @param image - */ - public void updateIcon(long identifier, ImageHolder image) { - IDrawerItem drawerItem = getDrawerItem(identifier); - if (drawerItem instanceof Iconable) { - Iconable pdi = (Iconable) drawerItem; - pdi.withIcon(image); - updateItem((IDrawerItem) pdi); - } - } - - /** - * Update a drawerItem at a specific position - * - * @param drawerItem - * @param position - */ - public void updateItemAtPosition(@NonNull IDrawerItem drawerItem, int position) { - if (mDrawerBuilder.checkDrawerItem(position, false)) { - mDrawerBuilder.getItemAdapter().set(position, drawerItem); - } - } - - /** - * Add a drawerItem at the end - * - * @param drawerItem - */ - public void addItem(@NonNull IDrawerItem drawerItem) { - mDrawerBuilder.getItemAdapter().add(drawerItem); - } - - /** - * Add a drawerItem at a specific position - * - * @param drawerItem - * @param position - */ - public void addItemAtPosition(@NonNull IDrawerItem drawerItem, int position) { - mDrawerBuilder.getItemAdapter().add(position, drawerItem); - } - - /** - * Set a drawerItem at a specific position - * - * @param drawerItem - * @param position - */ - public void setItemAtPosition(@NonNull IDrawerItem drawerItem, int position) { - mDrawerBuilder.getItemAdapter().add(position, drawerItem); - } - - /** - * Remove a drawerItem at a specific position - * - * @param position - */ - public void removeItemByPosition(int position) { - if (mDrawerBuilder.checkDrawerItem(position, false)) { - mDrawerBuilder.getItemAdapter().remove(position); - } - } - - /** - * Remove a drawerItem by the identifier - * - * @param identifier - */ - public void removeItem(long identifier) { - getItemAdapter().removeByIdentifier(identifier); - } - - /** - * remove a list of drawerItems by ther identifiers - * - * @param identifiers - */ - public void removeItems(long... identifiers) { - if (identifiers != null) { - for (long identifier : identifiers) { - removeItem(identifier); - } - } - } - - /** - * Removes all items from drawer - */ - public void removeAllItems() { - mDrawerBuilder.getItemAdapter().clear(); - } - - /** - * add new Items to the current DrawerItem List - * - * @param drawerItems - */ - public void addItems(@NonNull IDrawerItem... drawerItems) { - mDrawerBuilder.getItemAdapter().add(drawerItems); - } - - /** - * add new items to the current DrawerItem list at a specific position - * - * @param position - * @param drawerItems - */ - public void addItemsAtPosition(int position, @NonNull IDrawerItem... drawerItems) { - mDrawerBuilder.getItemAdapter().add(position, drawerItems); - } - - /** - * Replace the current DrawerItems with a new ArrayList of items - * - * @param drawerItems - */ - public void setItems(@NonNull List drawerItems) { - setItems(drawerItems, false); - } - - /** - * replace the current DrawerItems with the new ArrayList. - * - * @param drawerItems - * @param switchedItems - */ - private void setItems(@NonNull List drawerItems, boolean switchedItems) { - //if we are currently at a switched list set the new reference - if (originalDrawerItems != null && !switchedItems) { - originalDrawerItems = drawerItems; - } - mDrawerBuilder.getItemAdapter().setNewList(drawerItems); - } - - /** - * update a specific footerDrawerItem :D - * automatically identified by it's id - * - * @param drawerItem - */ - public void updateStickyFooterItem(@NonNull IDrawerItem drawerItem) { - updateStickyFooterItemAtPosition(drawerItem, getStickyFooterPosition(drawerItem)); - } - - /** - * update a footerDrawerItem at a specific position - * - * @param drawerItem - * @param position - */ - public void updateStickyFooterItemAtPosition(@NonNull IDrawerItem drawerItem, int position) { - if (mDrawerBuilder.mStickyDrawerItems != null && mDrawerBuilder.mStickyDrawerItems.size() > position) { - mDrawerBuilder.mStickyDrawerItems.set(position, drawerItem); - } - - DrawerUtils.rebuildStickyFooterView(mDrawerBuilder); - } - - - /** - * Add a footerDrawerItem at the end - * - * @param drawerItem - */ - public void addStickyFooterItem(@NonNull IDrawerItem drawerItem) { - if (mDrawerBuilder.mStickyDrawerItems == null) { - mDrawerBuilder.mStickyDrawerItems = new ArrayList<>(); - } - mDrawerBuilder.mStickyDrawerItems.add(drawerItem); - - DrawerUtils.rebuildStickyFooterView(mDrawerBuilder); - } - - /** - * Add a footerDrawerItem at a specific position - * - * @param drawerItem - * @param position - */ - public void addStickyFooterItemAtPosition(@NonNull IDrawerItem drawerItem, int position) { - if (mDrawerBuilder.mStickyDrawerItems == null) { - mDrawerBuilder.mStickyDrawerItems = new ArrayList<>(); - } - mDrawerBuilder.mStickyDrawerItems.add(position, drawerItem); - - DrawerUtils.rebuildStickyFooterView(mDrawerBuilder); - } - - /** - * Set a footerDrawerItem at a specific position - * - * @param drawerItem - * @param position - */ - public void setStickyFooterItemAtPosition(@NonNull IDrawerItem drawerItem, int position) { - if (mDrawerBuilder.mStickyDrawerItems != null && mDrawerBuilder.mStickyDrawerItems.size() > position) { - mDrawerBuilder.mStickyDrawerItems.set(position, drawerItem); - } - - DrawerUtils.rebuildStickyFooterView(mDrawerBuilder); - } - - - /** - * Remove a footerDrawerItem at a specific position - * - * @param position - */ - public void removeStickyFooterItemAtPosition(int position) { - if (mDrawerBuilder.mStickyDrawerItems != null && mDrawerBuilder.mStickyDrawerItems.size() > position) { - mDrawerBuilder.mStickyDrawerItems.remove(position); - } - - DrawerUtils.rebuildStickyFooterView(mDrawerBuilder); - } - - /** - * Removes all footerItems from drawer - */ - public void removeAllStickyFooterItems() { - if (mDrawerBuilder.mStickyDrawerItems != null) { - mDrawerBuilder.mStickyDrawerItems.clear(); - } - if (mDrawerBuilder.mStickyFooterView != null) { - mDrawerBuilder.mStickyFooterView.setVisibility(View.GONE); - } - } - - /** - * setter for the OnDrawerItemClickListener - * - * @param onDrawerItemClickListener - */ - public void setOnDrawerItemClickListener(OnDrawerItemClickListener onDrawerItemClickListener) { - mDrawerBuilder.mOnDrawerItemClickListener = onDrawerItemClickListener; - } - - public void setOnDrawerNavigationListener(OnDrawerNavigationListener onDrawerNavigationListener) { //WBE - mDrawerBuilder.mOnDrawerNavigationListener = onDrawerNavigationListener; - } - - /** - * method to get the OnDrawerItemClickListener - * - * @return - */ - public OnDrawerItemClickListener getOnDrawerItemClickListener() { - return mDrawerBuilder.mOnDrawerItemClickListener; - } - - /** - * method to get the OnDrawerNavigationListener - * - * @return - */ - public OnDrawerNavigationListener getOnDrawerNavigationListener() { //WBE - return mDrawerBuilder.mOnDrawerNavigationListener; - } - - /** - * setter for the OnDrawerItemLongClickListener - * - * @param onDrawerItemLongClickListener - */ - public void setOnDrawerItemLongClickListener(OnDrawerItemLongClickListener onDrawerItemLongClickListener) { - mDrawerBuilder.mOnDrawerItemLongClickListener = onDrawerItemLongClickListener; - } - - /** - * method to get the OnDrawerItemLongClickListener - * - * @return - */ - public OnDrawerItemLongClickListener getOnDrawerItemLongClickListener() { - return mDrawerBuilder.mOnDrawerItemLongClickListener; - } - - //variables to store and remember the original list of the drawer - private Drawer.OnDrawerItemClickListener originalOnDrawerItemClickListener; - private Drawer.OnDrawerItemLongClickListener originalOnDrawerItemLongClickListener; - private List originalDrawerItems; - private Bundle originalDrawerState; - - /** - * information if the current drawer content is switched by alternative content (profileItems) - * - * @return - */ - public boolean switchedDrawerContent() { - return !(originalOnDrawerItemClickListener == null && originalDrawerItems == null && originalDrawerState == null); - } - - /** - * get the original list of drawerItems - * - * @return - */ - public List getOriginalDrawerItems() { - return originalDrawerItems; - } - - /** - * method to switch the drawer content to new elements - * - * @param onDrawerItemClickListener - * @param drawerItems - * @param drawerSelection - */ - public void switchDrawerContent(@NonNull OnDrawerItemClickListener onDrawerItemClickListener, OnDrawerItemLongClickListener onDrawerItemLongClickListener, @NonNull List drawerItems, int drawerSelection) { - //just allow a single switched drawer - if (!switchedDrawerContent()) { - //save out previous values - originalOnDrawerItemClickListener = getOnDrawerItemClickListener(); - originalOnDrawerItemLongClickListener = getOnDrawerItemLongClickListener(); - originalDrawerState = getAdapter().saveInstanceState(new Bundle()); - mDrawerBuilder.mExpandableExtension.collapse(false); - originalDrawerItems = getDrawerItems(); - } - - //set the new items - setOnDrawerItemClickListener(onDrawerItemClickListener); - setOnDrawerItemLongClickListener(onDrawerItemLongClickListener); - setItems(drawerItems, true); - setSelectionAtPosition(drawerSelection, false); - - if (!mDrawerBuilder.mKeepStickyItemsVisible) { - //hide stickyFooter and it's shadow - if (getStickyFooter() != null) { - getStickyFooter().setVisibility(View.GONE); - } - if (getStickyFooterShadow() != null) { - getStickyFooterShadow().setVisibility(View.GONE); - } - } - } - - /** - * helper method to reset to the original drawerContent - */ - public void resetDrawerContent() { - if (switchedDrawerContent()) { - //set the new items - setOnDrawerItemClickListener(originalOnDrawerItemClickListener); - setOnDrawerItemLongClickListener(originalOnDrawerItemLongClickListener); - setItems(originalDrawerItems, true); - getAdapter().withSavedInstanceState(originalDrawerState); - //remove the references - originalOnDrawerItemClickListener = null; - originalOnDrawerItemLongClickListener = null; - originalDrawerItems = null; - originalDrawerState = null; - - //if we switch back scroll back to the top - mDrawerBuilder.mRecyclerView.smoothScrollToPosition(0); - - //show the stickyFooter and it's shadow again - if (getStickyFooter() != null) { - getStickyFooter().setVisibility(View.VISIBLE); - } - if (getStickyFooterShadow() != null) { - getStickyFooterShadow().setVisibility(View.VISIBLE); - } - - //if we currently show the accountHeader selection list make sure to reset this attr - if (mDrawerBuilder.mAccountHeader != null && mDrawerBuilder.mAccountHeader.mAccountHeaderBuilder != null) { - mDrawerBuilder.mAccountHeader.mAccountHeaderBuilder.mSelectionListShown = false; - } - } - } - - /** - * add the values to the bundle for saveInstanceState - * - * @param savedInstanceState - * @return - */ - public Bundle saveInstanceState(Bundle savedInstanceState) { - if (savedInstanceState != null) { - if (!mDrawerBuilder.mAppended) { - savedInstanceState = mDrawerBuilder.mAdapter.saveInstanceState(savedInstanceState, BUNDLE_SELECTION); - savedInstanceState.putInt(BUNDLE_STICKY_FOOTER_SELECTION, mDrawerBuilder.mCurrentStickyFooterSelection); - savedInstanceState.putBoolean(BUNDLE_DRAWER_CONTENT_SWITCHED, switchedDrawerContent()); - } else { - savedInstanceState = mDrawerBuilder.mAdapter.saveInstanceState(savedInstanceState, BUNDLE_SELECTION_APPENDED); - savedInstanceState.putInt(BUNDLE_STICKY_FOOTER_SELECTION_APPENDED, mDrawerBuilder.mCurrentStickyFooterSelection); - savedInstanceState.putBoolean(BUNDLE_DRAWER_CONTENT_SWITCHED_APPENDED, switchedDrawerContent()); - } - } - return savedInstanceState; - } - - - public interface OnDrawerNavigationListener { - /** - * @param clickedView - * @return true if the event was consumed - */ - boolean onNavigationClickListener(View clickedView); - } - - public interface OnDrawerItemClickListener { - /** - * @param view - * @param position - * @param drawerItem - * @return true if the event was consumed - */ - boolean onItemClick(View view, int position, IDrawerItem drawerItem); - } - - public interface OnDrawerItemLongClickListener { - /** - * @param view - * @param position - * @param drawerItem - * @return true if the event was consumed - */ - boolean onItemLongClick(View view, int position, IDrawerItem drawerItem); - } - - public interface OnDrawerListener { - /** - * @param drawerView - */ - void onDrawerOpened(View drawerView); - - /** - * @param drawerView - */ - void onDrawerClosed(View drawerView); - - /** - * @param drawerView - * @param slideOffset - */ - void onDrawerSlide(View drawerView, float slideOffset); - } - - public interface OnDrawerItemSelectedListener { - /** - * @param parent - * @param view - * @param position - * @param id - * @param drawerItem - */ - void onItemSelected(AdapterView parent, View view, int position, long id, IDrawerItem drawerItem); - - /** - * @param parent - */ - void onNothingSelected(AdapterView parent); - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/DrawerBuilder.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/DrawerBuilder.java deleted file mode 100644 index 6959ae48..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/DrawerBuilder.java +++ /dev/null @@ -1,1899 +0,0 @@ -package com.mikepenz.materialdrawer; - -import android.app.Activity; -import android.content.SharedPreferences; -import android.content.res.Configuration; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.os.Bundle; -import android.os.Handler; -import android.preference.PreferenceManager; -import androidx.annotation.ColorInt; -import androidx.annotation.ColorRes; -import androidx.annotation.DimenRes; -import androidx.annotation.DrawableRes; -import androidx.annotation.IdRes; -import androidx.annotation.LayoutRes; -import androidx.annotation.MenuRes; -import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; -import androidx.core.view.GravityCompat; -import androidx.core.view.ViewCompat; -import androidx.drawerlayout.widget.DrawerLayout; -import androidx.appcompat.app.ActionBarDrawerToggle; -import androidx.appcompat.view.SupportMenuInflater; -import androidx.appcompat.view.menu.MenuBuilder; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.appcompat.widget.Toolbar; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.FrameLayout; -import android.widget.LinearLayout; - -import com.mikepenz.fastadapter.FastAdapter; -import com.mikepenz.fastadapter.IAdapter; -import com.mikepenz.fastadapter.IAdapterExtension; -import com.mikepenz.fastadapter.IExpandable; -import com.mikepenz.fastadapter.IItemAdapter; -import com.mikepenz.fastadapter.adapters.ItemAdapter; -import com.mikepenz.fastadapter.adapters.ModelAdapter; -import com.mikepenz.fastadapter.expandable.ExpandableExtension; -import com.mikepenz.fastadapter.listeners.OnClickListener; -import com.mikepenz.fastadapter.listeners.OnLongClickListener; -import com.mikepenz.fastadapter.utils.DefaultIdDistributor; -import com.mikepenz.fastadapter.utils.DefaultIdDistributorImpl; -import com.mikepenz.iconics.utils.Utils; -import com.mikepenz.materialdrawer.holder.DimenHolder; -import com.mikepenz.materialdrawer.model.AbstractDrawerItem; -import com.mikepenz.materialdrawer.model.DividerDrawerItem; -import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; -import com.mikepenz.materialdrawer.model.SecondaryDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.Selectable; -import com.mikepenz.materialdrawer.util.DrawerUIUtils; -import com.mikepenz.materialize.Materialize; -import com.mikepenz.materialize.MaterializeBuilder; -import com.mikepenz.materialize.util.UIUtils; -import com.mikepenz.materialize.view.ScrimInsetsRelativeLayout; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -/** - * Created by mikepenz on 23.05.15. - */ -public class DrawerBuilder { - - // some internal vars - // variable to check if a builder is only used once - protected boolean mUsed = false; - protected int mCurrentStickyFooterSelection = -1; - protected boolean mAppended = false; - - // the activity to use - protected Activity mActivity; - protected RecyclerView.LayoutManager mLayoutManager; - protected ViewGroup mRootView; - protected Materialize mMaterialize; - public final DefaultIdDistributor idDistributor = new DefaultIdDistributorImpl(); - - /** - * default constructor - */ - public DrawerBuilder() { - getAdapter(); - } - - /** - * Construct a Drawer by passing the activity to use for the generation - * - * @param activity current activity which will contain the drawer - */ - public DrawerBuilder(@NonNull Activity activity) { - this.mRootView = (ViewGroup) activity.findViewById(android.R.id.content); - this.mActivity = activity; - this.mLayoutManager = new LinearLayoutManager(mActivity); - getAdapter(); - } - - /** - * Sets the activity which will be generated for the generation - * The activity is required and will be used to inflate the content in. - * After generation it is set to null to prevent a memory leak. - * - * @param activity current activity which will contain the drawer - */ - public DrawerBuilder withActivity(@NonNull Activity activity) { - this.mRootView = (ViewGroup) activity.findViewById(android.R.id.content); - this.mActivity = activity; - this.mLayoutManager = new LinearLayoutManager(mActivity); - return this; - } - - /** - * Sets the rootView which will host the DrawerLayout - * The content of this view will be extracted and added as the new content inside the drawerLayout - * - * @param rootView a view which will get switched out by the DrawerLayout and added as its child - */ - public DrawerBuilder withRootView(@NonNull ViewGroup rootView) { - this.mRootView = rootView; - - //disable the translucent statusBar we don't need it - withTranslucentStatusBar(false); - - return this; - } - - /** - * Sets the rootView which will host the DrawerLayout - * The content of this view will be extracted and added as the new content inside the drawerLayout - * - * @param rootViewRes the id of a view which will get switched out by the DrawerLayout and added as its child - */ - public DrawerBuilder withRootView(@IdRes int rootViewRes) { - if (mActivity == null) { - throw new RuntimeException("please pass an activity first to use this call"); - } - - return withRootView((ViewGroup) mActivity.findViewById(rootViewRes)); - } - - // set non translucent statusBar mode - protected boolean mTranslucentStatusBar = true; - - /** - * Sets that the view which hosts the DrawerLayout should have a translucent statusBar - * This is true by default, so it's possible to display the drawer under the statusBar - * - * @param translucentStatusBar sets whether the statusBar is transparent (and the drawer is displayed under it) or not - */ - public DrawerBuilder withTranslucentStatusBar(boolean translucentStatusBar) { - this.mTranslucentStatusBar = translucentStatusBar; - return this; - } - - // set if we want to display the specific Drawer below the statusBar - protected Boolean mDisplayBelowStatusBar; - - /** - * Sets that the slider of this Drawer should be displayed below the statusBar even with a translucentStatusBar - * - * @param displayBelowStatusBar sets wheter the slider of the drawer is displayed below the statusBar or not - */ - public DrawerBuilder withDisplayBelowStatusBar(boolean displayBelowStatusBar) { - this.mDisplayBelowStatusBar = displayBelowStatusBar; - return this; - } - - //defines if we want a inner shadow (used in with the MiniDrawer) - private boolean mInnerShadow = false; - - /** - * sets if the drawer should show an inner shadow or not - * - * @param innerShadow sets wheter the drawer should display an inner shadow or not - * @return - */ - public DrawerBuilder withInnerShadow(boolean innerShadow) { - this.mInnerShadow = innerShadow; - return this; - } - - // the toolbar of the activity - protected Toolbar mToolbar; - - /** - * Sets the toolbar which should be used in combination with the drawer - * This will handle the ActionBarDrawerToggle for you. - * Do not set this if you are in a sub activity and want to handle the back arrow on your own - * - * @param toolbar the toolbar which is used in combination with the drawer - */ - public DrawerBuilder withToolbar(@NonNull Toolbar toolbar) { - this.mToolbar = toolbar; - return this; - } - - // set non translucent NavigationBar mode - protected boolean mTranslucentNavigationBar = false; - - /** - * Set to true if you use a translucent NavigationBar - * - * @param translucentNavigationBar - * @return - */ - public DrawerBuilder withTranslucentNavigationBar(boolean translucentNavigationBar) { - this.mTranslucentNavigationBar = translucentNavigationBar; - - //if we disable the translucentNavigationBar it should be disabled at all - if (!translucentNavigationBar) { - this.mTranslucentNavigationBarProgrammatically = false; - } - - return this; - } - - // set to disable the translucent statusBar Programmatically - protected boolean mTranslucentNavigationBarProgrammatically = false; - - /** - * set this to true if you want a translucent navigation bar. - * - * @param translucentNavigationBarProgrammatically - * @return - */ - public DrawerBuilder withTranslucentNavigationBarProgrammatically(boolean translucentNavigationBarProgrammatically) { - this.mTranslucentNavigationBarProgrammatically = translucentNavigationBarProgrammatically; - //if we enable the programmatically translucent navigationBar we want also the normal navigationBar behavior - if (translucentNavigationBarProgrammatically) { - this.mTranslucentNavigationBar = true; - } - return this; - } - - - // set non translucent NavigationBar mode - protected boolean mFullscreen = false; - - /** - * Set to true if the used theme has a translucent statusBar - * and navigationBar and you want to manage the padding on your own. - * - * @param fullscreen - * @return - */ - public DrawerBuilder withFullscreen(boolean fullscreen) { - this.mFullscreen = fullscreen; - - if (fullscreen) { - withTranslucentStatusBar(true); - withTranslucentNavigationBar(false); - } - - return this; - } - - // set to no systemUI visible mode - protected boolean mSystemUIHidden = false; - - /** - * Set to true if you use your app in complete fullscreen mode - * with hidden statusBar and navigationBar - * - * @param systemUIHidden - * @return - */ - public DrawerBuilder withSystemUIHidden(boolean systemUIHidden) { - this.mSystemUIHidden = systemUIHidden; - - if (systemUIHidden) { - withFullscreen(systemUIHidden); - } - - return this; - } - - - // a custom view to be used instead of everything else - protected View mCustomView; - - /** - * Pass a custom view if you need a completely custom drawer - * content - * - * @param customView - * @return - */ - public DrawerBuilder withCustomView(@NonNull View customView) { - this.mCustomView = customView; - return this; - } - - // the drawerLayout to use - protected DrawerLayout mDrawerLayout; - protected ScrimInsetsRelativeLayout mSliderLayout; - - /** - * Pass a custom DrawerLayout which will be used. - * NOTE: This requires the same structure as the drawer.xml - * - * @param drawerLayout - * @return - */ - public DrawerBuilder withDrawerLayout(@NonNull DrawerLayout drawerLayout) { - this.mDrawerLayout = drawerLayout; - return this; - } - - /** - * Pass a custom DrawerLayout Resource which will be used. - * NOTE: This requires the same structure as the drawer.xml - * - * @param resLayout - * @return - */ - public DrawerBuilder withDrawerLayout(@LayoutRes int resLayout) { - if (mActivity == null) { - throw new RuntimeException("please pass an activity first to use this call"); - } - - if (resLayout != -1) { - this.mDrawerLayout = (DrawerLayout) mActivity.getLayoutInflater().inflate(resLayout, mRootView, false); - } else { - if (Build.VERSION.SDK_INT < 21) { - this.mDrawerLayout = (DrawerLayout) mActivity.getLayoutInflater().inflate(R.layout.material_drawer_fits_not, mRootView, false); - } else { - this.mDrawerLayout = (DrawerLayout) mActivity.getLayoutInflater().inflate(R.layout.material_drawer, mRootView, false); - } - } - - return this; - } - - //the background color for the slider - protected int mSliderBackgroundColor = 0; - protected int mSliderBackgroundColorRes = -1; - protected Drawable mSliderBackgroundDrawable = null; - protected int mSliderBackgroundDrawableRes = -1; - - /** - * Set the background color for the Slider. - * This is the view containing the list. - * - * @param sliderBackgroundColor - * @return - */ - public DrawerBuilder withSliderBackgroundColor(@ColorInt int sliderBackgroundColor) { - this.mSliderBackgroundColor = sliderBackgroundColor; - return this; - } - - /** - * Set the background color for the Slider from a Resource. - * This is the view containing the list. - * - * @param sliderBackgroundColorRes - * @return - */ - public DrawerBuilder withSliderBackgroundColorRes(@ColorRes int sliderBackgroundColorRes) { - this.mSliderBackgroundColorRes = sliderBackgroundColorRes; - return this; - } - - - /** - * Set the background drawable for the Slider. - * This is the view containing the list. - * - * @param sliderBackgroundDrawable - * @return - */ - public DrawerBuilder withSliderBackgroundDrawable(@NonNull Drawable sliderBackgroundDrawable) { - this.mSliderBackgroundDrawable = sliderBackgroundDrawable; - return this; - } - - - /** - * Set the background drawable for the Slider from a Resource. - * This is the view containing the list. - * - * @param sliderBackgroundDrawableRes - * @return - */ - public DrawerBuilder withSliderBackgroundDrawableRes(@DrawableRes int sliderBackgroundDrawableRes) { - this.mSliderBackgroundDrawableRes = sliderBackgroundDrawableRes; - return this; - } - - //the width of the drawer - protected int mDrawerWidth = -1; - - /** - * Set the DrawerBuilder width with a pixel value - * - * @param drawerWidthPx - * @return - */ - public DrawerBuilder withDrawerWidthPx(int drawerWidthPx) { - this.mDrawerWidth = drawerWidthPx; - return this; - } - - /** - * Set the DrawerBuilder width with a dp value - * - * @param drawerWidthDp - * @return - */ - public DrawerBuilder withDrawerWidthDp(int drawerWidthDp) { - if (mActivity == null) { - throw new RuntimeException("please pass an activity first to use this call"); - } - - this.mDrawerWidth = Utils.convertDpToPx(mActivity, drawerWidthDp); - return this; - } - - /** - * Set the DrawerBuilder width with a dimension resource - * - * @param drawerWidthRes - * @return - */ - public DrawerBuilder withDrawerWidthRes(@DimenRes int drawerWidthRes) { - if (mActivity == null) { - throw new RuntimeException("please pass an activity first to use this call"); - } - - this.mDrawerWidth = mActivity.getResources().getDimensionPixelSize(drawerWidthRes); - return this; - } - - //the gravity of the drawer - protected Integer mDrawerGravity = GravityCompat.START; - - /** - * Set the gravity for the drawer. START, LEFT | RIGHT, END - * - * @param gravity - * @return - */ - public DrawerBuilder withDrawerGravity(int gravity) { - this.mDrawerGravity = gravity; - return this; - } - - //the account selection header to use - protected AccountHeader mAccountHeader; - protected boolean mAccountHeaderSticky = false; - - /** - * Add a AccountSwitcherHeader which will be used in this drawer instance. - * NOTE: This will overwrite any set headerView. - * - * @param accountHeader - * @return - */ - public DrawerBuilder withAccountHeader(@NonNull AccountHeader accountHeader) { - return withAccountHeader(accountHeader, false); - } - - /** - * Add a AccountSwitcherHeader which will be used in this drawer instance. Pass true if it should be sticky - * NOTE: This will overwrite any set headerView or stickyHeaderView (depends on the boolean). - * - * @param accountHeader - * @param accountHeaderSticky - * @return - */ - public DrawerBuilder withAccountHeader(@NonNull AccountHeader accountHeader, boolean accountHeaderSticky) { - this.mAccountHeader = accountHeader; - this.mAccountHeaderSticky = accountHeaderSticky; - return this; - } - - // enable/disable the actionBarDrawerToggle animation - protected boolean mAnimateActionBarDrawerToggle = false; - - /** - * Set this to true if you want the ActionBarDrawerToggle to be animated. - * NOTE: This will only work if the built in ActionBarDrawerToggle is used. - * Enable it by setting withActionBarDrawerToggle to true - * - * @param actionBarDrawerToggleAnimated - * @return - */ - public DrawerBuilder withActionBarDrawerToggleAnimated(boolean actionBarDrawerToggleAnimated) { - this.mAnimateActionBarDrawerToggle = actionBarDrawerToggleAnimated; - return this; - } - - - // enable the drawer toggle / if withActionBarDrawerToggle we will autoGenerate it - protected boolean mActionBarDrawerToggleEnabled = true; - - /** - * Set this to false if you don't need the included ActionBarDrawerToggle - * - * @param actionBarDrawerToggleEnabled - * @return - */ - public DrawerBuilder withActionBarDrawerToggle(boolean actionBarDrawerToggleEnabled) { - this.mActionBarDrawerToggleEnabled = actionBarDrawerToggleEnabled; - return this; - } - - // drawer toggle - protected ActionBarDrawerToggle mActionBarDrawerToggle; - - /** - * Add a custom ActionBarDrawerToggle which will be used in combination with this drawer. - * - * @param actionBarDrawerToggle - * @return - */ - public DrawerBuilder withActionBarDrawerToggle(@NonNull ActionBarDrawerToggle actionBarDrawerToggle) { - this.mActionBarDrawerToggleEnabled = true; - this.mActionBarDrawerToggle = actionBarDrawerToggle; - return this; - } - - // defines if the drawer should scroll to top after click - protected boolean mScrollToTopAfterClick = false; - - /** - * defines if the drawer should scroll to top after click - * - * @param scrollToTopAfterClick - * @return - */ - public DrawerBuilder withScrollToTopAfterClick(boolean scrollToTopAfterClick) { - this.mScrollToTopAfterClick = scrollToTopAfterClick; - return this; - } - - - // header view - protected View mHeaderView; - protected boolean mHeaderDivider = true; - protected boolean mHeaderPadding = true; - protected DimenHolder mHeiderHeight = null; - - /** - * Add a header to the DrawerBuilder ListView. This can be any view - * - * @param headerView - * @return - */ - public DrawerBuilder withHeader(@NonNull View headerView) { - this.mHeaderView = headerView; - return this; - } - - /** - * Add a header to the DrawerBuilder ListView defined by a resource. - * - * @param headerViewRes - * @return - */ - public DrawerBuilder withHeader(@LayoutRes int headerViewRes) { - if (mActivity == null) { - throw new RuntimeException("please pass an activity first to use this call"); - } - - if (headerViewRes != -1) { - //i know there should be a root, bit i got none here - this.mHeaderView = mActivity.getLayoutInflater().inflate(headerViewRes, null, false); - } - - return this; - } - - /** - * Set this to false if you don't need the divider below the header - * - * @param headerDivider - * @return - */ - public DrawerBuilder withHeaderDivider(boolean headerDivider) { - this.mHeaderDivider = headerDivider; - return this; - } - - /** - * Set this to false if you don't need the padding below the header - * - * @param headerPadding - * @return - */ - public DrawerBuilder withHeaderPadding(boolean headerPadding) { - this.mHeaderPadding = headerPadding; - return this; - } - - /** - * Sets the header height for the header provided via `withHeader()` - * - * @param headerHeight the DimenHolder with the height we want to set for the header - * @return - */ - public DrawerBuilder withHeaderHeight(DimenHolder headerHeight) { - this.mHeiderHeight = headerHeight; - return this; - } - - // sticky view - protected View mStickyHeaderView; - // shadow shown on the top of the sticky header - protected boolean mStickyHeaderShadow = true; - - /** - * Add a sticky header below the DrawerBuilder ListView. This can be any view - * - * @param stickyHeader - * @return - */ - public DrawerBuilder withStickyHeader(@NonNull View stickyHeader) { - this.mStickyHeaderView = stickyHeader; - return this; - } - - /** - * Add a sticky header below the DrawerBuilder ListView defined by a resource. - * - * @param stickyHeaderRes - * @return - */ - public DrawerBuilder withStickyHeader(@LayoutRes int stickyHeaderRes) { - if (mActivity == null) { - throw new RuntimeException("please pass an activity first to use this call"); - } - - if (stickyHeaderRes != -1) { - //i know there should be a root, bit i got none here - this.mStickyHeaderView = mActivity.getLayoutInflater().inflate(stickyHeaderRes, null, false); - } - - return this; - } - - /** - * Set this to false if you don't want the shadow below the sticky header - * - * @param stickyHeaderShadow - * @return - */ - public DrawerBuilder withStickyHeaderShadow(boolean stickyHeaderShadow) { - this.mStickyHeaderShadow = stickyHeaderShadow; - return this; - } - - // footer view - protected View mFooterView; - protected boolean mFooterDivider = true; - protected boolean mFooterClickable = false; - - /** - * Add a footer to the DrawerBuilder ListView. This can be any view - * - * @param footerView - * @return - */ - public DrawerBuilder withFooter(@NonNull View footerView) { - this.mFooterView = footerView; - return this; - } - - /** - * Add a footer to the DrawerBuilder ListView defined by a resource. - * - * @param footerViewRes - * @return - */ - public DrawerBuilder withFooter(@LayoutRes int footerViewRes) { - if (mActivity == null) { - throw new RuntimeException("please pass an activity first to use this call"); - } - - if (footerViewRes != -1) { - //i know there should be a root, bit i got none here - this.mFooterView = mActivity.getLayoutInflater().inflate(footerViewRes, null, false); - } - - return this; - } - - /** - * Set this to true if you want the footer to be clickable - * - * @param footerClickable - * @return - */ - public DrawerBuilder withFooterClickable(boolean footerClickable) { - this.mFooterClickable = footerClickable; - return this; - } - - /** - * Set this to false if you don't need the divider above the footer - * - * @param footerDivider - * @return - */ - public DrawerBuilder withFooterDivider(boolean footerDivider) { - this.mFooterDivider = footerDivider; - return this; - } - - // sticky view - protected ViewGroup mStickyFooterView; - // divider shown on top of the sticky footer - protected boolean mStickyFooterDivider = false; - // sticky view - protected View mStickyFooterShadowView; - // shadow shown on the top of the sticky footer - protected boolean mStickyFooterShadow = true; - - /** - * Add a sticky footer below the DrawerBuilder ListView. This can be any view - * - * @param stickyFooter - * @return - */ - public DrawerBuilder withStickyFooter(@NonNull ViewGroup stickyFooter) { - this.mStickyFooterView = stickyFooter; - return this; - } - - /** - * Add a sticky footer below the DrawerBuilder ListView defined by a resource. - * - * @param stickyFooterRes - * @return - */ - public DrawerBuilder withStickyFooter(@LayoutRes int stickyFooterRes) { - if (mActivity == null) { - throw new RuntimeException("please pass an activity first to use this call"); - } - - if (stickyFooterRes != -1) { - //i know there should be a root, bit i got none here - this.mStickyFooterView = (ViewGroup) mActivity.getLayoutInflater().inflate(stickyFooterRes, null, false); - } - - return this; - } - - /** - * Set this to true if you want the divider above the sticky footer - * - * @param stickyFooterDivider - * @return - */ - public DrawerBuilder withStickyFooterDivider(boolean stickyFooterDivider) { - this.mStickyFooterDivider = stickyFooterDivider; - return this; - } - - /** - * Set this to false if you don't want the shadow on top of the sticky footer - * - * @param stickyFooterShadow - * @return - */ - public DrawerBuilder withStickyFooterShadow(boolean stickyFooterShadow) { - this.mStickyFooterShadow = stickyFooterShadow; - return this; - } - - // fire onClick after build - protected boolean mFireInitialOnClick = false; - - /** - * Set this to true if you love to get an initial onClick event after the build method is called - * - * @param fireOnInitialOnClick - * @return - */ - public DrawerBuilder withFireOnInitialOnClick(boolean fireOnInitialOnClick) { - this.mFireInitialOnClick = fireOnInitialOnClick; - return this; - } - - // if multiSelection is possible - protected boolean mMultiSelect = false; - - /** - * set this to true if you want to enable multiSelect mode inside the drawer. Note - * you will have to programmatically deselect if you want to remove all selections! - * You can disable this at a later time via .getAdapter().withMultiSelect(false) - * You can also modify all other settings of the FastAdapter via this method - * - * @param multiSelect true if multiSelect is enabled (default: false) - * @return this - */ - public DrawerBuilder withMultiSelect(boolean multiSelect) { - this.mMultiSelect = multiSelect; - return this; - } - - // item to select - protected int mSelectedItemPosition = 0; - - /** - * Set this to the index of the item, you would love to select upon start - * - * @param selectedItemPosition - * @return - */ - public DrawerBuilder withSelectedItemByPosition(int selectedItemPosition) { - this.mSelectedItemPosition = selectedItemPosition; - return this; - } - - // item to select - protected long mSelectedItemIdentifier = 0; - - /** - * Set this to the identifier of the item, you would love to select upon start - * - * @param selectedItemIdentifier - * @return - */ - public DrawerBuilder withSelectedItem(long selectedItemIdentifier) { - this.mSelectedItemIdentifier = selectedItemIdentifier; - return this; - } - - // an RecyclerView to use within the drawer :D - protected RecyclerView mRecyclerView; - - /** - * Define a custom RecyclerView which will be used in the drawer - * NOTE: this is not recommended - * - * @param recyclerView - * @return - */ - public DrawerBuilder withRecyclerView(@NonNull RecyclerView recyclerView) { - this.mRecyclerView = recyclerView; - return this; - } - - // if the adapter should enable hasStableIds to improve performance and allow animations - protected boolean mHasStableIds = false; - - /** - * define this if you want enable hasStableIds for the adapter which is generated. - * WARNING: only use this if you have set an identifer for all of your items else this could cause - * many weird things - * - * @param hasStableIds - * @return - */ - public DrawerBuilder withHasStableIds(boolean hasStableIds) { - this.mHasStableIds = hasStableIds; - if (mAdapter != null) { - mAdapter.setHasStableIds(hasStableIds); - } - return this; - } - - // an adapter to use for the list - protected FastAdapter mAdapter; - protected ModelAdapter mHeaderAdapter = new ItemAdapter<>().withIdDistributor(idDistributor); - protected ModelAdapter mItemAdapter = new ItemAdapter<>().withIdDistributor(idDistributor); - protected ModelAdapter mFooterAdapter = new ItemAdapter<>().withIdDistributor(idDistributor); - protected ExpandableExtension mExpandableExtension = new ExpandableExtension<>(); - - /** - * Define a custom Adapter which will be used in the drawer - * NOTE: this is not recommender - * WARNING: if you do this after adding items you will loose those! - * - * @param adapter the FastAdapter to use with this drawer - * @return this - */ - public DrawerBuilder withAdapter(@NonNull FastAdapter adapter) { - this.mAdapter = adapter; - //we have to rewrap as a different FastAdapter was provided - adapter.addAdapter(0, mHeaderAdapter); - adapter.addAdapter(1, mItemAdapter); - adapter.addAdapter(2, mFooterAdapter); - adapter.addExtension(mExpandableExtension); - return this; - } - - /** - * get the adapter (null safe) - * - * @return the FastAdapter used with this drawer - */ - protected FastAdapter getAdapter() { - if (mAdapter == null) { - mAdapter = FastAdapter.with(Arrays.asList(mHeaderAdapter, mItemAdapter, mFooterAdapter), Arrays.>asList(mExpandableExtension)); - mAdapter.withSelectable(true); - mAdapter.withMultiSelect(false); - mAdapter.withAllowDeselection(false); - mAdapter.setHasStableIds(mHasStableIds); - } - return mAdapter; - } - - protected IItemAdapter getItemAdapter() { - return mItemAdapter; - } - - protected IItemAdapter getHeaderAdapter() { - return mHeaderAdapter; - } - - protected IItemAdapter getFooterAdapter() { - return mFooterAdapter; - } - - // Defines a Adapter which wraps the main Adapter used in the RecyclerView to allow extended navigation and other stuff - protected RecyclerView.Adapter mAdapterWrapper; - - /** - * Defines a Adapter which wraps the main Adapter used in the RecyclerView to allow extended navigation and other stuff - * - * @param adapterWrapper - * @return - */ - public DrawerBuilder withAdapterWrapper(@NonNull RecyclerView.Adapter adapterWrapper) { - if (mAdapter == null) { - throw new RuntimeException("this adapter has to be set in conjunction to a normal adapter which is used inside this wrapper adapter"); - } - this.mAdapterWrapper = adapterWrapper; - return this; - } - - - //defines the itemAnimator to be used in conjunction with the RecyclerView - protected RecyclerView.ItemAnimator mItemAnimator = new DefaultItemAnimator(); - - /** - * defines the itemAnimator to be used in conjunction with the RecyclerView - * - * @param itemAnimator - * @return - */ - public DrawerBuilder withItemAnimator(RecyclerView.ItemAnimator itemAnimator) { - mItemAnimator = itemAnimator; - return this; - } - - /** - * Set the initial List of IDrawerItems for the Drawer - * - * @param drawerItems - * @return - */ - public DrawerBuilder withDrawerItems(@NonNull List drawerItems) { - this.getItemAdapter().set(drawerItems); - return this; - } - - /** - * Add a initial DrawerItem or a DrawerItem Array for the Drawer - * - * @param drawerItems - * @return - */ - public DrawerBuilder addDrawerItems(@NonNull IDrawerItem... drawerItems) { - this.getItemAdapter().add(drawerItems); - return this; - } - - // defines if we want to keep the sticky items visible, upon switching to the profiles - protected boolean mKeepStickyItemsVisible = false; - - /** - * Toggles if the sticky footer should stay visible upon switching to the profile list - * **WARNING** using this with stickyDrawerItems can lead to the selection not being updated correctly. Use with care - * - * @param keepStickyItemsVisible true if the sticky footer should stay visible - * @return this - */ - public DrawerBuilder withKeepStickyItemsVisible(boolean keepStickyItemsVisible) { - this.mKeepStickyItemsVisible = keepStickyItemsVisible; - return this; - } - - // always visible list in drawer - protected List mStickyDrawerItems = new ArrayList<>(); - - /** - * Set the initial List of IDrawerItems for the StickyDrawerFooter - * - * @param stickyDrawerItems - * @return - */ - public DrawerBuilder withStickyDrawerItems(@NonNull List stickyDrawerItems) { - this.mStickyDrawerItems = stickyDrawerItems; - return this; - } - - /** - * Add a initial DrawerItem or a DrawerItem Array for the StickyDrawerFooter - * - * @param stickyDrawerItems - * @return - */ - public DrawerBuilder addStickyDrawerItems(@NonNull IDrawerItem... stickyDrawerItems) { - if (this.mStickyDrawerItems == null) { - this.mStickyDrawerItems = new ArrayList<>(); - } - - Collections.addAll(this.mStickyDrawerItems, stickyDrawerItems); - - return this; - } - - /** - * Inflates the DrawerItems from a menu.xml - * - * @param menuRes - * @return - */ - public DrawerBuilder inflateMenu(@MenuRes int menuRes) { - MenuInflater menuInflater = new SupportMenuInflater(mActivity); - MenuBuilder mMenu = new MenuBuilder(mActivity); - - menuInflater.inflate(menuRes, mMenu); - - addMenuItems(mMenu, false); - - return this; - } - - /** - * helper method to init the drawerItems from a menu - * - * @param mMenu - * @param subMenu - */ - private void addMenuItems(Menu mMenu, boolean subMenu) { - int groupId = R.id.material_drawer_menu_default_group; - for (int i = 0; i < mMenu.size(); i++) { - MenuItem mMenuItem = mMenu.getItem(i); - IDrawerItem iDrawerItem; - if (!subMenu && mMenuItem.getGroupId() != groupId && mMenuItem.getGroupId() != 0) { - groupId = mMenuItem.getGroupId(); - iDrawerItem = new DividerDrawerItem(); - getItemAdapter().add(iDrawerItem); - } - if (mMenuItem.hasSubMenu()) { - iDrawerItem = new PrimaryDrawerItem() - .withName(mMenuItem.getTitle().toString()) - .withIcon(mMenuItem.getIcon()) - .withIdentifier(mMenuItem.getItemId()) - .withEnabled(mMenuItem.isEnabled()) - .withSelectable(false); - getItemAdapter().add(iDrawerItem); - addMenuItems(mMenuItem.getSubMenu(), true); - } else if (mMenuItem.getGroupId() != 0 || subMenu) { - iDrawerItem = new SecondaryDrawerItem() - .withName(mMenuItem.getTitle().toString()) - .withIcon(mMenuItem.getIcon()) - .withIdentifier(mMenuItem.getItemId()) - .withEnabled(mMenuItem.isEnabled()); - getItemAdapter().add(iDrawerItem); - } else { - iDrawerItem = new PrimaryDrawerItem() - .withName(mMenuItem.getTitle().toString()) - .withIcon(mMenuItem.getIcon()) - .withIdentifier(mMenuItem.getItemId()) - .withEnabled(mMenuItem.isEnabled()); - getItemAdapter().add(iDrawerItem); - } - } - } - - // close drawer on click - protected boolean mCloseOnClick = true; - - /** - * Set this to false if the drawer should stay opened after an item was clicked - * - * @param closeOnClick - * @return this - */ - public DrawerBuilder withCloseOnClick(boolean closeOnClick) { - this.mCloseOnClick = closeOnClick; - return this; - } - - // delay drawer close to prevent lag - protected int mDelayOnDrawerClose = 50; - - /** - * Define the delay for the drawer close operation after a click. - * This is a small trick to improve the speed (and remove lag) if you open a new activity after a DrawerItem - * was selected. - * NOTE: Disable this by passing -1 - * - * @param delayOnDrawerClose the delay in MS (-1 to disable) - * @return this - */ - public DrawerBuilder withDelayOnDrawerClose(int delayOnDrawerClose) { - this.mDelayOnDrawerClose = delayOnDrawerClose; - return this; - } - - // delay drawer click event to prevent lag (you should either choose DelayOnDrawerClose or this) - protected int mDelayDrawerClickEvent = 0; - - /** - * Define the delay for the drawer click event after a click. - * This can be used to improve performance and prevent lag, especially when you switch fragments inside the listener. - * This will ignore the boolean value you can return in the listener, as the listener is called after the drawer was closed. - * NOTE: Disable this to pass -1 - * - * @param delayDrawerClickEvent -1 to disable - * @return this - */ - public DrawerBuilder withDelayDrawerClickEvent(int delayDrawerClickEvent) { - this.mDelayDrawerClickEvent = delayDrawerClickEvent; - return this; - } - - // onDrawerListener - protected Drawer.OnDrawerListener mOnDrawerListener; - - /** - * Define a OnDrawerListener for this Drawer - * - * @param onDrawerListener - * @return this - */ - public DrawerBuilder withOnDrawerListener(@NonNull Drawer.OnDrawerListener onDrawerListener) { - this.mOnDrawerListener = onDrawerListener; - return this; - } - - // onDrawerItemClickListeners - protected Drawer.OnDrawerItemClickListener mOnDrawerItemClickListener; - - /** - * Define a OnDrawerItemClickListener for this Drawer - * - * @param onDrawerItemClickListener - * @return - */ - public DrawerBuilder withOnDrawerItemClickListener(@NonNull Drawer.OnDrawerItemClickListener onDrawerItemClickListener) { - this.mOnDrawerItemClickListener = onDrawerItemClickListener; - return this; - } - - // onDrawerItemClickListeners - protected Drawer.OnDrawerItemLongClickListener mOnDrawerItemLongClickListener; - - /** - * Define a OnDrawerItemLongClickListener for this Drawer - * - * @param onDrawerItemLongClickListener - * @return - */ - public DrawerBuilder withOnDrawerItemLongClickListener(@NonNull Drawer.OnDrawerItemLongClickListener onDrawerItemLongClickListener) { - this.mOnDrawerItemLongClickListener = onDrawerItemLongClickListener; - return this; - } - - // onDrawerListener - protected Drawer.OnDrawerNavigationListener mOnDrawerNavigationListener; - - /** - * Define a OnDrawerNavigationListener for this Drawer - * - * @param onDrawerNavigationListener - * @return this - */ - public DrawerBuilder withOnDrawerNavigationListener(@NonNull Drawer.OnDrawerNavigationListener onDrawerNavigationListener) { - this.mOnDrawerNavigationListener = onDrawerNavigationListener; - return this; - } - - //show the drawer on the first launch to show the user its there - protected boolean mShowDrawerOnFirstLaunch = false; - - /** - * define if the DrawerBuilder is shown on the first launch - * - * @param showDrawerOnFirstLaunch - * @return - */ - public DrawerBuilder withShowDrawerOnFirstLaunch(boolean showDrawerOnFirstLaunch) { - this.mShowDrawerOnFirstLaunch = showDrawerOnFirstLaunch; - return this; - } - - //show the drawer on launch to show the user its there, keep doing it until the user has dragged it open once - protected boolean mShowDrawerUntilDraggedOpened = false; - - /** - * define if the DrawerBuilder is shown until the user has dragged it open once - * - * @param showDrawerUntilDraggedOpened - * @return DrawerBuilder - */ - public DrawerBuilder withShowDrawerUntilDraggedOpened(boolean showDrawerUntilDraggedOpened) { - mShowDrawerUntilDraggedOpened = showDrawerUntilDraggedOpened; - return this; - } - - //also generate the MiniDrawer for this Drawer - protected boolean mGenerateMiniDrawer = false; - protected MiniDrawer mMiniDrawer = null; - - /** - * define if the DrawerBuilder should also generate a MiniDrawer for th - * - * @param generateMiniDrawer - * @return - */ - public DrawerBuilder withGenerateMiniDrawer(boolean generateMiniDrawer) { - this.mGenerateMiniDrawer = generateMiniDrawer; - return this; - } - - - // savedInstance to restore state - protected Bundle mSavedInstance; - - /** - * Set the Bundle (savedInstance) which is passed by the activity. - * No need to null-check everything is handled automatically - * - * @param savedInstance - * @return - */ - public DrawerBuilder withSavedInstance(Bundle savedInstance) { - this.mSavedInstance = savedInstance; - return this; - } - - // shared preferences to use for integrated functions - protected SharedPreferences mSharedPreferences; - - /** - * Set the {@link SharedPreferences} to use for the `showDrawerOnFirstLaunch` or the `ShowDrawerUntilDraggedOpened` - * - * @param sharedPreferences SharedPreference to use - * @return this - */ - public DrawerBuilder withSharedPreferences(SharedPreferences sharedPreferences) { - this.mSharedPreferences = sharedPreferences; - return this; - } - - /** - * helper method to handle when the drawer should be shown on launch - */ - private void handleShowOnLaunch() { - //check if it should be shown on launch (and we have a drawerLayout) - if (mActivity != null && mDrawerLayout != null) { - if (mShowDrawerOnFirstLaunch || mShowDrawerUntilDraggedOpened) { - final SharedPreferences preferences = mSharedPreferences != null ? mSharedPreferences : PreferenceManager.getDefaultSharedPreferences(mActivity); - - if (mShowDrawerOnFirstLaunch && !preferences.getBoolean(Drawer.PREF_USER_LEARNED_DRAWER, false)) { - //if it was not shown yet - //open the drawer - mDrawerLayout.openDrawer(mSliderLayout); - - //save that it showed up once ;) - SharedPreferences.Editor editor = preferences.edit(); - editor.putBoolean(Drawer.PREF_USER_LEARNED_DRAWER, true); - editor.apply(); - - } else if (mShowDrawerUntilDraggedOpened && !preferences.getBoolean(Drawer.PREF_USER_OPENED_DRAWER_BY_DRAGGING, false)) { - // open the drawer since the user has not dragged it open yet - mDrawerLayout.openDrawer(mSliderLayout); - - // add a listener to detect dragging - mDrawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() { - boolean hasBeenDragged = false; - - @Override - public void onDrawerStateChanged(int newState) { - if (newState == DrawerLayout.STATE_DRAGGING) { - // save that the user was dragging - hasBeenDragged = true; - - } else if (newState == DrawerLayout.STATE_IDLE) { - // check if the user was dragging and if that resulted in an open drawer - if (hasBeenDragged && mDrawerLayout.isDrawerOpen(mDrawerGravity)) { - // Save that the user has dragged it open - SharedPreferences.Editor editor = preferences.edit(); - editor.putBoolean(Drawer.PREF_USER_OPENED_DRAWER_BY_DRAGGING, true); - editor.apply(); - } else { - // reset the drag boolean - hasBeenDragged = false; - } - } - } - }); - } - } - } - } - - /** - * Build and add the DrawerBuilder to your activity - * - * @return - */ - public Drawer build() { - if (mUsed) { - throw new RuntimeException("you must not reuse a DrawerBuilder builder"); - } - if (mActivity == null) { - throw new RuntimeException("please pass an activity"); - } - - //set that this builder was used. now you have to create a new one - mUsed = true; - - // if the user has not set a drawerLayout use the default one :D - if (mDrawerLayout == null) { - withDrawerLayout(-1); - } - - //some new Materialize magic ;) - mMaterialize = new MaterializeBuilder() - .withActivity(mActivity) - .withRootView(mRootView) - .withFullscreen(mFullscreen) - .withSystemUIHidden(mSystemUIHidden) - .withUseScrimInsetsLayout(false) - .withTransparentStatusBar(mTranslucentStatusBar) - .withTranslucentNavigationBarProgrammatically(mTranslucentNavigationBarProgrammatically) - .withContainer(mDrawerLayout) - .build(); - - //handle the navigation stuff of the ActionBarDrawerToggle and the drawer in general - handleDrawerNavigation(mActivity, false); - - //build the view which will be set to the drawer - Drawer result = buildView(); - - //define id for the sliderLayout - mSliderLayout.setId(R.id.material_drawer_slider_layout); - // add the slider to the drawer - mDrawerLayout.addView(mSliderLayout, 1); - - return result; - } - - /** - * Build and add the DrawerBuilder to your activity - * - * @return - */ - public Drawer buildForFragment() { - if (mUsed) { - throw new RuntimeException("you must not reuse a DrawerBuilder builder"); - } - if (mActivity == null) { - throw new RuntimeException("please pass an activity"); - } - if (mRootView == null) { - throw new RuntimeException("please pass the view which should host the DrawerLayout"); - } - - //set that this builder was used. now you have to create a new one - mUsed = true; - - // if the user has not set a drawerLayout use the default one :D - if (mDrawerLayout == null) { - withDrawerLayout(-1); - } - - //set the drawer here... - - View originalContentView = mRootView.getChildAt(0); - - boolean alreadyInflated = originalContentView.getId() == R.id.materialize_root; - - //only add the new layout if it wasn't done before - if (!alreadyInflated) { - // remove the contentView - mRootView.removeView(originalContentView); - } else { - //if it was already inflated we have to clean up again - mRootView.removeAllViews(); - } - - //create the layoutParams to use for the contentView - FrameLayout.LayoutParams layoutParamsContentView = new FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT - ); - - //add the drawer - mRootView.addView(mDrawerLayout, layoutParamsContentView); - - //set the id so we can check if it was already inflated - mDrawerLayout.setId(R.id.materialize_root); - - //handle the navigation stuff of the ActionBarDrawerToggle and the drawer in general - handleDrawerNavigation(mActivity, false); - - //build the view which will be set to the drawer - Drawer result = buildView(); - - // add the slider to the drawer - mDrawerLayout.addView(originalContentView, 0); - - //define id for the sliderLayout - mSliderLayout.setId(R.id.material_drawer_slider_layout); - // add the slider to the drawer - mDrawerLayout.addView(mSliderLayout, 1); - - return result; - } - - /** - * handles the different logics for the Drawer Navigation Listeners / Indications (ActionBarDrawertoggle) - */ - protected void handleDrawerNavigation(Activity activity, boolean recreateActionBarDrawerToggle) { - //set the navigationOnClickListener - final View.OnClickListener toolbarNavigationListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - boolean handled = false; - - if (mOnDrawerNavigationListener != null && (mActionBarDrawerToggle != null && !mActionBarDrawerToggle.isDrawerIndicatorEnabled())) { - handled = mOnDrawerNavigationListener.onNavigationClickListener(v); - } - if (!handled) { - if (mDrawerLayout.isDrawerOpen(mDrawerGravity)) { - mDrawerLayout.closeDrawer(mDrawerGravity); - } else { - mDrawerLayout.openDrawer(mDrawerGravity); - } - } - } - }; - - if (recreateActionBarDrawerToggle) { - mActionBarDrawerToggle = null; - } - - // create the ActionBarDrawerToggle if not set and enabled and if we have a toolbar - if (mActionBarDrawerToggleEnabled && mActionBarDrawerToggle == null && mToolbar != null) { - this.mActionBarDrawerToggle = new ActionBarDrawerToggle(activity, mDrawerLayout, mToolbar, R.string.material_drawer_open, R.string.material_drawer_close) { - @Override - public void onDrawerOpened(View drawerView) { - if (mOnDrawerListener != null) { - mOnDrawerListener.onDrawerOpened(drawerView); - } - super.onDrawerOpened(drawerView); - } - - @Override - public void onDrawerClosed(View drawerView) { - if (mOnDrawerListener != null) { - mOnDrawerListener.onDrawerClosed(drawerView); - } - super.onDrawerClosed(drawerView); - } - - @Override - public void onDrawerSlide(View drawerView, float slideOffset) { - if (mOnDrawerListener != null) { - mOnDrawerListener.onDrawerSlide(drawerView, slideOffset); - } - - if (!mAnimateActionBarDrawerToggle) { - super.onDrawerSlide(drawerView, 0); - } else { - super.onDrawerSlide(drawerView, slideOffset); - } - } - }; - this.mActionBarDrawerToggle.syncState(); - } - - //if we got a toolbar set a toolbarNavigationListener - //we also have to do this after setting the ActionBarDrawerToggle as this will overwrite this - if (mToolbar != null) { - this.mToolbar.setNavigationOnClickListener(toolbarNavigationListener); - } - - //handle the ActionBarDrawerToggle - if (mActionBarDrawerToggle != null) { - mActionBarDrawerToggle.setToolbarNavigationClickListener(toolbarNavigationListener); - mDrawerLayout.addDrawerListener(mActionBarDrawerToggle); - } else { - mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() { - @Override - public void onDrawerSlide(View drawerView, float slideOffset) { - if (mOnDrawerListener != null) { - mOnDrawerListener.onDrawerSlide(drawerView, slideOffset); - } - } - - @Override - public void onDrawerOpened(View drawerView) { - if (mOnDrawerListener != null) { - mOnDrawerListener.onDrawerOpened(drawerView); - } - } - - @Override - public void onDrawerClosed(View drawerView) { - if (mOnDrawerListener != null) { - mOnDrawerListener.onDrawerClosed(drawerView); - } - } - - @Override - public void onDrawerStateChanged(int newState) { - - } - }); - } - } - - /** - * build the drawers content only. This will still return a Result object, but only with the content set. No inflating of a DrawerLayout. - * - * @return Result object with only the content set - */ - public Drawer buildView() { - // get the slider view - mSliderLayout = (ScrimInsetsRelativeLayout) mActivity.getLayoutInflater().inflate(R.layout.material_drawer_slider, mDrawerLayout, false); - mSliderLayout.setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(mActivity, R.attr.material_drawer_background, R.color.material_drawer_background)); - // get the layout params - DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mSliderLayout.getLayoutParams(); - if (params != null) { - // if we've set a custom gravity set it - params.gravity = mDrawerGravity; - // if this is a drawer from the right, change the margins :D - params = DrawerUtils.processDrawerLayoutParams(this, params); - // set the new layout params - mSliderLayout.setLayoutParams(params); - } - - //create the content - createContent(); - - //create the result object - Drawer result = new Drawer(this); - //set the drawer for the accountHeader if set - if (mAccountHeader != null) { - mAccountHeader.setDrawer(result); - } - - //toggle selection list if we were previously on the account list - if (mSavedInstance != null && mSavedInstance.getBoolean(Drawer.BUNDLE_DRAWER_CONTENT_SWITCHED, false)) { - mAccountHeader.toggleSelectionList(mActivity); - } - - //handle if the drawer should be shown on launch - handleShowOnLaunch(); - - //we only want to hook a Drawer to the MiniDrawer if it is the main drawer, not the appended one - if (!mAppended && mGenerateMiniDrawer) { - // if we should create a MiniDrawer we have to do this now - mMiniDrawer = new MiniDrawer().withDrawer(result).withAccountHeader(mAccountHeader); - } - - //forget the reference to the activity - mActivity = null; - - return result; - } - - /** - * Call this method to append a new DrawerBuilder to a existing Drawer. - * - * @param result the Drawer.Result of an existing Drawer - * @return - */ - public Drawer append(@NonNull Drawer result) { - if (mUsed) { - throw new RuntimeException("you must not reuse a DrawerBuilder builder"); - } - if (mDrawerGravity == null) { - throw new RuntimeException("please set the gravity for the drawer"); - } - - //set that this builder was used. now you have to create a new one - mUsed = true; - mAppended = true; - - //get the drawer layout from the previous drawer - mDrawerLayout = result.getDrawerLayout(); - - // get the slider view - mSliderLayout = (ScrimInsetsRelativeLayout) mActivity.getLayoutInflater().inflate(R.layout.material_drawer_slider, mDrawerLayout, false); - mSliderLayout.setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(mActivity, R.attr.material_drawer_background, R.color.material_drawer_background)); - // get the layout params - DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mSliderLayout.getLayoutParams(); - // set the gravity of this drawerGravity - params.gravity = mDrawerGravity; - // if this is a drawer from the right, change the margins :D - params = DrawerUtils.processDrawerLayoutParams(this, params); - // set the new params - mSliderLayout.setLayoutParams(params); - //define id for the sliderLayout - mSliderLayout.setId(R.id.material_drawer_slider_layout); - // add the slider to the drawer - mDrawerLayout.addView(mSliderLayout, 1); - - //create the content - createContent(); - - //create the result object - Drawer appendedResult = new Drawer(this); - - //toggle selection list if we were previously on the account list - if (mSavedInstance != null && mSavedInstance.getBoolean(Drawer.BUNDLE_DRAWER_CONTENT_SWITCHED_APPENDED, false)) { - mAccountHeader.toggleSelectionList(mActivity); - } - - //forget the reference to the activity - mActivity = null; - - return appendedResult; - } - - /** - * the helper method to create the content for the drawer - */ - private void createContent() { - //if we have a customView use this - if (mCustomView != null) { - LinearLayout.LayoutParams contentParams = new LinearLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT - ); - contentParams.weight = 1f; - mSliderLayout.addView(mCustomView, contentParams); - return; - } - - //set the shadow for the drawer - if (Build.VERSION.SDK_INT < 21 && mDrawerLayout != null) { - if (ViewCompat.getLayoutDirection(mRootView) == ViewCompat.LAYOUT_DIRECTION_LTR) { - mDrawerLayout.setDrawerShadow(mDrawerGravity == GravityCompat.START ? R.drawable.material_drawer_shadow_right : R.drawable.material_drawer_shadow_left, mDrawerGravity); - } else { - mDrawerLayout.setDrawerShadow(mDrawerGravity == GravityCompat.START ? R.drawable.material_drawer_shadow_left : R.drawable.material_drawer_shadow_right, mDrawerGravity); - } - } - - // if we have an adapter (either by defining a custom one or the included one add a list :D - View contentView; - if (mRecyclerView == null) { - contentView = LayoutInflater.from(mActivity).inflate(R.layout.material_drawer_recycler_view, mSliderLayout, false); - mRecyclerView = (RecyclerView) contentView.findViewById(R.id.material_drawer_recycler_view); - //set the itemAnimator - mRecyclerView.setItemAnimator(mItemAnimator); - //some style improvements on older devices - mRecyclerView.setFadingEdgeLength(0); - - //set the drawing cache background to the same color as the slider to improve performance - //mRecyclerView.setDrawingCacheBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(mActivity, R.attr.material_drawer_background, R.color.material_drawer_background)); - mRecyclerView.setClipToPadding(false); - //additional stuff - mRecyclerView.setLayoutManager(mLayoutManager); - - int paddingTop = 0; - if ((mDisplayBelowStatusBar == null || mDisplayBelowStatusBar) && !mSystemUIHidden) { - paddingTop = UIUtils.getStatusBarHeight(mActivity); - } - int paddingBottom = 0; - int orientation = mActivity.getResources().getConfiguration().orientation; - if (((mTranslucentNavigationBar || mFullscreen) && Build.VERSION.SDK_INT >= 21) && !mSystemUIHidden - && (orientation == Configuration.ORIENTATION_PORTRAIT - || (orientation == Configuration.ORIENTATION_LANDSCAPE - && DrawerUIUtils.isSystemBarOnBottom(mActivity)))) { - paddingBottom = UIUtils.getNavigationBarHeight(mActivity); - } - - mRecyclerView.setPadding(0, paddingTop, 0, paddingBottom); - } else { - contentView = mRecyclerView; - } - - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT - ); - params.weight = 1f; - mSliderLayout.addView(contentView, params); - - if (mInnerShadow) { - View innerShadow = mSliderLayout.findViewById(R.id.material_drawer_inner_shadow); - innerShadow.setVisibility(View.VISIBLE); - innerShadow.bringToFront(); - if (mDrawerGravity == GravityCompat.START) { - innerShadow.setBackgroundResource(R.drawable.material_drawer_shadow_left); - } else { - innerShadow.setBackgroundResource(R.drawable.material_drawer_shadow_right); - } - } - - // set the background - if (mSliderBackgroundColor != 0) { - mSliderLayout.setBackgroundColor(mSliderBackgroundColor); - } else if (mSliderBackgroundColorRes != -1) { - mSliderLayout.setBackgroundColor(ContextCompat.getColor(mActivity, mSliderBackgroundColorRes)); - } else if (mSliderBackgroundDrawable != null) { - UIUtils.setBackground(mSliderLayout, mSliderBackgroundDrawable); - } else if (mSliderBackgroundDrawableRes != -1) { - UIUtils.setBackground(mSliderLayout, mSliderBackgroundDrawableRes); - } - - //handle the header - DrawerUtils.handleHeaderView(this); - - //handle the footer - DrawerUtils.handleFooterView(this, new View.OnClickListener() { - @Override - public void onClick(View v) { - IDrawerItem drawerItem = (IDrawerItem) v.getTag(R.id.material_drawer_item); - DrawerUtils.onFooterDrawerItemClick(DrawerBuilder.this, drawerItem, v, true); - } - }); - - //if MultiSelect is possible - mAdapter.withMultiSelect(mMultiSelect); - if (mMultiSelect) { - mAdapter.withSelectOnLongClick(false); - mAdapter.withAllowDeselection(true); - } - - //set the adapter on the listView - if (mAdapterWrapper == null) { - mRecyclerView.setAdapter(mAdapter); - } else { - mRecyclerView.setAdapter(mAdapterWrapper); - } - - //predefine selection (should be the first element - if (mSelectedItemPosition == 0 && mSelectedItemIdentifier != 0L) { - mSelectedItemPosition = DrawerUtils.getPositionByIdentifier(this, mSelectedItemIdentifier); - } - if (mHeaderView != null && mSelectedItemPosition == 0) { - mSelectedItemPosition = 1; - } - mAdapter.deselect(); - mAdapter.select(mSelectedItemPosition); - - // add the onDrawerItemClickListener if set - mAdapter.withOnClickListener(new OnClickListener() { - @Override - public boolean onClick(final View view, IAdapter adapter, final IDrawerItem item, final int position) { - if (!(item != null && item instanceof Selectable && !item.isSelectable())) { - resetStickyFooterSelection(); - mCurrentStickyFooterSelection = -1; - } - - //call the listener - boolean consumed = false; - - //call the item specific listener - if (item instanceof AbstractDrawerItem && ((AbstractDrawerItem) item).getOnDrawerItemClickListener() != null) { - consumed = ((AbstractDrawerItem) item).getOnDrawerItemClickListener().onItemClick(view, position, item); - } - - //call the drawer listener - if (mOnDrawerItemClickListener != null) { - if (mDelayDrawerClickEvent > 0) { - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - mOnDrawerItemClickListener.onItemClick(view, position, item); - } - }, mDelayDrawerClickEvent); - } else { - consumed = mOnDrawerItemClickListener.onItemClick(view, position, item); - } - } - - //we have to notify the miniDrawer if existing, and if the event was not consumed yet - if (!consumed && mMiniDrawer != null) { - consumed = mMiniDrawer.onItemClick(item); - } - - //if we were a expandable item we consume the event closing makes no sense - if (item instanceof IExpandable && ((IExpandable) item).getSubItems() != null) { - //we consume the event and want no further handling - return true; - } - - - if (!consumed) { - //close the drawer after click - closeDrawerDelayed(); - } - - return consumed; - } - }); - // add the onDrawerItemLongClickListener if set - mAdapter.withOnLongClickListener(new OnLongClickListener() { - @Override - public boolean onLongClick(View view, IAdapter adapter, final IDrawerItem item, final int position) { - if (mOnDrawerItemLongClickListener != null) { - return mOnDrawerItemLongClickListener.onItemLongClick(view, position, getDrawerItem(position)); - } - return false; - } - }); - - if (mRecyclerView != null) { - mRecyclerView.scrollToPosition(0); - } - - // try to restore all saved values again - if (mSavedInstance != null) { - if (!mAppended) { - mAdapter.deselect(); - mAdapter.withSavedInstanceState(mSavedInstance, Drawer.BUNDLE_SELECTION); - DrawerUtils.setStickyFooterSelection(this, mSavedInstance.getInt(Drawer.BUNDLE_STICKY_FOOTER_SELECTION, -1), null); - } else { - mAdapter.deselect(); - mAdapter.withSavedInstanceState(mSavedInstance, Drawer.BUNDLE_SELECTION_APPENDED); - DrawerUtils.setStickyFooterSelection(this, mSavedInstance.getInt(Drawer.BUNDLE_STICKY_FOOTER_SELECTION_APPENDED, -1), null); - } - } - - // call initial onClick event to allow the dev to init the first view - if (mFireInitialOnClick && mOnDrawerItemClickListener != null) { - int selection = mAdapter.getSelections().size() == 0 ? -1 : mAdapter.getSelections().iterator().next(); - mOnDrawerItemClickListener.onItemClick(null, selection, getDrawerItem(selection)); - } - } - - /** - * helper method to close the drawer delayed - */ - protected void closeDrawerDelayed() { - if (mCloseOnClick && mDrawerLayout != null) { - if (mDelayOnDrawerClose > -1) { - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - mDrawerLayout.closeDrawers(); - - if (mScrollToTopAfterClick) { - mRecyclerView.smoothScrollToPosition(0); - } - } - }, mDelayOnDrawerClose); - } else { - mDrawerLayout.closeDrawers(); - } - } - } - - /** - * get the drawerItem at a specific position - * - * @param position - * @return - */ - protected IDrawerItem getDrawerItem(int position) { - return (IDrawerItem) getAdapter().getItem(position); - } - - /** - * check if the item is within the bounds of the list - * - * @param position - * @param includeOffset - * @return - */ - protected boolean checkDrawerItem(int position, boolean includeOffset) { - return getAdapter().getItem(position) != null; - } - - /** - * simple helper method to reset the selection of the sticky footer - */ - protected void resetStickyFooterSelection() { - if (mStickyFooterView instanceof LinearLayout) { - for (int i = 0; i < (mStickyFooterView).getChildCount(); i++) { - (mStickyFooterView).getChildAt(i).setActivated(false); - (mStickyFooterView).getChildAt(i).setSelected(false); - } - } - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/DrawerUtils.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/DrawerUtils.java deleted file mode 100644 index 87f1f746..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/DrawerUtils.java +++ /dev/null @@ -1,447 +0,0 @@ -package com.mikepenz.materialdrawer; - -import android.content.Context; -import android.os.Build; -import android.view.Gravity; -import android.view.View; -import android.view.ViewGroup; -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; -import com.mikepenz.materialdrawer.util.DrawerUIUtils; -import com.mikepenz.materialize.util.UIUtils; - -import java.util.List; - -import androidx.drawerlayout.widget.DrawerLayout; - -/** - * Created by mikepenz on 23.05.15. - */ -class DrawerUtils { - /** - * helper method to handle the onClick of the footer - * - * @param drawer - * @param drawerItem - * @param v - * @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 && !drawerItem.isSelectable()); - if (checkable) { - drawer.resetStickyFooterSelection(); - - v.setActivated(true); - v.setSelected(true); - - //remove the selection in the list - drawer.getAdapter().deselect(); - - //find the position of the clicked footer item - if (drawer.mStickyFooterView != null && drawer.mStickyFooterView instanceof LinearLayout) { - LinearLayout footer = (LinearLayout) drawer.mStickyFooterView; - for (int i = 0; i < footer.getChildCount(); i++) { - if (footer.getChildAt(i) == v) { - drawer.mCurrentStickyFooterSelection = i; - break; - } - } - } - } - - - if (fireOnClick != null) { - boolean consumed = false; - - if (fireOnClick) { - if (drawerItem instanceof AbstractDrawerItem && ((AbstractDrawerItem) drawerItem).getOnDrawerItemClickListener() != null) { - consumed = ((AbstractDrawerItem) drawerItem).getOnDrawerItemClickListener().onItemClick(v, -1, drawerItem); - } - - if (drawer.mOnDrawerItemClickListener != null) { - consumed = drawer.mOnDrawerItemClickListener.onItemClick(v, -1, drawerItem); - } - } - - if (!consumed) { - //close the drawer after click - drawer.closeDrawerDelayed(); - } - } - } - - /** - * helper method to set the selection of the footer - * - * @param drawer - * @param position - * @param fireOnClick - */ - public static void setStickyFooterSelection(DrawerBuilder drawer, int position, Boolean fireOnClick) { - if (position > -1) { - if (drawer.mStickyFooterView != null && drawer.mStickyFooterView instanceof LinearLayout) { - LinearLayout footer = (LinearLayout) drawer.mStickyFooterView; - if (drawer.mStickyFooterDivider) { - position = position + 1; - } - if (footer.getChildCount() > position && position >= 0) { - IDrawerItem drawerItem = (IDrawerItem) footer.getChildAt(position).getTag(R.id.material_drawer_item); - onFooterDrawerItemClick(drawer, drawerItem, footer.getChildAt(position), fireOnClick); - } - } - } - } - - /** - * calculates the position of an drawerItem. searching by it's identifier - * - * @param identifier - * @return - */ - public static int getPositionByIdentifier(DrawerBuilder drawer, long identifier) { - if (identifier != -1) { - for (int i = 0; i < drawer.getAdapter().getItemCount(); i++) { - if (drawer.getAdapter().getItem(i).getIdentifier() == identifier) { - return i; - } - } - } - - return -1; - } - - /** - * gets the drawerItem with the specific identifier from a drawerItem list - * - * @param drawerItems - * @param identifier - * @return - */ - public static IDrawerItem getDrawerItem(List drawerItems, long identifier) { - if (identifier != -1) { - for (IDrawerItem drawerItem : drawerItems) { - if (drawerItem.getIdentifier() == identifier) { - return drawerItem; - } - } - } - return null; - } - - /** - * gets the drawerItem by a defined tag from a drawerItem list - * - * @param drawerItems - * @param tag - * @return - */ - public static IDrawerItem getDrawerItem(List drawerItems, Object tag) { - if (tag != null) { - for (IDrawerItem drawerItem : drawerItems) { - if (tag.equals(drawerItem.getTag())) { - return drawerItem; - } - } - } - return null; - } - - /** - * calculates the position of an drawerItem inside the footer. searching by it's identifier - * - * @param identifier - * @return - */ - public static int getStickyFooterPositionByIdentifier(DrawerBuilder drawer, long identifier) { - if (identifier != -1) { - if (drawer.mStickyFooterView != null && drawer.mStickyFooterView instanceof LinearLayout) { - LinearLayout footer = (LinearLayout) drawer.mStickyFooterView; - - int shadowOffset = 0; - for (int i = 0; i < footer.getChildCount(); i++) { - Object o = footer.getChildAt(i).getTag(R.id.material_drawer_item); - - //count up the shadowOffset to return the correct position of the given item - if (o == null && drawer.mStickyFooterDivider) { - shadowOffset = shadowOffset + 1; - } - - if (o != null && o instanceof IDrawerItem && ((IDrawerItem) o).getIdentifier() == identifier) { - return i - shadowOffset; - } - } - } - } - - return -1; - } - - /** - * helper method to handle the headerView - * - * @param drawer - */ - public static void handleHeaderView(DrawerBuilder drawer) { - //use the AccountHeader if set - if (drawer.mAccountHeader != null) { - if (drawer.mAccountHeaderSticky) { - drawer.mStickyHeaderView = drawer.mAccountHeader.getView(); - } else { - drawer.mHeaderView = drawer.mAccountHeader.getView(); - drawer.mHeaderDivider = drawer.mAccountHeader.mAccountHeaderBuilder.mDividerBelowHeader; - drawer.mHeaderPadding = drawer.mAccountHeader.mAccountHeaderBuilder.mPaddingBelowHeader; - } - } - - //sticky header view - if (drawer.mStickyHeaderView != null) { - //add the sticky footer view and align it to the bottom - RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); - layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, 1); - drawer.mStickyHeaderView.setId(R.id.material_drawer_sticky_header); - drawer.mSliderLayout.addView(drawer.mStickyHeaderView, 0, layoutParams); - - //now align the recyclerView below the stickyFooterView ;) - RelativeLayout.LayoutParams layoutParamsListView = (RelativeLayout.LayoutParams) drawer.mRecyclerView.getLayoutParams(); - layoutParamsListView.addRule(RelativeLayout.BELOW, R.id.material_drawer_sticky_header); - drawer.mRecyclerView.setLayoutParams(layoutParamsListView); - - //set a background color or the elevation will not work - drawer.mStickyHeaderView.setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(drawer.mActivity, R.attr.material_drawer_background, R.color.material_drawer_background)); - - if (drawer.mStickyHeaderShadow) { - //add a shadow - if (Build.VERSION.SDK_INT >= 21) { - drawer.mStickyHeaderView.setElevation(UIUtils.convertDpToPixel(4, drawer.mActivity)); - } else { - View view = new View(drawer.mActivity); - view.setBackgroundResource(R.drawable.material_drawer_shadow_bottom); - drawer.mSliderLayout.addView(view, RelativeLayout.LayoutParams.MATCH_PARENT, (int) UIUtils.convertDpToPixel(4, drawer.mActivity)); - //now align the shadow below the stickyHeader ;) - RelativeLayout.LayoutParams lps = (RelativeLayout.LayoutParams) view.getLayoutParams(); - lps.addRule(RelativeLayout.BELOW, R.id.material_drawer_sticky_header); - view.setLayoutParams(lps); - } - } - - //remove the padding of the recyclerView again we have the header on top of it - drawer.mRecyclerView.setPadding(0, 0, 0, 0); - } - - // set the header (do this before the setAdapter because some devices will crash else - if (drawer.mHeaderView != null) { - if (drawer.mRecyclerView == null) { - throw new RuntimeException("can't use a headerView without a recyclerView"); - } - - if (drawer.mHeaderPadding) { - drawer.getHeaderAdapter().add(new ContainerDrawerItem().withView(drawer.mHeaderView).withHeight(drawer.mHeiderHeight).withDivider(drawer.mHeaderDivider).withViewPosition(ContainerDrawerItem.Position.TOP)); - } else { - drawer.getHeaderAdapter().add(new ContainerDrawerItem().withView(drawer.mHeaderView).withHeight(drawer.mHeiderHeight).withDivider(drawer.mHeaderDivider).withViewPosition(ContainerDrawerItem.Position.NONE)); - } - //set the padding on the top to 0 - drawer.mRecyclerView.setPadding(drawer.mRecyclerView.getPaddingLeft(), 0, drawer.mRecyclerView.getPaddingRight(), drawer.mRecyclerView.getPaddingBottom()); - } - } - - /** - * small helper to rebuild the FooterView - * - * @param drawer - */ - public static void rebuildStickyFooterView(final DrawerBuilder drawer) { - if (drawer.mSliderLayout != null) { - if (drawer.mStickyFooterView != null) { - drawer.mStickyFooterView.removeAllViews(); - - //create the divider - if (drawer.mStickyFooterDivider) { - addStickyFooterDivider(drawer.mStickyFooterView.getContext(), drawer.mStickyFooterView); - } - - //fill the footer with items - DrawerUtils.fillStickyDrawerItemFooter(drawer, drawer.mStickyFooterView, new View.OnClickListener() { - @Override - public void onClick(View v) { - IDrawerItem drawerItem = (IDrawerItem) v.getTag(R.id.material_drawer_item); - com.mikepenz.materialdrawer.DrawerUtils.onFooterDrawerItemClick(drawer, drawerItem, v, true); - } - }); - - drawer.mStickyFooterView.setVisibility(View.VISIBLE); - } else { - //there was no footer yet. now just create one - DrawerUtils.handleFooterView(drawer, new View.OnClickListener() { - @Override - public void onClick(View v) { - IDrawerItem drawerItem = (IDrawerItem) v.getTag(R.id.material_drawer_item); - DrawerUtils.onFooterDrawerItemClick(drawer, drawerItem, v, true); - } - }); - } - - setStickyFooterSelection(drawer, drawer.mCurrentStickyFooterSelection, false); - } - } - - /** - * helper method to handle the footerView - * - * @param drawer - */ - public static void handleFooterView(DrawerBuilder drawer, View.OnClickListener onClickListener) { - Context ctx = drawer.mSliderLayout.getContext(); - - //use the StickyDrawerItems if set - if (drawer.mStickyDrawerItems != null && drawer.mStickyDrawerItems.size() > 0) { - drawer.mStickyFooterView = DrawerUtils.buildStickyDrawerItemFooter(ctx, drawer, onClickListener); - } - - //sticky footer view - if (drawer.mStickyFooterView != null) { - //add the sticky footer view and align it to the bottom - RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); - layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1); - drawer.mStickyFooterView.setId(R.id.material_drawer_sticky_footer); - drawer.mSliderLayout.addView(drawer.mStickyFooterView, layoutParams); - - if ((drawer.mTranslucentNavigationBar || drawer.mFullscreen) && Build.VERSION.SDK_INT >= 19) { - drawer.mStickyFooterView.setPadding(0, 0, 0, UIUtils.getNavigationBarHeight(ctx)); - } - - //now align the recyclerView above the stickyFooterView ;) - RelativeLayout.LayoutParams layoutParamsListView = (RelativeLayout.LayoutParams) drawer.mRecyclerView.getLayoutParams(); - layoutParamsListView.addRule(RelativeLayout.ABOVE, R.id.material_drawer_sticky_footer); - drawer.mRecyclerView.setLayoutParams(layoutParamsListView); - - //handle shadow on top of the sticky footer - if (drawer.mStickyFooterShadow) { - drawer.mStickyFooterShadowView = new View(ctx); - drawer.mStickyFooterShadowView.setBackgroundResource(R.drawable.material_drawer_shadow_top); - drawer.mSliderLayout.addView(drawer.mStickyFooterShadowView, RelativeLayout.LayoutParams.MATCH_PARENT, ctx.getResources().getDimensionPixelSize(R.dimen.material_drawer_sticky_footer_elevation)); - //now align the shadow below the stickyHeader ;) - RelativeLayout.LayoutParams lps = (RelativeLayout.LayoutParams) drawer.mStickyFooterShadowView.getLayoutParams(); - lps.addRule(RelativeLayout.ABOVE, R.id.material_drawer_sticky_footer); - drawer.mStickyFooterShadowView.setLayoutParams(lps); - } - - //remove the padding of the recyclerView again we have the footer below it - drawer.mRecyclerView.setPadding(drawer.mRecyclerView.getPaddingLeft(), drawer.mRecyclerView.getPaddingTop(), drawer.mRecyclerView.getPaddingRight(), ctx.getResources().getDimensionPixelSize(R.dimen.material_drawer_padding)); - } - - // set the footer (do this before the setAdapter because some devices will crash else - if (drawer.mFooterView != null) { - if (drawer.mRecyclerView == null) { - throw new RuntimeException("can't use a footerView without a recyclerView"); - } - - if (drawer.mFooterDivider) { - drawer.getFooterAdapter().add(new ContainerDrawerItem().withView(drawer.mFooterView).withViewPosition(ContainerDrawerItem.Position.BOTTOM)); - } else { - drawer.getFooterAdapter().add(new ContainerDrawerItem().withView(drawer.mFooterView).withViewPosition(ContainerDrawerItem.Position.NONE)); - } - } - } - - - /** - * build the sticky footer item view - * - * @return - */ - public static ViewGroup buildStickyDrawerItemFooter(Context ctx, DrawerBuilder drawer, View.OnClickListener onClickListener) { - //create the container view - final LinearLayout linearLayout = new LinearLayout(ctx); - linearLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); - linearLayout.setOrientation(LinearLayout.VERTICAL); - //set the background color to the drawer background color (if it has alpha the shadow won't be visible) - linearLayout.setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(ctx, R.attr.material_drawer_background, R.color.material_drawer_background)); - - //create the divider - if (drawer.mStickyFooterDivider) { - addStickyFooterDivider(ctx, linearLayout); - } - - fillStickyDrawerItemFooter(drawer, linearLayout, onClickListener); - - return linearLayout; - } - - /** - * adds the shadow to the stickyFooter - * - * @param ctx - * @param footerView - */ - private static void addStickyFooterDivider(Context ctx, ViewGroup footerView) { - LinearLayout divider = new LinearLayout(ctx); - LinearLayout.LayoutParams dividerParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); - divider.setMinimumHeight((int) UIUtils.convertDpToPixel(1, ctx)); - divider.setOrientation(LinearLayout.VERTICAL); - divider.setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(ctx, R.attr.material_drawer_divider, R.color.material_drawer_divider)); - footerView.addView(divider, dividerParams); - } - - /** - * helper method to fill the sticky footer with it's elements - * - * @param drawer - * @param container - * @param onClickListener - */ - public static void fillStickyDrawerItemFooter(DrawerBuilder drawer, ViewGroup container, View.OnClickListener onClickListener) { - //add all drawer items - for (IDrawerItem drawerItem : drawer.mStickyDrawerItems) { - View view = drawerItem.generateView(container.getContext(), container); - view.setTag(drawerItem); - - if (drawerItem.isEnabled()) { - //UIUtils.setBackground(view, UIUtils.getSelectableBackground(container.getContext(), selected_color, drawerItem.isSelectedBackgroundAnimated())); - view.setOnClickListener(onClickListener); - } - - container.addView(view); - - //for android API 17 --> Padding not applied via xml - DrawerUIUtils.setDrawerVerticalPadding(view); - } - //and really. don't ask about this. it won't set the padding if i don't set the padding for the container - container.setPadding(0, 0, 0, 0); - } - - - /** - * helper to extend the layoutParams of the drawer - * - * @param params - * @return - */ - public static DrawerLayout.LayoutParams processDrawerLayoutParams(DrawerBuilder drawer, DrawerLayout.LayoutParams params) { - if (params != null) { - if (drawer.mDrawerGravity != null && (drawer.mDrawerGravity == Gravity.RIGHT || drawer.mDrawerGravity == Gravity.END)) { - params.rightMargin = 0; - if (Build.VERSION.SDK_INT >= 17) { - params.setMarginEnd(0); - } - - params.leftMargin = drawer.mActivity.getResources().getDimensionPixelSize(R.dimen.material_drawer_margin); - if (Build.VERSION.SDK_INT >= 17) { - params.setMarginEnd(drawer.mActivity.getResources().getDimensionPixelSize(R.dimen.material_drawer_margin)); - } - } - - if (drawer.mDrawerWidth > -1) { - params.width = drawer.mDrawerWidth; - } else { - params.width = DrawerUIUtils.getOptimalDrawerWidth(drawer.mActivity); - } - } - - return params; - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/MiniDrawer.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/MiniDrawer.java deleted file mode 100644 index fc5a33f0..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/MiniDrawer.java +++ /dev/null @@ -1,544 +0,0 @@ -package com.mikepenz.materialdrawer; - -import android.content.Context; -import android.content.res.Configuration; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; - -import com.mikepenz.fastadapter.FastAdapter; -import com.mikepenz.fastadapter.IAdapter; -import com.mikepenz.fastadapter.adapters.ItemAdapter; -import com.mikepenz.fastadapter.listeners.OnClickListener; -import com.mikepenz.fastadapter.listeners.OnLongClickListener; -import com.mikepenz.materialdrawer.interfaces.ICrossfader; -import com.mikepenz.materialdrawer.model.MiniDrawerItem; -import com.mikepenz.materialdrawer.model.MiniProfileDrawerItem; -import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; -import com.mikepenz.materialdrawer.model.ProfileDrawerItem; -import com.mikepenz.materialdrawer.model.SecondaryDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.IProfile; -import com.mikepenz.materialize.util.UIUtils; - -import java.util.List; - -/** - * Created by mikepenz on 15.07.15. - * Don't count this for real yet. it's just a quick try on creating a Gmail like panel - */ -public class MiniDrawer { - public static final int PROFILE = 1; - public static final int ITEM = 2; - - private LinearLayout mContainer; - private RecyclerView mRecyclerView; - protected FastAdapter mAdapter; - protected ItemAdapter mItemAdapter; - - private Drawer mDrawer; - - /** - * Provide the Drawer which will be used as dataSource for the drawerItems - * - * @param drawer - * @return - */ - public MiniDrawer withDrawer(@NonNull Drawer drawer) { - this.mDrawer = drawer; - return this; - } - - private AccountHeader mAccountHeader; - - /** - * Provide the AccountHeader which will be used as the dataSource for the profiles - * - * @param accountHeader - * @return - */ - public MiniDrawer withAccountHeader(@NonNull AccountHeader accountHeader) { - this.mAccountHeader = accountHeader; - return this; - } - - private ICrossfader mCrossFader; - - /** - * Provide the Crossfader implementation which is used with this MiniDrawer - * - * @param crossFader - * @return - */ - public MiniDrawer withCrossFader(@NonNull ICrossfader crossFader) { - this.mCrossFader = crossFader; - return this; - } - - private boolean mInnerShadow = false; - - /** - * set to true if you want to show the innerShadow on the MiniDrawer - * - * @param innerShadow - * @return - */ - public MiniDrawer withInnerShadow(boolean innerShadow) { - this.mInnerShadow = innerShadow; - return this; - } - - private boolean mInRTL = false; - - /** - * set to true if you want the MiniDrawer in RTL mode - * - * @param inRTL - * @return - */ - public MiniDrawer withInRTL(boolean inRTL) { - this.mInRTL = inRTL; - return this; - } - - private boolean mIncludeSecondaryDrawerItems = false; - - /** - * set to true if you also want to display secondaryDrawerItems - * - * @param includeSecondaryDrawerItems - * @return - */ - public MiniDrawer withIncludeSecondaryDrawerItems(boolean includeSecondaryDrawerItems) { - this.mIncludeSecondaryDrawerItems = includeSecondaryDrawerItems; - return this; - } - - private boolean mEnableSelectedMiniDrawerItemBackground = false; - - /** - * set to true if you want to display the background for the miniDrawerItem - * - * @param enableSelectedMiniDrawerItemBackground - * @return - */ - public MiniDrawer withEnableSelectedMiniDrawerItemBackground(boolean enableSelectedMiniDrawerItemBackground) { - this.mEnableSelectedMiniDrawerItemBackground = enableSelectedMiniDrawerItemBackground; - return this; - } - - private boolean mEnableProfileClick = true; - - /** - * set to false if you do not want the profile image to toggle to the normal drawers profile selection - * - * @param enableProfileClick - * @return this - */ - public MiniDrawer withEnableProfileClick(boolean enableProfileClick) { - this.mEnableProfileClick = enableProfileClick; - return this; - } - - private OnMiniDrawerItemClickListener mOnMiniDrawerItemClickListener; - - /** - * Define the onMiniDrawerItemClickListener called before any logic in the MiniDrawer is run, allows you to intercept the default behavior - * - * @param onMiniDrawerItemClickListener - * @return this - */ - public MiniDrawer withOnMiniDrawerItemClickListener(OnMiniDrawerItemClickListener onMiniDrawerItemClickListener) { - this.mOnMiniDrawerItemClickListener = onMiniDrawerItemClickListener; - return this; - } - - - private OnClickListener mOnMiniDrawerItemOnClickListener; - - /** - * Define an onClickListener for the MiniDrawer item adapter. WARNING: this will completely overwrite the default behavior - * You may want to check the `OnMiniDrawerItemClickListener` (withOnMiniDrawerItemClickListener) which just hooks into the default behavior - * - * @param onMiniDrawerItemOnClickListener - * @return this - */ - public MiniDrawer withOnMiniDrawerItemOnClickListener(OnClickListener onMiniDrawerItemOnClickListener) { - this.mOnMiniDrawerItemOnClickListener = onMiniDrawerItemOnClickListener; - return this; - } - - - private OnLongClickListener mOnMiniDrawerItemLongClickListener; - - /** - * Define an onLongClickListener for the MiniDrawer item adapter - * - * @param onMiniDrawerItemLongClickListener - * @return - */ - public MiniDrawer withOnMiniDrawerItemLongClickListener(OnLongClickListener onMiniDrawerItemLongClickListener) { - this.mOnMiniDrawerItemLongClickListener = onMiniDrawerItemLongClickListener; - return this; - } - - /** - * get the RecyclerView of this MiniDrawer - * - * @return - */ - public RecyclerView getRecyclerView() { - return mRecyclerView; - } - - /** - * get the FastAdapter of this MiniDrawer - * - * @return - */ - public FastAdapter getAdapter() { - return mAdapter; - } - - /** - * get the ItemAdapter of this MiniDrawer - * - * @return - */ - public ItemAdapter getItemAdapter() { - return mItemAdapter; - } - - /** - * get the Drawer used to fill this MiniDrawer - * - * @return - */ - public Drawer getDrawer() { - return mDrawer; - } - - /** - * get the AccountHeader used to fill the this MiniDrawer - * - * @return - */ - public AccountHeader getAccountHeader() { - return mAccountHeader; - } - - /** - * get the Crossfader used for this MiniDrawer - * - * @return - */ - public ICrossfader getCrossFader() { - return mCrossFader; - } - - - /** - * the defined FastAdapter.OnClickListener which completely replaces the original behavior - * - * @return - */ - public OnClickListener getOnMiniDrawerItemOnClickListener() { - return mOnMiniDrawerItemOnClickListener; - } - - /** - * @return - */ - public OnLongClickListener getOnMiniDrawerItemLongClickListener() { - return mOnMiniDrawerItemLongClickListener; - } - - - /** - * generates a MiniDrawerItem from a IDrawerItem - * - * @param drawerItem - * @return - */ - public IDrawerItem generateMiniDrawerItem(IDrawerItem drawerItem) { - if (drawerItem instanceof SecondaryDrawerItem) { - if (drawerItem.isExcludeFromMiniDrawer()) { - return null; - } - return mIncludeSecondaryDrawerItems ? new MiniDrawerItem((SecondaryDrawerItem) drawerItem).withEnableSelectedBackground(mEnableSelectedMiniDrawerItemBackground).withSelectedBackgroundAnimated(false) : null; - } else if (drawerItem instanceof PrimaryDrawerItem) { - if (drawerItem.isExcludeFromMiniDrawer()) { - return null; - } - return new MiniDrawerItem((PrimaryDrawerItem) drawerItem).withEnableSelectedBackground(mEnableSelectedMiniDrawerItemBackground).withSelectedBackgroundAnimated(false); - } else if (drawerItem instanceof ProfileDrawerItem) { - if (drawerItem.isExcludeFromMiniDrawer()) { - return null; - } - MiniProfileDrawerItem mpdi = new MiniProfileDrawerItem((ProfileDrawerItem) drawerItem); - mpdi.withEnabled(mEnableProfileClick); - return mpdi; - } - return null; - } - - /** - * gets the type of a IDrawerItem - * - * @param drawerItem - * @return - */ - public int getMiniDrawerType(IDrawerItem drawerItem) { - if (drawerItem instanceof MiniProfileDrawerItem) { - return PROFILE; - } else if (drawerItem instanceof MiniDrawerItem) { - return ITEM; - } - return -1; - } - - /** - * build the MiniDrawer - * - * @param ctx - * @return - */ - public View build(Context ctx) { - mContainer = new LinearLayout(ctx); - if (mInnerShadow) { - if (!mInRTL) { - mContainer.setBackgroundResource(R.drawable.material_drawer_shadow_left); - } else { - mContainer.setBackgroundResource(R.drawable.material_drawer_shadow_right); - } - } - - //create and append recyclerView - mRecyclerView = new RecyclerView(ctx); - mContainer.addView(mRecyclerView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); - - //set the itemAnimator - mRecyclerView.setItemAnimator(new DefaultItemAnimator()); - //some style improvements on older devices - mRecyclerView.setFadingEdgeLength(0); - //set the drawing cache background to the same color as the slider to improve performance - //mRecyclerView.setDrawingCacheBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(mActivity, R.attr.material_drawer_background, R.color.material_drawer_background)); - mRecyclerView.setClipToPadding(false); - //additional stuff - mRecyclerView.setLayoutManager(new LinearLayoutManager(ctx)); - //adapter - mItemAdapter = new ItemAdapter<>(); - mAdapter = FastAdapter.with(mItemAdapter); - mAdapter.withSelectable(true); - mAdapter.withAllowDeselection(false); - mRecyclerView.setAdapter(mAdapter); - - //if the activity with the drawer should be fullscreen add the padding for the statusbar - if (mDrawer != null && mDrawer.mDrawerBuilder != null && (mDrawer.mDrawerBuilder.mFullscreen || mDrawer.mDrawerBuilder.mTranslucentStatusBar)) { - mRecyclerView.setPadding(mRecyclerView.getPaddingLeft(), UIUtils.getStatusBarHeight(ctx), mRecyclerView.getPaddingRight(), mRecyclerView.getPaddingBottom()); - } - - //if the activity with the drawer should be fullscreen add the padding for the navigationBar - if (mDrawer != null && mDrawer.mDrawerBuilder != null && (mDrawer.mDrawerBuilder.mFullscreen || mDrawer.mDrawerBuilder.mTranslucentNavigationBar) && ctx.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { - mRecyclerView.setPadding(mRecyclerView.getPaddingLeft(), mRecyclerView.getPaddingTop(), mRecyclerView.getPaddingRight(), UIUtils.getNavigationBarHeight(ctx)); - } - - //set the adapter with the items - createItems(); - - return mContainer; - } - - /** - * call this method to trigger the onProfileClick on the MiniDrawer - */ - public void onProfileClick() { - //crossfade if we are cross faded - if (mCrossFader != null) { - if (mCrossFader.isCrossfaded()) { - mCrossFader.crossfade(); - } - } - - //update the current profile - if (mAccountHeader != null) { - IProfile profile = mAccountHeader.getActiveProfile(); - if (profile instanceof IDrawerItem) { - mItemAdapter.set(0, generateMiniDrawerItem((IDrawerItem) profile)); - } - } - } - - /** - * call this method to trigger the onItemClick on the MiniDrawer - * - * @param selectedDrawerItem - * @return - */ - public boolean onItemClick(IDrawerItem selectedDrawerItem) { - //We only need to clear if the new item is selectable - if (selectedDrawerItem.isSelectable()) { - //crossfade if we are cross faded - if (mCrossFader != null) { - if (mCrossFader.isCrossfaded()) { - mCrossFader.crossfade(); - } - } - //update everything - setSelection(selectedDrawerItem.getIdentifier()); - - return false; - } else { - return true; - } - } - - /** - * set the selection of the MiniDrawer - * - * @param identifier the identifier of the item which should be selected (-1 for none) - */ - public void setSelection(long identifier) { - if (identifier == -1) { - mAdapter.deselect(); - } - int count = mAdapter.getItemCount(); - for (int i = 0; i < count; i++) { - IDrawerItem item = mAdapter.getItem(i); - if (item.getIdentifier() == identifier && !item.isSelected()) { - mAdapter.deselect(); - mAdapter.select(i); - } - } - } - - /** - * update a MiniDrawerItem (after updating the main Drawer) via its identifier - * - * @param identifier the identifier of the item which was updated - */ - public void updateItem(long identifier) { - if (mDrawer != null && mAdapter != null && mItemAdapter.getAdapterItems() != null && identifier != -1) { - IDrawerItem drawerItem = DrawerUtils.getDrawerItem(getDrawerItems(), identifier); - for (int i = 0; i < mItemAdapter.getAdapterItems().size(); i++) { - if (mItemAdapter.getAdapterItems().get(i).getIdentifier() == drawerItem.getIdentifier()) { - IDrawerItem miniDrawerItem = generateMiniDrawerItem(drawerItem); - if (miniDrawerItem != null) { - mItemAdapter.set(i, miniDrawerItem); - } - } - } - } - } - - /** - * creates the items for the MiniDrawer - */ - public void createItems() { - mItemAdapter.clear(); - - int profileOffset = 0; - if (mAccountHeader != null && mAccountHeader.getAccountHeaderBuilder().mProfileImagesVisible) { - IProfile profile = mAccountHeader.getActiveProfile(); - if (profile instanceof IDrawerItem) { - mItemAdapter.add(generateMiniDrawerItem((IDrawerItem) profile)); - profileOffset = 1; - } - } - - int select = -1; - if (mDrawer != null) { - if (getDrawerItems() != null) { - //migrate to miniDrawerItems - int length = getDrawerItems().size(); - - int position = 0; - for (int i = 0; i < length; i++) { - IDrawerItem miniDrawerItem = generateMiniDrawerItem(getDrawerItems().get(i)); - if (miniDrawerItem != null) { - if (miniDrawerItem.isSelected()) { - select = position; - } - mItemAdapter.add(miniDrawerItem); - position = position + 1; - } - } - - if (select >= 0) { - //+1 because of the profile - mAdapter.select(select + profileOffset); - } - } - } - - //listener - if (mOnMiniDrawerItemOnClickListener != null) { - mAdapter.withOnClickListener(mOnMiniDrawerItemOnClickListener); - } else { - mAdapter.withOnClickListener(new OnClickListener() { - @Override - public boolean onClick(View v, IAdapter adapter, final IDrawerItem item, final int position) { - int type = getMiniDrawerType(item); - - //if a listener is defined and we consume the event return - if (mOnMiniDrawerItemClickListener != null && mOnMiniDrawerItemClickListener.onItemClick(v, position, item, type)) { - return false; - } - - if (type == ITEM) { - //fire the onClickListener also if the specific drawerItem is not Selectable - if (item.isSelectable()) { - //make sure we are on the original drawerItemList - if (mAccountHeader != null && mAccountHeader.isSelectionListShown()) { - mAccountHeader.toggleSelectionList(v.getContext()); - } - IDrawerItem drawerItem = mDrawer.getDrawerItem(item.getIdentifier()); - if (drawerItem != null && !drawerItem.isSelected()) { - //set the selection - mDrawer.setSelection(item, true); - } - } else if (mDrawer.getOnDrawerItemClickListener() != null) { - //get the original `DrawerItem` from the Drawer as this one will contain all information - mDrawer.getOnDrawerItemClickListener().onItemClick(v, position, DrawerUtils.getDrawerItem(getDrawerItems(), item.getIdentifier())); - } - } else if (type == PROFILE) { - if (mAccountHeader != null && !mAccountHeader.isSelectionListShown()) { - mAccountHeader.toggleSelectionList(v.getContext()); - } - if (mCrossFader != null) { - mCrossFader.crossfade(); - } - } - return false; - } - }); - } - mAdapter.withOnLongClickListener(mOnMiniDrawerItemLongClickListener); - mRecyclerView.scrollToPosition(0); - } - - /** - * returns always the original drawerItems and not the switched content - * - * @return - */ - private List getDrawerItems() { - return mDrawer.getOriginalDrawerItems() != null ? mDrawer.getOriginalDrawerItems() : mDrawer.getDrawerItems(); - } - - - public interface OnMiniDrawerItemClickListener { - /** - * @param view - * @param position - * @param drawerItem - * @param type either MiniDrawer.PROFILE or MiniDrawer.ITEM - * @return true if the event was consumed - */ - boolean onItemClick(View view, int position, IDrawerItem drawerItem, int type); - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/BadgeStyle.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/BadgeStyle.java deleted file mode 100644 index 7a754a47..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/BadgeStyle.java +++ /dev/null @@ -1,232 +0,0 @@ -package com.mikepenz.materialdrawer.holder; - -import android.content.Context; -import android.content.res.ColorStateList; -import android.graphics.drawable.Drawable; -import android.widget.TextView; - -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.model.utils.BadgeDrawableBuilder; - -import androidx.annotation.ColorInt; -import androidx.annotation.ColorRes; -import androidx.annotation.DimenRes; -import androidx.annotation.Dimension; -import androidx.annotation.DrawableRes; -import androidx.core.view.ViewCompat; - -import static androidx.annotation.Dimension.DP; -import static androidx.annotation.Dimension.PX; - -/** - * Class to allow defining a BadgeStyle for the `BadgeDrawerItem` - */ -public class BadgeStyle { - private int mGradientDrawable = R.drawable.material_drawer_badge; - private Drawable mBadgeBackground; - private ColorHolder mColor; - private ColorHolder mColorPressed; - private ColorHolder mTextColor; - private ColorStateList mTextColorStateList; - private DimenHolder mCorners; - private DimenHolder mPaddingTopBottom = DimenHolder.fromDp(2); //2 looks best - private DimenHolder mPaddingLeftRight = DimenHolder.fromDp(3); //3 looks best - private DimenHolder mMinWidth = DimenHolder.fromDp(20); //20 looks nice - - public int getGradientDrawable() { - return mGradientDrawable; - } - - public BadgeStyle withGradientDrawable(@DrawableRes int gradientDrawable) { - this.mGradientDrawable = gradientDrawable; - this.mBadgeBackground = null; - return this; - } - - public Drawable getBadgeBackground() { - return mBadgeBackground; - } - - public BadgeStyle withBadgeBackground(Drawable badgeBackground) { - this.mBadgeBackground = badgeBackground; - this.mGradientDrawable = -1; - return this; - } - - public ColorHolder getColor() { - return mColor; - } - - public BadgeStyle withColor(@ColorInt int color) { - this.mColor = ColorHolder.fromColor(color); - return this; - } - - public BadgeStyle withColorRes(@ColorRes int color) { - this.mColor = ColorHolder.fromColorRes(color); - return this; - } - - public ColorHolder getColorPressed() { - return mColorPressed; - } - - public BadgeStyle withColorPressed(@ColorInt int colorPressed) { - this.mColorPressed = ColorHolder.fromColor(colorPressed); - return this; - } - - public BadgeStyle withColorPressedRes(@ColorRes int colorPressed) { - this.mColorPressed = ColorHolder.fromColorRes(colorPressed); - return this; - } - - public ColorHolder getTextColor() { - return mTextColor; - } - - public BadgeStyle withTextColor(@ColorInt int textColor) { - this.mTextColor = ColorHolder.fromColor(textColor); - return this; - } - - public BadgeStyle withTextColorRes(@ColorRes int textColor) { - this.mTextColor = ColorHolder.fromColorRes(textColor); - return this; - } - - public BadgeStyle withTextColorStateList(ColorStateList textColorStateList) { - this.mTextColor = null; - this.mTextColorStateList = textColorStateList; - return this; - } - - public DimenHolder getCorners() { - return mCorners; - } - - public BadgeStyle withCorners(@Dimension(unit = PX) int cornersPx) { - this.mCorners = DimenHolder.fromPixel(cornersPx); - return this; - } - - public BadgeStyle withCornersDp(@Dimension(unit = DP) int corners) { - this.mCorners = DimenHolder.fromDp(corners); - return this; - } - - public BadgeStyle withCorners(DimenHolder corners) { - this.mCorners = corners; - return this; - } - - public DimenHolder getPaddingLeftRight() { - return mPaddingLeftRight; - } - - public BadgeStyle withPaddingLeftRightPx(@Dimension(unit = PX) int paddingLeftRight) { - this.mPaddingLeftRight = DimenHolder.fromPixel(paddingLeftRight); - return this; - } - - public BadgeStyle withPaddingLeftRightDp(@Dimension(unit = DP) int paddingLeftRight) { - this.mPaddingLeftRight = DimenHolder.fromDp(paddingLeftRight); - return this; - } - - public BadgeStyle withPaddingLeftRightRes(@DimenRes int paddingLeftRight) { - this.mPaddingLeftRight = DimenHolder.fromResource(paddingLeftRight); - return this; - } - - public DimenHolder getPaddingTopBottom() { - return mPaddingTopBottom; - } - - public BadgeStyle withPaddingTopBottomPx(@Dimension(unit = PX) int paddingTopBottom) { - this.mPaddingTopBottom = DimenHolder.fromPixel(paddingTopBottom); - return this; - } - - public BadgeStyle withPaddingTopBottomDp(@Dimension(unit = DP) int paddingTopBottom) { - this.mPaddingTopBottom = DimenHolder.fromDp(paddingTopBottom); - return this; - } - - public BadgeStyle withPaddingTopBottomRes(@DimenRes int paddingTopBottom) { - this.mPaddingTopBottom = DimenHolder.fromResource(paddingTopBottom); - return this; - } - - public BadgeStyle withPadding(@Dimension(unit = PX) int padding) { - this.mPaddingLeftRight = DimenHolder.fromPixel(padding); - this.mPaddingTopBottom = DimenHolder.fromPixel(padding); - return this; - } - - public BadgeStyle withPadding(DimenHolder padding) { - this.mPaddingLeftRight = padding; - this.mPaddingTopBottom = padding; - return this; - } - - public DimenHolder getMinWidth() { - return mMinWidth; - } - - public BadgeStyle withMinWidth(@Dimension(unit = PX) int minWidth) { - this.mMinWidth = DimenHolder.fromPixel(minWidth); - return this; - } - - public BadgeStyle withMinWidth(DimenHolder minWidth) { - this.mMinWidth = minWidth; - return this; - } - - public BadgeStyle() { - } - - public BadgeStyle(@ColorInt int color, @ColorInt int colorPressed) { - this.mColor = ColorHolder.fromColor(color); - this.mColorPressed = ColorHolder.fromColor(colorPressed); - } - - public BadgeStyle(@DrawableRes int gradientDrawable, @ColorInt int color, @ColorInt int colorPressed, @ColorInt int textColor) { - this.mGradientDrawable = gradientDrawable; - this.mColor = ColorHolder.fromColor(color); - this.mColorPressed = ColorHolder.fromColor(colorPressed); - this.mTextColor = ColorHolder.fromColor(textColor); - } - - public void style(TextView badgeTextView) { - style(badgeTextView, null); - } - - public void style(TextView badgeTextView, ColorStateList colorStateList) { - Context ctx = badgeTextView.getContext(); - //set background for badge - if (mBadgeBackground == null) { - ViewCompat.setBackground(badgeTextView, new BadgeDrawableBuilder(this).build(ctx)); - } else { - ViewCompat.setBackground(badgeTextView, mBadgeBackground); - } - - //set the badge text color - if (mTextColor != null) { - ColorHolder.applyToOr(mTextColor, badgeTextView, null); - } else if (mTextColorStateList != null) { - badgeTextView.setTextColor(mTextColorStateList); - } else if (colorStateList != null) { - badgeTextView.setTextColor(colorStateList); - } - - //set the padding - int paddingLeftRight = mPaddingLeftRight.asPixel(ctx); - int paddingTopBottom = mPaddingTopBottom.asPixel(ctx); - badgeTextView.setPadding(paddingLeftRight, paddingTopBottom, paddingLeftRight, paddingTopBottom); - - //set the min width - badgeTextView.setMinWidth(mMinWidth.asPixel(ctx)); - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/ColorHolder.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/ColorHolder.java deleted file mode 100644 index 60f577f0..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/ColorHolder.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.mikepenz.materialdrawer.holder; - -import androidx.annotation.ColorInt; -import androidx.annotation.ColorRes; - -/** - * Created by mikepenz on 13.07.15. - */ -public class ColorHolder extends com.mikepenz.materialize.holder.ColorHolder { - public ColorHolder() { - } - - public static ColorHolder fromColorRes(@ColorRes int colorRes) { - ColorHolder colorHolder = new ColorHolder(); - colorHolder.setColorRes(colorRes); - return colorHolder; - } - - public static ColorHolder fromColor(@ColorInt int colorInt) { - ColorHolder colorHolder = new ColorHolder(); - colorHolder.setColorInt(colorInt); - return colorHolder; - } - -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/DimenHolder.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/DimenHolder.java deleted file mode 100644 index c946e5dc..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/DimenHolder.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.mikepenz.materialdrawer.holder; - -import androidx.annotation.DimenRes; -import androidx.annotation.Dimension; - -import static androidx.annotation.Dimension.DP; -import static androidx.annotation.Dimension.PX; - -/** - * Created by mikepenz on 13.07.15. - */ -public class DimenHolder extends com.mikepenz.materialize.holder.DimenHolder { - public DimenHolder() { - - } - - public static DimenHolder fromPixel(@Dimension(unit = PX) int pixel) { - DimenHolder dimenHolder = new DimenHolder(); - dimenHolder.setPixel(pixel); - return dimenHolder; - } - - public static DimenHolder fromDp(@Dimension(unit = DP) int dp) { - DimenHolder dimenHolder = new DimenHolder(); - dimenHolder.setDp(dp); - return dimenHolder; - } - - public static DimenHolder fromResource(@DimenRes int resource) { - DimenHolder dimenHolder = new DimenHolder(); - dimenHolder.setResource(resource); - return dimenHolder; - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/ImageHolder.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/ImageHolder.java deleted file mode 100644 index 02f3a035..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/ImageHolder.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.mikepenz.materialdrawer.holder; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import androidx.annotation.DrawableRes; -import androidx.appcompat.content.res.AppCompatResources; -import android.view.View; -import android.widget.ImageView; - -import com.mikepenz.iconics.IconicsDrawable; -import com.mikepenz.iconics.typeface.IIcon; -import com.mikepenz.materialdrawer.util.DrawerImageLoader; - -import java.io.FileNotFoundException; -import java.io.InputStream; - -/** - * Created by mikepenz on 13.07.15. - */ - -public class ImageHolder extends com.mikepenz.materialize.holder.ImageHolder { - private IIcon mIIcon; - - public ImageHolder(String url) { - super(url); - } - - public ImageHolder(Uri uri) { - super(uri); - } - - public ImageHolder(Drawable icon) { - super(icon); - } - - public ImageHolder(Bitmap bitmap) { - super(bitmap); - } - - public ImageHolder(@DrawableRes int iconRes) { - super(iconRes); - } - - public ImageHolder(IIcon iicon) { - super((Bitmap) null); - this.mIIcon = iicon; - } - - public IIcon getIIcon() { - return mIIcon; - } - - public void setIIcon(IIcon mIIcon) { - this.mIIcon = mIIcon; - } - - /** - * sets an existing image to the imageView - * - * @param imageView - * @param tag used to identify imageViews and define different placeholders - * @return true if an image was set - */ - @Override - public boolean applyTo(ImageView imageView, String tag) { - if (getUri() != null) { - boolean consumed = DrawerImageLoader.getInstance().setImage(imageView, getUri(), tag); - if (!consumed) { - imageView.setImageURI(getUri()); - } - } else if (getIcon() != null) { - imageView.setImageDrawable(getIcon()); - } else if (getBitmap() != null) { - imageView.setImageBitmap(getBitmap()); - } else if (getIconRes() != -1) { - imageView.setImageResource(getIconRes()); - } else if (mIIcon != null) { - imageView.setImageDrawable(new IconicsDrawable(imageView.getContext(), mIIcon).actionBar()); - } else { - imageView.setImageBitmap(null); - return false; - } - return true; - } - - /** - * this only handles Drawables - * - * @param ctx - * @param iconColor - * @param tint - * @return - */ - public Drawable decideIcon(Context ctx, int iconColor, boolean tint, int paddingDp) { - Drawable icon = getIcon(); - - if (mIIcon != null) { - icon = new IconicsDrawable(ctx, mIIcon).color(iconColor).sizeDp(24).paddingDp(paddingDp); - } else if (getIconRes() != -1) { - icon = AppCompatResources.getDrawable(ctx, getIconRes()); - } else if (getUri() != null) { - try { - InputStream inputStream = ctx.getContentResolver().openInputStream(getUri()); - icon = Drawable.createFromStream(inputStream, getUri().toString()); - } catch (FileNotFoundException e) { - //no need to handle this - } - } - - //if we got an icon AND we have auto tinting enabled AND it is no IIcon, tint it ;) - if (icon != null && tint && mIIcon == null) { - icon = icon.mutate(); - icon.setColorFilter(iconColor, PorterDuff.Mode.SRC_IN); - } - - return icon; - } - - /** - * a small static helper which catches nulls for us - * - * @param imageHolder - * @param ctx - * @param iconColor - * @param tint - * @return - */ - public static Drawable decideIcon(ImageHolder imageHolder, Context ctx, int iconColor, boolean tint, int paddingDp) { - if (imageHolder == null) { - return null; - } else { - return imageHolder.decideIcon(ctx, iconColor, tint, paddingDp); - } - } - - /** - * decides which icon to apply or hide this view - * - * @param imageHolder - * @param imageView - * @param iconColor - * @param tint - * @param paddingDp - */ - public static void applyDecidedIconOrSetGone(ImageHolder imageHolder, ImageView imageView, int iconColor, boolean tint, int paddingDp) { - if (imageHolder != null && imageView != null) { - Drawable drawable = ImageHolder.decideIcon(imageHolder, imageView.getContext(), iconColor, tint, paddingDp); - if (drawable != null) { - imageView.setImageDrawable(drawable); - imageView.setVisibility(View.VISIBLE); - } else if (imageHolder.getBitmap() != null) { - imageView.setImageBitmap(imageHolder.getBitmap()); - imageView.setVisibility(View.VISIBLE); - } else { - imageView.setVisibility(View.GONE); - } - } else if (imageView != null) { - imageView.setVisibility(View.GONE); - } - } - -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/StringHolder.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/StringHolder.java deleted file mode 100644 index 49a4a356..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/holder/StringHolder.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mikepenz.materialdrawer.holder; - -import androidx.annotation.StringRes; - -/** - * Created by mikepenz on 13.07.15. - */ -public class StringHolder extends com.mikepenz.materialize.holder.StringHolder { - public StringHolder(CharSequence text) { - super(text); - } - - public StringHolder(@StringRes int textRes) { - super(textRes); - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/icons/MaterialDrawerFont.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/icons/MaterialDrawerFont.java deleted file mode 100644 index 1e8edc50..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/icons/MaterialDrawerFont.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.mikepenz.materialdrawer.icons; - -import android.content.Context; -import android.graphics.Typeface; - -import com.mikepenz.iconics.typeface.IIcon; -import com.mikepenz.iconics.typeface.ITypeface; - -import java.util.Collection; -import java.util.HashMap; -import java.util.LinkedList; - -/** - * Created by mikepenz on 01.11.14. - */ -public class MaterialDrawerFont implements ITypeface { - private static final String TTF_FILE = "materialdrawerfont-font-v5.0.0.ttf"; - - private static Typeface typeface = null; - - private static HashMap mChars; - - @Override - public IIcon getIcon(String key) { - return Icon.valueOf(key); - } - - @Override - public HashMap getCharacters() { - if (mChars == null) { - HashMap aChars = new HashMap(); - for (Icon v : Icon.values()) { - aChars.put(v.name(), v.character); - } - mChars = aChars; - } - - return mChars; - } - - @Override - public String getMappingPrefix() { - return "mdf"; - } - - @Override - public String getFontName() { - return "MaterialDrawerFont"; - } - - @Override - public String getVersion() { - return "5.0.0"; - } - - @Override - public int getIconCount() { - return mChars.size(); - } - - @Override - public Collection getIcons() { - Collection icons = new LinkedList(); - - for (Icon value : Icon.values()) { - icons.add(value.name()); - } - - return icons; - } - - - @Override - public String getAuthor() { - return ""; - } - - @Override - public String getUrl() { - return ""; - } - - @Override - public String getDescription() { - return ""; - } - - @Override - public String getLicense() { - return ""; - } - - @Override - public String getLicenseUrl() { - return ""; - } - - @Override - public Typeface getTypeface(Context context) { - if (typeface == null) { - try { - typeface = Typeface.createFromAsset(context.getAssets(), "fonts/" + TTF_FILE); - } catch (Exception e) { - return null; - } - } - return typeface; - } - - public enum Icon implements IIcon { - mdf_arrow_drop_down('\ue5c5'), - mdf_arrow_drop_up('\ue5c7'), - mdf_expand_less('\ue5ce'), - mdf_expand_more('\ue5cf'), - mdf_person('\ue7fd'); - - char character; - - Icon(char character) { - this.character = character; - } - - public String getFormattedName() { - return "{" + name() + "}"; - } - - public char getCharacter() { - return character; - } - - public String getName() { - return name(); - } - - // remember the typeface so we can use it later - private static ITypeface typeface; - - public ITypeface getTypeface() { - if (typeface == null) { - typeface = new MaterialDrawerFont(); - } - return typeface; - } - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/interfaces/ICrossfader.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/interfaces/ICrossfader.java deleted file mode 100644 index 3ee11bfa..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/interfaces/ICrossfader.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.mikepenz.materialdrawer.interfaces; - -/** - * Created by mikepenz on 18.07.15. - */ -public interface ICrossfader { - void crossfade(); - - boolean isCrossfaded(); -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/interfaces/OnCheckedChangeListener.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/interfaces/OnCheckedChangeListener.java deleted file mode 100644 index b34e5373..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/interfaces/OnCheckedChangeListener.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.mikepenz.materialdrawer.interfaces; - -import android.widget.CompoundButton; - -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; - -/** - * Interface definition for a callback to be invoked when the checked state - * of a compound button changed. - */ -public interface OnCheckedChangeListener { - /** - * Called when the checked state of a compound button has changed. - * - * @param buttonView The compound button view whose state has changed. - * @param isChecked The new checked state of buttonView. - */ - void onCheckedChanged(IDrawerItem drawerItem, CompoundButton buttonView, boolean isChecked); -} \ No newline at end of file diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.java deleted file mode 100644 index 170fa8e9..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import androidx.annotation.LayoutRes; -import androidx.annotation.StringRes; -import android.view.View; -import android.widget.TextView; -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) { - super.bindView(viewHolder, 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 ViewHolder getViewHolder(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/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractDrawerItem.java deleted file mode 100644 index eb5f7c43..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractDrawerItem.java +++ /dev/null @@ -1,449 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.mikepenz.materialdrawer.Drawer; -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.OnPostBindViewListener; -import com.mikepenz.materialdrawer.model.interfaces.Selectable; -import com.mikepenz.materialdrawer.model.interfaces.Tagable; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import androidx.annotation.CallSuper; -import androidx.recyclerview.widget.RecyclerView; - -/** - * Created by mikepenz on 14.07.15. - */ -public abstract class AbstractDrawerItem implements IDrawerItem, Selectable, Tagable { - - protected boolean mExcludeFromMiniDrawer = false; - - @Override - public boolean isExcludeFromMiniDrawer() { - return mExcludeFromMiniDrawer; - } - - // the identifier for this item - protected long mIdentifier = -1; - - /** - * set the identifier of this item - * - * @param identifier - * @return - */ - public T withIdentifier(long identifier) { - this.mIdentifier = identifier; - return (T) this; - } - - /** - * returns the identifier of this item - * -1 is the default not set state - * - * @return - */ - @Override - public long getIdentifier() { - return mIdentifier; - } - - // the tag for this item - protected Object mTag; - - /** - * set the tag of this item - * - * @param object - * @return - */ - public T withTag(Object object) { - this.mTag = object; - return (T) this; - } - - /** - * @return the tag of this item - */ - @Override - public Object getTag() { - return mTag; - } - - // defines if this item is enabled - protected boolean mEnabled = true; - - /** - * set if this item is enabled - * - * @param enabled true if this item is enabled - * @return - */ - public T withEnabled(boolean enabled) { - this.mEnabled = enabled; - return (T) this; - } - - /** - * @return if this item is enabled - */ - @Override - public boolean isEnabled() { - return mEnabled; - } - - // defines if the item is selected - protected boolean mSelected = false; - - /** - * set if this item is selected - * - * @param selected true if this item is selected - * @return - */ - @Override - public T withSetSelected(boolean selected) { - this.mSelected = selected; - return (T) this; - } - - /** - * @return if this item is selected - */ - @Override - public boolean isSelected() { - return mSelected; - } - - // defines if this item is selectable - protected boolean mSelectable = true; - - /** - * set if this item is selectable - * - * @param selectable true if this item is selectable - * @return - */ - @Override - public T withSelectable(boolean selectable) { - this.mSelectable = selectable; - return (T) this; - } - - /** - * @return if this item is selectable - */ - @Override - public boolean isSelectable() { - return mSelectable; - } - - // defines if the item's background' change should be animated when it is (de)selected - protected boolean mSelectedBackgroundAnimated = true; - - /** - * set if this item is selectable - * - * @param selectedBackgroundAnimated true if this item's background should fade when it is (de) selected - * @return - */ - public T withSelectedBackgroundAnimated(boolean selectedBackgroundAnimated) { - this.mSelectedBackgroundAnimated = selectedBackgroundAnimated; - return (T) this; - } - - /** - * @return if this item is selectable - */ - public boolean isSelectedBackgroundAnimated() { - return mSelectedBackgroundAnimated; - } - - public Drawer.OnDrawerItemClickListener mOnDrawerItemClickListener = null; - - public Drawer.OnDrawerItemClickListener getOnDrawerItemClickListener() { - return mOnDrawerItemClickListener; - } - - /** - * this listener is called when an item is clicked in the drawer. - * WARNING: don't overwrite this in the Switch / Toggle drawerItems if you want the toggle / switch to be selected - * if the item is clicked and the item is not selectable. - * - * @param onDrawerItemClickListener - * @return - */ - public T withOnDrawerItemClickListener(Drawer.OnDrawerItemClickListener onDrawerItemClickListener) { - this.mOnDrawerItemClickListener = onDrawerItemClickListener; - return (T) this; - } - - protected OnPostBindViewListener mOnPostBindViewListener = null; - - public OnPostBindViewListener getOnPostBindViewListener() { - return mOnPostBindViewListener; - } - - /** - * add this listener and hook in if you want to modify a drawerItems view without creating a custom drawer item - * - * @param onPostBindViewListener - * @return - */ - public T withPostOnBindViewListener(OnPostBindViewListener onPostBindViewListener) { - this.mOnPostBindViewListener = onPostBindViewListener; - return (T) this; - } - - /** - * is called after bindView to allow some post creation setps - * - * @param drawerItem the drawerItem which is bound to the view - * @param view the currently view which will be bound - */ - public void onPostBindView(IDrawerItem drawerItem, View view) { - if (mOnPostBindViewListener != null) { - mOnPostBindViewListener.onBindView(drawerItem, view); - } - } - - // the parent of this item - private IDrawerItem mParent; - - /** - * @return the parent of this item - */ - @Override - public IDrawerItem getParent() { - return mParent; - } - - /** - * the parent for this item - * - * @param parent it's parent - * @return this - */ - @Override - public IDrawerItem withParent(IDrawerItem parent) { - this.mParent = parent; - return this; - } - - // the subItems to expand for this item - protected List mSubItems; - - /** - * a list of subItems - * **WARNING** Make sure the subItems provided already have identifiers - * - * @param subItems - * @return - */ - public T withSubItems(List subItems) { - this.mSubItems = subItems; - for (IDrawerItem subItem : subItems) { - subItem.withParent(this); - } - return (T) this; - } - - /** - * an array of subItems - * **WARNING** Make sure the subItems provided already have identifiers - * - * @param subItems - * @return - */ - public T withSubItems(IDrawerItem... subItems) { - if (mSubItems == null) { - mSubItems = new ArrayList<>(); - } - for (IDrawerItem subItem : subItems) { - subItem.withParent(this); - } - Collections.addAll(mSubItems, subItems); - return (T) this; - } - - /** - * @return the subItems for this item - */ - @Override - public List getSubItems() { - return mSubItems; - } - - //if the this item is currently expanded - private boolean mExpanded = false; - - /** - * @param expanded defines if this item is now expanded or not - * @return this - */ - @Override - public T withIsExpanded(boolean expanded) { - mExpanded = expanded; - return (T) this; - } - - /** - * @return if this item is currently expaneded - */ - @Override - public boolean isExpanded() { - return mExpanded; - } - - - /** - * overwrite this method and return true if the item should auto expand on click, false if you want to disable this - * - * @return true if this item should auto expand in the adapter - */ - @Override - public boolean isAutoExpanding() { - return true; - } - - /** - * generates a view by the defined LayoutRes - * - * @param ctx - * @return - */ - @Override - public View generateView(Context ctx) { - VH viewHolder = getViewHolder(LayoutInflater.from(ctx).inflate(getLayoutRes(), null, false)); - bindView(viewHolder, Collections.emptyList()); - return viewHolder.itemView; - } - - /** - * generates a view by the defined LayoutRes and pass the LayoutParams from the parent - * - * @param ctx - * @param parent - * @return - */ - @Override - public View generateView(Context ctx, ViewGroup parent) { - VH viewHolder = getViewHolder(LayoutInflater.from(ctx).inflate(getLayoutRes(), parent, false)); - bindView(viewHolder, Collections.emptyList()); - return viewHolder.itemView; - } - - @CallSuper - @Override - public void bindView(VH holder, List payloads) { - holder.itemView.setTag(R.id.material_drawer_item, this); - } - - /** - * called when the view is unbound - * - * @param holder - */ - @Override - public void unbindView(VH holder) { - holder.itemView.clearAnimation(); - } - - /** - * View got attached to the window - * - * @param holder - */ - @Override - public void attachToWindow(VH holder) { - - } - - /** - * View got detached from the window - * - * @param holder - */ - @Override - public void detachFromWindow(VH holder) { - - } - - /** - * is called when the ViewHolder is in a transient state. return true if you want to reuse - * that view anyways - * - * @param holder the viewHolder for the view which failed to recycle - * @return true if we want to recycle anyways (false - it get's destroyed) - */ - @Override - public boolean failedToRecycle(VH holder) { - return false; - } - - /** - * This method returns the ViewHolder for our item, using the provided View. - * - * @param parent - * @return the ViewHolder for this Item - */ - @Override - public VH getViewHolder(ViewGroup parent) { - return getViewHolder(LayoutInflater.from(parent.getContext()).inflate(getLayoutRes(), parent, false)); - } - - /** - * This method returns the ViewHolder for our item, using the provided View. - * - * @param v - * @return the ViewHolder for this Item - */ - public abstract VH getViewHolder(View v); - - /** - * If this item equals to the given identifier - * - * @param id - * @return - */ - @Override - public boolean equals(long id) { - return id == mIdentifier; - } - - public boolean equals(int id) { - return id == mIdentifier; - } - - /** - * If this item equals to the given object - * - * @param o - * @return - */ - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - AbstractDrawerItem that = (AbstractDrawerItem) o; - return mIdentifier == that.mIdentifier; - } - - /** - * the hashCode implementation - * - * @return - */ - @Override - public int hashCode() { - return Long.valueOf(mIdentifier).hashCode(); - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.java deleted file mode 100644 index a41ed90a..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import androidx.annotation.LayoutRes; -import androidx.appcompat.widget.SwitchCompat; -import android.view.View; -import android.widget.CompoundButton; - -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) { - super.bindView(viewHolder, 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 ViewHolder getViewHolder(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/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.java deleted file mode 100644 index eaccfd47..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import androidx.annotation.LayoutRes; -import android.view.View; -import android.widget.CompoundButton; -import android.widget.ToggleButton; - -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) { - super.bindView(viewHolder, 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 ViewHolder getViewHolder(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/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseDescribeableDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseDescribeableDrawerItem.java deleted file mode 100644 index da6c1799..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseDescribeableDrawerItem.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import android.content.res.ColorStateList; -import android.graphics.drawable.Drawable; - -import com.mikepenz.materialdrawer.holder.ColorHolder; -import com.mikepenz.materialdrawer.holder.ImageHolder; -import com.mikepenz.materialdrawer.holder.StringHolder; -import com.mikepenz.materialdrawer.util.DrawerUIUtils; - -import androidx.annotation.ColorInt; -import androidx.annotation.ColorRes; -import androidx.annotation.StringRes; - -import static com.mikepenz.materialdrawer.util.DrawerUIUtils.themeDrawerItem; - -/** - * Created by mikepenz on 03.02.15. - */ -public abstract class BaseDescribeableDrawerItem extends BaseDrawerItem { - private StringHolder description; - private ColorHolder descriptionTextColor; - - @Override - public boolean isExcludeFromMiniDrawer() { - return this.excludeFromMiniDrawer; - } - - public T withDescription(String description) { - this.description = new StringHolder(description); - return (T) this; - } - - public T withDescription(@StringRes int descriptionRes) { - this.description = new StringHolder(descriptionRes); - return (T) this; - } - - public T withDescriptionTextColor(@ColorInt int color) { - this.descriptionTextColor = ColorHolder.fromColor(color); - return (T) this; - } - - public T withDescriptionTextColorRes(@ColorRes int colorRes) { - this.descriptionTextColor = ColorHolder.fromColorRes(colorRes); - return (T) this; - } - - public StringHolder getDescription() { - return description; - } - - public ColorHolder getDescriptionTextColor() { - return descriptionTextColor; - } - - /** - * a helper method to have the logic for all secondaryDrawerItems only once - * - * @param viewHolder - */ - protected void bindViewHelper(BaseViewHolder viewHolder) { - Context ctx = viewHolder.itemView.getContext(); - - //set the identifier from the drawerItem here. It can be used to run tests - viewHolder.itemView.setId(hashCode()); - - //set the item selected if it is - viewHolder.itemView.setSelected(isSelected()); - - //set the item enabled if it is - viewHolder.itemView.setEnabled(isEnabled()); - - //get the correct color for the background - int selectedColor = getSelectedColor(ctx); - //get the correct color for the text - int color = getColor(ctx); - ColorStateList selectedTextColor = getTextColorStateList(color, getSelectedTextColor(ctx)); - //get the correct color for the icon - int iconColor = getIconColor(ctx); - int selectedIconColor = getSelectedIconColor(ctx); - - //set the background for the item - themeDrawerItem(ctx, viewHolder.view, selectedColor, isSelectedBackgroundAnimated()); - //set the text for the name - StringHolder.applyTo(this.getName(), viewHolder.name); - //set the text for the description or hide - StringHolder.applyToOrHide(this.getDescription(), viewHolder.description); - - //set the colors for textViews - viewHolder.name.setTextColor(selectedTextColor); - //set the description text color - ColorHolder.applyToOr(getDescriptionTextColor(), viewHolder.description, selectedTextColor); - - //define the typeface for our textViews - if (getTypeface() != null) { - viewHolder.name.setTypeface(getTypeface()); - viewHolder.description.setTypeface(getTypeface()); - } - - //get the drawables for our icon and set it - Drawable icon = ImageHolder.decideIcon(getIcon(), ctx, iconColor, isIconTinted(), 1); - if (icon != null) { - Drawable selectedIcon = ImageHolder.decideIcon(getSelectedIcon(), ctx, selectedIconColor, isIconTinted(), 1); - ImageHolder.applyMultiIconTo(icon, iconColor, selectedIcon, selectedIconColor, isIconTinted(), viewHolder.icon); - } else { - ImageHolder.applyDecidedIconOrSetGone(getIcon(), viewHolder.icon, iconColor, isIconTinted(), 1); - } - - //for android API 17 --> Padding not applied via xml - DrawerUIUtils.setDrawerVerticalPadding(viewHolder.view, level); - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseDrawerItem.java deleted file mode 100644 index 0550f2cb..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseDrawerItem.java +++ /dev/null @@ -1,356 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import android.content.res.ColorStateList; -import android.graphics.Typeface; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.util.Pair; - -import com.mikepenz.iconics.typeface.IIcon; -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.holder.ColorHolder; -import com.mikepenz.materialdrawer.holder.ImageHolder; -import com.mikepenz.materialdrawer.holder.StringHolder; -import com.mikepenz.materialdrawer.model.interfaces.Iconable; -import com.mikepenz.materialdrawer.model.interfaces.Nameable; -import com.mikepenz.materialdrawer.model.interfaces.Tagable; -import com.mikepenz.materialdrawer.model.interfaces.Typefaceable; -import com.mikepenz.materialdrawer.util.DrawerUIUtils; - -import androidx.annotation.ColorInt; -import androidx.annotation.ColorRes; -import androidx.annotation.DrawableRes; -import androidx.annotation.StringRes; -import androidx.recyclerview.widget.RecyclerView; - -import static com.mikepenz.materialdrawer.util.DrawerUIUtils.getBooleanStyleable; - -/** - * Created by mikepenz on 03.02.15. - */ -public abstract class BaseDrawerItem extends AbstractDrawerItem implements Nameable, Iconable, Tagable, Typefaceable { - protected ImageHolder icon; - protected ImageHolder selectedIcon; - protected StringHolder name; - - protected boolean iconTinted = false; - - protected ColorHolder selectedColor; - protected ColorHolder textColor; - protected ColorHolder selectedTextColor; - protected ColorHolder disabledTextColor; - - protected ColorHolder iconColor; - protected ColorHolder selectedIconColor; - protected ColorHolder disabledIconColor; - - protected Typeface typeface = null; - - protected Pair colorStateList; - - protected int level = 1; - - protected boolean excludeFromMiniDrawer = false; - - public T withIcon(ImageHolder icon) { - this.icon = icon; - return (T) this; - } - - public T withIcon(Drawable icon) { - this.icon = new ImageHolder(icon); - return (T) this; - } - - public T withIcon(@DrawableRes int iconRes) { - this.icon = new ImageHolder(iconRes); - return (T) this; - } - - public T withSelectedIcon(Drawable selectedIcon) { - this.selectedIcon = new ImageHolder(selectedIcon); - return (T) this; - } - - public T withSelectedIcon(@DrawableRes int selectedIconRes) { - this.selectedIcon = new ImageHolder(selectedIconRes); - return (T) this; - } - - public T withIcon(IIcon iicon) { - this.icon = new ImageHolder(iicon); - //if we are on api 21 or higher we use the IconicsDrawable for selection too and color it with the correct color - //else we use just the one drawable and enable tinting on press - if (Build.VERSION.SDK_INT >= 21) { - this.selectedIcon = new ImageHolder(iicon); - } else { - this.withIconTintingEnabled(true); - } - - return (T) this; - } - - public T withName(StringHolder name) { - this.name = name; - return (T) this; - } - - public T withName(String name) { - this.name = new StringHolder(name); - return (T) this; - } - - public T withName(@StringRes int nameRes) { - this.name = new StringHolder(nameRes); - return (T) this; - } - - public T withSelectedColor(@ColorInt int selectedColor) { - this.selectedColor = ColorHolder.fromColor(selectedColor); - return (T) this; - } - - public T withSelectedColorRes(@ColorRes int selectedColorRes) { - this.selectedColor = ColorHolder.fromColorRes(selectedColorRes); - return (T) this; - } - - public T withTextColor(@ColorInt int textColor) { - this.textColor = ColorHolder.fromColor(textColor); - return (T) this; - } - - public T withTextColorRes(@ColorRes int textColorRes) { - this.textColor = ColorHolder.fromColorRes(textColorRes); - return (T) this; - } - - public T withSelectedTextColor(@ColorInt int selectedTextColor) { - this.selectedTextColor = ColorHolder.fromColor(selectedTextColor); - return (T) this; - } - - public T withSelectedTextColorRes(@ColorRes int selectedColorRes) { - this.selectedTextColor = ColorHolder.fromColorRes(selectedColorRes); - return (T) this; - } - - public T withDisabledTextColor(@ColorInt int disabledTextColor) { - this.disabledTextColor = ColorHolder.fromColor(disabledTextColor); - return (T) this; - } - - public T withDisabledTextColorRes(@ColorRes int disabledTextColorRes) { - this.disabledTextColor = ColorHolder.fromColorRes(disabledTextColorRes); - return (T) this; - } - - public T withIconColor(@ColorInt int iconColor) { - this.iconColor = ColorHolder.fromColor(iconColor); - return (T) this; - } - - public T withIconColorRes(@ColorRes int iconColorRes) { - this.iconColor = ColorHolder.fromColorRes(iconColorRes); - return (T) this; - } - - public T withSelectedIconColor(@ColorInt int selectedIconColor) { - this.selectedIconColor = ColorHolder.fromColor(selectedIconColor); - return (T) this; - } - - public T withSelectedIconColorRes(@ColorRes int selectedColorRes) { - this.selectedIconColor = ColorHolder.fromColorRes(selectedColorRes); - return (T) this; - } - - public T withDisabledIconColor(@ColorInt int disabledIconColor) { - this.disabledIconColor = ColorHolder.fromColor(disabledIconColor); - return (T) this; - } - - public T withDisabledIconColorRes(@ColorRes int disabledIconColorRes) { - this.disabledIconColor = ColorHolder.fromColorRes(disabledIconColorRes); - return (T) this; - } - - /** - * will tint the icon with the default (or set) colors - * (default and selected state) - * - * @param iconTintingEnabled - * @return - */ - public T withIconTintingEnabled(boolean iconTintingEnabled) { - this.iconTinted = iconTintingEnabled; - return (T) this; - } - - @Deprecated - public T withIconTinted(boolean iconTinted) { - this.iconTinted = iconTinted; - return (T) this; - } - - /** - * for backwards compatibility - withIconTinted.. - * - * @param iconTinted - * @return - */ - @Deprecated - public T withTintSelectedIcon(boolean iconTinted) { - return withIconTintingEnabled(iconTinted); - } - - public T withTypeface(Typeface typeface) { - this.typeface = typeface; - return (T) this; - } - - public T withLevel(int level) { - this.level = level; - return (T) this; - } - - public T withExcludeFromMiniDrawer(boolean excludeFromMiniDrawer) { - this.excludeFromMiniDrawer = excludeFromMiniDrawer; - return (T) this; - } - - - public ColorHolder getSelectedColor() { - return selectedColor; - } - - public ColorHolder getTextColor() { - return textColor; - } - - public ColorHolder getSelectedTextColor() { - return selectedTextColor; - } - - public ColorHolder getDisabledTextColor() { - return disabledTextColor; - } - - public boolean isIconTinted() { - return iconTinted; - } - - public ImageHolder getIcon() { - return icon; - } - - public ImageHolder getSelectedIcon() { - return selectedIcon; - } - - public StringHolder getName() { - return name; - } - - public ColorHolder getDisabledIconColor() { - return disabledIconColor; - } - - public ColorHolder getSelectedIconColor() { - return selectedIconColor; - } - - public ColorHolder getIconColor() { - return iconColor; - } - - public Typeface getTypeface() { - return typeface; - } - - public int getLevel() { - return level; - } - - /** - * helper method to decide for the correct color - * - * @param ctx - * @return - */ - protected int getSelectedColor(Context ctx) { - if (getBooleanStyleable(ctx, R.styleable.MaterialDrawer_material_drawer_legacy_style, false)) { - return ColorHolder.color(getSelectedColor(), ctx, R.attr.material_drawer_selected_legacy, R.color.material_drawer_selected_legacy); - } else { - return ColorHolder.color(getSelectedColor(), ctx, R.attr.material_drawer_selected, R.color.material_drawer_selected); - } - } - - /** - * helper method to decide for the correct color - * - * @param ctx - * @return - */ - protected int getColor(Context ctx) { - int color; - if (this.isEnabled()) { - color = ColorHolder.color(getTextColor(), ctx, R.attr.material_drawer_primary_text, R.color.material_drawer_primary_text); - } else { - color = ColorHolder.color(getDisabledTextColor(), ctx, R.attr.material_drawer_hint_text, R.color.material_drawer_hint_text); - } - return color; - } - - /** - * helper method to decide for the correct color - * - * @param ctx - * @return - */ - protected int getSelectedTextColor(Context ctx) { - return ColorHolder.color(getSelectedTextColor(), ctx, R.attr.material_drawer_selected_text, R.color.material_drawer_selected_text); - } - - /** - * helper method to decide for the correct color - * - * @param ctx - * @return - */ - public int getIconColor(Context ctx) { - int iconColor; - if (this.isEnabled()) { - iconColor = ColorHolder.color(getIconColor(), ctx, R.attr.material_drawer_primary_icon, R.color.material_drawer_primary_icon); - } else { - iconColor = ColorHolder.color(getDisabledIconColor(), ctx, R.attr.material_drawer_hint_icon, R.color.material_drawer_hint_icon); - } - return iconColor; - } - - /** - * helper method to decide for the correct color - * - * @param ctx - * @return - */ - protected int getSelectedIconColor(Context ctx) { - return ColorHolder.color(getSelectedIconColor(), ctx, R.attr.material_drawer_selected_text, R.color.material_drawer_selected_text); - } - - /** - * helper to get the ColorStateList for the text and remembering it so we do not have to recreate it all the time - * - * @param color - * @param selectedTextColor - * @return - */ - protected ColorStateList getTextColorStateList(@ColorInt int color, @ColorInt int selectedTextColor) { - if (colorStateList == null || color + selectedTextColor != colorStateList.first) { - colorStateList = new Pair<>(color + selectedTextColor, DrawerUIUtils.getTextColorStateList(color, selectedTextColor)); - } - - return colorStateList.second; - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseViewHolder.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseViewHolder.java deleted file mode 100644 index a49e3a4d..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseViewHolder.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.mikepenz.materialdrawer.R; - -import androidx.recyclerview.widget.RecyclerView; - -public class BaseViewHolder extends RecyclerView.ViewHolder { - protected View view; - protected ImageView icon; - protected TextView name; - protected TextView description; - - public BaseViewHolder(View view) { - super(view); - - this.view = view; - this.icon = view.findViewById(R.id.material_drawer_icon); - this.name = view.findViewById(R.id.material_drawer_name); - this.description = view.findViewById(R.id.material_drawer_description); - } -} \ No newline at end of file diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ContainerDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ContainerDrawerItem.java deleted file mode 100644 index c636dbf8..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ContainerDrawerItem.java +++ /dev/null @@ -1,149 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import androidx.annotation.LayoutRes; -import androidx.recyclerview.widget.RecyclerView; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; - -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.holder.DimenHolder; -import com.mikepenz.materialize.util.UIUtils; - -import java.util.List; - -/** - * Created by mikepenz on 03.02.15. - */ -public class ContainerDrawerItem extends AbstractDrawerItem { - - private DimenHolder mHeight; - - public ContainerDrawerItem withHeight(DimenHolder height) { - mHeight = height; - return this; - } - - public DimenHolder getHeight() { - return mHeight; - } - - private View mView; - - public ContainerDrawerItem withView(View view) { - this.mView = view; - return this; - } - - public View getView() { - return mView; - } - - public enum Position { - TOP, - BOTTOM, - NONE; - } - - private Position mViewPosition = Position.TOP; - - public ContainerDrawerItem withViewPosition(Position position) { - this.mViewPosition = position; - return this; - } - - private boolean mDivider = true; - - public ContainerDrawerItem withDivider(boolean divider) { - this.mDivider = divider; - return this; - } - - public Position getViewPosition() { - return mViewPosition; - } - - @Override - public int getType() { - return R.id.material_drawer_item_container; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_container; - } - - @Override - public void bindView(ViewHolder viewHolder, List payloads) { - super.bindView(viewHolder, payloads); - - Context ctx = viewHolder.itemView.getContext(); - - //set the identifier from the drawerItem here. It can be used to run tests - viewHolder.itemView.setId(hashCode()); - - //define how the divider should look like - viewHolder.view.setEnabled(false); - - //make sure our view is not used in another parent - if (mView.getParent() != null) { - ((ViewGroup) mView.getParent()).removeView(mView); - } - - //set the height - int height = ViewGroup.LayoutParams.WRAP_CONTENT; - if (mHeight != null) { - RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) viewHolder.view.getLayoutParams(); - height = mHeight.asPixel(ctx); - lp.height = height; - viewHolder.view.setLayoutParams(lp); - } - - //make sure the header view is empty - ((ViewGroup) viewHolder.view).removeAllViews(); - - int dividerHeight = 0; - if (mDivider) { - dividerHeight = 1; - } - - View divider = new View(ctx); - divider.setMinimumHeight(dividerHeight); - divider.setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(ctx, R.attr.material_drawer_divider, R.color.material_drawer_divider)); - - LinearLayout.LayoutParams dividerParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) UIUtils.convertDpToPixel(dividerHeight, ctx)); - LinearLayout.LayoutParams viewParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, mHeight != null ? height - (int) UIUtils.convertDpToPixel(dividerHeight, ctx) : height); - - //depending on the position we add the view - if (mViewPosition == Position.TOP) { - ((ViewGroup) viewHolder.view).addView(mView, viewParams); - dividerParams.bottomMargin = ctx.getResources().getDimensionPixelSize(R.dimen.material_drawer_padding); - ((ViewGroup) viewHolder.view).addView(divider, dividerParams); - } else if (mViewPosition == Position.BOTTOM) { - dividerParams.topMargin = ctx.getResources().getDimensionPixelSize(R.dimen.material_drawer_padding); - ((ViewGroup) viewHolder.view).addView(divider, dividerParams); - ((ViewGroup) viewHolder.view).addView(mView, viewParams); - } else { - ((ViewGroup) viewHolder.view).addView(mView, viewParams); - } - - //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 ViewHolder getViewHolder(View v) { - return new ViewHolder(v); - } - - public static class ViewHolder extends RecyclerView.ViewHolder { - private View view; - - private ViewHolder(View view) { - super(view); - this.view = view; - } - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/DividerDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/DividerDrawerItem.java deleted file mode 100644 index e7429d1e..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/DividerDrawerItem.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import androidx.annotation.LayoutRes; -import androidx.core.view.ViewCompat; -import androidx.recyclerview.widget.RecyclerView; -import android.view.View; - -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialize.util.UIUtils; - -import java.util.List; - -/** - * Created by mikepenz on 03.02.15. - */ -public class DividerDrawerItem extends AbstractDrawerItem { - @Override - public int getType() { - return R.id.material_drawer_item_divider; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_divider; - } - - @Override - public void bindView(ViewHolder viewHolder, List payloads) { - super.bindView(viewHolder, payloads); - - Context ctx = viewHolder.itemView.getContext(); - - //set the identifier from the drawerItem here. It can be used to run tests - viewHolder.itemView.setId(hashCode()); - - //define how the divider should look like - viewHolder.view.setClickable(false); - viewHolder.view.setEnabled(false); - viewHolder.view.setMinimumHeight(1); - ViewCompat.setImportantForAccessibility(viewHolder.view, - ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO); - - //set the color for the divider - viewHolder.divider.setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(ctx, R.attr.material_drawer_divider, R.color.material_drawer_divider)); - - //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 ViewHolder getViewHolder(View v) { - return new ViewHolder(v); - } - - public static class ViewHolder extends RecyclerView.ViewHolder { - private View view; - private View divider; - - private ViewHolder(View view) { - super(view); - this.view = view; - this.divider = view.findViewById(R.id.material_drawer_divider); - } - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ExpandableBadgeDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ExpandableBadgeDrawerItem.java deleted file mode 100644 index f481a741..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ExpandableBadgeDrawerItem.java +++ /dev/null @@ -1,174 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import android.graphics.Color; -import androidx.annotation.LayoutRes; -import androidx.annotation.StringRes; -import androidx.core.view.ViewCompat; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.mikepenz.iconics.IconicsDrawable; -import com.mikepenz.materialdrawer.Drawer; -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.holder.BadgeStyle; -import com.mikepenz.materialdrawer.holder.ColorHolder; -import com.mikepenz.materialdrawer.holder.StringHolder; -import com.mikepenz.materialdrawer.icons.MaterialDrawerFont; -import com.mikepenz.materialdrawer.model.interfaces.ColorfulBadgeable; -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 ExpandableBadgeDrawerItem extends BaseDescribeableDrawerItem - implements ColorfulBadgeable { - - private Drawer.OnDrawerItemClickListener mOnDrawerItemClickListener; - - protected ColorHolder arrowColor; - - protected int arrowRotationAngleStart = 0; - - protected int arrowRotationAngleEnd = 180; - - protected StringHolder mBadge; - protected BadgeStyle mBadgeStyle = new BadgeStyle(); - - @Override - public int getType() { - return R.id.material_drawer_item_expandable_badge; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_expandable_badge; - } - - @Override - public void bindView(ExpandableBadgeDrawerItem.ViewHolder viewHolder, List payloads) { - super.bindView(viewHolder, 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 (true) { - 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()); - } - - //make sure all animations are stopped - if (viewHolder.arrow.getDrawable() instanceof IconicsDrawable) { - ((IconicsDrawable) viewHolder.arrow.getDrawable()).color(this.arrowColor != null ? this.arrowColor.color(ctx) : getIconColor(ctx)); - } - viewHolder.arrow.clearAnimation(); - if (!isExpanded()) { - viewHolder.arrow.setRotation(this.arrowRotationAngleStart); - } else { - viewHolder.arrow.setRotation(this.arrowRotationAngleEnd); - } - - //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 ExpandableBadgeDrawerItem withOnDrawerItemClickListener(Drawer.OnDrawerItemClickListener onDrawerItemClickListener) { - mOnDrawerItemClickListener = onDrawerItemClickListener; - return this; - } - - @Override - public Drawer.OnDrawerItemClickListener getOnDrawerItemClickListener() { - return mOnArrowDrawerItemClickListener; - } - - /** - * our internal onDrawerItemClickListener which will handle the arrow animation - */ - private Drawer.OnDrawerItemClickListener mOnArrowDrawerItemClickListener = new Drawer.OnDrawerItemClickListener() { - @Override - public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { - if (drawerItem instanceof AbstractDrawerItem && drawerItem.isEnabled()) { - if (((AbstractDrawerItem) drawerItem).getSubItems() != null) { - if (((AbstractDrawerItem) drawerItem).isExpanded()) { - ViewCompat.animate(view.findViewById(R.id.material_drawer_arrow)).rotation(ExpandableBadgeDrawerItem.this.arrowRotationAngleEnd).start(); - } else { - ViewCompat.animate(view.findViewById(R.id.material_drawer_arrow)) - .rotation(ExpandableBadgeDrawerItem.this.arrowRotationAngleStart) - .start(); - } - } - } - - return mOnDrawerItemClickListener != null && mOnDrawerItemClickListener.onItemClick(view, position, drawerItem); - } - }; - - @Override - public ExpandableBadgeDrawerItem withBadge(StringHolder badge) { - this.mBadge = badge; - return (ExpandableBadgeDrawerItem) this; - } - - @Override - public ExpandableBadgeDrawerItem withBadge(String badge) { - this.mBadge = new StringHolder(badge); - return (ExpandableBadgeDrawerItem) this; - } - - @Override - public ExpandableBadgeDrawerItem withBadge(@StringRes int badgeRes) { - this.mBadge = new StringHolder(badgeRes); - return (ExpandableBadgeDrawerItem) this; - } - - @Override - public ExpandableBadgeDrawerItem withBadgeStyle(BadgeStyle badgeStyle) { - this.mBadgeStyle = badgeStyle; - return (ExpandableBadgeDrawerItem) this; - } - - public StringHolder getBadge() { - return mBadge; - } - - public BadgeStyle getBadgeStyle() { - return mBadgeStyle; - } - - @Override - public ViewHolder getViewHolder(View v) { - return new ViewHolder(v); - } - - public static class ViewHolder extends BaseViewHolder { - public ImageView arrow; - public View badgeContainer; - public TextView badge; - - public ViewHolder(View view) { - super(view); - badgeContainer = view.findViewById(R.id.material_drawer_badge_container); - badge = view.findViewById(R.id.material_drawer_badge); - arrow = view.findViewById(R.id.material_drawer_arrow); - arrow.setImageDrawable(new IconicsDrawable(view.getContext(), MaterialDrawerFont.Icon.mdf_expand_more).sizeDp(16).paddingDp(2).color(Color.BLACK)); - } - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ExpandableDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ExpandableDrawerItem.java deleted file mode 100644 index f457d131..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ExpandableDrawerItem.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import android.graphics.Color; -import androidx.annotation.ColorInt; -import androidx.annotation.ColorRes; -import androidx.annotation.LayoutRes; -import androidx.core.view.ViewCompat; -import android.view.View; -import android.widget.ImageView; - -import com.mikepenz.iconics.IconicsDrawable; -import com.mikepenz.materialdrawer.Drawer; -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.holder.ColorHolder; -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 BaseDescribeableDrawerItem { - - private Drawer.OnDrawerItemClickListener mOnDrawerItemClickListener; - - protected ColorHolder arrowColor; - - protected int arrowRotationAngleStart = 0; - - protected int arrowRotationAngleEnd = 180; - - public ExpandableDrawerItem withArrowColor(@ColorInt int arrowColor) { - this.arrowColor = ColorHolder.fromColor(arrowColor); - return this; - } - - public ExpandableDrawerItem withArrowColorRes(@ColorRes int arrowColorRes) { - this.arrowColor = ColorHolder.fromColorRes(arrowColorRes); - return this; - } - - public ExpandableDrawerItem withArrowRotationAngleStart(int angle) { - this.arrowRotationAngleStart = angle; - return this; - } - - public ExpandableDrawerItem withArrowRotationAngleEnd(int angle) { - this.arrowRotationAngleEnd = angle; - return this; - } - - @Override - public int getType() { - return R.id.material_drawer_item_expandable; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_expandable; - } - - @Override - public ExpandableDrawerItem withOnDrawerItemClickListener(Drawer.OnDrawerItemClickListener onDrawerItemClickListener) { - mOnDrawerItemClickListener = onDrawerItemClickListener; - return this; - } - - @Override - public Drawer.OnDrawerItemClickListener getOnDrawerItemClickListener() { - return mOnArrowDrawerItemClickListener; - } - - /** - * our internal onDrawerItemClickListener which will handle the arrow animation - */ - private Drawer.OnDrawerItemClickListener mOnArrowDrawerItemClickListener = new Drawer.OnDrawerItemClickListener() { - @Override - public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { - if (drawerItem instanceof AbstractDrawerItem && drawerItem.isEnabled()) { - if (((AbstractDrawerItem) drawerItem).getSubItems() != null) { - if (((AbstractDrawerItem) drawerItem).isExpanded()) { - ViewCompat.animate(view.findViewById(R.id.material_drawer_arrow)).rotation(ExpandableDrawerItem.this.arrowRotationAngleEnd).start(); - } else { - ViewCompat.animate(view.findViewById(R.id.material_drawer_arrow)).rotation(ExpandableDrawerItem.this.arrowRotationAngleStart).start(); - } - } - } - - return mOnDrawerItemClickListener != null && mOnDrawerItemClickListener.onItemClick(view, position, drawerItem); - } - }; - - @Override - public void bindView(ViewHolder viewHolder, List payloads) { - super.bindView(viewHolder, payloads); - - Context ctx = viewHolder.itemView.getContext(); - //bind the basic view parts - bindViewHelper(viewHolder); - - //make sure all animations are stopped - if (viewHolder.arrow.getDrawable() instanceof IconicsDrawable) { - ((IconicsDrawable) viewHolder.arrow.getDrawable()).color(this.arrowColor != null ? this.arrowColor.color(ctx) : getIconColor(ctx)); - } - viewHolder.arrow.clearAnimation(); - if (!isExpanded()) { - viewHolder.arrow.setRotation(this.arrowRotationAngleStart); - } else { - viewHolder.arrow.setRotation(this.arrowRotationAngleEnd); - } - - //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 ViewHolder getViewHolder(View v) { - return new ViewHolder(v); - } - - public static class ViewHolder extends BaseViewHolder { - public ImageView arrow; - - public ViewHolder(View view) { - super(view); - arrow = view.findViewById(R.id.material_drawer_arrow); - arrow.setImageDrawable(new IconicsDrawable(view.getContext(), MaterialDrawerFont.Icon.mdf_expand_more).sizeDp(16).paddingDp(2).color(Color.BLACK)); - } - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/MiniDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/MiniDrawerItem.java deleted file mode 100644 index 6303b2bb..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/MiniDrawerItem.java +++ /dev/null @@ -1,193 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.holder.BadgeStyle; -import com.mikepenz.materialdrawer.holder.DimenHolder; -import com.mikepenz.materialdrawer.holder.ImageHolder; -import com.mikepenz.materialdrawer.holder.StringHolder; - -import java.util.List; - -import androidx.annotation.DimenRes; -import androidx.annotation.LayoutRes; -import androidx.recyclerview.widget.RecyclerView; - -import static com.mikepenz.materialdrawer.util.DrawerUIUtils.themeDrawerItem; - -/** - * Created by mikepenz on 03.02.15. - */ -public class MiniDrawerItem extends BaseDrawerItem { - private StringHolder mBadge; - private BadgeStyle mBadgeStyle = new BadgeStyle(); - - private boolean mEnableSelectedBackground = false; - protected DimenHolder mCustomHeight; - - public MiniDrawerItem() { - - } - - public MiniDrawerItem(PrimaryDrawerItem primaryDrawerItem) { - this.mIdentifier = primaryDrawerItem.mIdentifier; - this.mTag = primaryDrawerItem.mTag; - - this.mBadge = primaryDrawerItem.mBadge; - this.mBadgeStyle = primaryDrawerItem.mBadgeStyle; - - this.mEnabled = primaryDrawerItem.mEnabled; - this.mSelectable = primaryDrawerItem.mSelectable; - this.mSelected = primaryDrawerItem.mSelected; - - this.icon = primaryDrawerItem.icon; - this.selectedIcon = primaryDrawerItem.selectedIcon; - - this.iconTinted = primaryDrawerItem.iconTinted; - this.selectedColor = primaryDrawerItem.selectedColor; - - this.iconColor = primaryDrawerItem.iconColor; - this.selectedIconColor = primaryDrawerItem.selectedIconColor; - this.disabledIconColor = primaryDrawerItem.disabledIconColor; - } - - public MiniDrawerItem(SecondaryDrawerItem secondaryDrawerItem) { - this.mIdentifier = secondaryDrawerItem.mIdentifier; - this.mTag = secondaryDrawerItem.mTag; - - this.mBadge = secondaryDrawerItem.mBadge; - this.mBadgeStyle = secondaryDrawerItem.mBadgeStyle; - - this.mEnabled = secondaryDrawerItem.mEnabled; - this.mSelectable = secondaryDrawerItem.mSelectable; - this.mSelected = secondaryDrawerItem.mSelected; - - this.icon = secondaryDrawerItem.icon; - this.selectedIcon = secondaryDrawerItem.selectedIcon; - - this.iconTinted = secondaryDrawerItem.iconTinted; - this.selectedColor = secondaryDrawerItem.selectedColor; - - this.iconColor = secondaryDrawerItem.iconColor; - this.selectedIconColor = secondaryDrawerItem.selectedIconColor; - this.disabledIconColor = secondaryDrawerItem.disabledIconColor; - } - - - public MiniDrawerItem withCustomHeightRes(@DimenRes int customHeightRes) { - this.mCustomHeight = DimenHolder.fromResource(customHeightRes); - return this; - } - - public MiniDrawerItem withCustomHeightDp(int customHeightDp) { - this.mCustomHeight = DimenHolder.fromDp(customHeightDp); - return this; - } - - public MiniDrawerItem withCustomHeightPx(int customHeightPx) { - this.mCustomHeight = DimenHolder.fromPixel(customHeightPx); - return this; - } - - public MiniDrawerItem withCustomHeight(DimenHolder customHeight) { - this.mCustomHeight = customHeight; - return this; - } - - public MiniDrawerItem withEnableSelectedBackground(boolean enableSelectedBackground) { - this.mEnableSelectedBackground = enableSelectedBackground; - return this; - } - - @Override - public int getType() { - return R.id.material_drawer_item_mini; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_mini; - } - - @Override - public void bindView(ViewHolder viewHolder, List payloads) { - super.bindView(viewHolder, payloads); - - Context ctx = viewHolder.itemView.getContext(); - - //set a different height for this item - if (mCustomHeight != null) { - RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) viewHolder.itemView.getLayoutParams(); - lp.height = mCustomHeight.asPixel(ctx); - viewHolder.itemView.setLayoutParams(lp); - } - - //set the identifier from the drawerItem here. It can be used to run tests - viewHolder.itemView.setId(hashCode()); - - //set the item enabled if it is - viewHolder.itemView.setEnabled(isEnabled()); - - //set the item selected if it is - viewHolder.itemView.setSelected(isSelected()); - - // - viewHolder.itemView.setTag(this); - - //get the correct color for the icon - int iconColor = getIconColor(ctx); - int selectedIconColor = getSelectedIconColor(ctx); - - if (mEnableSelectedBackground) { - //get the correct color for the background - int selectedColor = getSelectedColor(ctx); - //set the background for the item - themeDrawerItem(ctx, viewHolder.view, selectedColor, isSelectedBackgroundAnimated()); - } - - //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); - } - - //get the drawables for our icon and set it - Drawable icon = ImageHolder.decideIcon(getIcon(), ctx, iconColor, isIconTinted(), 1); - Drawable selectedIcon = ImageHolder.decideIcon(getSelectedIcon(), ctx, selectedIconColor, isIconTinted(), 1); - ImageHolder.applyMultiIconTo(icon, iconColor, selectedIcon, selectedIconColor, isIconTinted(), viewHolder.icon); - - //for android API 17 --> Padding not applied via xml - int verticalPadding = ctx.getResources().getDimensionPixelSize(R.dimen.material_drawer_padding); - int topBottomPadding = ctx.getResources().getDimensionPixelSize(R.dimen.material_mini_drawer_item_padding); - viewHolder.itemView.setPadding(verticalPadding, topBottomPadding, verticalPadding, topBottomPadding); - - //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 ViewHolder getViewHolder(View v) { - return new ViewHolder(v); - } - - public static class ViewHolder extends RecyclerView.ViewHolder { - private View view; - private ImageView icon; - private TextView badge; - - public ViewHolder(View view) { - super(view); - - this.view = view; - this.icon = (ImageView) view.findViewById(R.id.material_drawer_icon); - this.badge = (TextView) view.findViewById(R.id.material_drawer_badge); - } - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/MiniProfileDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/MiniProfileDrawerItem.java deleted file mode 100644 index c4a09653..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/MiniProfileDrawerItem.java +++ /dev/null @@ -1,168 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import androidx.annotation.DimenRes; -import androidx.annotation.DrawableRes; -import androidx.annotation.LayoutRes; -import androidx.recyclerview.widget.RecyclerView; -import android.view.View; -import android.widget.ImageView; - -import com.mikepenz.iconics.typeface.IIcon; -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.holder.DimenHolder; -import com.mikepenz.materialdrawer.holder.ImageHolder; -import com.mikepenz.materialdrawer.holder.StringHolder; -import com.mikepenz.materialdrawer.model.interfaces.IProfile; - -import java.util.List; - -/** - * Created by mikepenz on 03.02.15. - */ -public class MiniProfileDrawerItem extends AbstractDrawerItem implements IProfile { - protected ImageHolder icon; - - protected DimenHolder customHeight; - - public MiniProfileDrawerItem() { - withSelectable(false); - } - - public MiniProfileDrawerItem(ProfileDrawerItem profile) { - this.icon = profile.icon; - this.mEnabled = profile.mEnabled; - withSelectable(false); - } - - @Override - public MiniProfileDrawerItem withName(CharSequence name) { - return null; - } - - @Override - public StringHolder getName() { - return null; - } - - @Override - public MiniProfileDrawerItem withEmail(String email) { - return null; - } - - @Override - public StringHolder getEmail() { - return null; - } - - @Override - public MiniProfileDrawerItem withIcon(Drawable icon) { - this.icon = new ImageHolder(icon); - return this; - } - - @Override - public MiniProfileDrawerItem withIcon(@DrawableRes int iconRes) { - this.icon = new ImageHolder(iconRes); - return this; - } - - @Override - public MiniProfileDrawerItem withIcon(Bitmap iconBitmap) { - this.icon = new ImageHolder(iconBitmap); - return this; - } - - @Override - public MiniProfileDrawerItem withIcon(String url) { - this.icon = new ImageHolder(url); - return this; - } - - @Override - public MiniProfileDrawerItem withIcon(Uri uri) { - this.icon = new ImageHolder(uri); - return this; - } - - @Override - public MiniProfileDrawerItem withIcon(IIcon icon) { - this.icon = new ImageHolder(icon); - return this; - } - - public MiniProfileDrawerItem withCustomHeightRes(@DimenRes int customHeightRes) { - this.customHeight = DimenHolder.fromResource(customHeightRes); - return this; - } - - public MiniProfileDrawerItem withCustomHeightDp(int customHeightDp) { - this.customHeight = DimenHolder.fromDp(customHeightDp); - return this; - } - - public MiniProfileDrawerItem withCustomHeightPx(int customHeightPx) { - this.customHeight = DimenHolder.fromPixel(customHeightPx); - return this; - } - - public MiniProfileDrawerItem withCustomHeight(DimenHolder customHeight) { - this.customHeight = customHeight; - return this; - } - - @Override - public ImageHolder getIcon() { - return icon; - } - - @Override - public int getType() { - return R.id.material_drawer_item_mini_profile; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_mini_profile; - } - - @Override - public void bindView(ViewHolder viewHolder, List payloads) { - super.bindView(viewHolder, payloads); - - if (customHeight != null) { - RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) viewHolder.itemView.getLayoutParams(); - lp.height = customHeight.asPixel(viewHolder.itemView.getContext()); - viewHolder.itemView.setLayoutParams(lp); - } - - //set the identifier from the drawerItem here. It can be used to run tests - viewHolder.itemView.setId(hashCode()); - - //set the item enabled if it is - viewHolder.itemView.setEnabled(isEnabled()); - - //set the icon - ImageHolder.applyToOrSetInvisible(getIcon(), viewHolder.icon); - - //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 ViewHolder getViewHolder(View v) { - return new ViewHolder(v); - } - - public static class ViewHolder extends RecyclerView.ViewHolder { - private ImageView icon; - - public ViewHolder(View view) { - super(view); - this.icon = (ImageView) view.findViewById(R.id.material_drawer_icon); - } - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/PrimaryDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/PrimaryDrawerItem.java deleted file mode 100644 index accf6f41..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/PrimaryDrawerItem.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -/** - * Created by mikepenz on 03.02.15. - */ -public class PrimaryDrawerItem extends AbstractBadgeableDrawerItem { - -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ProfileDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ProfileDrawerItem.java deleted file mode 100644 index 492d19af..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ProfileDrawerItem.java +++ /dev/null @@ -1,365 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import android.content.res.ColorStateList; -import android.graphics.Bitmap; -import android.graphics.Typeface; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.util.Pair; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.mikepenz.iconics.typeface.IIcon; -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.holder.ColorHolder; -import com.mikepenz.materialdrawer.holder.ImageHolder; -import com.mikepenz.materialdrawer.holder.StringHolder; -import com.mikepenz.materialdrawer.model.interfaces.IProfile; -import com.mikepenz.materialdrawer.model.interfaces.Tagable; -import com.mikepenz.materialdrawer.model.interfaces.Typefaceable; -import com.mikepenz.materialdrawer.util.DrawerImageLoader; -import com.mikepenz.materialdrawer.util.DrawerUIUtils; - -import java.util.List; - -import androidx.annotation.ColorInt; -import androidx.annotation.ColorRes; -import androidx.annotation.DrawableRes; -import androidx.annotation.LayoutRes; -import androidx.annotation.StringRes; -import androidx.recyclerview.widget.RecyclerView; - -import static com.mikepenz.materialdrawer.util.DrawerUIUtils.getBooleanStyleable; -import static com.mikepenz.materialdrawer.util.DrawerUIUtils.themeDrawerItem; - -/** - * Created by mikepenz on 03.02.15. - */ -public class ProfileDrawerItem extends AbstractDrawerItem implements IProfile, Tagable, Typefaceable { - protected boolean nameShown = false; - - protected ImageHolder icon; - - protected StringHolder name; - protected StringHolder email; - - protected ColorHolder selectedColor; - protected ColorHolder textColor; - protected ColorHolder selectedTextColor; - protected ColorHolder disabledTextColor; - - protected Typeface typeface = null; - - @Override - public ProfileDrawerItem withIcon(Drawable icon) { - this.icon = new ImageHolder(icon); - return this; - } - - @Override - public ProfileDrawerItem withIcon(@DrawableRes int iconRes) { - this.icon = new ImageHolder(iconRes); - return this; - } - - @Override - public ProfileDrawerItem withIcon(Bitmap iconBitmap) { - this.icon = new ImageHolder(iconBitmap); - return this; - } - - @Override - public ProfileDrawerItem withIcon(IIcon icon) { - this.icon = new ImageHolder(icon); - return this; - } - - @Override - public ProfileDrawerItem withIcon(String url) { - this.icon = new ImageHolder(url); - return this; - } - - @Override - public ProfileDrawerItem withIcon(Uri uri) { - this.icon = new ImageHolder(uri); - return this; - } - - public ProfileDrawerItem withName(CharSequence name) { - this.name = new StringHolder(name); - return this; - } - - public ProfileDrawerItem withName(@StringRes int nameRes) { - this.name = new StringHolder(nameRes); - return this; - } - - public ProfileDrawerItem withEmail(String email) { - this.email = new StringHolder(email); - return this; - } - - public ProfileDrawerItem withEmail(@StringRes int emailRes) { - this.email = new StringHolder(emailRes); - return this; - } - - /** - * Whether to show the profile name in the account switcher. - * - * @param nameShown show name in switcher - * @return the {@link ProfileDrawerItem} - */ - public ProfileDrawerItem withNameShown(boolean nameShown) { - this.nameShown = nameShown; - return this; - } - - public ProfileDrawerItem withSelectedColor(@ColorInt int selectedColor) { - this.selectedColor = ColorHolder.fromColor(selectedColor); - return this; - } - - public ProfileDrawerItem withSelectedColorRes(@ColorRes int selectedColorRes) { - this.selectedColor = ColorHolder.fromColorRes(selectedColorRes); - return this; - } - - public ProfileDrawerItem withTextColor(@ColorInt int textColor) { - this.textColor = ColorHolder.fromColor(textColor); - return this; - } - - public ProfileDrawerItem withTextColorRes(@ColorRes int textColorRes) { - this.textColor = ColorHolder.fromColorRes(textColorRes); - return this; - } - - public ProfileDrawerItem withSelectedTextColor(@ColorInt int selectedTextColor) { - this.selectedTextColor = ColorHolder.fromColor(selectedTextColor); - return this; - } - - public ProfileDrawerItem withSelectedTextColorRes(@ColorRes int selectedColorRes) { - this.selectedTextColor = ColorHolder.fromColorRes(selectedColorRes); - return this; - } - - public ProfileDrawerItem withDisabledTextColor(@ColorInt int disabledTextColor) { - this.disabledTextColor = ColorHolder.fromColor(disabledTextColor); - return this; - } - - public ProfileDrawerItem withDisabledTextColorRes(@ColorRes int disabledTextColorRes) { - this.disabledTextColor = ColorHolder.fromColorRes(disabledTextColorRes); - return this; - } - - public ProfileDrawerItem withTypeface(Typeface typeface) { - this.typeface = typeface; - return this; - } - - public boolean isNameShown() { - return nameShown; - } - - public ColorHolder getSelectedColor() { - return selectedColor; - } - - public ColorHolder getTextColor() { - return textColor; - } - - public ColorHolder getSelectedTextColor() { - return selectedTextColor; - } - - public ColorHolder getDisabledTextColor() { - return disabledTextColor; - } - - @Override - public Typeface getTypeface() { - return typeface; - } - - public ImageHolder getIcon() { - return icon; - } - - @Override - public StringHolder getName() { - return name; - } - - public StringHolder getEmail() { - return email; - } - - @Override - public int getType() { - return R.id.material_drawer_item_profile; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_profile; - } - - @Override - public void bindView(ViewHolder viewHolder, List payloads) { - super.bindView(viewHolder, payloads); - - Context ctx = viewHolder.itemView.getContext(); - - //set the identifier from the drawerItem here. It can be used to run tests - viewHolder.itemView.setId(hashCode()); - - //set the item enabled if it is - viewHolder.itemView.setEnabled(isEnabled()); - - //set the item selected if it is - viewHolder.itemView.setSelected(isSelected()); - - //get the correct color for the background - int selectedColor = getSelectedColor(ctx); - //get the correct color for the text - int color = getColor(ctx); - int secondaryColor = getSecondaryColor(ctx); - int selectedTextColor = getSelectedTextColor(ctx); - - //set the background for the item - themeDrawerItem(ctx, viewHolder.view, selectedColor, isSelectedBackgroundAnimated()); - - if (nameShown) { - viewHolder.name.setVisibility(View.VISIBLE); - StringHolder.applyTo(this.getName(), viewHolder.name); - } else { - viewHolder.name.setVisibility(View.GONE); - } - //the MaterialDrawer follows the Google Apps. those only show the e-mail - //within the profile switcher. The problem this causes some confusion for - //some developers. And if you only set the name, the item would be empty - //so here's a small fallback which will prevent this issue of empty items ;) - if (!nameShown && this.getEmail() == null && this.getName() != null) { - StringHolder.applyTo(this.getName(), viewHolder.email); - } else { - StringHolder.applyTo(this.getEmail(), viewHolder.email); - } - - if (getTypeface() != null) { - viewHolder.name.setTypeface(getTypeface()); - viewHolder.email.setTypeface(getTypeface()); - } - - if (nameShown) { - viewHolder.name.setTextColor(getTextColorStateList(color, selectedTextColor)); - } - viewHolder.email.setTextColor(getTextColorStateList(secondaryColor, selectedTextColor)); - - //cancel previous started image loading processes - DrawerImageLoader.getInstance().cancelImage(viewHolder.profileIcon); - //set the icon - ImageHolder.applyToOrSetInvisible(getIcon(), viewHolder.profileIcon, DrawerImageLoader.Tags.PROFILE_DRAWER_ITEM.name()); - - //for android API 17 --> Padding not applied via xml - DrawerUIUtils.setDrawerVerticalPadding(viewHolder.view); - - //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 ViewHolder getViewHolder(View v) { - return new ViewHolder(v); - } - - public static class ViewHolder extends RecyclerView.ViewHolder { - private View view; - private ImageView profileIcon; - private TextView name; - private TextView email; - - private ViewHolder(View view) { - super(view); - this.view = view; - this.profileIcon = view.findViewById(R.id.material_drawer_profileIcon); - this.name = view.findViewById(R.id.material_drawer_name); - this.email = view.findViewById(R.id.material_drawer_email); - } - } - - /** - * helper method to decide for the correct color - * - * @param ctx - * @return - */ - protected int getSelectedColor(Context ctx) { - if (getBooleanStyleable(ctx, R.styleable.MaterialDrawer_material_drawer_legacy_style, false)) { - return ColorHolder.color(getSelectedColor(), ctx, R.attr.material_drawer_selected_legacy, R.color.material_drawer_selected_legacy); - } else { - return ColorHolder.color(getSelectedColor(), ctx, R.attr.material_drawer_selected, R.color.material_drawer_selected); - } - } - - /** - * helper method to decide for the correct color - * - * @param ctx - * @return - */ - protected int getColor(Context ctx) { - int color; - if (this.isEnabled()) { - color = ColorHolder.color(getTextColor(), ctx, R.attr.material_drawer_primary_text, R.color.material_drawer_primary_text); - } else { - color = ColorHolder.color(getDisabledTextColor(), ctx, R.attr.material_drawer_hint_text, R.color.material_drawer_hint_text); - } - return color; - } - - protected int getSecondaryColor(Context ctx) { - int color; - if (this.isEnabled()) { - color = ColorHolder.color(getTextColor(), ctx, R.attr.material_drawer_secondary_text, R.color.material_drawer_secondary_text); - } else { - color = ColorHolder.color(getDisabledTextColor(), ctx, R.attr.material_drawer_hint_text, R.color.material_drawer_hint_text); - } - return color; - } - - /** - * helper method to decide for the correct color - * - * @param ctx - * @return - */ - protected int getSelectedTextColor(Context ctx) { - return ColorHolder.color(getSelectedTextColor(), ctx, R.attr.material_drawer_selected_text, R.color.material_drawer_selected_text); - } - - protected Pair colorStateList; - - /** - * helper to get the ColorStateList for the text and remembering it so we do not have to recreate it all the time - * - * @param color - * @param selectedTextColor - * @return - */ - protected ColorStateList getTextColorStateList(@ColorInt int color, @ColorInt int selectedTextColor) { - if (colorStateList == null || color + selectedTextColor != colorStateList.first) { - colorStateList = new Pair<>(color + selectedTextColor, DrawerUIUtils.getTextColorStateList(color, selectedTextColor)); - } - - return colorStateList.second; - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ProfileSettingDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ProfileSettingDrawerItem.java deleted file mode 100644 index 12a8013c..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ProfileSettingDrawerItem.java +++ /dev/null @@ -1,318 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Typeface; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.mikepenz.iconics.typeface.IIcon; -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.holder.ColorHolder; -import com.mikepenz.materialdrawer.holder.ImageHolder; -import com.mikepenz.materialdrawer.holder.StringHolder; -import com.mikepenz.materialdrawer.model.interfaces.IProfile; -import com.mikepenz.materialdrawer.model.interfaces.Tagable; -import com.mikepenz.materialdrawer.model.interfaces.Typefaceable; -import com.mikepenz.materialdrawer.util.DrawerUIUtils; -import com.mikepenz.materialize.util.UIUtils; - -import java.util.List; - -import androidx.annotation.ColorInt; -import androidx.annotation.ColorRes; -import androidx.annotation.DrawableRes; -import androidx.annotation.LayoutRes; -import androidx.annotation.StringRes; -import androidx.core.view.ViewCompat; -import androidx.recyclerview.widget.RecyclerView; - -import static com.mikepenz.materialdrawer.util.DrawerUIUtils.getBooleanStyleable; - -/** - * Created by mikepenz on 03.02.15. - */ -public class ProfileSettingDrawerItem extends AbstractDrawerItem implements IProfile, Tagable, Typefaceable { - private ImageHolder icon; - - private StringHolder name; - private StringHolder description; - - private boolean iconTinted = false; - - private ColorHolder selectedColor; - private ColorHolder textColor; - private ColorHolder iconColor; - private ColorHolder descriptionTextColor; - - private Typeface typeface = null; - - private boolean selectable = false; - - @Override - public ProfileSettingDrawerItem withIcon(Drawable icon) { - this.icon = new ImageHolder(icon); - return this; - } - - @Override - public ProfileSettingDrawerItem withIcon(@DrawableRes int iconRes) { - this.icon = new ImageHolder(iconRes); - return this; - } - - @Override - public ProfileSettingDrawerItem withIcon(Bitmap icon) { - this.icon = new ImageHolder(icon); - return this; - } - - @Override - public ProfileSettingDrawerItem withIcon(IIcon iicon) { - this.icon = new ImageHolder(iicon); - return this; - } - - @Override - public ProfileSettingDrawerItem withIcon(String url) { - this.icon = new ImageHolder(url); - return this; - } - - @Override - public ProfileSettingDrawerItem withIcon(Uri uri) { - this.icon = new ImageHolder(uri); - return this; - } - - public ProfileSettingDrawerItem withName(CharSequence name) { - this.name = new StringHolder(name); - return this; - } - - public ProfileSettingDrawerItem withName(@StringRes int nameRes) { - this.name = new StringHolder(nameRes); - return this; - } - - public ProfileSettingDrawerItem withDescription(String description) { - this.description = new StringHolder(description); - return this; - } - - public ProfileSettingDrawerItem withDescription(@StringRes int descriptionRes) { - this.description = new StringHolder(descriptionRes); - return this; - } - - //NOTE we reuse the IProfile here to allow custom items within the AccountSwitcher. There is an alias method withDescription for this - public ProfileSettingDrawerItem withEmail(String email) { - this.description = new StringHolder(email); - return this; - } - - public ProfileSettingDrawerItem withSelectedColor(@ColorInt int selectedColor) { - this.selectedColor = ColorHolder.fromColor(selectedColor); - return this; - } - - public ProfileSettingDrawerItem withSelectedColorRes(@ColorRes int selectedColorRes) { - this.selectedColor = ColorHolder.fromColorRes(selectedColorRes); - return this; - } - - public ProfileSettingDrawerItem withTextColor(@ColorInt int textColor) { - this.textColor = ColorHolder.fromColor(textColor); - return this; - } - - public ProfileSettingDrawerItem withTextColorRes(@ColorRes int textColorRes) { - this.textColor = ColorHolder.fromColorRes(textColorRes); - return this; - } - - public ProfileSettingDrawerItem withDescriptionTextColor(@ColorInt int descriptionColor) { - this.descriptionTextColor = ColorHolder.fromColor(descriptionColor); - return this; - } - - public ProfileSettingDrawerItem withDescriptionTextColorRes(@ColorRes int descriptionColorRes) { - this.descriptionTextColor = ColorHolder.fromColorRes(descriptionColorRes); - return this; - } - - public ProfileSettingDrawerItem withIconColor(@ColorInt int iconColor) { - this.iconColor = ColorHolder.fromColor(iconColor); - return this; - } - - public ProfileSettingDrawerItem withIconColorRes(@ColorRes int iconColorRes) { - this.iconColor = ColorHolder.fromColorRes(iconColorRes); - return this; - } - - public ProfileSettingDrawerItem withTypeface(Typeface typeface) { - this.typeface = typeface; - return this; - } - - public ProfileSettingDrawerItem withIconTinted(boolean iconTinted) { - this.iconTinted = iconTinted; - return this; - } - - public ColorHolder getSelectedColor() { - return selectedColor; - } - - public ColorHolder getTextColor() { - return textColor; - } - - public ColorHolder getDescriptionTextColor() { - return descriptionTextColor; - } - - public ColorHolder getIconColor() { - return iconColor; - } - - - public ImageHolder getIcon() { - return icon; - } - - public boolean isIconTinted() { - return iconTinted; - } - - public void setIconTinted(boolean iconTinted) { - this.iconTinted = iconTinted; - } - - @Override - public Typeface getTypeface() { - return typeface; - } - - @Override - public StringHolder getName() { - return name; - } - - public StringHolder getEmail() { - return description; - } - - public StringHolder getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = new StringHolder(description); - } - - @Override - public boolean isSelectable() { - return selectable; - } - - public ProfileSettingDrawerItem withSelectable(boolean selectable) { - this.selectable = selectable; - return this; - } - - @Override - public int getType() { - return R.id.material_drawer_item_profile_setting; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_profile_setting; - } - - @Override - public void bindView(ViewHolder viewHolder, List payloads) { - super.bindView(viewHolder, payloads); - - //get the context - Context ctx = viewHolder.itemView.getContext(); - - //set the identifier from the drawerItem here. It can be used to run tests - viewHolder.itemView.setId(hashCode()); - - //set the item enabled if it is - viewHolder.itemView.setEnabled(isEnabled()); - - //set the item selected if it is - viewHolder.itemView.setSelected(isSelected()); - - //get the correct color for the background - int selectedColor = getSelectedColor(ctx); - //get the correct color for the text - int color = ColorHolder.color(getTextColor(), ctx, R.attr.material_drawer_primary_text, R.color.material_drawer_primary_text); - int iconColor = ColorHolder.color(getIconColor(), ctx, R.attr.material_drawer_primary_icon, R.color.material_drawer_primary_icon); - int descriptionColor = ColorHolder.color(getDescriptionTextColor(), ctx, R.attr.material_drawer_primary_text, R.color.material_drawer_primary_text); - - ViewCompat.setBackground(viewHolder.view, UIUtils.getSelectableBackground(ctx, selectedColor, isSelectedBackgroundAnimated())); - - StringHolder.applyTo(this.getName(), viewHolder.name); - viewHolder.name.setTextColor(color); - - StringHolder.applyToOrHide(this.getDescription(), viewHolder.description); - viewHolder.description.setTextColor(descriptionColor); - - if (getTypeface() != null) { - viewHolder.name.setTypeface(getTypeface()); - viewHolder.description.setTypeface(getTypeface()); - } - - //set the correct icon - ImageHolder.applyDecidedIconOrSetGone(icon, viewHolder.icon, iconColor, isIconTinted(), 2); - - //for android API 17 --> Padding not applied via xml - DrawerUIUtils.setDrawerVerticalPadding(viewHolder.view); - - //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required) - onPostBindView(this, viewHolder.itemView); - } - - /** - * helper method to decide for the correct color - * - * @param ctx - * @return - */ - protected int getSelectedColor(Context ctx) { - if (getBooleanStyleable(ctx, R.styleable.MaterialDrawer_material_drawer_legacy_style, false)) { - return ColorHolder.color(getSelectedColor(), ctx, R.attr.material_drawer_selected_legacy, R.color.material_drawer_selected_legacy); - } else { - return ColorHolder.color(getSelectedColor(), ctx, R.attr.material_drawer_selected, R.color.material_drawer_selected); - } - } - - @Override - public ViewHolder getViewHolder(View v) { - return new ViewHolder(v); - } - - public static class ViewHolder extends RecyclerView.ViewHolder { - private View view; - private ImageView icon; - private TextView name; - private TextView description; - - private ViewHolder(View view) { - super(view); - this.view = view; - this.icon = (ImageView) view.findViewById(R.id.material_drawer_icon); - this.name = (TextView) view.findViewById(R.id.material_drawer_name); - this.description = (TextView) view.findViewById(R.id.material_drawer_description); - } - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondaryDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondaryDrawerItem.java deleted file mode 100644 index 8f22290b..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondaryDrawerItem.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import androidx.annotation.LayoutRes; - -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.holder.ColorHolder; - -/** - * Created by mikepenz on 03.02.15. - */ -public class SecondaryDrawerItem extends AbstractBadgeableDrawerItem { - - @Override - public int getType() { - return R.id.material_drawer_item_secondary; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_secondary; - } - - /** - * helper method to decide for the correct color - * OVERWRITE to get the correct secondary color - * - * @param ctx - * @return - */ - @Override - protected int getColor(Context ctx) { - int color; - if (this.isEnabled()) { - color = ColorHolder.color(getTextColor(), ctx, R.attr.material_drawer_secondary_text, R.color.material_drawer_secondary_text); - } else { - color = ColorHolder.color(getDisabledTextColor(), ctx, R.attr.material_drawer_hint_text, R.color.material_drawer_hint_text); - } - return color; - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondarySwitchDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondarySwitchDrawerItem.java deleted file mode 100644 index 22b5862a..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondarySwitchDrawerItem.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import androidx.annotation.LayoutRes; - -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.holder.ColorHolder; - -/** - * Created by mikepenz on 03.02.15. - */ -public class SecondarySwitchDrawerItem extends AbstractSwitchableDrawerItem { - - @Override - public int getType() { - return R.id.material_drawer_item_secondary_switch; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_secondary_switch; - } - - /** - * helper method to decide for the correct color - * OVERWRITE to get the correct secondary color - * - * @param ctx - * @return - */ - @Override - protected int getColor(Context ctx) { - int color; - if (this.isEnabled()) { - color = ColorHolder.color(getTextColor(), ctx, R.attr.material_drawer_secondary_text, R.color.material_drawer_secondary_text); - } else { - color = ColorHolder.color(getDisabledTextColor(), ctx, R.attr.material_drawer_hint_text, R.color.material_drawer_hint_text); - } - return color; - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondaryToggleDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondaryToggleDrawerItem.java deleted file mode 100644 index 30024be3..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondaryToggleDrawerItem.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import androidx.annotation.LayoutRes; - -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.holder.ColorHolder; - -/** - * Created by mikepenz on 03.02.15. - */ -public class SecondaryToggleDrawerItem extends AbstractToggleableDrawerItem { - - @Override - public int getType() { - return R.id.material_drawer_item_secondary_toggle; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_secondary_toggle; - } - - /** - * helper method to decide for the correct color - * OVERWRITE to get the correct secondary color - * - * @param ctx - * @return - */ - @Override - protected int getColor(Context ctx) { - int color; - if (this.isEnabled()) { - color = ColorHolder.color(getTextColor(), ctx, R.attr.material_drawer_secondary_text, R.color.material_drawer_secondary_text); - } else { - color = ColorHolder.color(getDisabledTextColor(), ctx, R.attr.material_drawer_hint_text, R.color.material_drawer_hint_text); - } - return color; - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.java deleted file mode 100644 index 4a336024..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -import android.content.Context; -import android.graphics.Typeface; -import androidx.annotation.LayoutRes; -import androidx.annotation.StringRes; -import androidx.recyclerview.widget.RecyclerView; -import android.view.View; -import android.widget.TextView; - -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.holder.ColorHolder; -import com.mikepenz.materialdrawer.holder.StringHolder; -import com.mikepenz.materialdrawer.model.interfaces.Nameable; -import com.mikepenz.materialdrawer.model.interfaces.Typefaceable; -import com.mikepenz.materialize.util.UIUtils; - -import java.util.List; - -/** - * Created by mikepenz on 03.02.15. - */ -public class SectionDrawerItem extends AbstractDrawerItem implements Nameable, Typefaceable { - - private StringHolder name; - private boolean divider = true; - - private ColorHolder textColor; - - private Typeface typeface = null; - - public SectionDrawerItem withName(StringHolder name) { - this.name = name; - return this; - } - - public SectionDrawerItem withName(String name) { - this.name = new StringHolder(name); - return this; - } - - public SectionDrawerItem withName(@StringRes int nameRes) { - this.name = new StringHolder(nameRes); - return this; - } - - public SectionDrawerItem withDivider(boolean divider) { - this.divider = divider; - return this; - } - - public SectionDrawerItem withTextColor(int textColor) { - this.textColor = ColorHolder.fromColor(textColor); - return this; - } - - public SectionDrawerItem withTextColorRes(int textColorRes) { - this.textColor = ColorHolder.fromColorRes(textColorRes); - return this; - } - - public SectionDrawerItem withTypeface(Typeface typeface) { - this.typeface = typeface; - return this; - } - - public boolean hasDivider() { - return divider; - } - - public ColorHolder getTextColor() { - return textColor; - } - - public StringHolder getName() { - return name; - } - - @Override - public boolean isEnabled() { - return false; - } - - @Override - public boolean isSelected() { - return false; - } - - @Override - public int getType() { - return R.id.material_drawer_item_section; - } - - @Override - @LayoutRes - public int getLayoutRes() { - return R.layout.material_drawer_item_section; - } - - @Override - public Typeface getTypeface() { - return typeface; - } - - @Override - public void bindView(ViewHolder viewHolder, List payloads) { - super.bindView(viewHolder, payloads); - - Context ctx = viewHolder.itemView.getContext(); - - //set the identifier from the drawerItem here. It can be used to run tests - viewHolder.itemView.setId(hashCode()); - - //define this item to be not clickable nor enabled - viewHolder.view.setClickable(false); - viewHolder.view.setEnabled(false); - - //define the text color - viewHolder.name.setTextColor(ColorHolder.color(getTextColor(), ctx, R.attr.material_drawer_secondary_text, R.color.material_drawer_secondary_text)); - - //set the text for the name - StringHolder.applyTo(this.getName(), viewHolder.name); - - //define the typeface for our textViews - if (getTypeface() != null) { - viewHolder.name.setTypeface(getTypeface()); - } - - //hide the divider if we do not need one - if (this.hasDivider()) { - viewHolder.divider.setVisibility(View.VISIBLE); - } else { - viewHolder.divider.setVisibility(View.GONE); - } - - //set the color for the divider - viewHolder.divider.setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(ctx, R.attr.material_drawer_divider, R.color.material_drawer_divider)); - - //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 ViewHolder getViewHolder(View v) { - return new ViewHolder(v); - } - - public static class ViewHolder extends RecyclerView.ViewHolder { - private View view; - private View divider; - private TextView name; - - private ViewHolder(View view) { - super(view); - this.view = view; - this.divider = view.findViewById(R.id.material_drawer_divider); - this.name = (TextView) view.findViewById(R.id.material_drawer_name); - } - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SwitchDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SwitchDrawerItem.java deleted file mode 100644 index f6ffe57a..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/SwitchDrawerItem.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -/** - * Created by mikepenz on 03.02.15. - */ -public class SwitchDrawerItem extends AbstractSwitchableDrawerItem { - -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ToggleDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ToggleDrawerItem.java deleted file mode 100644 index 407dc43c..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/ToggleDrawerItem.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.mikepenz.materialdrawer.model; - -/** - * Created by mikepenz on 03.02.15. - */ -public class ToggleDrawerItem extends AbstractToggleableDrawerItem { - -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Badgeable.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Badgeable.java deleted file mode 100644 index 9a1b5ec3..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Badgeable.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mikepenz.materialdrawer.model.interfaces; - -import com.mikepenz.materialdrawer.holder.StringHolder; - -/** - * Created by mikepenz on 03.02.15. - */ -public interface Badgeable { - T withBadge(String badge); - - T withBadge(int badgeRes); - - T withBadge(StringHolder badgeRes); - - StringHolder getBadge(); -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/ColorfulBadgeable.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/ColorfulBadgeable.java deleted file mode 100644 index 84e7418c..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/ColorfulBadgeable.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mikepenz.materialdrawer.model.interfaces; - -import com.mikepenz.materialdrawer.holder.BadgeStyle; - -/** - * Created by mikepenz on 03.02.15. - */ -public interface ColorfulBadgeable extends Badgeable { - T withBadgeStyle(BadgeStyle badgeStyle); - - BadgeStyle getBadgeStyle(); - -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IDrawerItem.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IDrawerItem.java deleted file mode 100644 index 35dc0d07..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IDrawerItem.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.mikepenz.materialdrawer.model.interfaces; - -import android.content.Context; -import androidx.recyclerview.widget.RecyclerView; -import android.view.View; -import android.view.ViewGroup; - -import com.mikepenz.fastadapter.IExpandable; -import com.mikepenz.fastadapter.IItem; -import com.mikepenz.fastadapter.ISubItem; - -import java.util.List; - -/** - * Created by mikepenz on 03.02.15. - */ -public interface IDrawerItem extends IItem, IExpandable, ISubItem { - - Object getTag(); - - boolean isEnabled(); - - boolean isSelected(); - - T withSetSelected(boolean selected); - - boolean isSelectable(); - - boolean isExcludeFromMiniDrawer(); - - T withSelectable(boolean selectable); - - int getType(); - - int getLayoutRes(); - - View generateView(Context ctx); - - View generateView(Context ctx, ViewGroup parent); - - VH getViewHolder(ViewGroup parent); - - void unbindView(VH holder); - - void bindView(VH holder, List payloads); - - boolean equals(long id); -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IProfile.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IProfile.java deleted file mode 100644 index bb1edc64..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IProfile.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.mikepenz.materialdrawer.model.interfaces; - -import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import androidx.annotation.DrawableRes; - -import com.mikepenz.fastadapter.IIdentifyable; -import com.mikepenz.iconics.typeface.IIcon; -import com.mikepenz.materialdrawer.holder.ImageHolder; -import com.mikepenz.materialdrawer.holder.StringHolder; - -/** - * Created by mikepenz on 03.02.15. - */ -public interface IProfile extends IIdentifyable { - T withName(CharSequence name); - - StringHolder getName(); - - T withEmail(String email); - - StringHolder getEmail(); - - T withIcon(Drawable icon); - - T withIcon(Bitmap bitmap); - - T withIcon(@DrawableRes int iconRes); - - T withIcon(String url); - - T withIcon(Uri uri); - - T withIcon(IIcon icon); - - ImageHolder getIcon(); - - T withSelectable(boolean selectable); - - boolean isSelectable(); -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Iconable.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Iconable.java deleted file mode 100644 index e574dc9c..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Iconable.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.mikepenz.materialdrawer.model.interfaces; - -import android.graphics.drawable.Drawable; - -import com.mikepenz.iconics.typeface.IIcon; -import com.mikepenz.materialdrawer.holder.ImageHolder; - -/** - * Created by mikepenz on 03.02.15. - */ -public interface Iconable { - T withIcon(Drawable icon); - - T withIcon(IIcon iicon); - - T withIcon(ImageHolder icon); - - ImageHolder getIcon(); -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Nameable.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Nameable.java deleted file mode 100644 index 8193fd6f..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Nameable.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mikepenz.materialdrawer.model.interfaces; - -import com.mikepenz.materialdrawer.holder.StringHolder; - -/** - * Created by mikepenz on 03.02.15. - */ -public interface Nameable { - T withName(String name); - - T withName(int nameRes); - - T withName(StringHolder name); - - StringHolder getName(); -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/OnPostBindViewListener.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/OnPostBindViewListener.java deleted file mode 100644 index b360a4dd..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/OnPostBindViewListener.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mikepenz.materialdrawer.model.interfaces; - -import android.view.View; - -/** - * Created by mikepenz on 21.08.15. - */ -public interface OnPostBindViewListener { - /** - * allows you to hook in the BindView method and modify the view after binding - * - * @param drawerItem the drawerItem used for this view - * @param view the view which will be set - */ - void onBindView(IDrawerItem drawerItem, View view); -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Selectable.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Selectable.java deleted file mode 100644 index 6ed9a800..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Selectable.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.mikepenz.materialdrawer.model.interfaces; - -/** - * Created by mikepenz on 03.02.15. - */ -public interface Selectable { - T withSelectable(boolean selectable); - - boolean isSelectable(); -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Tagable.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Tagable.java deleted file mode 100644 index 7ecf8c12..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Tagable.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.mikepenz.materialdrawer.model.interfaces; - -/** - * Created by mikepenz on 03.02.15. - */ -public interface Tagable { - T withTag(Object tag); - - Object getTag(); -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Typefaceable.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Typefaceable.java deleted file mode 100644 index beba2cea..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Typefaceable.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.mikepenz.materialdrawer.model.interfaces; - -import android.graphics.Typeface; - -/** - * Created by mikepenz on 03.02.15. - */ -public interface Typefaceable { - T withTypeface(Typeface typeface); - - Typeface getTypeface(); -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/utils/BadgeDrawableBuilder.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/utils/BadgeDrawableBuilder.java deleted file mode 100644 index a132624c..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/model/utils/BadgeDrawableBuilder.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.mikepenz.materialdrawer.model.utils; - -import android.content.Context; -import android.graphics.drawable.GradientDrawable; -import android.graphics.drawable.StateListDrawable; -import androidx.appcompat.content.res.AppCompatResources; -import android.util.StateSet; - -import com.mikepenz.materialdrawer.holder.BadgeStyle; -import com.mikepenz.materialdrawer.holder.ColorHolder; - -/** - * Created by mikepenz on 02.07.15. - */ -public class BadgeDrawableBuilder { - private BadgeStyle mStyle; - - public BadgeDrawableBuilder(BadgeStyle style) { - this.mStyle = style; - } - - public StateListDrawable build(Context ctx) { - StateListDrawable stateListDrawable = new StateListDrawable(); - GradientDrawable normal = (GradientDrawable) AppCompatResources.getDrawable(ctx, mStyle.getGradientDrawable()); - GradientDrawable selected = (GradientDrawable) normal.getConstantState().newDrawable().mutate(); - - ColorHolder.applyToOrTransparent(mStyle.getColor(), ctx, normal); - if (mStyle.getColorPressed() == null) { - ColorHolder.applyToOrTransparent(mStyle.getColor(), ctx, selected); - } else { - ColorHolder.applyToOrTransparent(mStyle.getColorPressed(), ctx, selected); - } - - if (mStyle.getCorners() != null) { - normal.setCornerRadius(mStyle.getCorners().asPixel(ctx)); - selected.setCornerRadius(mStyle.getCorners().asPixel(ctx)); - } - - stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, selected); - stateListDrawable.addState(StateSet.WILD_CARD, normal); - - return stateListDrawable; - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/AbstractDrawerImageLoader.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/AbstractDrawerImageLoader.java deleted file mode 100644 index efd0f069..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/AbstractDrawerImageLoader.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.mikepenz.materialdrawer.util; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.util.Log; -import android.widget.ImageView; - -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() method, or you are still overriding the deprecated method set(ImageView iv, Uri u, Drawable d) instead of set(ImageView iv, Uri u, Drawable d, String tag)"); - } - @Override - public void cancel(ImageView imageView) { - } - - @Override - public Drawable placeholder(Context ctx) { - return DrawerUIUtils.getPlaceHolder(ctx); - } - - @Override - public Drawable placeholder(Context ctx, String tag) { - return placeholder(ctx); - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerImageLoader.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerImageLoader.java deleted file mode 100644 index 1c46a611..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerImageLoader.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.mikepenz.materialdrawer.util; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.widget.ImageView; - -/** - * Created by mikepenz on 24.03.15. - */ -public class DrawerImageLoader { - public enum Tags { - PROFILE, - PROFILE_DRAWER_ITEM, - ACCOUNT_HEADER - } - - private static DrawerImageLoader SINGLETON = null; - - private IDrawerImageLoader imageLoader; - private boolean mHandleAllUris = false; - - private DrawerImageLoader(IDrawerImageLoader loaderImpl) { - imageLoader = loaderImpl; - } - - public static DrawerImageLoader init(IDrawerImageLoader loaderImpl) { - SINGLETON = new DrawerImageLoader(loaderImpl); - return SINGLETON; - } - - public static DrawerImageLoader getInstance() { - if (SINGLETON == null) { - SINGLETON = new DrawerImageLoader(new AbstractDrawerImageLoader() { - }); - } - return SINGLETON; - } - - public DrawerImageLoader withHandleAllUris(boolean handleAllUris) { - this.mHandleAllUris = handleAllUris; - return this; - } - - /** - * @param imageView - * @param uri - * @param tag - * @return false if not consumed - */ - public boolean setImage(ImageView imageView, Uri uri, String tag) { - //if we do not handle all uris and are not http or https we keep the original behavior - 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, tag); - } - return true; - } - return false; - } - - public void cancelImage(ImageView imageView) { - if (imageLoader != null) { - imageLoader.cancel(imageView); - } - } - - public IDrawerImageLoader getImageLoader() { - return imageLoader; - } - - public void setImageLoader(IDrawerImageLoader imageLoader) { - this.imageLoader = imageLoader; - } - - public interface IDrawerImageLoader { - @Deprecated - 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); - - /** - * @param ctx - * @param tag current possible tags: "profile", "profileDrawerItem", "accountHeader" - * @return - */ - Drawable placeholder(Context ctx, String tag); - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerItemViewHelper.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerItemViewHelper.java deleted file mode 100644 index 3a28fe6f..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerItemViewHelper.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.mikepenz.materialdrawer.util; - -import android.content.Context; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; - -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; -import com.mikepenz.materialize.util.UIUtils; - -import java.util.ArrayList; -import java.util.Collections; - -/** - * Created by mikepenz on 27.03.15. - */ -public class DrawerItemViewHelper { - - private Context mContext; - - public DrawerItemViewHelper(Context context) { - this.mContext = context; - } - - private ArrayList mDrawerItems = new ArrayList<>(); - - public DrawerItemViewHelper withDrawerItems(ArrayList drawerItems) { - this.mDrawerItems = drawerItems; - return this; - } - - public DrawerItemViewHelper withDrawerItems(IDrawerItem... drawerItems) { - Collections.addAll(this.mDrawerItems, drawerItems); - return this; - } - - private boolean mDivider = true; - - public DrawerItemViewHelper withDivider(boolean divider) { - this.mDivider = divider; - return this; - } - - private OnDrawerItemClickListener mOnDrawerItemClickListener = null; - - public DrawerItemViewHelper withOnDrawerItemClickListener(OnDrawerItemClickListener onDrawerItemClickListener) { - mOnDrawerItemClickListener = onDrawerItemClickListener; - return this; - } - - public View build() { - //create the container view - LinearLayout linearLayout = new LinearLayout(mContext); - linearLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); - linearLayout.setOrientation(LinearLayout.VERTICAL); - - //create the divider - if (mDivider) { - LinearLayout divider = new LinearLayout(mContext); - divider.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); - divider.setMinimumHeight((int) UIUtils.convertDpToPixel(1, mContext)); - divider.setOrientation(LinearLayout.VERTICAL); - divider.setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(mContext, R.attr.material_drawer_divider, R.color.material_drawer_divider)); - linearLayout.addView(divider); - } - - //add all drawer items - for (IDrawerItem drawerItem : mDrawerItems) { - View view = drawerItem.generateView(mContext); - view.setTag(drawerItem); - - if (drawerItem.isEnabled()) { - view.setBackgroundResource(UIUtils.getSelectableBackgroundRes(mContext)); - view.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (mOnDrawerItemClickListener != null) { - mOnDrawerItemClickListener.onItemClick(v, (IDrawerItem) v.getTag(R.id.material_drawer_item)); - } - } - }); - } - - linearLayout.addView(view); - } - - return linearLayout; - } - - - public interface OnDrawerItemClickListener { - public void onItemClick(View view, IDrawerItem drawerItem); - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerUIUtils.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerUIUtils.java deleted file mode 100644 index faa1494b..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerUIUtils.java +++ /dev/null @@ -1,242 +0,0 @@ -package com.mikepenz.materialdrawer.util; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.res.ColorStateList; -import android.content.res.Configuration; -import android.content.res.TypedArray; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.GradientDrawable; -import android.graphics.drawable.InsetDrawable; -import android.graphics.drawable.RippleDrawable; -import android.graphics.drawable.StateListDrawable; -import android.os.Build; -import android.util.DisplayMetrics; -import android.view.View; -import android.view.WindowManager; - -import androidx.annotation.StyleableRes; -import androidx.core.view.ViewCompat; - -import com.mikepenz.iconics.IconicsDrawable; -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.icons.MaterialDrawerFont; -import com.mikepenz.materialize.util.UIUtils; - -/** - * Created by mikepenz on 15.03.14. - */ -@SuppressLint("InlinedApi") -public class DrawerUIUtils { - - /** - * Get the boolean value of a given styleable. - * - * @param ctx - * @param styleable - * @param def - * @return - */ - public static boolean getBooleanStyleable(Context ctx, @StyleableRes int styleable, boolean def) { - TypedArray ta = ctx.getTheme().obtainStyledAttributes(R.styleable.MaterialDrawer); - return ta.getBoolean(styleable, def); - } - - /** - * Util method to theme the drawer item view's background (and foreground if possible) - * - * @param ctx the context to use - * @param view the view to theme - * @param selected_color the selected color to use - * @param animate true if we want to animate the StateListDrawable - */ - public static void themeDrawerItem(Context ctx, View view, int selected_color, boolean animate) { - boolean legacyStyle = getBooleanStyleable(ctx, R.styleable.MaterialDrawer_material_drawer_legacy_style, false); - - Drawable selected; - Drawable unselected; - - if (legacyStyle) { - // Material 1.0 styling - selected = new ColorDrawable(selected_color); - unselected = UIUtils.getSelectableBackground(ctx); - } else { - // Material 2.0 styling - int cornerRadius = ctx.getResources().getDimensionPixelSize(R.dimen.material_drawer_item_corner_radius); - int paddingTopBottom = ctx.getResources().getDimensionPixelSize(R.dimen.material_drawer_item_background_padding_top_bottom); - int paddingStartEnd = ctx.getResources().getDimensionPixelSize(R.dimen.material_drawer_item_background_padding_start_end); - - // define normal selected background - GradientDrawable gradientDrawable = new GradientDrawable(); - gradientDrawable.setColor(selected_color); - gradientDrawable.setCornerRadius(cornerRadius); - selected = new InsetDrawable(gradientDrawable, paddingStartEnd, paddingTopBottom, paddingStartEnd, paddingTopBottom); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - // define mask for ripple - GradientDrawable gradientMask = new GradientDrawable(); - gradientMask.setColor(Color.BLACK); - gradientMask.setCornerRadius(cornerRadius); - Drawable mask = new InsetDrawable(gradientMask, paddingStartEnd, paddingTopBottom, paddingStartEnd, paddingTopBottom); - - unselected = new RippleDrawable(new ColorStateList(new int[][]{new int[]{}}, new int[]{UIUtils.getThemeColor(ctx, R.attr.colorControlHighlight)}), null, mask); - } else { - // define touch drawable - GradientDrawable touchDrawable = new GradientDrawable(); - touchDrawable.setColor(UIUtils.getThemeColor(ctx, R.attr.colorControlHighlight)); - touchDrawable.setCornerRadius(cornerRadius); - Drawable touchInsetDrawable = new InsetDrawable(touchDrawable, paddingStartEnd, paddingTopBottom, paddingStartEnd, paddingTopBottom); - - StateListDrawable unselectedStates = new StateListDrawable(); - //if possible and wanted we enable animating across states - if (animate) { - int duration = ctx.getResources().getInteger(android.R.integer.config_shortAnimTime); - unselectedStates.setEnterFadeDuration(duration); - unselectedStates.setExitFadeDuration(duration); - } - unselectedStates.addState(new int[]{android.R.attr.state_pressed}, touchInsetDrawable); - unselectedStates.addState(new int[]{}, new ColorDrawable(Color.TRANSPARENT)); - unselected = unselectedStates; - } - } - - StateListDrawable states = new StateListDrawable(); - - //if possible and wanted we enable animating across states - if (animate) { - int duration = ctx.getResources().getInteger(android.R.integer.config_shortAnimTime); - states.setEnterFadeDuration(duration); - states.setExitFadeDuration(duration); - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - states.addState(new int[]{android.R.attr.state_selected}, selected); - states.addState(new int[]{}, new ColorDrawable(Color.TRANSPARENT)); - - ViewCompat.setBackground(view, states); - view.setForeground(unselected); - } else { - states.addState(new int[]{android.R.attr.state_selected}, selected); - states.addState(new int[]{}, unselected); - - ViewCompat.setBackground(view, states); - } - } - - /** - * helper to create a colorStateList for the text - * - * @param text_color - * @param selected_text_color - * @return - */ - public static ColorStateList getTextColorStateList(int text_color, int selected_text_color) { - return new ColorStateList( - new int[][]{ - new int[]{android.R.attr.state_selected}, - new int[]{} - }, - new int[]{ - selected_text_color, - text_color - } - ); - } - - /** - * helper to create a stateListDrawable for the icon - * - * @param icon - * @param selectedIcon - * @return - */ - public static StateListDrawable getIconStateList(Drawable icon, Drawable selectedIcon) { - StateListDrawable iconStateListDrawable = new StateListDrawable(); - iconStateListDrawable.addState(new int[]{android.R.attr.state_selected}, selectedIcon); - iconStateListDrawable.addState(new int[]{}, icon); - return iconStateListDrawable; - } - - /** - * helper to create a StateListDrawable for the drawer item background - * - * @param selected_color - * @return - */ - public static StateListDrawable getDrawerItemBackground(int selected_color) { - ColorDrawable clrActive = new ColorDrawable(selected_color); - StateListDrawable states = new StateListDrawable(); - states.addState(new int[]{android.R.attr.state_selected}, clrActive); - return states; - } - - /** - * helper to calculate the optimal drawer width - * - * @param context - * @return - */ - public static int getOptimalDrawerWidth(Context context) { - int possibleMinDrawerWidth = UIUtils.getScreenWidth(context) - UIUtils.getActionBarHeight(context); - int maxDrawerWidth = context.getResources().getDimensionPixelSize(R.dimen.material_drawer_width); - return Math.min(possibleMinDrawerWidth, maxDrawerWidth); - } - - - /** - * helper method to get a person placeHolder drawable - * - * @param ctx - * @return - */ - public static Drawable getPlaceHolder(Context ctx) { - return new IconicsDrawable(ctx, MaterialDrawerFont.Icon.mdf_person).colorRes(R.color.accent).backgroundColorRes(R.color.primary).sizeDp(56).paddingDp(16); - } - - /** - * helper to set the vertical padding to the DrawerItems - * this is required because on API Level 17 the padding is ignored which is set via the XML - * - * @param v - */ - public static void setDrawerVerticalPadding(View v) { - int verticalPadding = v.getContext().getResources().getDimensionPixelSize(R.dimen.material_drawer_vertical_padding); - v.setPadding(verticalPadding, 0, verticalPadding, 0); - } - - /** - * helper to set the vertical padding including the extra padding for deeper item hirachy level to the DrawerItems - * this is required because on API Level 17 the padding is ignored which is set via the XML - * - * @param v - * @param level - */ - public static void setDrawerVerticalPadding(View v, int level) { - int verticalPadding = v.getContext().getResources().getDimensionPixelSize(R.dimen.material_drawer_vertical_padding); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - v.setPaddingRelative(verticalPadding * level, 0, verticalPadding, 0); - } else { - v.setPadding(verticalPadding * level, 0, verticalPadding, 0); - } - } - - /** - * helper to check if the system bar is on the bottom of the screen - * - * @param ctx - * @return - */ - public static boolean isSystemBarOnBottom(Context ctx) { - WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); - DisplayMetrics metrics = new DisplayMetrics(); - wm.getDefaultDisplay().getMetrics(metrics); - Configuration cfg = ctx.getResources().getConfiguration(); - boolean canMove = (metrics.widthPixels != metrics.heightPixels && - cfg.smallestScreenWidthDp < 600); - - return (!canMove || metrics.widthPixels < metrics.heightPixels); - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/KeyboardUtil.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/KeyboardUtil.java deleted file mode 100644 index 6ee03fad..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/KeyboardUtil.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright 2015 Mike Penz All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.mikepenz.materialdrawer.util; - -import android.app.Activity; -import android.graphics.Rect; -import android.os.Build; -import android.view.View; -import android.view.ViewTreeObserver; -import android.view.inputmethod.InputMethodManager; - -/** - * Created by mikepenz on 14.03.15. - * This class implements a hack to change the layout padding on bottom if the keyboard is shown - * to allow long lists with editTextViews - * Basic idea for this solution found here: http://stackoverflow.com/a/9108219/325479 - * @deprecated Do not use this anymore, the MaterialDrawer uses the `fitsSystemWindows` now correctly so it should not be required. (it would only be required for cases with the fullscreen flag) - */ -@Deprecated -public class KeyboardUtil { - private View decorView; - private View contentView; - - public KeyboardUtil(Activity act, View contentView) { - this.decorView = act.getWindow().getDecorView(); - this.contentView = contentView; - - //only required on newer android versions. it was working on API level 19 - if (Build.VERSION.SDK_INT >= 19) { - decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); - } - } - - public void enable() { - if (Build.VERSION.SDK_INT >= 19) { - decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); - } - } - - public void disable() { - if (Build.VERSION.SDK_INT >= 19) { - decorView.getViewTreeObserver().removeOnGlobalLayoutListener(onGlobalLayoutListener); - } - } - - - //a small helper to allow showing the editText focus - ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { - @Override - public void onGlobalLayout() { - Rect r = new Rect(); - //r will be populated with the coordinates of your view that area still visible. - decorView.getWindowVisibleDisplayFrame(r); - - //get screen height and calculate the difference with the useable area from the r - int height = decorView.getContext().getResources().getDisplayMetrics().heightPixels; - int diff = height - r.bottom; - - //if it could be a keyboard add the padding to the view - if (diff != 0) { - // if the use-able screen height differs from the total screen height we assume that it shows a keyboard now - //check if the padding is 0 (if yes set the padding for the keyboard) - if (contentView.getPaddingBottom() != diff) { - //set the padding of the contentView for the keyboard - contentView.setPadding(0, 0, 0, diff); - } - } else { - //check if the padding is != 0 (if yes reset the padding) - if (contentView.getPaddingBottom() != 0) { - //reset the padding of the contentView - contentView.setPadding(0, 0, 0, 0); - } - } - } - }; - - - /** - * Helper to hide the keyboard - * - * @param act - */ - public static void hideKeyboard(Activity act) { - if (act != null && act.getCurrentFocus() != null) { - InputMethodManager inputMethodManager = (InputMethodManager) act.getSystemService(Activity.INPUT_METHOD_SERVICE); - inputMethodManager.hideSoftInputFromWindow(act.getCurrentFocus().getWindowToken(), 0); - } - } -} diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/PressedEffectStateListDrawable.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/PressedEffectStateListDrawable.java deleted file mode 100644 index 546b6c32..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/util/PressedEffectStateListDrawable.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.mikepenz.materialdrawer.util; - -import android.annotation.SuppressLint; -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.StateListDrawable; - -/** - * http://stackoverflow.com/questions/7979440/android-cloning-a-drawable-in-order-to-make-a-statelistdrawable-with-filters - * http://stackoverflow.com/users/2075875/malachiasz - */ - -@SuppressLint("InlinedApi") -public class PressedEffectStateListDrawable extends StateListDrawable { - - private int color; - private int selectionColor; - - public PressedEffectStateListDrawable(Drawable drawable, int color, int selectionColor) { - super(); - - drawable = drawable.mutate(); - - addState(new int[]{android.R.attr.state_selected}, drawable); - addState(new int[]{}, drawable); - - this.color = color; - this.selectionColor = selectionColor; - } - - @Override - protected boolean onStateChange(int[] states) { - boolean isStatePressedInArray = false; - for (int state : states) { - if (state == android.R.attr.state_selected) { - isStatePressedInArray = true; - } - } - if (isStatePressedInArray) { - super.setColorFilter(selectionColor, PorterDuff.Mode.SRC_IN); - } else { - super.setColorFilter(color, PorterDuff.Mode.SRC_IN); - } - return super.onStateChange(states); - } - - @Override - public boolean isStateful() { - return true; - } -} \ No newline at end of file diff --git a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/view/BezelImageView.java b/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/view/BezelImageView.java deleted file mode 100644 index 502f9df9..00000000 --- a/MaterialDrawer/src/main/java/com/mikepenz/materialdrawer/view/BezelImageView.java +++ /dev/null @@ -1,349 +0,0 @@ -/* - * Copyright 2014 Google Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * The original is from Google you can find here: - * https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/BezelImageView.java - * - * Modified and improved with additional functionality by Mike Penz - */ - -package com.mikepenz.materialdrawer.view; - -import android.annotation.TargetApi; -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.ColorFilter; -import android.graphics.ColorMatrix; -import android.graphics.ColorMatrixColorFilter; -import android.graphics.Outline; -import android.graphics.Paint; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffColorFilter; -import android.graphics.PorterDuffXfermode; -import android.graphics.Rect; -import android.graphics.RectF; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.os.Build; - -import androidx.appcompat.widget.AppCompatImageView; -import androidx.core.view.ViewCompat; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewOutlineProvider; -import android.widget.ImageView; - -import com.mikepenz.materialdrawer.R; -import com.mikepenz.materialdrawer.util.DrawerImageLoader; - - -/** - * An {@link android.widget.ImageView} that draws its contents inside a mask and draws a border - * drawable on top. This is useful for applying a beveled look to image contents, but is also - * flexible enough for use with other desired aesthetics. - */ -public class BezelImageView extends AppCompatImageView { - private Paint mBlackPaint; - private Paint mMaskedPaint; - - private Rect mBounds; - private RectF mBoundsF; - - private Drawable mMaskDrawable; - private boolean mDrawCircularShadow = true; - - private ColorMatrixColorFilter mDesaturateColorFilter; - - private int mSelectorAlpha = 150; - private int mSelectorColor; - private ColorFilter mSelectorFilter; - - private boolean mCacheValid = false; - private Bitmap mCacheBitmap; - private int mCachedWidth; - private int mCachedHeight; - - private boolean isPressed = false; - private boolean isSelected; - - public BezelImageView(Context context) { - this(context, null); - } - - public BezelImageView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public BezelImageView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - - // Attribute initialization - final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BezelImageView, defStyle, R.style.BezelImageView); - - mMaskDrawable = a.getDrawable(R.styleable.BezelImageView_biv_maskDrawable); - if (mMaskDrawable != null) { - mMaskDrawable.setCallback(this); - } - - mDrawCircularShadow = a.getBoolean(R.styleable.BezelImageView_biv_drawCircularShadow, true); - - mSelectorColor = a.getColor(R.styleable.BezelImageView_biv_selectorOnPress, 0); - - a.recycle(); - - // Other initialization - mBlackPaint = new Paint(); - mBlackPaint.setColor(0xff000000); - - mMaskedPaint = new Paint(); - mMaskedPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); - - // Always want a cache allocated. - mCacheBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); - - // Create a desaturate color filter for pressed state. - ColorMatrix cm = new ColorMatrix(); - cm.setSaturation(0); - mDesaturateColorFilter = new ColorMatrixColorFilter(cm); - - //create a selectorFilter if we already have a color - if (mSelectorColor != 0) { - this.mSelectorFilter = new PorterDuffColorFilter(Color.argb(mSelectorAlpha, Color.red(mSelectorColor), Color.green(mSelectorColor), Color.blue(mSelectorColor)), PorterDuff.Mode.SRC_ATOP); - } - } - - @Override - protected void onSizeChanged(int w, int h, int old_w, int old_h) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - if (mDrawCircularShadow) { - setOutlineProvider(new CustomOutline(w, h)); - } - } - } - - @TargetApi(21) - private class CustomOutline extends ViewOutlineProvider { - - int width; - int height; - - CustomOutline(int width, int height) { - this.width = width; - this.height = height; - } - - @Override - public void getOutline(View view, Outline outline) { - outline.setOval(0, 0, width, height); - } - } - - @Override - protected boolean setFrame(int l, int t, int r, int b) { - final boolean changed = super.setFrame(l, t, r, b); - mBounds = new Rect(0, 0, r - l, b - t); - mBoundsF = new RectF(mBounds); - - if (mMaskDrawable != null) { - mMaskDrawable.setBounds(mBounds); - } - - if (changed) { - mCacheValid = false; - } - - return changed; - } - - @Override - protected void onDraw(Canvas canvas) { - if (mBounds == null) { - return; - } - - int width = mBounds.width(); - int height = mBounds.height(); - - if (width == 0 || height == 0) { - return; - } - - if (!mCacheValid || width != mCachedWidth || height != mCachedHeight || isSelected != isPressed) { - // Need to redraw the cache - if (width == mCachedWidth && height == mCachedHeight) { - // Have a correct-sized bitmap cache already allocated. Just erase it. - mCacheBitmap.eraseColor(0); - } else { - // Allocate a new bitmap with the correct dimensions. - mCacheBitmap.recycle(); - //noinspection AndroidLintDrawAllocation - mCacheBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - mCachedWidth = width; - mCachedHeight = height; - } - - Canvas cacheCanvas = new Canvas(mCacheBitmap); - if (mMaskDrawable != null) { - int sc = cacheCanvas.save(); - mMaskDrawable.draw(cacheCanvas); - if (isSelected) { - if (mSelectorFilter != null) { - mMaskedPaint.setColorFilter(mSelectorFilter); - } else { - mMaskedPaint.setColorFilter(mDesaturateColorFilter); - - } - } else { - mMaskedPaint.setColorFilter(null); - } - cacheCanvas.saveLayer(mBoundsF, mMaskedPaint, Canvas.ALL_SAVE_FLAG); - super.onDraw(cacheCanvas); - cacheCanvas.restoreToCount(sc); - } else if (isSelected) { - int sc = cacheCanvas.save(); - cacheCanvas.drawRect(0, 0, mCachedWidth, mCachedHeight, mBlackPaint); - if (mSelectorFilter != null) { - mMaskedPaint.setColorFilter(mSelectorFilter); - } else { - mMaskedPaint.setColorFilter(mDesaturateColorFilter); - } - cacheCanvas.saveLayer(mBoundsF, mMaskedPaint, Canvas.ALL_SAVE_FLAG); - super.onDraw(cacheCanvas); - cacheCanvas.restoreToCount(sc); - } else { - super.onDraw(cacheCanvas); - } - } - - // Draw from cache - canvas.drawBitmap(mCacheBitmap, mBounds.left, mBounds.top, null); - - //remember the previous press state - isPressed = isPressed(); - } - - - @Override - public boolean dispatchTouchEvent(MotionEvent event) { - // Check for clickable state and do nothing if disabled - if (!this.isClickable()) { - this.isSelected = false; - return super.onTouchEvent(event); - } - - // Set selected state based on Motion Event - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - this.isSelected = true; - break; - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_SCROLL: - case MotionEvent.ACTION_OUTSIDE: - case MotionEvent.ACTION_CANCEL: - this.isSelected = false; - break; - } - - // Redraw image and return super type - this.invalidate(); - return super.dispatchTouchEvent(event); - } - - @Override - protected void drawableStateChanged() { - super.drawableStateChanged(); - if (mMaskDrawable != null && mMaskDrawable.isStateful()) { - mMaskDrawable.setState(getDrawableState()); - } - if (isDuplicateParentStateEnabled()) { - ViewCompat.postInvalidateOnAnimation(this); - } - } - - @Override - public void invalidateDrawable(Drawable who) { - if (who == mMaskDrawable) { - invalidate(); - } else { - super.invalidateDrawable(who); - } - } - - @Override - protected boolean verifyDrawable(Drawable who) { - return who == mMaskDrawable || super.verifyDrawable(who); - } - - - /** - * Sets the color of the selector to be draw over the - * CircularImageView. Be sure to provide some opacity. - * - * @param selectorColor The color (including alpha) to set for the selector overlay. - */ - public void setSelectorColor(int selectorColor) { - this.mSelectorColor = selectorColor; - this.mSelectorFilter = new PorterDuffColorFilter(Color.argb(mSelectorAlpha, Color.red(mSelectorColor), Color.green(mSelectorColor), Color.blue(mSelectorColor)), PorterDuff.Mode.SRC_ATOP); - this.invalidate(); - } - - - @Override - public void setImageDrawable(Drawable drawable) { - super.setImageDrawable(drawable); - } - - @Override - public void setImageResource(int resId) { - super.setImageResource(resId); - } - - @Override - public void setImageBitmap(Bitmap bm) { - super.setImageBitmap(bm); - } - - @Override - public void setImageURI(Uri uri) { - if ("http".equals(uri.getScheme()) || "https".equals(uri.getScheme())) { - DrawerImageLoader.getInstance().setImage(this, uri, null); - } else { - super.setImageURI(uri); - } - } - - private ColorMatrixColorFilter mTempDesaturateColorFilter; - private ColorFilter mTempSelectorFilter; - - public void disableTouchFeedback(boolean disable) { - if (disable) { - mTempDesaturateColorFilter = this.mDesaturateColorFilter; - mTempSelectorFilter = this.mSelectorFilter; - this.mSelectorFilter = null; - this.mDesaturateColorFilter = null; - } else { - if (mTempDesaturateColorFilter != null) { - this.mDesaturateColorFilter = mTempDesaturateColorFilter; - } - if (mTempSelectorFilter != null) { - this.mSelectorFilter = mTempSelectorFilter; - } - } - } -} diff --git a/MaterialDrawer/src/main/res/drawable/material_drawer_badge.xml b/MaterialDrawer/src/main/res/drawable/material_drawer_badge.xml deleted file mode 100644 index a5175915..00000000 --- a/MaterialDrawer/src/main/res/drawable/material_drawer_badge.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/drawable/material_drawer_circle_mask.xml b/MaterialDrawer/src/main/res/drawable/material_drawer_circle_mask.xml deleted file mode 100644 index b0f0dc8b..00000000 --- a/MaterialDrawer/src/main/res/drawable/material_drawer_circle_mask.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/drawable/material_drawer_shadow_bottom.xml b/MaterialDrawer/src/main/res/drawable/material_drawer_shadow_bottom.xml deleted file mode 100644 index 178b097e..00000000 --- a/MaterialDrawer/src/main/res/drawable/material_drawer_shadow_bottom.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/drawable/material_drawer_shadow_left.9.png b/MaterialDrawer/src/main/res/drawable/material_drawer_shadow_left.9.png deleted file mode 100644 index 1b5763a86c86df9b4592ade1a37c9b7812ad5941..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15047 zcmeI3Pl()99LH0tVpl7L9t2Neil}HNFMnn-i8E8`PU|i>?Xn%|_GI5CZ+1dwl9*&W zvkSu7B3SU`sa}*G)PvTO;6bH`co30-h=_Rcs0fNE>PcUcnMw9HvyVk9US44S{NDHd ze!t}Ne!rJoa&_hOlZO``SP%r^@bXe?mHysKKkD6g(eK`!mPLOK1xx26LAd8?@;P99 z`q>RZFn@77Yw=q9Da-Z;W$gItq&yk~bhaSWkB5jd9(KemZ@#aE(WYGWv5@T^R=zEbhYLwEr7X6qfSw#{ut%_zLRU99s<^ug!51p>H z+B!8(N3BMw7sr7m%fsQYJk-j5xFIX1Y05~IRaK%hq-e{F@ksKbV_A?%oEC}f&<$eO z_rxSFUiUZSMyZq}njYip8U)isUNmM$Das=p$VwT>^PC)e>Jw~+{q)ovTPA%nAYL3% zKV`08(DP$I>iK)5oXUG9rfbq}Pjk;b-@#yR>L@;Wi6R&yo$DEOwgMurlE~i-ZF2Gw zy_93~u0D3V`Qq$~lqh?iI~loqxFt&FmX<=cLUnqr)?!F-?1vrS?>Dn5TbUpf7Z=m2 z5+813+w~HzkJM%8l&^RmkF;=1nzSM-5;7!I>nMg*QE5>=ic|}sLXd1Gh|%^Px4X3~ zhN^Z{#X^Rqsl^zDnJ@iXdT$4z&DH;5c~8+AD!EX5AWVzL(17+8BEL}%x)ls{WVklVByE>6f?C6q$%^ETc zy`~T|h1hNv-Dg6#e0wwL7aBU-S{&b|;q%kd4OFdFQAIKoO_LPGs7WPQMgU8Aa-Sl5lo zwaf`KlWNJ0XuWO~>X=q@y0@Jr&+ZMeoB|d2})sIlUtNUJDFA$PCH1c%QItn=4}32(vkhmbiPqR^pNQWk=!a$*P;wv&$C^N zGIY&7pZ46isgARO;euCkAI-M-v-FXVG^>@0R;kNy7<#O@Bhp`MxpXg%l08MCnNlAp z%ym4UJ60%=+_4~x9kZn>Je;Lnn2pj$Kl;=uPaivH8g#mo-OfMx72VFLAQn#ofUr%D zi_Hh992Wq>HaRXfAE0tv00`UUxY&Gv%5ec8Y?I?+^8qTy1%R+kj*HC)s2mpn!ZtZB zHXopJTmT5$| ze1OVv0U&IX<6`pxD#rzYuuYDO%?GF)7XZRGIW9IIpmJOQ2;1bi*nEJ>aRDG~ljCCZ z0V>A@fUr%Di_Hh992Wq>HaRXfAE0tv00`UUxY&Gv%5ec8Y?Fy=A%BsRc=YYfA$?8r zj&E09q_232_R?xw5Vju_gqg2*YDdwN3MK#^PxkRU;5qnpr;&lx*xaSUH<&_*N*oOUVGu|Q_sD9>%*Ocwddb@ x?|||1m*~|u{&;0)eB9XSA9H{E=!?gNGe?h{d-Kq**J)^B`Q+)=J5OA={5Kr{Mce=Y diff --git a/MaterialDrawer/src/main/res/drawable/material_drawer_shadow_right.9.png b/MaterialDrawer/src/main/res/drawable/material_drawer_shadow_right.9.png deleted file mode 100644 index 224cc4ff43a29c546ae50c654c20c58c2f4cdb75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^JV0#3!3HEVSgovp6icy_X9x!n)NrJ90QsB+9+AZi z4BVX{%xHe{^je^xucwP+h)3t!Yl?gg4m>OeUfNFiFU`@U5Xr+-Y2h+^&Fz!7ypldm za#4)fkaYOplLMWvd)czen2t>^YG&h=GRe5G;NW`))xgl;_^?U481>l1!)FR53IYvg N@O1TaS?83{1OO&fGZ_E? diff --git a/MaterialDrawer/src/main/res/drawable/material_drawer_shadow_top.xml b/MaterialDrawer/src/main/res/drawable/material_drawer_shadow_top.xml deleted file mode 100644 index a8dbbb49..00000000 --- a/MaterialDrawer/src/main/res/drawable/material_drawer_shadow_top.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer.xml b/MaterialDrawer/src/main/res/layout/material_drawer.xml deleted file mode 100644 index 857b8a2f..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_compact_header.xml b/MaterialDrawer/src/main/res/layout/material_drawer_compact_header.xml deleted file mode 100644 index fea09e69..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_compact_header.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_fits_not.xml b/MaterialDrawer/src/main/res/layout/material_drawer_fits_not.xml deleted file mode 100644 index 0fa02287..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_fits_not.xml +++ /dev/null @@ -1,6 +0,0 @@ - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_header.xml b/MaterialDrawer/src/main/res/layout/material_drawer_header.xml deleted file mode 100644 index 04ae7d80..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_header.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_container.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_container.xml deleted file mode 100644 index 087928db..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_container.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_divider.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_divider.xml deleted file mode 100644 index 2409ff9d..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_divider.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_expandable.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_expandable.xml deleted file mode 100644 index e4d19a5f..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_expandable.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_expandable_badge.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_expandable_badge.xml deleted file mode 100644 index 0b8ef1f2..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_expandable_badge.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_mini.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_mini.xml deleted file mode 100644 index fd5b3afb..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_mini.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_mini_profile.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_mini_profile.xml deleted file mode 100644 index 539d1ddf..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_mini_profile.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_primary.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_primary.xml deleted file mode 100644 index 15244f47..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_primary.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_profile.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_profile.xml deleted file mode 100644 index efe87870..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_profile.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_profile_setting.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_profile_setting.xml deleted file mode 100644 index c03f9718..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_profile_setting.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_secondary.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_secondary.xml deleted file mode 100644 index da51fc8d..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_secondary.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_secondary_switch.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_secondary_switch.xml deleted file mode 100644 index 03b1736e..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_secondary_switch.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_secondary_toggle.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_secondary_toggle.xml deleted file mode 100644 index b94919c9..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_secondary_toggle.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_section.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_section.xml deleted file mode 100644 index 86530a5d..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_section.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_switch.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_switch.xml deleted file mode 100644 index af15a74e..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_switch.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_item_toggle.xml b/MaterialDrawer/src/main/res/layout/material_drawer_item_toggle.xml deleted file mode 100644 index ea5779a0..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_item_toggle.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_recycler_view.xml b/MaterialDrawer/src/main/res/layout/material_drawer_recycler_view.xml deleted file mode 100644 index 9f23362f..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_recycler_view.xml +++ /dev/null @@ -1,8 +0,0 @@ - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/layout/material_drawer_slider.xml b/MaterialDrawer/src/main/res/layout/material_drawer_slider.xml deleted file mode 100644 index a903073d..00000000 --- a/MaterialDrawer/src/main/res/layout/material_drawer_slider.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/values-sw600dp/dimens.xml b/MaterialDrawer/src/main/res/values-sw600dp/dimens.xml deleted file mode 100644 index e8811a92..00000000 --- a/MaterialDrawer/src/main/res/values-sw600dp/dimens.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - 24dp - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/values/attrs.xml b/MaterialDrawer/src/main/res/values/attrs.xml deleted file mode 100644 index 2f769a02..00000000 --- a/MaterialDrawer/src/main/res/values/attrs.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/values/colors.xml b/MaterialDrawer/src/main/res/values/colors.xml deleted file mode 100644 index 42ef4d3b..00000000 --- a/MaterialDrawer/src/main/res/values/colors.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - @color/materialize_primary - @color/materialize_primary_dark - @color/materialize_primary_light - @color/materialize_accent - - - @color/md_white_1000 - - @color/md_light_primary_text - - @color/md_light_secondary - @color/md_light_secondary - @color/md_light_disabled - @color/md_light_disabled - @color/md_light_dividers - - #1F2196F3 - #E8E8E8 - @color/material_drawer_primary - - @color/material_drawer_primary_text - @color/material_drawer_secondary_text - - - @color/md_dark_background - - @color/md_dark_primary_text - - @color/md_dark_primary_icon - @color/md_dark_secondary - @color/md_dark_disabled - @color/md_dark_disabled - @color/md_dark_dividers - - #1F2196F3 - #202020 - @color/material_drawer_primary - - - @color/material_drawer_dark_primary_text - - @color/material_drawer_dark_secondary_text - diff --git a/MaterialDrawer/src/main/res/values/dimens.xml b/MaterialDrawer/src/main/res/values/dimens.xml deleted file mode 100644 index bc3fb3ef..00000000 --- a/MaterialDrawer/src/main/res/values/dimens.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - 320dp - - 0dp - - 8dp - - 16dp - - - 4dp - - - 160dp - 72dp - 16dp - 4dp - 56dp - 40dp - 56dp - 20sp - 13sp - 80dp - 22dp - 5dp - 18dp - 56dp - - - 8dp - 4dp - 8dp - 4dp - - - 48dp - 56dp - 12dp - 32dp - 14sp - 14sp - 12sp - - 42dp - 56dp - 12dp - 36dp - 14sp - 12sp - - 72dp - 40dp - 48dp - 16dp - 8dp - 14sp - 14sp - - 24dp - - 72dp - 4dp - 8dp - 56dp - 16dp - 12sp - 40dp - 16dp - - - 14sp - diff --git a/MaterialDrawer/src/main/res/values/donottranslate_library_materialdrawer_strings.xml b/MaterialDrawer/src/main/res/values/donottranslate_library_materialdrawer_strings.xml deleted file mode 100644 index b730bb0c..00000000 --- a/MaterialDrawer/src/main/res/values/donottranslate_library_materialdrawer_strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/MaterialDrawer/src/main/res/values/ids.xml b/MaterialDrawer/src/main/res/values/ids.xml deleted file mode 100644 index e9cce5b7..00000000 --- a/MaterialDrawer/src/main/res/values/ids.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MaterialDrawer/src/main/res/values/strings.xml b/MaterialDrawer/src/main/res/values/strings.xml deleted file mode 100644 index c26a8b87..00000000 --- a/MaterialDrawer/src/main/res/values/strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - Open - Close - diff --git a/MaterialDrawer/src/main/res/values/styles.xml b/MaterialDrawer/src/main/res/values/styles.xml deleted file mode 100644 index b4e22ebb..00000000 --- a/MaterialDrawer/src/main/res/values/styles.xml +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file