diff --git a/.gitignore b/.gitignore index e7ded9f4..047ad745 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,7 @@ build/ local.properties # Proguard folder generated by Eclipse -proguard/ +#proguard/ # Log Files *.log diff --git a/.idea/copyright/Kacper.xml b/.idea/copyright/Kacper.xml new file mode 100644 index 00000000..a4d5e6ec --- /dev/null +++ b/.idea/copyright/Kacper.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/copyright/kubasz.xml b/.idea/copyright/kubasz.xml new file mode 100644 index 00000000..2a54803f --- /dev/null +++ b/.idea/copyright/kubasz.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 00000000..61f16974 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 284dd50e..f834a4ed 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -10,7 +10,7 @@ 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 f02fa65a..00000000 Binary files a/MaterialDrawer/src/main/assets/fonts/materialdrawerfont-font-v5.0.0.ttf and /dev/null differ 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 1b5763a8..00000000 Binary files a/MaterialDrawer/src/main/res/drawable/material_drawer_shadow_left.9.png and /dev/null differ 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 224cc4ff..00000000 Binary files a/MaterialDrawer/src/main/res/drawable/material_drawer_shadow_right.9.png and /dev/null differ 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 diff --git a/app/debug/output.json b/app/debug/output.json deleted file mode 100644 index db263901..00000000 --- a/app/debug/output.json +++ /dev/null @@ -1 +0,0 @@ -[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":2600,"versionName":"2.6","enabled":true,"outputFile":"Edziennik_2600_debug.apk","fullName":"debug","baseName":"debug"},"path":"Edziennik_2600_debug.apk","properties":{}}] \ No newline at end of file diff --git a/app/proguard/android-job.pro b/app/proguard/android-job.pro new file mode 100644 index 00000000..3f1a67be --- /dev/null +++ b/app/proguard/android-job.pro @@ -0,0 +1,14 @@ +-dontwarn com.evernote.android.job.gcm.** +-dontwarn com.evernote.android.job.GcmAvailableHelper +-dontwarn com.evernote.android.job.work.** +-dontwarn com.evernote.android.job.WorkManagerAvailableHelper + +-keep public class com.evernote.android.job.v21.PlatformJobService +-keep public class com.evernote.android.job.v14.PlatformAlarmService +-keep public class com.evernote.android.job.v14.PlatformAlarmReceiver +-keep public class com.evernote.android.job.JobBootReceiver +-keep public class com.evernote.android.job.JobRescheduleService +-keep public class com.evernote.android.job.gcm.PlatformGcmService +-keep public class com.evernote.android.job.work.PlatformWorker + +-keep class com.evernote.android.job.** { *; } \ No newline at end of file diff --git a/app/proguard/app.pro b/app/proguard/app.pro new file mode 100644 index 00000000..162b8fa9 --- /dev/null +++ b/app/proguard/app.pro @@ -0,0 +1,42 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile +-keep class android.support.v7.widget.** { *; } + +-keep class pl.szczodrzynski.edziennik.utils.models.** { *; } +-keep class pl.szczodrzynski.edziennik.data.db.modules.events.Event { *; } +-keep class pl.szczodrzynski.edziennik.data.db.modules.events.EventFull { *; } +-keepclassmembers class pl.szczodrzynski.edziennik.widgets.WidgetConfig { public *; } +-keepnames class pl.szczodrzynski.edziennik.WidgetTimetable +-keepnames class pl.szczodrzynski.edziennik.notifications.WidgetNotifications +-keepnames class pl.szczodrzynski.edziennik.luckynumber.WidgetLuckyNumber + +-keep class .R +-keep class **.R$* { + ; +} + +-keepattributes SourceFile,LineNumberTable +#-printmapping mapping.txt + +-keep class okhttp3.** { *; } + +-keep class com.google.android.material.tabs.** {*;} \ No newline at end of file diff --git a/app/proguard/blurry.pro b/app/proguard/blurry.pro new file mode 100644 index 00000000..980f404e --- /dev/null +++ b/app/proguard/blurry.pro @@ -0,0 +1 @@ +-keep class android.support.v8.renderscript.** { *; } \ No newline at end of file diff --git a/app/proguard/cafebar.pro b/app/proguard/cafebar.pro new file mode 100644 index 00000000..6f8147fd --- /dev/null +++ b/app/proguard/cafebar.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in D:\AndroidSDK/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +-keep class !android.support.v7.internal.view.menu.**,android.support.** {*;} +-keep class android.support.v7.graphics.** { *; } +-dontwarn android.support.v7.graphics.** + +-keep class android.support.design.widget.** { *; } +-keep interface android.support.design.widget.** { *; } +-dontwarn android.support.design.** diff --git a/app/proguard/eventbus.pro b/app/proguard/eventbus.pro new file mode 100644 index 00000000..cf6b3480 --- /dev/null +++ b/app/proguard/eventbus.pro @@ -0,0 +1,10 @@ +-keepattributes *Annotation* +-keepclassmembers class * { + @org.greenrobot.eventbus.Subscribe ; +} +-keep enum org.greenrobot.eventbus.ThreadMode { *; } + +# Only required if you use AsyncExecutor +-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { + (java.lang.Throwable); +} \ No newline at end of file diff --git a/app/proguard/iconics.pro b/app/proguard/iconics.pro new file mode 100644 index 00000000..0aa62122 --- /dev/null +++ b/app/proguard/iconics.pro @@ -0,0 +1,14 @@ +# Android iconics library - https://github.com/mikepenz/Android-Iconics +# Warning: works ONLY with iconics > 1.0.0 +# +# Tested on gradle config: +# +# compile 'com.mikepenz:iconics-core:1.7.1@aar' +# + +-keep class com.mikepenz.iconics.** { *; } +-keep class com.mikepenz.community_material_typeface_library.CommunityMaterial +-keep class com.mikepenz.fontawesome_typeface_library.FontAwesome +-keep class com.mikepenz.google_material_typeface_library.GoogleMaterial +-keep class com.mikepenz.meteocons_typeface_library.Meteoconcs +-keep class com.mikepenz.octicons_typeface_library.Octicons \ No newline at end of file diff --git a/app/proguard/jsoup.pro b/app/proguard/jsoup.pro new file mode 100644 index 00000000..cb139ecd --- /dev/null +++ b/app/proguard/jsoup.pro @@ -0,0 +1 @@ +-keep class org.jsoup.** \ No newline at end of file diff --git a/app/proguard/mhttp.pro b/app/proguard/mhttp.pro new file mode 100644 index 00000000..6d3e4e38 --- /dev/null +++ b/app/proguard/mhttp.pro @@ -0,0 +1,48 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/wangchao/Work/android-sdk/sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} +-dontwarn im.wangchao.** +-dontwarn okio.** +-dontwarn javax.annotation.Nullable +-dontwarn javax.annotation.ParametersAreNonnullByDefault +-keep class im.wangchao.** { *; } +-keep class **_HttpBinder { *; } +-keepclasseswithmembernames class * { + @im.wangchao.* ; +} +-keepclasseswithmembernames class * { + @im.wangchao.* ; +} +-keepclassmembers class * implements java.io.Serializable { + static final long serialVersionUID; + private static final java.io.ObjectStreamField[] serialPersistentFields; + !static !transient ; + private void writeObject(java.io.ObjectOutputStream); + private void readObject(java.io.ObjectInputStream); + java.lang.Object writeReplace(); + java.lang.Object readResolve(); +} +# okhttp +-dontwarn okhttp3.** +-dontwarn okio.** +-dontwarn javax.annotation.** +-dontwarn org.conscrypt.** +# A resource is loaded with a relative path so the package of this class must be preserved. +-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase + +# If you do not use Rx: +-dontwarn rx.** \ No newline at end of file diff --git a/app/proguard/okhttp3.pro b/app/proguard/okhttp3.pro new file mode 100644 index 00000000..d17d3566 --- /dev/null +++ b/app/proguard/okhttp3.pro @@ -0,0 +1,19 @@ +# JSR 305 annotations are for embedding nullability information. +-dontwarn javax.annotation.** + +# A resource is loaded with a relative path so the package of this class must be preserved. +-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase + +# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. +-dontwarn org.codehaus.mojo.animal_sniffer.* + +# OkHttp platform used only on JVM and when Conscrypt dependency is available. +-dontwarn okhttp3.internal.platform.ConscryptPlatform + +# This is added for okhttp 3.1.2 bug fix as shown at https://github.com/square/okhttp/issues/2323 +-keepclassmembers class * implements javax.net.ssl.SSLSocketFactory { + private javax.net.ssl.SSLSocketFactory delegate; +} + +-keepnames class sun.security.ssl.SSLContextImpl +-keepnames class javax.net.ssl.SSLSocketFactory diff --git a/app/proguard/szkolny-font.pro b/app/proguard/szkolny-font.pro new file mode 100644 index 00000000..4e48be73 --- /dev/null +++ b/app/proguard/szkolny-font.pro @@ -0,0 +1 @@ +-keep class com.mikepenz.szkolny_font_typeface_library.SzkolnyFont { *; } diff --git a/app/proguard/wear.pro b/app/proguard/wear.pro new file mode 100644 index 00000000..f1b42451 --- /dev/null +++ b/app/proguard/wear.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1fbc04ec..991589de 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -29,22 +29,22 @@ @@ -57,7 +57,7 @@ |_| |_|_| \___|_.__/ \__,_|___/\___/ --> @@ -72,7 +72,7 @@ |___/ --> @@ -113,14 +113,14 @@ android:theme="@style/Base.Theme.AppCompat" /> - + - \ No newline at end of file + diff --git a/app/src/main/assets/pl-changelog.html b/app/src/main/assets/pl-changelog.html index 25e2064b..eab231b6 100644 --- a/app/src/main/assets/pl-changelog.html +++ b/app/src/main/assets/pl-changelog.html @@ -31,6 +31,38 @@ +

Wersja 3.1.1, 2019-10-09

+
    +
  • Librus: poprawiona synchronizacja kategorii i kolorów ocen.
  • +
  • Zmieniony kolor dolnego paska w ciemnym motywie.
  • +
  • Zaktualizowany licznik czasu lekcji.
  • +
+ +

Wersja 3.1, 2019-09-29

+
    +
  • Poprawiony interfejs zadań domowych.
  • +
  • Librus: wyświetlanie komentarzy ocen.
  • +
  • Librus: wyświetlanie nieobecności nauczycieli w Terminarzu.
  • +
  • Librus: usprawniona synchronizacja ocen.
  • +
  • Poprawki angielskiego tłumaczenia.
  • +
+ +

Wersja 3.0.3, 2019-09-26

+
    +
  • Librus: poprawka kilku błędów synchronizacji.
  • +
  • Vulcan: prawidłowe oznaczanie wiadomości jako przeczytana.
  • +
  • Vulcan: poprawiona synchronizacja wiadomości i frekwencji.
  • +
  • Vulcan: poprawka błędów logowania.
  • +
+ +

Wersja 3.0.2, 2019-09-24

+
    +
  • Librus: pobieranie Bieżących ocen opisowych.
  • +
  • Poprawki UI: kolor ikon paska statusu w jasnym motywie.
  • +
  • Poprawka braku skanera QR do przekazywania powiadomień.
  • +
  • Poprawka wyboru koloru i daty własnego wydarzenia, które crashowały aplikację.
  • +
+

Wersja 3.0.1, 2019-09-19

  • Librus: Poprawa błędu synchronizacji.
  • diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/App.java b/app/src/main/java/pl/szczodrzynski/edziennik/App.java index 09926597..afb44fda 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/App.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/App.java @@ -19,7 +19,6 @@ import android.provider.Settings; import android.util.Base64; import android.util.Log; import android.util.Pair; -import android.widget.Toast; import com.evernote.android.job.JobManager; import com.google.android.gms.security.ProviderInstaller; @@ -64,29 +63,28 @@ import me.leolin.shortcutbadger.ShortcutBadger; import okhttp3.ConnectionSpec; import okhttp3.OkHttpClient; import okhttp3.TlsVersion; -import pl.szczodrzynski.edziennik.activities.CrashActivity; -import pl.szczodrzynski.edziennik.api.Edziennik; -import pl.szczodrzynski.edziennik.api.Iuczniowie; -import pl.szczodrzynski.edziennik.api.Librus; -import pl.szczodrzynski.edziennik.api.Mobidziennik; -import pl.szczodrzynski.edziennik.api.Vulcan; -import pl.szczodrzynski.edziennik.datamodels.AppDb; -import pl.szczodrzynski.edziennik.datamodels.DebugLog; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; -import pl.szczodrzynski.edziennik.models.AppConfig; +import pl.szczodrzynski.edziennik.ui.modules.base.CrashActivity; +import pl.szczodrzynski.edziennik.data.api.Edziennik; +import pl.szczodrzynski.edziennik.data.api.Iuczniowie; +import pl.szczodrzynski.edziennik.data.api.Librus; +import pl.szczodrzynski.edziennik.data.api.Mobidziennik; +import pl.szczodrzynski.edziennik.data.api.Vulcan; +import pl.szczodrzynski.edziennik.data.db.AppDb; +import pl.szczodrzynski.edziennik.data.db.modules.debuglog.DebugLog; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; +import pl.szczodrzynski.edziennik.utils.models.AppConfig; import pl.szczodrzynski.edziennik.network.NetworkUtils; import pl.szczodrzynski.edziennik.network.TLSSocketFactory; -import pl.szczodrzynski.edziennik.receivers.BootReceiver; import pl.szczodrzynski.edziennik.receivers.JobsCreator; import pl.szczodrzynski.edziennik.sync.SyncJob; import pl.szczodrzynski.edziennik.utils.PermissionChecker; import pl.szczodrzynski.edziennik.utils.Themes; import pl.szczodrzynski.edziennik.utils.Utils; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN; public class App extends androidx.multidex.MultiDexApplication { private static final String TAG = "App"; @@ -344,7 +342,7 @@ public class App extends androidx.multidex.MultiDexApplication { .setIcon(Icon.createWithResource(this, R.mipmap.ic_shortcut_homework)) //.setIcon(getDesktopIconFromIconics(SzkolnyFont.Icon.szf_file_document_edit)) .setIntent(new Intent(Intent.ACTION_MAIN, null, this, MainActivity.class) - .putExtra("fragmentId", MainActivity.DRAWER_ITEM_HOMEWORKS)) + .putExtra("fragmentId", MainActivity.DRAWER_ITEM_HOMEWORK)) .build(); ShortcutInfo shortcutMessages = new ShortcutInfo.Builder(mContext, "item_messages") @@ -514,7 +512,7 @@ public class App extends androidx.multidex.MultiDexApplication { } } - if (appConfig.lastAppVersion > BuildConfig.VERSION_CODE) { + /*if (appConfig.lastAppVersion > BuildConfig.VERSION_CODE) { BootReceiver br = new BootReceiver(); Intent i = new Intent(); //i.putExtra("UserChecked", true); @@ -522,7 +520,7 @@ public class App extends androidx.multidex.MultiDexApplication { Toast.makeText(mContext, R.string.warning_older_version_running, Toast.LENGTH_LONG).show(); //Toast.makeText(mContext, "Zaktualizuj aplikację.", Toast.LENGTH_LONG).show(); //System.exit(0); - } + }*/ if (appConfig == null) { appConfig = new AppConfig(this); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt b/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt index c6d05ce8..76719287 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt @@ -6,21 +6,14 @@ import android.content.Context import android.content.pm.PackageManager import android.os.Build import android.os.Bundle -import android.util.Log import androidx.core.app.ActivityCompat import com.google.gson.JsonArray -import com.google.gson.JsonNull import com.google.gson.JsonObject -import im.wangchao.mhttp.Response -import im.wangchao.mhttp.callback.JsonCallbackHandler -import im.wangchao.mhttp.callback.TextCallbackHandler -import im.wangchao.mhttp.internal.exception.ResponseFailException -import pl.szczodrzynski.edziennik.datamodels.Profile -import pl.szczodrzynski.edziennik.datamodels.Teacher +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher import pl.szczodrzynski.navlib.R import pl.szczodrzynski.navlib.crc16 import pl.szczodrzynski.navlib.getColorFromRes -import kotlin.contracts.contract fun List.byId(id: Long) = firstOrNull { it.id == id } fun List.byNameFirstLast(nameFirstLast: String) = firstOrNull { it.name + " " + it.surname == nameFirstLast } @@ -93,4 +86,4 @@ fun Activity.isStoragePermissionGranted(): Boolean { } else { true } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt index 5d7bbd7c..e617b152 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt @@ -19,17 +19,15 @@ import com.mikepenz.iconics.typeface.library.community.material.CommunityMateria import com.mikepenz.iconics.typeface.library.szkolny.font.SzkolnyFont import com.mikepenz.materialdrawer.model.ProfileSettingDrawerItem import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem -import pl.szczodrzynski.edziennik.datamodels.Metadata.* +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.* import pl.szczodrzynski.edziennik.utils.Themes -import pl.szczodrzynski.navlib.NavView -import pl.szczodrzynski.navlib.SystemBarsUtil import pl.szczodrzynski.navlib.SystemBarsUtil.Companion.COLOR_HALF_TRANSPARENT import pl.szczodrzynski.navlib.bottomsheet.NavBottomSheet import pl.szczodrzynski.navlib.drawer.NavDrawer import pl.szczodrzynski.navlib.drawer.items.DrawerPrimaryItem import pl.szczodrzynski.navlib.drawer.items.withAppTitle -import pl.szczodrzynski.navlib.getColorFromAttr import androidx.appcompat.widget.PopupMenu +import androidx.core.graphics.ColorUtils import androidx.navigation.NavOptions import com.danimahardhika.cafebar.CafeBar import com.mikepenz.iconics.IconicsColor @@ -38,25 +36,42 @@ import com.mikepenz.iconics.IconicsSize import com.mikepenz.materialdrawer.model.DividerDrawerItem import com.mikepenz.materialdrawer.model.ProfileDrawerItem import com.mikepenz.materialdrawer.model.interfaces.IProfile +import me.zhanghai.android.materialprogressbar.internal.ThemeUtils import pl.droidsonroids.gif.GifDrawable import pl.szczodrzynski.edziennik.App.APP_URL -import pl.szczodrzynski.edziennik.api.AppError -import pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.* -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback +import pl.szczodrzynski.edziennik.data.api.AppError +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.* +import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback import pl.szczodrzynski.edziennik.databinding.ActivitySzkolnyBinding -import pl.szczodrzynski.edziennik.datamodels.LoginStore -import pl.szczodrzynski.edziennik.datamodels.Profile -import pl.szczodrzynski.edziennik.datamodels.ProfileFull -import pl.szczodrzynski.edziennik.dialogs.ChangelogDialog -import pl.szczodrzynski.edziennik.fragments.* -import pl.szczodrzynski.edziennik.login.LoginActivity -import pl.szczodrzynski.edziennik.messages.MessagesDetailsFragment -import pl.szczodrzynski.edziennik.messages.MessagesFragment -import pl.szczodrzynski.edziennik.models.NavTarget +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull +import pl.szczodrzynski.edziennik.ui.dialogs.changelog.ChangelogDialog +import pl.szczodrzynski.edziennik.ui.modules.homework.HomeworkFragment +import pl.szczodrzynski.edziennik.ui.modules.login.LoginActivity +import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesDetailsFragment +import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesFragment +import pl.szczodrzynski.edziennik.utils.models.NavTarget import pl.szczodrzynski.edziennik.network.ServerRequest import pl.szczodrzynski.edziennik.sync.SyncJob +import pl.szczodrzynski.edziennik.ui.modules.agenda.AgendaFragment +import pl.szczodrzynski.edziennik.ui.modules.announcements.AnnouncementsFragment +import pl.szczodrzynski.edziennik.ui.modules.attendance.AttendanceFragment +import pl.szczodrzynski.edziennik.ui.modules.base.DebugFragment +import pl.szczodrzynski.edziennik.ui.modules.feedback.FeedbackFragment +import pl.szczodrzynski.edziennik.ui.modules.feedback.HelpFragment +import pl.szczodrzynski.edziennik.ui.modules.grades.editor.GradesEditorFragment +import pl.szczodrzynski.edziennik.ui.modules.grades.GradesFragment +import pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment +import pl.szczodrzynski.edziennik.ui.modules.behaviour.BehaviourFragment +import pl.szczodrzynski.edziennik.ui.modules.notifications.NotificationsFragment +import pl.szczodrzynski.edziennik.ui.modules.settings.ProfileManagerFragment +import pl.szczodrzynski.edziennik.ui.modules.settings.SettingsNewFragment +import pl.szczodrzynski.edziennik.ui.modules.timetable.TimetableFragment import pl.szczodrzynski.edziennik.utils.SwipeRefreshLayoutNoTouch import pl.szczodrzynski.edziennik.utils.Utils +import pl.szczodrzynski.edziennik.utils.Utils.dpToPx +import pl.szczodrzynski.navlib.* import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetSeparatorItem import java.io.File @@ -82,9 +97,9 @@ class MainActivity : AppCompatActivity() { const val DRAWER_ITEM_AGENDA = 12 const val DRAWER_ITEM_GRADES = 13 const val DRAWER_ITEM_MESSAGES = 17 - const val DRAWER_ITEM_HOMEWORKS = 14 - const val DRAWER_ITEM_NOTICES = 15 - const val DRAWER_ITEM_ATTENDANCES = 16 + const val DRAWER_ITEM_HOMEWORK = 14 + const val DRAWER_ITEM_BEHAVIOUR = 15 + const val DRAWER_ITEM_ATTENDANCE = 16 const val DRAWER_ITEM_ANNOUNCEMENTS = 18 const val DRAWER_ITEM_NOTIFICATIONS = 20 const val DRAWER_ITEM_SETTINGS = 101 @@ -108,17 +123,17 @@ class MainActivity : AppCompatActivity() { .isStatic(true) .withPopToHome(false) - list += NavTarget(DRAWER_ITEM_TIMETABLE, R.string.menu_timetable, RegisterTimetableFragment::class) + list += NavTarget(DRAWER_ITEM_TIMETABLE, R.string.menu_timetable, TimetableFragment::class) .withIcon(CommunityMaterial.Icon2.cmd_timetable) .withBadgeTypeId(TYPE_LESSON_CHANGE) .isInDrawer(true) - list += NavTarget(DRAWER_ITEM_AGENDA, R.string.menu_agenda, RegisterAgendaDefaultFragment::class) + list += NavTarget(DRAWER_ITEM_AGENDA, R.string.menu_agenda, AgendaFragment::class) .withIcon(CommunityMaterial.Icon.cmd_calendar) .withBadgeTypeId(TYPE_EVENT) .isInDrawer(true) - list += NavTarget(DRAWER_ITEM_GRADES, R.string.menu_grades, RegisterGradesFragment::class) + list += NavTarget(DRAWER_ITEM_GRADES, R.string.menu_grades, GradesFragment::class) .withIcon(CommunityMaterial.Icon2.cmd_numeric_5_box) .withBadgeTypeId(TYPE_GRADE) .isInDrawer(true) @@ -128,29 +143,29 @@ class MainActivity : AppCompatActivity() { .withBadgeTypeId(TYPE_MESSAGE) .isInDrawer(true) - list += NavTarget(DRAWER_ITEM_HOMEWORKS, R.string.menu_homework, RegisterHomeworksFragment::class) + list += NavTarget(DRAWER_ITEM_HOMEWORK, R.string.menu_homework, HomeworkFragment::class) .withIcon(SzkolnyFont.Icon.szf_file_document_edit) .withBadgeTypeId(TYPE_HOMEWORK) .isInDrawer(true) - list += NavTarget(DRAWER_ITEM_NOTICES, R.string.menu_notices, RegisterNoticesFragment::class) + list += NavTarget(DRAWER_ITEM_BEHAVIOUR, R.string.menu_notices, BehaviourFragment::class) .withIcon(CommunityMaterial.Icon2.cmd_message_alert) .withBadgeTypeId(TYPE_NOTICE) .isInDrawer(true) - list += NavTarget(DRAWER_ITEM_ATTENDANCES, R.string.menu_attendances, RegisterAttendancesFragment::class) + list += NavTarget(DRAWER_ITEM_ATTENDANCE, R.string.menu_attendance, AttendanceFragment::class) .withIcon(CommunityMaterial.Icon.cmd_calendar_remove) .withBadgeTypeId(TYPE_ATTENDANCE) .isInDrawer(true) - list += NavTarget(DRAWER_ITEM_ANNOUNCEMENTS, R.string.menu_announcements, RegisterAnnouncementsFragment::class) + list += NavTarget(DRAWER_ITEM_ANNOUNCEMENTS, R.string.menu_announcements, AnnouncementsFragment::class) .withIcon(CommunityMaterial.Icon.cmd_bulletin_board) .withBadgeTypeId(TYPE_ANNOUNCEMENT) .isInDrawer(true) // static drawer items - list += NavTarget(DRAWER_ITEM_NOTIFICATIONS, R.string.menu_notifications, RegisterNotificationsFragment::class) + list += NavTarget(DRAWER_ITEM_NOTIFICATIONS, R.string.menu_notifications, NotificationsFragment::class) .withIcon(CommunityMaterial.Icon.cmd_bell_ring) .isInDrawer(true) .isStatic(true) @@ -239,6 +254,14 @@ class MainActivity : AppCompatActivity() { b.navView.configSystemBarsUtil(this) + // fix for setting status bar color to window color, outside of navlib + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + window.statusBarColor = statusBarColor + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ColorUtils.calculateLuminance(statusBarColor) > 0.6) { + window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR + } + // TODO fix navlib navbar detection, orientation change issues, status bar color setting if not fullscreen commit() @@ -254,6 +277,13 @@ class MainActivity : AppCompatActivity() { fabExtendable = true fabExtended = false fabGravity = Gravity.CENTER + if (Themes.isDark) { + setBackgroundColor(blendColors( + getColorFromAttr(context, R.attr.colorSurface), + getColorFromRes(R.color.colorSurface_4dp) + )) + elevation = dpToPx(4).toFloat() + } } bottomSheet.apply { @@ -513,9 +543,9 @@ class MainActivity : AppCompatActivity() { DRAWER_ITEM_TIMETABLE -> FEATURE_TIMETABLE DRAWER_ITEM_AGENDA -> FEATURE_AGENDA DRAWER_ITEM_GRADES -> FEATURE_GRADES - DRAWER_ITEM_HOMEWORKS -> FEATURE_HOMEWORKS - DRAWER_ITEM_NOTICES -> FEATURE_NOTICES - DRAWER_ITEM_ATTENDANCES -> FEATURE_ATTENDANCES + DRAWER_ITEM_HOMEWORK -> FEATURE_HOMEWORK + DRAWER_ITEM_BEHAVIOUR -> FEATURE_NOTICES + DRAWER_ITEM_ATTENDANCE -> FEATURE_ATTENDANCE DRAWER_ITEM_MESSAGES -> when (MessagesFragment.pageSelection) { 1 -> FEATURE_MESSAGES_OUTBOX else -> FEATURE_MESSAGES_INBOX @@ -529,9 +559,9 @@ class MainActivity : AppCompatActivity() { DRAWER_ITEM_TIMETABLE -> R.string.sync_feature_timetable DRAWER_ITEM_AGENDA -> R.string.sync_feature_agenda DRAWER_ITEM_GRADES -> R.string.sync_feature_grades - DRAWER_ITEM_HOMEWORKS -> R.string.sync_feature_homeworks - DRAWER_ITEM_NOTICES -> R.string.sync_feature_notices - DRAWER_ITEM_ATTENDANCES -> R.string.sync_feature_attendances + DRAWER_ITEM_HOMEWORK -> R.string.sync_feature_homework + DRAWER_ITEM_BEHAVIOUR -> R.string.sync_feature_notices + DRAWER_ITEM_ATTENDANCE -> R.string.sync_feature_attendance DRAWER_ITEM_MESSAGES -> when (MessagesFragment.pageSelection) { 1 -> R.string.sync_feature_messages_outbox else -> R.string.sync_feature_messages_inbox @@ -731,6 +761,9 @@ class MainActivity : AppCompatActivity() { drawer.close() drawer.setSelection(target.id, fireOnClick = false) navView.toolbar.setTitle(target.title ?: target.name) + navView.bottomBar.fabEnable = false + navView.bottomBar.fabExtended = false + navView.bottomBar.setFabOnClickListener(null) Log.d("NavDebug", "Navigating from ${navTarget.fragmentClass?.java?.simpleName} to ${target.fragmentClass?.java?.simpleName}") @@ -839,7 +872,19 @@ class MainActivity : AppCompatActivity() { fun gainAttention() { b.navView.postDelayed({ navView.gainAttentionOnBottomBar() + }, 2000) + } + + fun gainAttentionFAB() { + navView.bottomBar.fabExtended = false + + b.navView.postDelayed({ + navView.bottomBar.fabExtended = true }, 1000) + + b.navView.postDelayed({ + navView.bottomBar.fabExtended = false + }, 3000) } /* _____ _ _ diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/Notifier.java b/app/src/main/java/pl/szczodrzynski/edziennik/Notifier.java index 512affed..cc2237c3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/Notifier.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/Notifier.java @@ -16,9 +16,9 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; import pl.szczodrzynski.edziennik.receivers.BootReceiver; import pl.szczodrzynski.edziennik.sync.SyncJob; import pl.szczodrzynski.edziennik.sync.SyncService; @@ -221,7 +221,7 @@ public class Notifier { | . ` |/ _ \| __| | _| |/ __/ _` | __| |/ _ \| '_ \ | |\ | (_) | |_| | | | | (_| (_| | |_| | (_) | | | | |_| \_|\___/ \__|_|_| |_|\___\__,_|\__|_|\___/|_| |*/ - public void add(pl.szczodrzynski.edziennik.models.Notification notification) { + public void add(pl.szczodrzynski.edziennik.utils.models.Notification notification) { app.appConfig.notifications.add(notification); } @@ -235,8 +235,8 @@ public class Notifier { } int unreadCount = 0; - List notificationList = new ArrayList<>(); - for (pl.szczodrzynski.edziennik.models.Notification notification: app.appConfig.notifications) { + List notificationList = new ArrayList<>(); + for (pl.szczodrzynski.edziennik.utils.models.Notification notification: app.appConfig.notifications) { if (!notification.notified) { notification.seen = false; notification.notified = true; @@ -250,7 +250,7 @@ public class Notifier { } } - for (pl.szczodrzynski.edziennik.models.Notification notification: notificationList) { + for (pl.szczodrzynski.edziennik.utils.models.Notification notification: notificationList) { Intent intent = new Intent(app, MainActivity.class); notification.fillIntent(intent); PendingIntent pendingIntent = PendingIntent.getActivity(app, notification.id, intent, 0); @@ -258,9 +258,9 @@ public class Notifier { // title, text, type, date .setContentTitle(notification.title) .setContentText(notification.text) - .setSubText(pl.szczodrzynski.edziennik.models.Notification.stringType(app, notification.type)) + .setSubText(pl.szczodrzynski.edziennik.utils.models.Notification.stringType(app, notification.type)) .setWhen(notification.addedDate) - .setTicker(app.getString(R.string.notification_ticker_format, pl.szczodrzynski.edziennik.models.Notification.stringType(app, notification.type))) + .setTicker(app.getString(R.string.notification_ticker_format, pl.szczodrzynski.edziennik.utils.models.Notification.stringType(app, notification.type))) // icon, color, lights, priority .setSmallIcon(R.drawable.ic_notification) .setColor(notificationColor) @@ -349,7 +349,7 @@ public class Notifier { } public void dump() { - for (pl.szczodrzynski.edziennik.models.Notification notification: app.appConfig.notifications) { + for (pl.szczodrzynski.edziennik.utils.models.Notification notification: app.appConfig.notifications) { Log.d(TAG, "Profile"+notification.profileId+" Notification from "+ Date.fromMillis(notification.addedDate).getFormattedString()+" "+ Time.fromMillis(notification.addedDate).getStringHMS()+" - "+notification.text); } } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/WidgetTimetable.java b/app/src/main/java/pl/szczodrzynski/edziennik/WidgetTimetable.java index 8a2fe720..36296e39 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/WidgetTimetable.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/WidgetTimetable.java @@ -28,22 +28,22 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; -import pl.szczodrzynski.edziennik.datamodels.EventFull; -import pl.szczodrzynski.edziennik.datamodels.LessonChange; -import pl.szczodrzynski.edziennik.datamodels.LessonFull; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.fragments.HomeFragment; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.ItemWidgetTimetableModel; -import pl.szczodrzynski.edziennik.models.Time; -import pl.szczodrzynski.edziennik.models.Week; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.ItemWidgetTimetableModel; +import pl.szczodrzynski.edziennik.utils.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Week; import pl.szczodrzynski.edziennik.widgets.WidgetConfig; import pl.szczodrzynski.edziennik.sync.SyncJob; import pl.szczodrzynski.edziennik.widgets.timetable.LessonDetailsActivity; import pl.szczodrzynski.edziennik.widgets.timetable.WidgetTimetableService; import static pl.szczodrzynski.edziennik.ExtensionsKt.filterOutArchived; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK; import static pl.szczodrzynski.edziennik.utils.Utils.bs; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/MessageListCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/MessageListCallback.java deleted file mode 100644 index 77137a0e..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/MessageListCallback.java +++ /dev/null @@ -1,9 +0,0 @@ -package pl.szczodrzynski.edziennik.api.interfaces; - -import java.util.List; - -import pl.szczodrzynski.edziennik.datamodels.MessageFull; - -public interface MessageListCallback { - void onSuccess(List messageList); -} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/RecipientListGetCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/RecipientListGetCallback.java deleted file mode 100644 index dce9ec9d..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/RecipientListGetCallback.java +++ /dev/null @@ -1,9 +0,0 @@ -package pl.szczodrzynski.edziennik.api.interfaces; - -import java.util.List; - -import pl.szczodrzynski.edziennik.datamodels.Teacher; - -public interface RecipientListGetCallback { - void onSuccess(List teacherList); -} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiLoginResult.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiLoginResult.kt deleted file mode 100644 index 30b0edad..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiLoginResult.kt +++ /dev/null @@ -1,6 +0,0 @@ -package pl.szczodrzynski.edziennik.api.v2 - -import pl.szczodrzynski.edziennik.api.AppError -import pl.szczodrzynski.edziennik.datamodels.LoginStore - -data class ApiLoginResult(val loginStore: LoginStore, val error: AppError?) \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/FirstLoginResult.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/FirstLoginResult.kt deleted file mode 100644 index 92d3da9e..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/FirstLoginResult.kt +++ /dev/null @@ -1,6 +0,0 @@ -package pl.szczodrzynski.edziennik.api.v2 - -import pl.szczodrzynski.edziennik.api.AppError -import pl.szczodrzynski.edziennik.datamodels.Profile - -data class FirstLoginResult(val profileList: ArrayList, val error: AppError?) \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/DataLibrus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/DataLibrus.kt deleted file mode 100644 index 66fc9c39..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/DataLibrus.kt +++ /dev/null @@ -1,10 +0,0 @@ -package pl.szczodrzynski.edziennik.api.v2.librus.data - -import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback -import pl.szczodrzynski.edziennik.datamodels.LoginStore -import pl.szczodrzynski.edziennik.datamodels.Profile - -class DataLibrus(val app: App, val profile: Profile, val loginStore: LoginStore, val callback: ProgressCallback, val onSuccess: () -> Unit) { - -} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginLibrus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginLibrus.kt deleted file mode 100644 index e8255006..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginLibrus.kt +++ /dev/null @@ -1,12 +0,0 @@ -package pl.szczodrzynski.edziennik.api.v2.librus.firstlogin - -import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback -import pl.szczodrzynski.edziennik.datamodels.LoginStore -import pl.szczodrzynski.edziennik.datamodels.Profile - -class FirstLoginLibrus(val app: App, val loginStore: LoginStore, val progressCallback: ProgressCallback, val onSuccess: (profileList: List) -> Unit) { - init { - - } -} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginSynergia.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginSynergia.kt deleted file mode 100644 index 376a86ac..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginSynergia.kt +++ /dev/null @@ -1,12 +0,0 @@ -package pl.szczodrzynski.edziennik.api.v2.librus.firstlogin - -import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback -import pl.szczodrzynski.edziennik.datamodels.LoginStore -import pl.szczodrzynski.edziennik.datamodels.Profile - -class FirstLoginSynergia(val app: App, val loginStore: LoginStore, val progressCallback: ProgressCallback, val onSuccess: (profileList: List) -> Unit) { - init { - - } -} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/AppError.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/AppError.java similarity index 99% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/AppError.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/AppError.java index d5f6c2a7..ea72e969 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/AppError.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/AppError.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api; +package pl.szczodrzynski.edziennik.data.api; import android.content.Context; import android.os.AsyncTask; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/Edziennik.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Edziennik.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/Edziennik.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Edziennik.java index e3091ac9..99ab1a4b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/Edziennik.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Edziennik.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api; +package pl.szczodrzynski.edziennik.data.api; import android.app.Activity; import android.appwidget.AppWidgetManager; @@ -43,27 +43,27 @@ import pl.szczodrzynski.edziennik.BuildConfig; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; import pl.szczodrzynski.edziennik.WidgetTimetable; -import pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface; -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; -import pl.szczodrzynski.edziennik.datamodels.AnnouncementFull; -import pl.szczodrzynski.edziennik.datamodels.Attendance; -import pl.szczodrzynski.edziennik.datamodels.AttendanceFull; -import pl.szczodrzynski.edziennik.datamodels.Event; -import pl.szczodrzynski.edziennik.datamodels.EventFull; -import pl.szczodrzynski.edziennik.datamodels.EventType; -import pl.szczodrzynski.edziennik.datamodels.GradeFull; -import pl.szczodrzynski.edziennik.datamodels.LessonFull; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.Message; -import pl.szczodrzynski.edziennik.datamodels.MessageFull; -import pl.szczodrzynski.edziennik.datamodels.Metadata; -import pl.szczodrzynski.edziennik.datamodels.Notice; -import pl.szczodrzynski.edziennik.datamodels.NoticeFull; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; -import pl.szczodrzynski.edziennik.datamodels.Team; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Notification; +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface; +import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback; +import pl.szczodrzynski.edziennik.data.db.modules.announcements.AnnouncementFull; +import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance; +import pl.szczodrzynski.edziennik.data.db.modules.attendance.AttendanceFull; +import pl.szczodrzynski.edziennik.data.db.modules.events.Event; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventType; +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.messages.Message; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull; +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata; +import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice; +import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeFull; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.teams.Team; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Notification; import pl.szczodrzynski.edziennik.network.ServerRequest; import pl.szczodrzynski.edziennik.sync.SyncJob; import pl.szczodrzynski.edziennik.utils.Themes; @@ -75,34 +75,34 @@ import static com.mikepenz.iconics.utils.IconicsConvertersKt.colorInt; import static com.mikepenz.iconics.utils.IconicsConvertersKt.sizeDp; import static pl.szczodrzynski.edziennik.App.APP_URL; import static pl.szczodrzynski.edziennik.MainActivity.DRAWER_ITEM_HOME; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_OK; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_PROFILE_ARCHIVED; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_PROFILE_NOT_FOUND; -import static pl.szczodrzynski.edziennik.api.AppError.stringErrorCode; -import static pl.szczodrzynski.edziennik.api.AppError.stringErrorType; -import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_AGENDA; -import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_ALL; -import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_ANNOUNCEMENTS; -import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_ATTENDANCES; -import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_GRADES; -import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_HOMEWORKS; -import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_MESSAGES_INBOX; -import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_MESSAGES_OUTBOX; -import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_NOTICES; -import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_TIMETABLE; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_IUCZNIOWIE; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_LIBRUS; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OK; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_PROFILE_ARCHIVED; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_PROFILE_NOT_FOUND; +import static pl.szczodrzynski.edziennik.data.api.AppError.stringErrorCode; +import static pl.szczodrzynski.edziennik.data.api.AppError.stringErrorType; +import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_AGENDA; +import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_ALL; +import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_ANNOUNCEMENTS; +import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_ATTENDANCE; +import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_GRADES; +import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_HOMEWORK; +import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_MESSAGES_INBOX; +import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_MESSAGES_OUTBOX; +import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_NOTICES; +import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_TIMETABLE; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_IUCZNIOWIE; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_LIBRUS; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED; import static pl.szczodrzynski.edziennik.sync.SyncService.PROFILE_MAX_PROGRESS; import static pl.szczodrzynski.edziennik.utils.Utils.d; import static pl.szczodrzynski.edziennik.utils.Utils.ns; @@ -306,7 +306,7 @@ public class Edziennik { app.notifier.add(new Notification(app.getContext(), text) .withProfileData(profile.getId(), profile.getName()) .withType(event.type == TYPE_HOMEWORK ? Notification.TYPE_NEW_HOMEWORK : Notification.TYPE_NEW_EVENT) - .withFragmentRedirect(event.type == TYPE_HOMEWORK ? MainActivity.DRAWER_ITEM_HOMEWORKS : MainActivity.DRAWER_ITEM_AGENDA) + .withFragmentRedirect(event.type == TYPE_HOMEWORK ? MainActivity.DRAWER_ITEM_HOMEWORK : MainActivity.DRAWER_ITEM_AGENDA) .withLongExtra("eventId", event.id) .withLongExtra("eventDate", event.eventDate.getValue()) .withAddedDate(event.addedDate) @@ -354,7 +354,7 @@ public class Edziennik { app.notifier.add(new Notification(app.getContext(), text) .withProfileData(profile.getId(), profile.getName()) .withType(Notification.TYPE_NEW_NOTICE) - .withFragmentRedirect(MainActivity.DRAWER_ITEM_NOTICES) + .withFragmentRedirect(MainActivity.DRAWER_ITEM_BEHAVIOUR) .withLongExtra("noticeId", notice.id) .withAddedDate(notice.addedDate) ); @@ -382,7 +382,7 @@ public class Edziennik { app.notifier.add(new Notification(app.getContext(), text) .withProfileData(profile.getId(), profile.getName()) .withType(Notification.TYPE_NEW_ATTENDANCE) - .withFragmentRedirect(MainActivity.DRAWER_ITEM_ATTENDANCES) + .withFragmentRedirect(MainActivity.DRAWER_ITEM_ATTENDANCE) .withLongExtra("attendanceId", attendance.id) .withAddedDate(attendance.addedDate) ); @@ -521,7 +521,7 @@ public class Edziennik { app.notifier.add(new Notification(app.getContext(), app.getString(R.string.notification_shared_event_format, event.sharedByName, type != null ? type.name : "wydarzenie", event.eventDate == null ? "nieznana data" : event.eventDate.getFormattedString(), event.topic)) .withProfileData(profile.getId(), profile.getName()) .withType(event.type == TYPE_HOMEWORK ? Notification.TYPE_NEW_SHARED_HOMEWORK : Notification.TYPE_NEW_SHARED_EVENT) - .withFragmentRedirect(event.type == TYPE_HOMEWORK ? MainActivity.DRAWER_ITEM_HOMEWORKS : MainActivity.DRAWER_ITEM_AGENDA) + .withFragmentRedirect(event.type == TYPE_HOMEWORK ? MainActivity.DRAWER_ITEM_HOMEWORK : MainActivity.DRAWER_ITEM_AGENDA) .withLongExtra("eventDate", event.eventDate.getValue()) ); } @@ -849,7 +849,7 @@ public class Edziennik { app.getString(R.string.menu_grades), app.getString(R.string.menu_homework), app.getString(R.string.menu_notices), - app.getString(R.string.menu_attendances), + app.getString(R.string.menu_attendance), app.getString(R.string.title_messages_inbox_single), app.getString(R.string.title_messages_sent_single), app.getString(R.string.menu_announcements) @@ -858,9 +858,9 @@ public class Edziennik { FEATURE_TIMETABLE, FEATURE_AGENDA, FEATURE_GRADES, - FEATURE_HOMEWORKS, + FEATURE_HOMEWORK, FEATURE_NOTICES, - FEATURE_ATTENDANCES, + FEATURE_ATTENDANCE, FEATURE_MESSAGES_INBOX, FEATURE_MESSAGES_OUTBOX, FEATURE_ANNOUNCEMENTS diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/Iuczniowie.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Iuczniowie.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/Iuczniowie.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Iuczniowie.java index ca74dee7..33c69671 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/Iuczniowie.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Iuczniowie.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api; +package pl.szczodrzynski.edziennik.data.api; import android.content.Context; import android.graphics.Color; @@ -34,58 +34,58 @@ import okhttp3.HttpUrl; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.BuildConfig; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback; -import pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface; -import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback; -import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback; -import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback; -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; -import pl.szczodrzynski.edziennik.datamodels.Announcement; -import pl.szczodrzynski.edziennik.datamodels.Attendance; -import pl.szczodrzynski.edziennik.datamodels.Event; -import pl.szczodrzynski.edziennik.datamodels.Grade; -import pl.szczodrzynski.edziennik.datamodels.Lesson; -import pl.szczodrzynski.edziennik.datamodels.LessonChange; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.LuckyNumber; -import pl.szczodrzynski.edziennik.datamodels.Message; -import pl.szczodrzynski.edziennik.datamodels.MessageFull; -import pl.szczodrzynski.edziennik.datamodels.MessageRecipient; -import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull; -import pl.szczodrzynski.edziennik.datamodels.Metadata; -import pl.szczodrzynski.edziennik.datamodels.Notice; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; -import pl.szczodrzynski.edziennik.datamodels.Subject; -import pl.szczodrzynski.edziennik.datamodels.Teacher; -import pl.szczodrzynski.edziennik.datamodels.Team; -import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Endpoint; -import pl.szczodrzynski.edziennik.models.Time; -import pl.szczodrzynski.edziennik.models.Week; +import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface; +import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback; +import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement; +import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance; +import pl.szczodrzynski.edziennik.data.db.modules.events.Event; +import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber; +import pl.szczodrzynski.edziennik.data.db.modules.messages.Message; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull; +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata; +import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher; +import pl.szczodrzynski.edziennik.data.db.modules.teams.Team; +import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Endpoint; +import pl.szczodrzynski.edziennik.utils.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Week; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_SCHOOL_NAME; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_MAINTENANCE; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED; -import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DELETED; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT; -import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEGATIVE; -import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEUTRAL; -import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_POSITIVE; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_SCHOOL_NAME; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_MAINTENANCE; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED; +import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DELETED; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT; +import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEGATIVE; +import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEUTRAL; +import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_POSITIVE; import static pl.szczodrzynski.edziennik.utils.Utils.crc16; import static pl.szczodrzynski.edziennik.utils.Utils.crc32; import static pl.szczodrzynski.edziennik.utils.Utils.d; @@ -200,7 +200,7 @@ public class Iuczniowie implements EdziennikInterface { targetEndpoints.add("Exams"); targetEndpoints.add("Notices"); targetEndpoints.add("Announcements"); - targetEndpoints.add("Attendances"); + targetEndpoints.add("Attendance"); targetEndpoints.add("MessagesInbox"); targetEndpoints.add("MessagesOutbox"); targetEndpoints.add("Finish"); @@ -235,14 +235,14 @@ public class Iuczniowie implements EdziennikInterface { targetEndpoints.add("Grades"); targetEndpoints.add("PropositionGrades"); break; - case FEATURE_HOMEWORKS: - targetEndpoints.add("Homeworks"); + case FEATURE_HOMEWORK: + targetEndpoints.add("Homework"); break; case FEATURE_NOTICES: targetEndpoints.add("Notices"); break; - case FEATURE_ATTENDANCES: - targetEndpoints.add("Attendances"); + case FEATURE_ATTENDANCE: + targetEndpoints.add("Attendance"); break; case FEATURE_MESSAGES_INBOX: targetEndpoints.add("MessagesInbox"); @@ -300,9 +300,9 @@ public class Iuczniowie implements EdziennikInterface { } } - this.attendancesMonth = today.month; - this.attendancesYear = today.year; - this.attendancesPrevMonthChecked = false; + this.attendanceMonth = today.month; + this.attendanceYear = today.year; + this.attendancePrevMonthChecked = false; this.examsMonth = today.month; this.examsYear = today.year; this.examsMonthsChecked = 0; @@ -352,8 +352,8 @@ public class Iuczniowie implements EdziennikInterface { case "Announcements": getAnnouncements(); break; - case "Attendances": - getAttendances(); + case "Attendance": + getAttendance(); break; case "MessagesInbox": getMessagesInbox(); @@ -880,11 +880,17 @@ public class Iuczniowie implements EdziennikInterface { boolean countToTheAverage = jGrade.get("DoSredniej").getAsBoolean(); float value = jGrade.get("WartoscDoSred").getAsFloat(); + String gradeColor = jGrade.get("Kolor").getAsString(); + int colorInt = 0xff2196f3; + if (!gradeColor.isEmpty()) { + colorInt = Color.parseColor("#"+gradeColor); + } + Grade gradeObject = new Grade( profileId, jGrade.get("idK").getAsLong(), jGrade.get("Kategoria").getAsString(), - Color.parseColor("#"+jGrade.get("Kolor").getAsString()), + colorInt, "", jGrade.get("Ocena").getAsString(), value, @@ -1190,17 +1196,17 @@ public class Iuczniowie implements EdziennikInterface { }); } - private int attendancesYear; - private int attendancesMonth; - private boolean attendancesPrevMonthChecked = false; - private void getAttendances() { - callback.onActionStarted(R.string.sync_action_syncing_attendances); + private int attendanceYear; + private int attendanceMonth; + private boolean attendancePrevMonthChecked = false; + private void getAttendance() { + callback.onActionStarted(R.string.sync_action_syncing_attendance); apiRequest(Request.builder() .url(IDZIENNIK_URL +"/mod_panelRodzica/obecnosci/WS_obecnosciUcznia.asmx/pobierzObecnosciUcznia") .userAgent(userAgent) .addParameter("idPozDziennika", loginRegisterId) - .addParameter("mc", attendancesMonth) - .addParameter("rok", attendancesYear) + .addParameter("mc", attendanceMonth) + .addParameter("rok", attendanceYear) .addParameter("dataTygodnia", "") .postJson(), (result, response) -> { JsonObject data = result.getAsJsonObject("d"); @@ -1275,25 +1281,25 @@ public class Iuczniowie implements EdziennikInterface { } } - int attendancesDateValue = attendancesYear*10000 + attendancesMonth*100; - if (profile.getEmpty() && attendancesDateValue > profile.getSemesterStart(1).getValue()) { - attendancesPrevMonthChecked = true; // do not need to check prev month later - attendancesMonth--; - if (attendancesMonth < 1) { - attendancesMonth = 12; - attendancesYear--; + int attendanceDateValue = attendanceYear *10000 + attendanceMonth *100; + if (profile.getEmpty() && attendanceDateValue > profile.getSemesterStart(1).getValue()) { + attendancePrevMonthChecked = true; // do not need to check prev month later + attendanceMonth--; + if (attendanceMonth < 1) { + attendanceMonth = 12; + attendanceYear--; } - r("get", "Attendances"); - } else if (!attendancesPrevMonthChecked /* get also the previous month */) { - attendancesMonth--; - if (attendancesMonth < 1) { - attendancesMonth = 12; - attendancesYear--; + r("get", "Attendance"); + } else if (!attendancePrevMonthChecked /* get also the previous month */) { + attendanceMonth--; + if (attendanceMonth < 1) { + attendanceMonth = 12; + attendanceYear--; } - attendancesPrevMonthChecked = true; - r("get", "Attendances"); + attendancePrevMonthChecked = true; + r("get", "Attendance"); } else { - r("finish", "Attendances"); + r("finish", "Attendance"); } }); } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/Librus.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Librus.java similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/Librus.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Librus.java index 592131ad..860219a7 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/Librus.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Librus.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api; +package pl.szczodrzynski.edziennik.data.api; import android.content.Context; import android.graphics.Color; @@ -45,39 +45,40 @@ import im.wangchao.mhttp.callback.TextCallbackHandler; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.BuildConfig; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback; -import pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface; -import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback; -import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback; -import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback; -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; -import pl.szczodrzynski.edziennik.api.v2.models.DataStore; -import pl.szczodrzynski.edziennik.datamodels.Announcement; -import pl.szczodrzynski.edziennik.datamodels.Attendance; -import pl.szczodrzynski.edziennik.datamodels.Event; -import pl.szczodrzynski.edziennik.datamodels.EventType; -import pl.szczodrzynski.edziennik.datamodels.Grade; -import pl.szczodrzynski.edziennik.datamodels.GradeCategory; -import pl.szczodrzynski.edziennik.datamodels.Lesson; -import pl.szczodrzynski.edziennik.datamodels.LessonChange; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.LuckyNumber; -import pl.szczodrzynski.edziennik.datamodels.Message; -import pl.szczodrzynski.edziennik.datamodels.MessageFull; -import pl.szczodrzynski.edziennik.datamodels.MessageRecipient; -import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull; -import pl.szczodrzynski.edziennik.datamodels.Metadata; -import pl.szczodrzynski.edziennik.datamodels.Notice; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; -import pl.szczodrzynski.edziennik.datamodels.Subject; -import pl.szczodrzynski.edziennik.datamodels.Teacher; -import pl.szczodrzynski.edziennik.datamodels.Team; -import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Endpoint; -import pl.szczodrzynski.edziennik.models.Time; -import pl.szczodrzynski.edziennik.models.Week; +import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface; +import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback; +import pl.szczodrzynski.edziennik.data.api.v2.models.DataStore; +import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement; +import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance; +import pl.szczodrzynski.edziennik.data.db.modules.events.Event; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventType; +import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade; +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber; +import pl.szczodrzynski.edziennik.data.db.modules.messages.Message; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull; +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata; +import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsence; +import pl.szczodrzynski.edziennik.data.db.modules.teams.Team; +import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Endpoint; +import pl.szczodrzynski.edziennik.utils.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Week; import pl.szczodrzynski.edziennik.utils.Utils; import static java.net.HttpURLConnection.HTTP_BAD_REQUEST; @@ -86,44 +87,44 @@ import static java.net.HttpURLConnection.HTTP_GONE; import static java.net.HttpURLConnection.HTTP_NOT_FOUND; import static java.net.HttpURLConnection.HTTP_OK; import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_LIBRUS_DISCONNECTED; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_LIBRUS_NOT_ACTIVATED; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_MAINTENANCE; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_PROFILE_NOT_FOUND; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_SYNERGIA_NOT_ACTIVATED; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_PT_MEETING; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_TEACHER_ABSENCE; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_NORMAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED; -import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT; -import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEGATIVE; -import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEUTRAL; -import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_POSITIVE; -import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_EDUCATOR; -import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_LIBRARIAN; -import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_OTHER; -import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_PARENTS_COUNCIL; -import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_PEDAGOGUE; -import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SCHOOL_ADMIN; -import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SCHOOL_PARENTS_COUNCIL; -import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SECRETARIAT; -import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SUPER_ADMIN; -import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_TEACHER; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_LIBRUS_DISCONNECTED; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_LIBRUS_NOT_ACTIVATED; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_MAINTENANCE; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_PROFILE_NOT_FOUND; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_SYNERGIA_NOT_ACTIVATED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_PT_MEETING; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_TEACHER_ABSENCE; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_NORMAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED; +import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT; +import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEGATIVE; +import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEUTRAL; +import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_POSITIVE; +import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_EDUCATOR; +import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_LIBRARIAN; +import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_OTHER; +import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_PARENTS_COUNCIL; +import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_PEDAGOGUE; +import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SCHOOL_ADMIN; +import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SCHOOL_PARENTS_COUNCIL; +import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SECRETARIAT; +import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SUPER_ADMIN; +import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_TEACHER; import static pl.szczodrzynski.edziennik.utils.Utils.bs; import static pl.szczodrzynski.edziennik.utils.Utils.c; import static pl.szczodrzynski.edziennik.utils.Utils.contains; @@ -170,6 +171,7 @@ public class Librus implements EdziennikInterface { private List teamList; private List teacherList; + private List teacherAbsenceList; private List subjectList; private List lessonList; private List lessonChangeList; @@ -199,6 +201,7 @@ public class Librus implements EdziennikInterface { private boolean enableDescriptiveGrades = false; private boolean enableTextGrades = false; private boolean enableBehaviourGrades = true; + private long unitId = -1; private int startPointsSemester1 = 0; private int startPointsSemester2 = 0; @@ -239,6 +242,7 @@ public class Librus implements EdziennikInterface { teamList = profileId == -1 ? new ArrayList<>() : app.db.teamDao().getAllNow(profileId); teacherList = profileId == -1 ? new ArrayList<>() : app.db.teacherDao().getAllNow(profileId); + teacherAbsenceList = new ArrayList<>(); subjectList = new ArrayList<>(); lessonList = new ArrayList<>(); lessonChangeList = new ArrayList<>(); @@ -288,15 +292,18 @@ public class Librus implements EdziennikInterface { targetEndpoints.add("Grades"); targetEndpoints.add("PointGrades"); targetEndpoints.add("DescriptiveGrades"); + targetEndpoints.add("TextGrades"); targetEndpoints.add("BehaviourGrades"); + targetEndpoints.add("GradesComments"); targetEndpoints.add("Events"); + targetEndpoints.add("TeacherFreeDays"); targetEndpoints.add("CustomTypes"); - targetEndpoints.add("Homeworks"); + targetEndpoints.add("Homework"); targetEndpoints.add("LuckyNumbers"); targetEndpoints.add("Notices"); - targetEndpoints.add("AttendancesTypes"); - targetEndpoints.add("Attendances"); + targetEndpoints.add("AttendanceTypes"); + targetEndpoints.add("Attendance"); targetEndpoints.add("Announcements"); targetEndpoints.add("PtMeetings"); @@ -346,6 +353,8 @@ public class Librus implements EdziennikInterface { targetEndpoints.add("Events"); targetEndpoints.add("CustomTypes"); targetEndpoints.add("PtMeetings"); + targetEndpoints.add("SchoolFreeDays"); + targetEndpoints.add("TeacherFreeDays"); break; case FEATURE_GRADES: targetEndpoints.add("SavedGradeCategories"); @@ -359,17 +368,20 @@ public class Librus implements EdziennikInterface { targetEndpoints.add("Grades"); targetEndpoints.add("PointGrades"); targetEndpoints.add("DescriptiveGrades"); + targetEndpoints.add("TextGrades"); targetEndpoints.add("BehaviourGrades"); + + targetEndpoints.add("GradesComments"); break; - case FEATURE_HOMEWORKS: - targetEndpoints.add("Homeworks"); + case FEATURE_HOMEWORK: + targetEndpoints.add("Homework"); break; case FEATURE_NOTICES: targetEndpoints.add("Notices"); break; - case FEATURE_ATTENDANCES: - targetEndpoints.add("AttendancesTypes"); - targetEndpoints.add("Attendances"); + case FEATURE_ATTENDANCE: + targetEndpoints.add("AttendanceTypes"); + targetEndpoints.add("Attendance"); break; case FEATURE_MESSAGES_INBOX: if (!hasMessagesLogin) { @@ -433,6 +445,10 @@ public class Librus implements EdziennikInterface { callback.onProgress(PROGRESS_STEP); index++; } + if (index > targetEndpoints.size()) { + finish(); + return; + } d(TAG, "Called r("+type+", "+endpoint+"). Getting "+targetEndpoints.get(index)); switch (targetEndpoints.get(index)) { case "Me": @@ -498,6 +514,12 @@ public class Librus implements EdziennikInterface { case "DescriptiveGrades": getDescriptiveGrades(); break; + case "TextGrades": + getTextGrades(); + break; + case "GradesComments": + getGradesComments(); + break; case "BehaviourGrades": getBehaviourGrades(); break; @@ -507,8 +529,8 @@ public class Librus implements EdziennikInterface { case "CustomTypes": getCustomTypes(); break; - case "Homeworks": - getHomeworks(); + case "Homework": + getHomework(); break; case "LuckyNumbers": getLuckyNumbers(); @@ -516,11 +538,11 @@ public class Librus implements EdziennikInterface { case "Notices": getNotices(); break; - case "AttendancesTypes": - getAttendancesTypes(); + case "AttendanceTypes": + getAttendanceTypes(); break; - case "Attendances": - getAttendances(); + case "Attendance": + getAttendance(); break; case "Announcements": getAnnouncements(); @@ -534,6 +556,9 @@ public class Librus implements EdziennikInterface { case "TeacherFreeDays": getTeacherFreeDays(); break; + case "SchoolFreeDays": + getSchoolFreeDays(); + break; case "MessagesLogin": getMessagesLogin(); break; @@ -575,6 +600,8 @@ public class Librus implements EdziennikInterface { } if (eventTypeList.size() > 0) app.db.eventTypeDao().addAll(eventTypeList); + if (teacherAbsenceList.size() > 0) + app.db.teacherAbsenceDao().addAll(teacherAbsenceList); if (noticeList.size() > 0) { app.db.noticeDao().clear(profileId); app.db.noticeDao().addAll(noticeList); @@ -644,7 +671,7 @@ public class Librus implements EdziennikInterface { }; librusLoginCallback = redirectUrl -> { - fakeAuthorize = "authorize2"; + fakeAuthorize = "authorize"; authorize(AUTHORIZE_URL, authorizeCallback); }; @@ -1403,7 +1430,8 @@ public class Librus implements EdziennikInterface { } JsonElement unit = myClass.get("Unit"); if (unit != null && !(unit instanceof JsonNull)) { - profile.putStudentData("unitId", unit.getAsJsonObject().get("Id").getAsLong()); + unitId = unit.getAsJsonObject().get("Id").getAsLong(); + profile.putStudentData("unitId", unitId); } r("finish", "Classes"); } @@ -1662,11 +1690,32 @@ public class Librus implements EdziennikInterface { continue; } + Time startTime = null; + Time endTime = null; + try { + startTime = Time.fromH_m(lesson.get(substitution && !cancelled ? "OrgHourFrom" : "HourFrom").getAsString()); + endTime = Time.fromH_m(lesson.get(substitution && !cancelled ? "OrgHourTo" : "HourTo").getAsString()); + } + catch (Exception ignore) { + try { + JsonElement lessonNo; + if (!((lessonNo = lesson.get("LessonNo")) instanceof JsonNull)) { + Pair timePair = lessonRanges.get(strToInt(lessonNo.getAsString())); + if (timePair != null) { + startTime = timePair.first; + endTime = timePair.second; + } + } + } + catch (Exception ignore2) { } + } + + Lesson lessonObject = new Lesson( profileId, lesson.get("DayNo").getAsInt() - 1, - Time.fromH_m(lesson.get(substitution && !cancelled ? "OrgHourFrom" : "HourFrom").getAsString()), - Time.fromH_m(lesson.get(substitution && !cancelled ? "OrgHourTo" : "HourTo").getAsString()) + startTime, + endTime ); JsonElement subject; @@ -1711,7 +1760,7 @@ public class Librus implements EdziennikInterface { r("finish", "Substitutions"); return; } - + JsonArray substitutions = data.get("Substitutions").getAsJsonArray(); try { List ignoreList = new ArrayList<>(); @@ -1880,14 +1929,14 @@ public class Librus implements EdziennikInterface { } private void getGradesCategories() { - if (!fullSync) { + if (!fullSync && false) { // cancel every not-full sync; no need to download categories again // every full sync it'll be enabled to make sure there are no grades - by getUnits r("finish", "GradesCategories"); return; } // not a full sync. Will get all grade categories. Clear the current list. - gradeCategoryList.clear(); + //gradeCategoryList.clear(); callback.onActionStarted(R.string.sync_action_syncing_grade_categories); apiRequest("Grades/Categories", data -> { @@ -1934,6 +1983,32 @@ public class Librus implements EdziennikInterface { }); } + private void getGradesComments() { + callback.onActionStarted(R.string.sync_action_syncing_grade_comments); + apiRequest("Grades/Comments", data -> { + if (data == null) { + r("finish", "GradesComments"); + return; + } + + JsonArray comments = data.get("Comments").getAsJsonArray(); + for (JsonElement commentEl : comments) { + JsonObject comment = commentEl.getAsJsonObject(); + long gradeId = comment.get("Grade").getAsJsonObject().get("Id").getAsLong(); + String text = comment.get("Text").getAsString(); + + for (Grade grade : gradeList) { + if (grade.id == gradeId) { + grade.description = text; + break; + } + } + } + + r("finish", "GradesComments"); + }); + } + private void getPointGradesCategories() { if (!fullSync || !enablePointGrades) { // cancel every not-full sync; no need to download categories again @@ -2389,6 +2464,70 @@ public class Librus implements EdziennikInterface { }); } + private void getTextGrades() { + callback.onActionStarted(R.string.sync_action_syncing_descriptive_grades); + apiRequest("DescriptiveGrades", data -> { + if (data == null) { + r("finish", "TextGrades"); + return; + } + JsonArray grades = data.get("Grades").getAsJsonArray(); + //d("Got Grades: "+grades.toString()); + for (JsonElement gradeEl : grades) { + JsonObject grade = gradeEl.getAsJsonObject(); + long id = grade.get("Id").getAsLong(); + long teacherId = grade.get("AddedBy").getAsJsonObject().get("Id").getAsLong(); + int semester = grade.get("Semester").getAsInt(); + long subjectId = grade.get("Subject").getAsJsonObject().get("Id").getAsLong(); + JsonElement map = grade.get("Map"); + JsonElement realGrade = grade.get("RealGradeValue"); + String description = ""; + if (map != null) { + description = map.getAsString(); + } + else if (realGrade != null) { + description = realGrade.getAsString(); + } + + long categoryId = -1; + JsonElement skillEl = grade.get("Skill"); + if (skillEl != null) { + categoryId = skillEl.getAsJsonObject().get("Id").getAsLong(); + } + + String str_date = grade.get("AddDate").getAsString(); + long addedDate = Date.fromIso(str_date); + + String category = ""; + int color = -1; + GradeCategory gradeCategory = GradeCategory.search(gradeCategoryList, categoryId); + if (gradeCategory != null) { + category = gradeCategory.text; + color = gradeCategory.color; + } + + Grade gradeObject = new Grade( + profileId, + id, + category, + color, + "", + description, + 0.0f, + 0, + semester, + teacherId, + subjectId + ); + gradeObject.type = Grade.TYPE_DESCRIPTIVE; + + gradeList.add(gradeObject); + metadataList.add(new Metadata(profileId, Metadata.TYPE_GRADE, gradeObject.id, profile.getEmpty(), profile.getEmpty(), addedDate)); + } + r("finish", "TextGrades"); + }); + } + private void getBehaviourGrades() { d(TAG, "Grades settings: "+enableStandardGrades+", "+enablePointGrades+", "+enableDescriptiveGrades); if (!enableBehaviourGrades) { @@ -2622,21 +2761,21 @@ public class Librus implements EdziennikInterface { }); } - private void getHomeworks() { + private void getHomework() { if (!premium) { - r("finish", "Homeworks"); + r("finish", "Homework"); return; } callback.onActionStarted(R.string.sync_action_syncing_homework); apiRequest("HomeWorkAssignments", data -> { if (data == null) { - r("finish", "Homeworks"); + r("finish", "Homework"); return; } - JsonArray homeworks = data.get("HomeWorkAssignments").getAsJsonArray(); + JsonArray homeworkList = data.get("HomeWorkAssignments").getAsJsonArray(); //d("Got Grades: "+events.toString()); try { - for (JsonElement homeworkEl : homeworks) { + for (JsonElement homeworkEl : homeworkList) { JsonObject homework = homeworkEl.getAsJsonObject(); JsonElement el; @@ -2687,7 +2826,7 @@ public class Librus implements EdziennikInterface { eventList.add(eventObject); metadataList.add(new Metadata(profileId, Metadata.TYPE_EVENT, eventObject.id, profile.getEmpty(), profile.getEmpty(), addedDate.getInMillis())); } - r("finish", "Homeworks"); + r("finish", "Homework"); } catch (Exception e) { finishWithError(new AppError(TAG, 2648, CODE_OTHER, e, data)); @@ -2788,11 +2927,11 @@ public class Librus implements EdziennikInterface { } private SparseArray> attendanceTypes = new SparseArray<>(); - private void getAttendancesTypes() { + private void getAttendanceTypes() { callback.onActionStarted(R.string.sync_action_syncing_attendance_types); apiRequest("Attendances/Types", data -> { if (data == null) { - r("finish", "AttendancesTypes"); + r("finish", "AttendanceTypes"); return; } try { @@ -2807,7 +2946,7 @@ public class Librus implements EdziennikInterface { ) ); } - r("finish", "AttendancesTypes"); + r("finish", "AttendanceTypes"); } catch (Exception e) { finishWithError(new AppError(TAG, 2782, CODE_OTHER, e, data)); @@ -2815,18 +2954,18 @@ public class Librus implements EdziennikInterface { }); } - private void getAttendances() { - callback.onActionStarted(R.string.sync_action_syncing_attendances); + private void getAttendance() { + callback.onActionStarted(R.string.sync_action_syncing_attendance); apiRequest("Attendances"+(fullSync ? "" : "?dateFrom="+ Date.getToday().stepForward(0, -1, 0).getStringY_m_d()), data -> { if (data == null) { - r("finish", "Attendances"); + r("finish", "Attendance"); return; } try { - JsonArray jAttendances = data.get("Attendances").getAsJsonArray(); + JsonArray jAttendance = data.get("Attendances").getAsJsonArray(); - for (JsonElement attendanceEl : jAttendances) { + for (JsonElement attendanceEl : jAttendance) { JsonObject attendance = attendanceEl.getAsJsonObject(); int type = attendance.getAsJsonObject("Type").get("Id").getAsInt(); @@ -2892,7 +3031,7 @@ public class Librus implements EdziennikInterface { metadataList.add(new Metadata(profileId, Metadata.TYPE_ATTENDANCE, attendanceObject.id, profile.getEmpty(), profile.getEmpty(), addedDate)); } } - r("finish", "Attendances"); + r("finish", "Attendance"); } catch (Exception e) { finishWithError(new AppError(TAG, 2872, CODE_OTHER, e, data)); @@ -3007,6 +3146,10 @@ public class Librus implements EdziennikInterface { private SparseArray teacherFreeDaysTypes = new SparseArray<>(); private void getTeacherFreeDaysTypes() { + if (!fullSync) { + r("finish", "TeacherFreeDaysTypes"); + return; + } callback.onActionStarted(R.string.sync_action_syncing_teacher_free_days_types); apiRequest("TeacherFreeDays/Types", data -> { if (data == null) { @@ -3041,27 +3184,45 @@ public class Librus implements EdziennikInterface { JsonObject freeDay = freeDayEl.getAsJsonObject(); long id = freeDay.get("Id").getAsLong(); + long teacherId = freeDay.getAsJsonObject("Teacher").get("Id").getAsLong(); Date dateFrom = Date.fromY_m_d(freeDay.get("DateFrom").getAsString()); Date dateTo = Date.fromY_m_d(freeDay.get("DateTo").getAsString()); - int type = freeDay.getAsJsonObject("Type").get("Id").getAsInt(); - String topic = teacherFreeDaysTypes.get(type)+"\n"+(dateFrom.getValue() != dateTo.getValue() ? dateFrom.getFormattedString()+" - "+dateTo.getFormattedString() : ""); - Event eventObject = new Event( + Time timeFrom = null; + Time timeTo = null; + + if (freeDay.get("TimeFrom") != null && freeDay.get("TimeTo") != null) { + timeFrom = Time.fromH_m_s(freeDay.get("TimeFrom").getAsString()); + timeTo = Time.fromH_m_s(freeDay.get("TimeTo").getAsString()); + } + + long type = freeDay.getAsJsonObject("Type").get("Id").getAsLong(); + + //String topic = teacherFreeDaysTypes.get(type)+"\n"+(dateFrom.getValue() != dateTo.getValue() ? dateFrom.getFormattedString()+" - "+dateTo.getFormattedString() : ""); + + TeacherAbsence teacherAbsence = new TeacherAbsence( profileId, id, + teacherId, + type, dateFrom, - null, - topic, - -1, - TYPE_TEACHER_ABSENCE, - false, - freeDay.getAsJsonObject("Teacher").get("Id").getAsLong(), - -1, - -1 + dateTo, + timeFrom, + timeTo ); - eventList.add(eventObject); - metadataList.add(new Metadata(profileId, Metadata.TYPE_EVENT, eventObject.id, profile.getEmpty(), profile.getEmpty(), System.currentTimeMillis())); + + teacherAbsenceList.add(teacherAbsence); + metadataList.add( + new Metadata( + profileId, + Metadata.TYPE_TEACHER_ABSENCE, + teacherAbsence.getId(), + true, + true, + System.currentTimeMillis()) + ); + } r("finish", "TeacherFreeDays"); } @@ -3071,6 +3232,26 @@ public class Librus implements EdziennikInterface { }); } + private void getSchoolFreeDays() { + callback.onActionStarted(R.string.sync_action_syncing_school_free_days); + apiRequest("SchoolFreeDays" + (unitId != -1 ? "?unit=" + unitId : ""), data -> { + if (data == null) { + r("finish", "SchoolFreeDays"); + return; + } + try { + JsonArray jFreeDays = data.get("SchoolFreeDays").getAsJsonArray(); + + for (JsonElement freeDayEl: jFreeDays) { + continue; + } + r("finish", "SchoolFreeDays"); + } catch (Exception e) { + finishWithError(new AppError(TAG, 3069, CODE_OTHER, e, data)); + } + }); + } + private void getMessagesLogin() { if (synergiaPassword == null) { // skip messages @@ -3257,10 +3438,10 @@ public class Librus implements EdziennikInterface { configurableEndpoints.put("Grades", new Endpoint("Grades",true, false, profile.getChangedEndpoints())); configurableEndpoints.put("PointGrades", new Endpoint("PointGrades",true, false, profile.getChangedEndpoints())); configurableEndpoints.put("Events", new Endpoint("Events",true, false, profile.getChangedEndpoints())); - configurableEndpoints.put("Homeworks", new Endpoint("Homeworks",true, false, profile.getChangedEndpoints())); + configurableEndpoints.put("Homework", new Endpoint("Homework",true, false, profile.getChangedEndpoints())); configurableEndpoints.put("LuckyNumbers", new Endpoint("LuckyNumbers",true, false, profile.getChangedEndpoints())); configurableEndpoints.put("Notices", new Endpoint("Notices",true, false, profile.getChangedEndpoints())); - configurableEndpoints.put("Attendances", new Endpoint("Attendances",true, false, profile.getChangedEndpoints())); + configurableEndpoints.put("Attendance", new Endpoint("Attendance",true, false, profile.getChangedEndpoints())); configurableEndpoints.put("Announcements", new Endpoint("Announcements",true, true, profile.getChangedEndpoints())); configurableEndpoints.put("PtMeetings", new Endpoint("PtMeetings",true, true, profile.getChangedEndpoints())); configurableEndpoints.put("TeacherFreeDays", new Endpoint("TeacherFreeDays",false, false, profile.getChangedEndpoints())); @@ -3668,4 +3849,4 @@ public class Librus implements EdziennikInterface { public MessagesComposeInfo getComposeInfo(@NonNull ProfileFull profile) { return new MessagesComposeInfo(0, 0, 150, 20000); } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/Mobidziennik.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Mobidziennik.java similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/Mobidziennik.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Mobidziennik.java index 7df269d6..4a3d191f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/Mobidziennik.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Mobidziennik.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api; +package pl.szczodrzynski.edziennik.data.api; import android.content.Context; import android.graphics.Color; @@ -40,59 +40,59 @@ import im.wangchao.mhttp.callback.TextCallbackHandler; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.BuildConfig; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback; -import pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface; -import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback; -import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback; -import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback; -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; -import pl.szczodrzynski.edziennik.datamodels.Attendance; -import pl.szczodrzynski.edziennik.datamodels.Event; -import pl.szczodrzynski.edziennik.datamodels.Grade; -import pl.szczodrzynski.edziennik.datamodels.GradeCategory; -import pl.szczodrzynski.edziennik.datamodels.Lesson; -import pl.szczodrzynski.edziennik.datamodels.LessonChange; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.LuckyNumber; -import pl.szczodrzynski.edziennik.datamodels.Message; -import pl.szczodrzynski.edziennik.datamodels.MessageFull; -import pl.szczodrzynski.edziennik.datamodels.MessageRecipient; -import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull; -import pl.szczodrzynski.edziennik.datamodels.Metadata; -import pl.szczodrzynski.edziennik.datamodels.Notice; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; -import pl.szczodrzynski.edziennik.datamodels.Subject; -import pl.szczodrzynski.edziennik.datamodels.Teacher; -import pl.szczodrzynski.edziennik.datamodels.Team; -import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Endpoint; -import pl.szczodrzynski.edziennik.models.Time; -import pl.szczodrzynski.edziennik.models.Week; +import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface; +import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback; +import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance; +import pl.szczodrzynski.edziennik.data.db.modules.events.Event; +import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade; +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber; +import pl.szczodrzynski.edziennik.data.db.modules.messages.Message; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull; +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata; +import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher; +import pl.szczodrzynski.edziennik.data.db.modules.teams.Team; +import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Endpoint; +import pl.szczodrzynski.edziennik.utils.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Week; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_MAINTENANCE; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_CUSTOM; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_DEFAULT; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXAM; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_SHORT_QUIZ; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DELETED; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_MAINTENANCE; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_CUSTOM; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_DEFAULT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXAM; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_SHORT_QUIZ; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DELETED; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT; import static pl.szczodrzynski.edziennik.utils.Utils.bs; import static pl.szczodrzynski.edziennik.utils.Utils.crc16; import static pl.szczodrzynski.edziennik.utils.Utils.d; @@ -150,7 +150,7 @@ public class Mobidziennik implements EdziennikInterface { private String loginPassword = null; private int studentId = -1; - private long attendancesLastSync = 0; + private long attendanceLastSync = 0; private boolean prepare(@NonNull Context activityContext, @NonNull SyncCallback callback, int profileId, @Nullable Profile profile, @NonNull LoginStore loginStore) { this.activityContext = activityContext; @@ -171,7 +171,7 @@ public class Mobidziennik implements EdziennikInterface { return false; } this.studentId = profile == null ? -1 : profile.getStudentData("studentId", -1); - this.attendancesLastSync = profile == null ? 0 : profile.getStudentData("attendancesLastSync", (long)0); + this.attendanceLastSync = profile == null ? 0 : profile.getStudentData("attendanceLastSync", (long)0); fakeLogin = BuildConfig.DEBUG && loginUsername.toLowerCase().startsWith("fake"); teamList = profileId == -1 ? new ArrayList<>() : app.db.teamDao().getAllNow(profileId); @@ -204,7 +204,7 @@ public class Mobidziennik implements EdziennikInterface { targetEndpoints = new ArrayList<>(); targetEndpoints.add("GetData"); targetEndpoints.add("ProcessData"); - targetEndpoints.add("Attendances"); + targetEndpoints.add("Attendance"); targetEndpoints.add("ClassCalendar"); targetEndpoints.add("GradeDetails"); targetEndpoints.add("NoticeDetails"); @@ -256,8 +256,8 @@ public class Mobidziennik implements EdziennikInterface { case FEATURE_NOTICES: targetEndpoints.add("NoticeDetails"); break; - case FEATURE_ATTENDANCES: - targetEndpoints.add("Attendances"); + case FEATURE_ATTENDANCE: + targetEndpoints.add("Attendance"); break; case FEATURE_MESSAGES_INBOX: targetEndpoints.add("MessagesInbox"); @@ -314,8 +314,8 @@ public class Mobidziennik implements EdziennikInterface { case "NoticeDetails": getNoticeDetails(); break; - case "Attendances": - getAttendances(); + case "Attendance": + getAttendance(); break; case "Messages": getAllMessages(); @@ -597,7 +597,7 @@ public class Mobidziennik implements EdziennikInterface { processLessons(table); } if (i == 16) { - processAttendances(table); + processAttendance(table); } if (i == 17) { processNotices(table); @@ -609,7 +609,7 @@ public class Mobidziennik implements EdziennikInterface { processEvents(table); } if (i == 23) { - processHomeworks(table); + processHomework(table); } if (i == 24) { processTimetable(table); @@ -1051,20 +1051,20 @@ public class Mobidziennik implements EdziennikInterface { this.lessonId = lessonId; } } - private Date attendancesCheckDate = Week.getWeekStart(); - private void getAttendances() { - r("finish", "Attendances"); - // TODO: 2019-09-10 please download attendances from /dziennik/frekwencja. /mobile does not work above v13.0 + private Date attendanceCheckDate = Week.getWeekStart(); + private void getAttendance() { + r("finish", "Attendance"); + // TODO: 2019-09-10 please download attendance from /dziennik/frekwencja. /mobile does not work above v13.0 if (true) { return; } - callback.onActionStarted(R.string.sync_action_syncing_attendances); - d(TAG, "Get attendances for week "+attendancesCheckDate.getStringY_m_d()); + callback.onActionStarted(R.string.sync_action_syncing_attendance); + d(TAG, "Get attendance for week "+ attendanceCheckDate.getStringY_m_d()); Request.builder() .url(fakeLogin ? "https://szkolny.eu/mobimobi/mobi_mod_frekwencja.php" : "https://" + loginServerName + ".mobidziennik.pl/mobile/frekwencja") .userAgent(System.getProperty("http.agent")) .addParameter("uczen", studentId) - .addParameter("data_poniedzialek", attendancesCheckDate.getStringY_m_d()) + .addParameter("data_poniedzialek", attendanceCheckDate.getStringY_m_d()) .post() .callback(new TextCallbackHandler() { @Override @@ -1076,11 +1076,11 @@ public class Mobidziennik implements EdziennikInterface { public void onSuccess(String data, Response response) { // just skip any failures here if (data == null || data.equals("")) { - r("finish", "Attendances"); + r("finish", "Attendance"); return; } if (data.contains("nie-pamietam-hasla")) { - r("finish", "Attendances"); + r("finish", "Attendance"); return; } @@ -1135,7 +1135,7 @@ public class Mobidziennik implements EdziennikInterface { continue; AttendanceLessonRange range = ranges.get(currentIndex); - Date date = attendancesCheckDate.clone().stepForward(0, 0, range.weekDay); + Date date = attendanceCheckDate.clone().stepForward(0, 0, range.weekDay); long addedDate = date.combineWith(range.startTime); int markerIndex = 0; @@ -1201,7 +1201,7 @@ public class Mobidziennik implements EdziennikInterface { markerIndex++; attendanceList.add(attendanceObject); if (attendanceObject.type != TYPE_PRESENT) { - boolean markAsRead = onlyFeature == FEATURE_ATTENDANCES && attendancesLastSync == 0; + boolean markAsRead = onlyFeature == FEATURE_ATTENDANCE && attendanceLastSync == 0; metadataList.add(new Metadata(profileId, Metadata.TYPE_ATTENDANCE, attendanceObject.id, profile.getEmpty() || markAsRead, profile.getEmpty() || markAsRead, addedDate)); } } @@ -1209,40 +1209,40 @@ public class Mobidziennik implements EdziennikInterface { } catch (Exception e) { Crashlytics.logException(e); e.printStackTrace(); - if (onlyFeature == FEATURE_ATTENDANCES) + if (onlyFeature == FEATURE_ATTENDANCE) finishWithError(new AppError(TAG, 955, CODE_OTHER, response, e, data)); else - r("finish", "Attendances"); + r("finish", "Attendance"); return; } - if (onlyFeature == FEATURE_ATTENDANCES) { - // syncing attendances exclusively - if (attendancesLastSync == 0) { - // first sync - get attendances until it's start of the school year - attendancesLastSync = profile.getSemesterStart(1).getInMillis(); + if (onlyFeature == FEATURE_ATTENDANCE) { + // syncing attendance exclusively + if (attendanceLastSync == 0) { + // first sync - get attendance until it's start of the school year + attendanceLastSync = profile.getSemesterStart(1).getInMillis(); } - Date lastSyncDate = Date.fromMillis(attendancesLastSync); + Date lastSyncDate = Date.fromMillis(attendanceLastSync); lastSyncDate.stepForward(0, 0, -7); - if (lastSyncDate.getValue() < attendancesCheckDate.getValue()) { - attendancesCheckDate.stepForward(0, 0, -7); - r("get", "Attendances"); + if (lastSyncDate.getValue() < attendanceCheckDate.getValue()) { + attendanceCheckDate.stepForward(0, 0, -7); + r("get", "Attendance"); } else { - profile.putStudentData("attendancesLastSync", System.currentTimeMillis()); - r("finish", "Attendances"); + profile.putStudentData("attendanceLastSync", System.currentTimeMillis()); + r("finish", "Attendance"); } } else { - if (attendancesLastSync != 0) { + if (attendanceLastSync != 0) { // not a first sync - Date lastSyncDate = Date.fromMillis(attendancesLastSync); + Date lastSyncDate = Date.fromMillis(attendanceLastSync); lastSyncDate.stepForward(0, 0, 2); - if (lastSyncDate.getValue() >= attendancesCheckDate.getValue()) { - profile.putStudentData("attendancesLastSync", System.currentTimeMillis()); + if (lastSyncDate.getValue() >= attendanceCheckDate.getValue()) { + profile.putStudentData("attendanceLastSync", System.currentTimeMillis()); } } - r("finish", "Attendances"); + r("finish", "Attendance"); } } }) @@ -1675,12 +1675,12 @@ public class Mobidziennik implements EdziennikInterface { } } - private void processAttendances(String table) + private void processAttendance(String table) { if (true) return; - String[] attendances = table.split("\n"); - for (String attendanceStr: attendances) + String[] attendanceList = table.split("\n"); + for (String attendanceStr: attendanceList) { if (attendanceStr.isEmpty()) { continue; @@ -1718,7 +1718,7 @@ public class Mobidziennik implements EdziennikInterface { mobiLesson.date, mobiLesson.startTime, type); - attendanceList.add(attendanceObject); + this.attendanceList.add(attendanceObject); metadataList.add(new Metadata(profileId, Metadata.TYPE_ATTENDANCE, attendanceObject.id, profile.getEmpty(), profile.getEmpty(), System.currentTimeMillis())); } } @@ -1891,11 +1891,11 @@ public class Mobidziennik implements EdziennikInterface { } } - private void processHomeworks(String table) + private void processHomework(String table) { - String[] homeworks = table.split("\n"); + String[] homeworkList = table.split("\n"); Date today = Date.getToday(); - for (String homeworkStr: homeworks) + for (String homeworkStr: homeworkList) { if (homeworkStr.isEmpty()) { continue; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/Vulcan.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Vulcan.java similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/Vulcan.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Vulcan.java index 32705060..090c9393 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/Vulcan.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Vulcan.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api; +package pl.szczodrzynski.edziennik.data.api; import android.content.Context; import android.os.Build; @@ -35,57 +35,57 @@ import okhttp3.OkHttpClient; import okio.Buffer; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback; -import pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface; -import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback; -import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback; -import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback; -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; -import pl.szczodrzynski.edziennik.datamodels.Attendance; -import pl.szczodrzynski.edziennik.datamodels.Event; -import pl.szczodrzynski.edziennik.datamodels.Grade; -import pl.szczodrzynski.edziennik.datamodels.GradeCategory; -import pl.szczodrzynski.edziennik.datamodels.Lesson; -import pl.szczodrzynski.edziennik.datamodels.LessonChange; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.Message; -import pl.szczodrzynski.edziennik.datamodels.MessageFull; -import pl.szczodrzynski.edziennik.datamodels.MessageRecipient; -import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull; -import pl.szczodrzynski.edziennik.datamodels.Metadata; -import pl.szczodrzynski.edziennik.datamodels.Notice; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; -import pl.szczodrzynski.edziennik.datamodels.Subject; -import pl.szczodrzynski.edziennik.datamodels.Teacher; -import pl.szczodrzynski.edziennik.datamodels.Team; -import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Endpoint; -import pl.szczodrzynski.edziennik.models.Time; -import pl.szczodrzynski.edziennik.models.Week; +import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface; +import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback; +import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback; +import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance; +import pl.szczodrzynski.edziennik.data.db.modules.events.Event; +import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade; +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.messages.Message; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull; +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata; +import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher; +import pl.szczodrzynski.edziennik.data.db.modules.teams.Team; +import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Endpoint; +import pl.szczodrzynski.edziennik.utils.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Week; import pl.szczodrzynski.edziennik.utils.Utils; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED_EXCUSED; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXAM; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_SHORT_QUIZ; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED; -import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_MESSAGE; -import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEUTRAL; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED_EXCUSED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXAM; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_SHORT_QUIZ; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED; +import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_MESSAGE; +import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEUTRAL; import static pl.szczodrzynski.edziennik.utils.Utils.c; import static pl.szczodrzynski.edziennik.utils.Utils.crc16; import static pl.szczodrzynski.edziennik.utils.Utils.d; @@ -108,11 +108,12 @@ public class Vulcan implements EdziennikInterface { private static final String ENDPOINT_GRADES = "mobile-api/Uczen.v3.Uczen/Oceny"; private static final String ENDPOINT_GRADES_PROPOSITIONS = "mobile-api/Uczen.v3.Uczen/OcenyPodsumowanie"; private static final String ENDPOINT_EVENTS = "mobile-api/Uczen.v3.Uczen/Sprawdziany"; - private static final String ENDPOINT_HOMEWORKS = "mobile-api/Uczen.v3.Uczen/ZadaniaDomowe"; + private static final String ENDPOINT_HOMEWORK = "mobile-api/Uczen.v3.Uczen/ZadaniaDomowe"; private static final String ENDPOINT_NOTICES = "mobile-api/Uczen.v3.Uczen/UwagiUcznia"; - private static final String ENDPOINT_ATTENDANCES = "mobile-api/Uczen.v3.Uczen/Frekwencje"; + private static final String ENDPOINT_ATTENDANCE = "mobile-api/Uczen.v3.Uczen/Frekwencje"; private static final String ENDPOINT_MESSAGES_RECEIVED = "mobile-api/Uczen.v3.Uczen/WiadomosciOdebrane"; private static final String ENDPOINT_MESSAGES_SENT = "mobile-api/Uczen.v3.Uczen/WiadomosciWyslane"; + private static final String ENDPOINT_MESSAGES_CHANGE_STATUS = "mobile-api/Uczen.v3.Uczen/ZmienStatusWiadomosci"; private static final String ENDPOINT_PUSH = "mobile-api/Uczen.v3.Uczen/UstawPushToken"; private static final String userAgent = "MobileUserAgent"; @@ -258,9 +259,9 @@ public class Vulcan implements EdziennikInterface { targetEndpoints.add("Grades"); targetEndpoints.add("ProposedGrades"); targetEndpoints.add("Events"); - targetEndpoints.add("Homeworks"); + targetEndpoints.add("Homework"); targetEndpoints.add("Notices"); - targetEndpoints.add("Attendances"); + targetEndpoints.add("Attendance"); targetEndpoints.add("MessagesInbox"); targetEndpoints.add("MessagesOutbox"); targetEndpoints.add("Finish"); @@ -296,14 +297,14 @@ public class Vulcan implements EdziennikInterface { targetEndpoints.add("Grades"); targetEndpoints.add("ProposedGrades"); break; - case FEATURE_HOMEWORKS: - targetEndpoints.add("Homeworks"); + case FEATURE_HOMEWORK: + targetEndpoints.add("Homework"); break; case FEATURE_NOTICES: targetEndpoints.add("Notices"); break; - case FEATURE_ATTENDANCES: - targetEndpoints.add("Attendances"); + case FEATURE_ATTENDANCE: + targetEndpoints.add("Attendance"); break; case FEATURE_MESSAGES_INBOX: targetEndpoints.add("MessagesInbox"); @@ -379,14 +380,14 @@ public class Vulcan implements EdziennikInterface { case "Events": getEvents(); break; - case "Homeworks": - getHomeworks(); + case "Homework": + getHomework(); break; case "Notices": getNotices(); break; - case "Attendances": - getAttendances(); + case "Attendance": + getAttendance(); break; case "MessagesInbox": getMessagesInbox(); @@ -427,8 +428,10 @@ public class Vulcan implements EdziennikInterface { app.db.noticeDao().clearForSemester(profileId, studentSemesterNumber); app.db.noticeDao().addAll(noticeList); } - if (attendanceList.size() > 0) + if (attendanceList.size() > 0) { + app.db.attendanceDao().clearAfterDate(profileId, getCurrentSemesterStartDate()); app.db.attendanceDao().addAll(attendanceList); + } if (messageList.size() > 0) app.db.messageDao().addAllIgnore(messageList); if (messageRecipientList.size() > 0) @@ -742,7 +745,7 @@ public class Vulcan implements EdziennikInterface { studentLoginId = account.get("UzytkownikLoginId").getAsInt(); studentClassId = account.get("IdOddzial").getAsInt(); studentSemesterId = account.get("IdOkresKlasyfikacyjny").getAsInt(); - String studentClassName = account.get("OddzialKod").getAsString(); + String studentClassName = account.get("OkresPoziom").getAsInt()+account.get("OddzialSymbol").getAsString(); targetProfile.putStudentData("userName", account.get("UzytkownikNazwa").getAsString()); targetProfile.putStudentData("schoolName", schoolName); targetProfile.putStudentData("schoolSymbol", schoolSymbol); @@ -1149,7 +1152,7 @@ public class Vulcan implements EdziennikInterface { int subjectId = grade.get("IdPrzedmiot").getAsInt(); int teacherId = grade.get("IdPracownikD").getAsInt(); int categoryId = grade.get("IdKategoria").getAsInt(); - long addedDate = Date.fromY_m_d(grade.get("DataModyfikacjiTekst").getAsString()).getInMillis(); + long addedDate = grade.get("DataModyfikacji").getAsLong() * 1000; float finalValue = 0.0f; String finalName; @@ -1240,9 +1243,9 @@ public class Vulcan implements EdziennikInterface { Grade gradeObject = new Grade( profileId, id, - finalDescription, - color, category, + color, + finalDescription, finalName, finalValue, weight, @@ -1371,7 +1374,7 @@ public class Vulcan implements EdziennikInterface { }); } - private void getHomeworks() { + private void getHomework() { callback.onActionStarted(R.string.sync_action_syncing_homework); JsonObject json = new JsonObject(); json.addProperty("DataPoczatkowa", profile.getEmpty() ? getCurrentSemesterStartDate().getStringY_m_d() : oneMonthBack.getStringY_m_d()); @@ -1379,10 +1382,10 @@ public class Vulcan implements EdziennikInterface { json.addProperty("IdOddzial", studentClassId); json.addProperty("IdUczen", studentId); json.addProperty("IdOkresKlasyfikacyjny", studentSemesterId); - apiRequest(schoolSymbol+"/"+ENDPOINT_HOMEWORKS, json, result -> { - JsonArray homeworks = result.getAsJsonArray("Data"); + apiRequest(schoolSymbol+"/"+ ENDPOINT_HOMEWORK, json, result -> { + JsonArray homeworkList = result.getAsJsonArray("Data"); - for (JsonElement homeworkEl: homeworks) { + for (JsonElement homeworkEl: homeworkList) { JsonObject homework = homeworkEl.getAsJsonObject(); int id = homework.get("Id").getAsInt(); @@ -1416,7 +1419,7 @@ public class Vulcan implements EdziennikInterface { eventList.add(eventObject); metadataList.add(new Metadata(profileId, Metadata.TYPE_HOMEWORK, eventObject.id, profile.getEmpty(), profile.getEmpty(), System.currentTimeMillis())); } - r("finish", "Homeworks"); + r("finish", "Homework"); }); } @@ -1456,18 +1459,18 @@ public class Vulcan implements EdziennikInterface { }); } - private void getAttendances() { - callback.onActionStarted(R.string.sync_action_syncing_attendances); + private void getAttendance() { + callback.onActionStarted(R.string.sync_action_syncing_attendance); JsonObject json = new JsonObject(); - json.addProperty("DataPoczatkowa", profile.getEmpty() ? getCurrentSemesterStartDate().getStringY_m_d() : oneMonthBack.getStringY_m_d()); + json.addProperty("DataPoczatkowa", true ? getCurrentSemesterStartDate().getStringY_m_d() : oneMonthBack.getStringY_m_d()); json.addProperty("DataKoncowa", getCurrentSemesterEndDate().getStringY_m_d()); json.addProperty("IdOddzial", studentClassId); json.addProperty("IdUczen", studentId); json.addProperty("IdOkresKlasyfikacyjny", studentSemesterId); - apiRequest(schoolSymbol+"/"+ENDPOINT_ATTENDANCES, json, result -> { - JsonArray attendances = result.getAsJsonObject("Data").getAsJsonArray("Frekwencje"); + apiRequest(schoolSymbol+"/"+ ENDPOINT_ATTENDANCE, json, result -> { + JsonArray attendanceList = result.getAsJsonObject("Data").getAsJsonArray("Frekwencje"); - for (JsonElement attendanceEl: attendances) { + for (JsonElement attendanceEl: attendanceList) { JsonObject attendance = attendanceEl.getAsJsonObject(); Pair attendanceCategory = attendanceCategories.get(attendance.get("IdKategoria").getAsInt()); @@ -1494,20 +1497,20 @@ public class Vulcan implements EdziennikInterface { lessonRanges.get(attendance.get("IdPoraLekcji").getAsInt()).first, type); - attendanceList.add(attendanceObject); + this.attendanceList.add(attendanceObject); if (attendanceObject.type != TYPE_PRESENT) { metadataList.add(new Metadata(profileId, Metadata.TYPE_ATTENDANCE, attendanceObject.id, profile.getEmpty(), profile.getEmpty(), attendanceObject.lessonDate.combineWith(attendanceObject.startTime))); } } - r("finish", "Attendances"); + r("finish", "Attendance"); }); } private void getMessagesInbox() { callback.onActionStarted(R.string.sync_action_syncing_messages_inbox); JsonObject json = new JsonObject(); - json.addProperty("DataPoczatkowa", profile.getEmpty() ? getCurrentSemesterStartDate().getInUnix() : oneMonthBack.getInUnix()); - json.addProperty("DataKoncowa", Date.getToday().getInUnix()); + json.addProperty("DataPoczatkowa", true ? getCurrentSemesterStartDate().getInUnix() : oneMonthBack.getInUnix()); + json.addProperty("DataKoncowa", getCurrentSemesterEndDate().getInUnix()); json.addProperty("LoginId", studentLoginId); json.addProperty("IdUczen", studentId); apiRequest(schoolSymbol+"/"+ENDPOINT_MESSAGES_RECEIVED, json, result -> { @@ -1557,8 +1560,8 @@ public class Vulcan implements EdziennikInterface { } callback.onActionStarted(R.string.sync_action_syncing_messages_outbox); JsonObject json = new JsonObject(); - json.addProperty("DataPoczatkowa", profile.getEmpty() ? getCurrentSemesterStartDate().getInUnix() : oneMonthBack.getInUnix()); - json.addProperty("DataKoncowa", Date.getToday().getInUnix()); + json.addProperty("DataPoczatkowa", true ? getCurrentSemesterStartDate().getInUnix() : oneMonthBack.getInUnix()); + json.addProperty("DataKoncowa", getCurrentSemesterEndDate().getInUnix()); json.addProperty("LoginId", studentLoginId); json.addProperty("IdUczen", studentId); apiRequest(schoolSymbol+"/"+ENDPOINT_MESSAGES_SENT, json, result -> { @@ -1632,6 +1635,15 @@ public class Vulcan implements EdziennikInterface { recipient.fullName = profile.getStudentNameLong(); } if (!message.seen) { + studentId = profile.getStudentData("studentId", -1); + studentLoginId = profile.getStudentData("studentLoginId", -1); + JsonObject json = new JsonObject(); + json.addProperty("WiadomoscId", message.id); + json.addProperty("FolderWiadomosci", "Odebrane"); + json.addProperty("Status", "Widoczna"); + json.addProperty("LoginId", studentLoginId); + json.addProperty("IdUczen", studentId); + apiRequest(schoolSymbol+"/"+ENDPOINT_MESSAGES_CHANGE_STATUS, json, result -> { }); app.db.metadataDao().setSeen(profile.getId(), message, true); if (message.type != TYPE_SENT) { app.db.messageRecipientDao().add(new MessageRecipient(profile.getId(), -1, -1, System.currentTimeMillis(), message.id)); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/AttachmentGetCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/AttachmentGetCallback.java similarity index 85% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/AttachmentGetCallback.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/AttachmentGetCallback.java index 1a24ee68..0bd76455 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/AttachmentGetCallback.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/AttachmentGetCallback.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api.interfaces; +package pl.szczodrzynski.edziennik.data.api.interfaces; import im.wangchao.mhttp.Request; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/EdziennikInterface.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EdziennikInterface.java similarity index 84% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/EdziennikInterface.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EdziennikInterface.java index d7bcde5f..962b1bef 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/EdziennikInterface.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EdziennikInterface.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api.interfaces; +package pl.szczodrzynski.edziennik.data.api.interfaces; import android.content.Context; import androidx.annotation.NonNull; @@ -6,13 +6,13 @@ import androidx.annotation.Nullable; import java.util.Map; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.Message; -import pl.szczodrzynski.edziennik.datamodels.MessageFull; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; -import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo; -import pl.szczodrzynski.edziennik.models.Endpoint; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher; +import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo; +import pl.szczodrzynski.edziennik.utils.models.Endpoint; public interface EdziennikInterface { @@ -34,9 +34,9 @@ public interface EdziennikInterface { int FEATURE_TIMETABLE = 1; int FEATURE_AGENDA = 2; int FEATURE_GRADES = 3; - int FEATURE_HOMEWORKS = 4; + int FEATURE_HOMEWORK = 4; int FEATURE_NOTICES = 5; - int FEATURE_ATTENDANCES = 6; + int FEATURE_ATTENDANCE = 6; int FEATURE_MESSAGES_INBOX = 7; int FEATURE_MESSAGES_OUTBOX = 8; int FEATURE_ANNOUNCEMENTS = 9; @@ -60,7 +60,7 @@ public interface EdziennikInterface { * * Updates a database-saved {@code teacherList} with {@code loginId}s. * - * A {@link pl.szczodrzynski.edziennik.datamodels.Teacher} is considered as a recipient when its {@code loginId} is not null. + * A {@link Teacher} is considered as a recipient when its {@code loginId} is not null. * * May be executed on any thread. * diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/ErrorCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/ErrorCallback.java similarity index 61% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/ErrorCallback.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/ErrorCallback.java index 4f84f640..cc8f2375 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/ErrorCallback.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/ErrorCallback.java @@ -1,10 +1,10 @@ -package pl.szczodrzynski.edziennik.api.interfaces; +package pl.szczodrzynski.edziennik.data.api.interfaces; import android.content.Context; import androidx.annotation.NonNull; -import pl.szczodrzynski.edziennik.api.AppError; +import pl.szczodrzynski.edziennik.data.api.AppError; public interface ErrorCallback { void onError(Context activityContext, @NonNull AppError error); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/LoginCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/LoginCallback.java similarity index 50% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/LoginCallback.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/LoginCallback.java index 4720eee4..cae0c65e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/LoginCallback.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/LoginCallback.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api.interfaces; +package pl.szczodrzynski.edziennik.data.api.interfaces; public interface LoginCallback { void onSuccess(); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/MessageGetCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/MessageGetCallback.java similarity index 60% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/MessageGetCallback.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/MessageGetCallback.java index 2fca992c..7fd973c8 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/MessageGetCallback.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/MessageGetCallback.java @@ -1,7 +1,6 @@ -package pl.szczodrzynski.edziennik.api.interfaces; +package pl.szczodrzynski.edziennik.data.api.interfaces; -import pl.szczodrzynski.edziennik.datamodels.Message; -import pl.szczodrzynski.edziennik.datamodels.MessageFull; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull; /** * Callback containing a {@link MessageFull} which already has its {@code body} and {@code recipients}. diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/MessageListCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/MessageListCallback.java new file mode 100644 index 00000000..71561ffd --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/MessageListCallback.java @@ -0,0 +1,9 @@ +package pl.szczodrzynski.edziennik.data.api.interfaces; + +import java.util.List; + +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull; + +public interface MessageListCallback { + void onSuccess(List messageList); +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/ProgressCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/ProgressCallback.java similarity index 77% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/ProgressCallback.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/ProgressCallback.java index 07a88987..32948eb9 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/ProgressCallback.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/ProgressCallback.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api.interfaces; +package pl.szczodrzynski.edziennik.data.api.interfaces; import androidx.annotation.StringRes; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/RecipientListGetCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/RecipientListGetCallback.java new file mode 100644 index 00000000..fc249432 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/RecipientListGetCallback.java @@ -0,0 +1,9 @@ +package pl.szczodrzynski.edziennik.data.api.interfaces; + +import java.util.List; + +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher; + +public interface RecipientListGetCallback { + void onSuccess(List teacherList); +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/SyncCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/SyncCallback.java similarity index 55% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/SyncCallback.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/SyncCallback.java index 54329973..dfaf243b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/SyncCallback.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/SyncCallback.java @@ -1,15 +1,12 @@ -package pl.szczodrzynski.edziennik.api.interfaces; +package pl.szczodrzynski.edziennik.data.api.interfaces; import android.content.Context; import java.util.List; -import androidx.annotation.StringRes; - -import pl.szczodrzynski.edziennik.api.AppError; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; /** * A callback used for error reporting, progress information. diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/ApiLoginResult.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/ApiLoginResult.kt new file mode 100644 index 00000000..8dc3ac89 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/ApiLoginResult.kt @@ -0,0 +1,6 @@ +package pl.szczodrzynski.edziennik.data.api.v2 + +import pl.szczodrzynski.edziennik.data.api.AppError +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore + +data class ApiLoginResult(val loginStore: LoginStore, val error: AppError?) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Constants.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/Constants.kt similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Constants.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/Constants.kt index 3aae0da1..84efcebc 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Constants.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/Constants.kt @@ -1,12 +1,12 @@ -package pl.szczodrzynski.edziennik.api.v2 +package pl.szczodrzynski.edziennik.data.api.v2 const val FEATURE_ALL = 0 const val FEATURE_TIMETABLE = 1 const val FEATURE_AGENDA = 2 const val FEATURE_GRADES = 3 -const val FEATURE_HOMEWORKS = 4 +const val FEATURE_HOMEWORK = 4 const val FEATURE_NOTICES = 5 -const val FEATURE_ATTENDANCES = 6 +const val FEATURE_ATTENDANCE = 6 const val FEATURE_MESSAGES_INBOX = 7 const val FEATURE_MESSAGES_OUTBOX = 8 const val FEATURE_ANNOUNCEMENTS = 9 diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/FirstLoginResult.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/FirstLoginResult.kt new file mode 100644 index 00000000..099c2771 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/FirstLoginResult.kt @@ -0,0 +1,6 @@ +package pl.szczodrzynski.edziennik.data.api.v2 + +import pl.szczodrzynski.edziennik.data.api.AppError +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile + +data class FirstLoginResult(val profileList: ArrayList, val error: AppError?) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/Librus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/Librus.kt similarity index 83% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/Librus.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/Librus.kt index 8ba1f79e..106a4f07 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/Librus.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/Librus.kt @@ -1,26 +1,26 @@ -package pl.szczodrzynski.edziennik.api.v2.librus +package pl.szczodrzynski.edziennik.data.api.v2.librus import android.content.Context import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.AppError -import pl.szczodrzynski.edziennik.api.AppError.* -import pl.szczodrzynski.edziennik.api.interfaces.* -import pl.szczodrzynski.edziennik.api.v2.LOGIN_MODE_LIBRUS_EMAIL -import pl.szczodrzynski.edziennik.api.v2.LOGIN_MODE_LIBRUS_JST -import pl.szczodrzynski.edziennik.api.v2.LOGIN_MODE_LIBRUS_SYNERGIA -import pl.szczodrzynski.edziennik.api.v2.librus.firstlogin.FirstLoginLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.firstlogin.FirstLoginSynergia -import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginJst -import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginSynergia -import pl.szczodrzynski.edziennik.api.v2.librus.login.SynergiaTokenExtractor -import pl.szczodrzynski.edziennik.api.v2.models.DataStore -import pl.szczodrzynski.edziennik.datamodels.LoginStore -import pl.szczodrzynski.edziennik.datamodels.MessageFull -import pl.szczodrzynski.edziennik.datamodels.Profile -import pl.szczodrzynski.edziennik.datamodels.ProfileFull -import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo -import pl.szczodrzynski.edziennik.models.Endpoint +import pl.szczodrzynski.edziennik.data.api.AppError +import pl.szczodrzynski.edziennik.data.api.AppError.* +import pl.szczodrzynski.edziennik.data.api.interfaces.* +import pl.szczodrzynski.edziennik.data.api.v2.LOGIN_MODE_LIBRUS_EMAIL +import pl.szczodrzynski.edziennik.data.api.v2.LOGIN_MODE_LIBRUS_JST +import pl.szczodrzynski.edziennik.data.api.v2.LOGIN_MODE_LIBRUS_SYNERGIA +import pl.szczodrzynski.edziennik.data.api.v2.librus.firstlogin.FirstLoginLibrus +import pl.szczodrzynski.edziennik.data.api.v2.librus.firstlogin.FirstLoginSynergia +import pl.szczodrzynski.edziennik.data.api.v2.librus.login.LoginJst +import pl.szczodrzynski.edziennik.data.api.v2.librus.login.LoginLibrus +import pl.szczodrzynski.edziennik.data.api.v2.librus.login.LoginSynergia +import pl.szczodrzynski.edziennik.data.api.v2.librus.login.SynergiaTokenExtractor +import pl.szczodrzynski.edziennik.data.api.v2.models.DataStore +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull +import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo +import pl.szczodrzynski.edziennik.utils.models.Endpoint import pl.szczodrzynski.edziennik.utils.Utils.d import java.lang.Exception @@ -198,4 +198,4 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore) : override fun isEndpointEnabled(profile: Profile?, defaultActive: Boolean, name: String?): Boolean { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/data/DataLibrus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/data/DataLibrus.kt new file mode 100644 index 00000000..85f1167e --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/data/DataLibrus.kt @@ -0,0 +1,10 @@ +package pl.szczodrzynski.edziennik.data.api.v2.librus.data + +import pl.szczodrzynski.edziennik.App +import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile + +class DataLibrus(val app: App, val profile: Profile, val loginStore: LoginStore, val callback: ProgressCallback, val onSuccess: () -> Unit) { + +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginLibrus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginLibrus.kt new file mode 100644 index 00000000..0e8e02b6 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginLibrus.kt @@ -0,0 +1,12 @@ +package pl.szczodrzynski.edziennik.data.api.v2.librus.firstlogin + +import pl.szczodrzynski.edziennik.App +import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile + +class FirstLoginLibrus(val app: App, val loginStore: LoginStore, val progressCallback: ProgressCallback, val onSuccess: (profileList: List) -> Unit) { + init { + + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginSynergia.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginSynergia.kt new file mode 100644 index 00000000..79587cd8 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginSynergia.kt @@ -0,0 +1,12 @@ +package pl.szczodrzynski.edziennik.data.api.v2.librus.firstlogin + +import pl.szczodrzynski.edziennik.App +import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile + +class FirstLoginSynergia(val app: App, val loginStore: LoginStore, val progressCallback: ProgressCallback, val onSuccess: (profileList: List) -> Unit) { + init { + + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginJst.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginJst.kt similarity index 50% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginJst.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginJst.kt index 78ed7672..3baac1b1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginJst.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginJst.kt @@ -1,13 +1,12 @@ -package pl.szczodrzynski.edziennik.api.v2.librus.login +package pl.szczodrzynski.edziennik.data.api.v2.librus.login import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback -import pl.szczodrzynski.edziennik.api.v2.ApiLoginResult -import pl.szczodrzynski.edziennik.datamodels.LoginStore +import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore class LoginJst(val app: App, val loginStore: LoginStore, val callback: ProgressCallback, val onSuccess: () -> Unit) { companion object { private const val TAG = "librus.LoginJst" } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginLibrus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginLibrus.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginLibrus.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginLibrus.kt index 959fc74c..26769951 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginLibrus.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginLibrus.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api.v2.librus.login +package pl.szczodrzynski.edziennik.data.api.v2.librus.login import android.util.Pair import com.google.gson.JsonObject @@ -9,11 +9,11 @@ import im.wangchao.mhttp.callback.JsonCallbackHandler import im.wangchao.mhttp.callback.TextCallbackHandler import pl.szczodrzynski.edziennik.App import pl.szczodrzynski.edziennik.R -import pl.szczodrzynski.edziennik.api.AppError -import pl.szczodrzynski.edziennik.api.AppError.* -import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.datamodels.LoginStore +import pl.szczodrzynski.edziennik.data.api.AppError +import pl.szczodrzynski.edziennik.data.api.AppError.* +import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback +import pl.szczodrzynski.edziennik.data.api.v2.* +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore import pl.szczodrzynski.edziennik.getInt import pl.szczodrzynski.edziennik.getString import pl.szczodrzynski.edziennik.utils.Utils.c @@ -180,4 +180,4 @@ class LoginLibrus(val app: App, val loginStore: LoginStore, val callback: Progre .build() .enqueue() } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginSynergia.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginSynergia.kt similarity index 55% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginSynergia.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginSynergia.kt index 026f3e50..ed48071f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginSynergia.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginSynergia.kt @@ -1,12 +1,12 @@ -package pl.szczodrzynski.edziennik.api.v2.librus.login +package pl.szczodrzynski.edziennik.data.api.v2.librus.login import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback -import pl.szczodrzynski.edziennik.datamodels.LoginStore +import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore class LoginSynergia(val app: App, val loginStore: LoginStore, val callback: ProgressCallback, val onSuccess: () -> Unit) { companion object { private const val TAG = "librus.LoginSynergia" } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/SynergiaTokenExtractor.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/SynergiaTokenExtractor.kt similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/SynergiaTokenExtractor.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/SynergiaTokenExtractor.kt index c7f3f69e..983cd5b3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/SynergiaTokenExtractor.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/SynergiaTokenExtractor.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api.v2.librus.login +package pl.szczodrzynski.edziennik.data.api.v2.librus.login import com.google.gson.JsonNull import com.google.gson.JsonObject @@ -6,13 +6,13 @@ import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response import im.wangchao.mhttp.callback.JsonCallbackHandler import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.AppError -import pl.szczodrzynski.edziennik.api.AppError.* -import pl.szczodrzynski.edziennik.api.v2.LIBRUS_USER_AGENT -import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback -import pl.szczodrzynski.edziennik.api.v2.LIBRUS_ACCOUNT_URL -import pl.szczodrzynski.edziennik.datamodels.LoginStore -import pl.szczodrzynski.edziennik.datamodels.Profile +import pl.szczodrzynski.edziennik.data.api.AppError +import pl.szczodrzynski.edziennik.data.api.AppError.* +import pl.szczodrzynski.edziennik.data.api.v2.LIBRUS_USER_AGENT +import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback +import pl.szczodrzynski.edziennik.data.api.v2.LIBRUS_ACCOUNT_URL +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile import pl.szczodrzynski.edziennik.utils.Utils.d import java.net.HttpURLConnection.* @@ -107,4 +107,4 @@ class SynergiaTokenExtractor(val app: App, val profile: Profile, val loginStore: .enqueue() return true } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/DataStore.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/DataStore.kt similarity index 78% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/DataStore.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/DataStore.kt index 552340fa..ac4c64eb 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/DataStore.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/DataStore.kt @@ -1,10 +1,25 @@ -package pl.szczodrzynski.edziennik.api.v2.models +package pl.szczodrzynski.edziennik.data.api.v2.models import android.util.LongSparseArray import androidx.core.util.forEach import androidx.core.util.isNotEmpty -import pl.szczodrzynski.edziennik.datamodels.* -import pl.szczodrzynski.edziennik.models.Date +import pl.szczodrzynski.edziennik.data.db.AppDb +import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement +import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance +import pl.szczodrzynski.edziennik.data.db.modules.events.Event +import pl.szczodrzynski.edziennik.data.db.modules.events.EventType +import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory +import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange +import pl.szczodrzynski.edziennik.data.db.modules.messages.Message +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata +import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice +import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher +import pl.szczodrzynski.edziennik.data.db.modules.teams.Team +import pl.szczodrzynski.edziennik.utils.models.Date data class DataStore(private val appDb: AppDb, val profileId: Int) { val teacherList: LongSparseArray = LongSparseArray() @@ -115,4 +130,4 @@ data class DataStore(private val appDb: AppDb, val profileId: Int) { if (messageMetadataList.isNotEmpty()) appDb.metadataDao().setSeen(messageMetadataList) } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Feature.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/Feature.kt similarity index 64% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Feature.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/Feature.kt index b502fe85..e9ca9fce 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Feature.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/Feature.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api.v2.models +package pl.szczodrzynski.edziennik.data.api.v2.models data class Feature(val featureId: Int, val loginOptions: Map>) { @@ -7,4 +7,4 @@ data class Feature(val featureId: Int, val loginOptions: Map>) { } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Features.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/Features.kt similarity index 73% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Features.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/Features.kt index bf40bd80..6a0e9ece 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Features.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/Features.kt @@ -1,6 +1,6 @@ -package pl.szczodrzynski.edziennik.api.v2.models +package pl.szczodrzynski.edziennik.data.api.v2.models -import pl.szczodrzynski.edziennik.api.v2.* +import pl.szczodrzynski.edziennik.data.api.v2.* val Features = listOf( Feature(FEATURE_TIMETABLE, mapOf( @@ -10,4 +10,4 @@ val Features = listOf( LOGIN_MODE_LIBRUS_JST ) )) -) \ No newline at end of file +) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AppDb.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/AppDb.java similarity index 83% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AppDb.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/AppDb.java index fba95f57..1481b8e1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AppDb.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/AppDb.java @@ -1,12 +1,61 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db; +import androidx.annotation.NonNull; import androidx.sqlite.db.SupportSQLiteDatabase; import androidx.room.Database; import androidx.room.Room; import androidx.room.RoomDatabase; import androidx.room.TypeConverters; import androidx.room.migration.Migration; -import pl.szczodrzynski.edziennik.models.Date; + +import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement; +import pl.szczodrzynski.edziennik.data.db.modules.announcements.AnnouncementDao; +import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance; +import pl.szczodrzynski.edziennik.data.db.modules.attendance.AttendanceDao; +import pl.szczodrzynski.edziennik.data.db.converters.ConverterDate; +import pl.szczodrzynski.edziennik.data.db.converters.ConverterJsonObject; +import pl.szczodrzynski.edziennik.data.db.converters.ConverterListLong; +import pl.szczodrzynski.edziennik.data.db.converters.ConverterListString; +import pl.szczodrzynski.edziennik.data.db.converters.ConverterTime; +import pl.szczodrzynski.edziennik.data.db.modules.debuglog.DebugLog; +import pl.szczodrzynski.edziennik.data.db.modules.debuglog.DebugLogDao; +import pl.szczodrzynski.edziennik.data.db.modules.events.Event; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventDao; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventType; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventTypeDao; +import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessage; +import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessageDao; +import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade; +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory; +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategoryDao; +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeDao; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChangeDao; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonDao; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStoreDao; +import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber; +import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumberDao; +import pl.szczodrzynski.edziennik.data.db.modules.messages.Message; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageDao; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientDao; +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata; +import pl.szczodrzynski.edziennik.data.db.modules.metadata.MetadataDao; +import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice; +import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeDao; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileDao; +import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject; +import pl.szczodrzynski.edziennik.data.db.modules.subjects.SubjectDao; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsence; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsenceDao; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherDao; +import pl.szczodrzynski.edziennik.data.db.modules.teams.Team; +import pl.szczodrzynski.edziennik.data.db.modules.teams.TeamDao; +import pl.szczodrzynski.edziennik.utils.models.Date; import android.content.Context; @@ -14,6 +63,7 @@ import android.content.Context; Grade.class, //GradeCategory.class, Teacher.class, + TeacherAbsence.class, Subject.class, Notice.class, Lesson.class, @@ -31,7 +81,7 @@ import android.content.Context; Message.class, MessageRecipient.class, DebugLog.class, - Metadata.class}, version = 52) + Metadata.class}, version = 55) @TypeConverters({ ConverterTime.class, ConverterDate.class, @@ -43,6 +93,7 @@ public abstract class AppDb extends RoomDatabase { public abstract GradeDao gradeDao(); //public abstract GradeCategoryDao gradeCategoryDao(); public abstract TeacherDao teacherDao(); + public abstract TeacherAbsenceDao teacherAbsenceDao(); public abstract SubjectDao subjectDao(); public abstract NoticeDao noticeDao(); public abstract LessonDao lessonDao(); @@ -486,6 +537,33 @@ public abstract class AppDb extends RoomDatabase { database.execSQL("ALTER TABLE teachers ADD teacherTypeDescription TEXT DEFAULT NULL"); } }; + private static final Migration MIGRATION_52_53 = new Migration(52, 53) { + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + database.execSQL("CREATE TABLE IF NOT EXISTS teacherAbsence (" + + "profileId INTEGER NOT NULL," + + "teacherAbsenceId INTEGER NOT NULL," + + "teacherId INTEGER NOT NULL," + + "teacherAbsenceType INTEGER NOT NULL," + + "teacherAbsenceDateFrom TEXT NOT NULL," + + "teacherAbsenceDateTo TEXT NOT NULL," + + "PRIMARY KEY(profileId, teacherAbsenceId)" + + ")"); + } + }; + private static final Migration MIGRATION_53_54 = new Migration(53, 54) { + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + database.execSQL("ALTER TABLE teacherAbsence ADD teacherAbsenceTimeFrom TEXT DEFAULT NULL"); + database.execSQL("ALTER TABLE teacherAbsence ADD teacherAbsenceTimeTo TEXT DEFAULT NULL"); + } + }; + private static final Migration MIGRATION_54_55 = new Migration(54, 55) { + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + database.execSQL("UPDATE profiles SET lastFullSync = 0"); + } + }; public static AppDb getDatabase(final Context context) { @@ -535,7 +613,11 @@ public abstract class AppDb extends RoomDatabase { MIGRATION_48_49, MIGRATION_49_50, MIGRATION_50_51, - MIGRATION_51_52) + MIGRATION_51_52, + MIGRATION_52_53, + MIGRATION_53_54, + MIGRATION_54_55 + ) .allowMainThreadQueries() //.fallbackToDestructiveMigration() .build(); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterDate.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterDate.java similarity index 75% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterDate.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterDate.java index fa23123b..a130362b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterDate.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterDate.java @@ -1,8 +1,8 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.converters; import androidx.room.TypeConverter; -import pl.szczodrzynski.edziennik.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Date; public class ConverterDate { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterJsonObject.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterJsonObject.java similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterJsonObject.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterJsonObject.java index e0b864f1..47d9b4d4 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterJsonObject.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterJsonObject.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.converters; import androidx.room.TypeConverter; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterListLong.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterListLong.java similarity index 90% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterListLong.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterListLong.java index 583c2605..b5c2ceb1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterListLong.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterListLong.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.converters; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterListString.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterListString.java similarity index 90% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterListString.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterListString.java index 86abae6b..6f579104 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterListString.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterListString.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.converters; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterTime.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterTime.java similarity index 77% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterTime.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterTime.java index 6ac9a8c6..63573772 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterTime.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterTime.java @@ -1,8 +1,8 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.converters; import androidx.room.TypeConverter; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Time; public class ConverterTime { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Announcement.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/Announcement.java similarity index 90% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Announcement.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/Announcement.java index cfde4da3..49ba227c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Announcement.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/Announcement.java @@ -1,11 +1,11 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.announcements; import androidx.annotation.Nullable; import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.Ignore; import androidx.room.Index; -import pl.szczodrzynski.edziennik.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Date; @Entity(tableName = "announcements", primaryKeys = {"profileId", "announcementId"}, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AnnouncementDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/AnnouncementDao.java similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AnnouncementDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/AnnouncementDao.java index 165ca00b..852e16f4 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AnnouncementDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/AnnouncementDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.announcements; import java.util.List; @@ -11,7 +11,9 @@ import androidx.room.RawQuery; import androidx.sqlite.db.SimpleSQLiteQuery; import androidx.sqlite.db.SupportSQLiteQuery; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ANNOUNCEMENT; +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata; + +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ANNOUNCEMENT; @Dao public abstract class AnnouncementDao { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AnnouncementFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/AnnouncementFull.java similarity index 74% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AnnouncementFull.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/AnnouncementFull.java index d7c5fd74..29d4e814 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AnnouncementFull.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/AnnouncementFull.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.announcements; public class AnnouncementFull extends Announcement { public String teacherFullName = ""; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Attendance.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/Attendance.java similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Attendance.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/Attendance.java index 50fec470..b7ae5ca4 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Attendance.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/Attendance.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.attendance; import androidx.annotation.NonNull; import androidx.room.ColumnInfo; @@ -6,8 +6,8 @@ import androidx.room.Entity; import androidx.room.Ignore; import androidx.room.Index; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; @Entity(tableName = "attendances", primaryKeys = {"profileId", "attendanceId", "attendanceLessonDate", "attendanceStartTime"}, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AttendanceDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/AttendanceDao.java similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AttendanceDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/AttendanceDao.java index d6367227..05c44822 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AttendanceDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/AttendanceDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.attendance; import androidx.lifecycle.LiveData; import androidx.sqlite.db.SimpleSQLiteQuery; @@ -8,12 +8,11 @@ import androidx.room.Insert; import androidx.room.OnConflictStrategy; import androidx.room.Query; import androidx.room.RawQuery; -import pl.szczodrzynski.edziennik.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Date; import java.util.List; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ATTENDANCE; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ATTENDANCE; @Dao public abstract class AttendanceDao { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AttendanceFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/AttendanceFull.java similarity index 81% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AttendanceFull.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/AttendanceFull.java index 8f6d4a7b..8f9f3751 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AttendanceFull.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/AttendanceFull.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.attendance; public class AttendanceFull extends Attendance { public String teacherFullName = ""; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/DebugLog.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/debuglog/DebugLog.java similarity index 82% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/DebugLog.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/debuglog/DebugLog.java index 7d22db18..866a3882 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/DebugLog.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/debuglog/DebugLog.java @@ -1,7 +1,6 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.debuglog; import androidx.room.Entity; -import androidx.room.Index; import androidx.room.PrimaryKey; import static pl.szczodrzynski.edziennik.utils.Utils.d; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/DebugLogDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/debuglog/DebugLogDao.java similarity index 69% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/DebugLogDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/debuglog/DebugLogDao.java index b1a0a5e6..14dd6a88 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/DebugLogDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/debuglog/DebugLogDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.debuglog; import androidx.room.Dao; import androidx.room.Insert; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Event.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/Event.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Event.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/Event.java index c6e1244a..e55e2a47 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Event.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/Event.java @@ -1,11 +1,11 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.events; import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.Ignore; import androidx.room.Index; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; @Entity(tableName = "events", primaryKeys = {"profileId", "eventId"}, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventDao.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventDao.java index 3ae3affb..2d1e7d37 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.events; import androidx.lifecycle.LiveData; import androidx.sqlite.db.SimpleSQLiteQuery; @@ -14,12 +14,12 @@ import android.util.Log; import java.util.List; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_EVENT; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_HOMEWORK; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_LESSON_CHANGE; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_EVENT; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_HOMEWORK; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_LESSON_CHANGE; @Dao public abstract class EventDao { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventFull.java similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventFull.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventFull.java index 98887679..08b6966b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventFull.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventFull.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.events; public class EventFull extends Event { public String typeName = ""; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventType.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventType.java similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventType.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventType.java index 10848dc6..e06f7656 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventType.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventType.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.events; import android.graphics.Color; @@ -28,4 +28,4 @@ public class EventType { public EventType(int profileId, int id, String name, String color) { this(profileId, id, name, Color.parseColor(color)); } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventTypeDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventTypeDao.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventTypeDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventTypeDao.java index 0b0b0dd6..7baf8189 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventTypeDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventTypeDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.events; import java.util.List; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessage.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessage.java similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessage.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessage.java index 9e8328ba..14cd5823 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessage.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessage.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.feedback; import androidx.room.Entity; import androidx.room.Ignore; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessageDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessageDao.java similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessageDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessageDao.java index f35f6743..24a45376 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessageDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessageDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.feedback; import java.util.List; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessageWithCount.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessageWithCount.java similarity index 62% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessageWithCount.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessageWithCount.java index bbea7461..17320fee 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessageWithCount.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessageWithCount.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.feedback; public class FeedbackMessageWithCount extends FeedbackMessage { public int messageCount = 0; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Grade.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/Grade.java similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Grade.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/Grade.java index 0ac89fd3..e6883003 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Grade.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/Grade.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.grades; import androidx.room.ColumnInfo; import androidx.room.Entity; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeCategory.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeCategory.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeCategory.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeCategory.java index 4ebd05c3..dfe76dfd 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeCategory.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeCategory.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.grades; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeCategoryDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeCategoryDao.java similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeCategoryDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeCategoryDao.java index 3cfd8cf6..6cdf6bbe 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeCategoryDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeCategoryDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.grades; import java.util.List; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeDao.java similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeDao.java index b986e471..4487317b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.grades; import androidx.lifecycle.LiveData; import androidx.sqlite.db.SimpleSQLiteQuery; @@ -14,7 +14,7 @@ import android.util.SparseIntArray; import java.util.List; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_GRADE; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_GRADE; @Dao public abstract class GradeDao { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeFull.java similarity index 84% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeFull.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeFull.java index ac1259bb..44c62b0a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeFull.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeFull.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.grades; public class GradeFull extends Grade { //public String category = ""; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Lesson.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/Lesson.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Lesson.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/Lesson.java index 69fe76c9..95402750 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Lesson.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/Lesson.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.lessons; import java.util.List; @@ -8,8 +8,8 @@ import androidx.room.Ignore; import androidx.room.Index; import androidx.annotation.NonNull; -import pl.szczodrzynski.edziennik.models.Time; -import pl.szczodrzynski.edziennik.models.Week; +import pl.szczodrzynski.edziennik.utils.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Week; @Entity(tableName = "lessons", primaryKeys = {"profileId", "lessonWeekDay", "lessonStartTime", "lessonEndTime"}, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChange.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChange.java similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChange.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChange.java index 41cfcbc6..e651494e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChange.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChange.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.lessons; import androidx.room.ColumnInfo; import androidx.room.Entity; @@ -7,8 +7,8 @@ import androidx.annotation.NonNull; import java.util.List; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; @Entity(tableName = "lessonChanges", primaryKeys = {"profileId", "lessonChangeDate", "lessonChangeStartTime", "lessonChangeEndTime"}, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChangeDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChangeDao.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChangeDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChangeDao.java index a8238b4e..c854ce99 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChangeDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChangeDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.lessons; import androidx.lifecycle.LiveData; import androidx.sqlite.db.SimpleSQLiteQuery; @@ -11,10 +11,10 @@ import androidx.room.RawQuery; import java.util.List; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.db.LessonChangeCounter; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.ui.modules.agenda.lessonchange.LessonChangeCounter; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_LESSON_CHANGE; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_LESSON_CHANGE; import static pl.szczodrzynski.edziennik.utils.Utils.d; @Dao diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChangeFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChangeFull.java similarity index 84% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChangeFull.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChangeFull.java index e44f9242..87cb2b95 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChangeFull.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChangeFull.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.lessons; public class LessonChangeFull extends LessonChange { /*public String changeTeacherFullName = ""; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonDao.java similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonDao.java index a464b886..220977ab 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.lessons; import androidx.lifecycle.LiveData; import androidx.sqlite.db.SimpleSQLiteQuery; @@ -9,12 +9,11 @@ import androidx.room.OnConflictStrategy; import androidx.room.Query; import androidx.room.RawQuery; import androidx.annotation.NonNull; -import android.util.Log; import java.util.List; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; @Dao public abstract class LessonDao { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonFull.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonFull.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonFull.java index 2486b491..fc607833 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonFull.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonFull.java @@ -1,15 +1,15 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.lessons; import androidx.room.ColumnInfo; import android.content.Context; import androidx.annotation.Nullable; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Date; -import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_ADDED; -import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED; -import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE; +import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_ADDED; +import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED; +import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE; import static pl.szczodrzynski.edziennik.utils.Utils.bs; public class LessonFull extends Lesson { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LoginStore.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/login/LoginStore.java similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LoginStore.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/login/LoginStore.java index ec13779c..5545c5f5 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LoginStore.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/login/LoginStore.java @@ -1,16 +1,17 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.login; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.room.ColumnInfo; import androidx.room.Entity; -import androidx.annotation.NonNull; import androidx.room.Ignore; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; + @Entity(tableName = "loginStores", primaryKeys = {"loginStoreId"}) public class LoginStore { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LoginStoreDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/login/LoginStoreDao.java similarity index 90% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LoginStoreDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/login/LoginStoreDao.java index eee57539..49fc3eea 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LoginStoreDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/login/LoginStoreDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.login; import androidx.lifecycle.LiveData; import androidx.room.Dao; @@ -8,6 +8,8 @@ import androidx.room.Query; import java.util.List; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; + @Dao public abstract class LoginStoreDao { @Insert(onConflict = OnConflictStrategy.REPLACE) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LuckyNumber.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/luckynumber/LuckyNumber.java similarity index 82% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LuckyNumber.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/luckynumber/LuckyNumber.java index 0ddc8032..c2ccd4bb 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LuckyNumber.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/luckynumber/LuckyNumber.java @@ -1,10 +1,10 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.luckynumber; import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.annotation.NonNull; -import pl.szczodrzynski.edziennik.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Date; @Entity(tableName = "luckyNumbers", primaryKeys = {"profileId", "luckyNumberDate"}) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LuckyNumberDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/luckynumber/LuckyNumberDao.java similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LuckyNumberDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/luckynumber/LuckyNumberDao.java index 308b3045..a775bedf 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LuckyNumberDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/luckynumber/LuckyNumberDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.luckynumber; import androidx.lifecycle.LiveData; import androidx.room.Dao; @@ -8,7 +8,7 @@ import androidx.room.Query; import java.util.List; -import pl.szczodrzynski.edziennik.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Date; @Dao public interface LuckyNumberDao { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Message.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/Message.java similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Message.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/Message.java index 6fbca751..02fdaa24 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Message.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/Message.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.messages; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageDao.java similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageDao.java index 7decdfb5..8f5048b4 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.messages; import java.util.List; @@ -11,10 +11,12 @@ import androidx.room.RawQuery; import androidx.sqlite.db.SimpleSQLiteQuery; import androidx.sqlite.db.SupportSQLiteQuery; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DELETED; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_MESSAGE; +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata; + +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DELETED; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_MESSAGE; @Dao public abstract class MessageDao { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageFull.java similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageFull.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageFull.java index b6b5547b..30df0a81 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageFull.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageFull.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.messages; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipient.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipient.java similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipient.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipient.java index 973cc3eb..29635e5a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipient.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipient.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.messages; import androidx.room.ColumnInfo; import androidx.room.Entity; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipientDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipientDao.java similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipientDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipientDao.java index 72058604..4bd876e3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipientDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipientDao.java @@ -1,8 +1,7 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.messages; import java.util.List; -import androidx.lifecycle.LiveData; import androidx.room.Dao; import androidx.room.Insert; import androidx.room.OnConflictStrategy; @@ -11,8 +10,6 @@ import androidx.room.RawQuery; import androidx.sqlite.db.SimpleSQLiteQuery; import androidx.sqlite.db.SupportSQLiteQuery; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_MESSAGE; - @Dao public abstract class MessageRecipientDao { @Query("DELETE FROM messageRecipients WHERE profileId = :profileId") diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipientFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipientFull.java similarity index 88% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipientFull.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipientFull.java index d3aed76b..69dbd54c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipientFull.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipientFull.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.messages; public class MessageRecipientFull extends MessageRecipient { public String fullName = null; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Metadata.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/metadata/Metadata.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Metadata.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/metadata/Metadata.java index 2ac2a6e0..a621fe26 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Metadata.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/metadata/Metadata.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.metadata; import androidx.room.ColumnInfo; import androidx.room.Entity; @@ -18,6 +18,7 @@ public class Metadata { public static final int TYPE_LESSON_CHANGE = 6; public static final int TYPE_ANNOUNCEMENT = 7; public static final int TYPE_MESSAGE = 8; + public static final int TYPE_TEACHER_ABSENCE = 9; public int profileId; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MetadataDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/metadata/MetadataDao.java similarity index 86% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MetadataDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/metadata/MetadataDao.java index fdc61ecb..d86b9f16 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MetadataDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/metadata/MetadataDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.metadata; import androidx.lifecycle.LiveData; import androidx.room.Dao; @@ -9,16 +9,24 @@ import androidx.room.Transaction; import java.util.List; -import pl.szczodrzynski.edziennik.models.db.UnreadCounter; +import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice; +import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement; +import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance; +import pl.szczodrzynski.edziennik.data.db.modules.events.Event; +import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull; +import pl.szczodrzynski.edziennik.data.db.modules.messages.Message; +import pl.szczodrzynski.edziennik.utils.models.UnreadCounter; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ANNOUNCEMENT; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ATTENDANCE; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_EVENT; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_GRADE; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_HOMEWORK; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_LESSON_CHANGE; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_MESSAGE; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_NOTICE; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ANNOUNCEMENT; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ATTENDANCE; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_EVENT; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_GRADE; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_HOMEWORK; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_LESSON_CHANGE; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_MESSAGE; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_NOTICE; @Dao public abstract class MetadataDao { @@ -196,13 +204,13 @@ public abstract class MetadataDao { public abstract void deleteUnusedNotices(int profileId); @Query("DELETE FROM metadata WHERE profileId = :profileId AND thingType = "+TYPE_ATTENDANCE+" AND thingId NOT IN (SELECT attendanceId FROM attendances WHERE profileId = :profileId);") - public abstract void deleteUnusedAttendances(int profileId); + public abstract void deleteUnusedAttendance(int profileId); @Query("DELETE FROM metadata WHERE profileId = :profileId AND thingType = "+TYPE_EVENT+" AND thingId NOT IN (SELECT eventId FROM events WHERE profileId = :profileId AND eventType != -1);") public abstract void deleteUnusedEvents(int profileId); @Query("DELETE FROM metadata WHERE profileId = :profileId AND thingType = "+TYPE_HOMEWORK+" AND thingId NOT IN (SELECT eventId FROM events WHERE profileId = :profileId AND eventType = -1);") - public abstract void deleteUnusedHomeworks(int profileId); + public abstract void deleteUnusedHomework(int profileId); @Query("DELETE FROM metadata WHERE profileId = :profileId AND thingType = "+TYPE_LESSON_CHANGE+" AND thingId NOT IN (SELECT lessonChangeId FROM lessonChanges WHERE profileId = :profileId);") public abstract void deleteUnusedLessonChanges(int profileId); @@ -217,11 +225,11 @@ public abstract class MetadataDao { public void deleteUnused(int profileId) { deleteUnusedGrades(profileId); deleteUnusedNotices(profileId); - deleteUnusedAttendances(profileId); + deleteUnusedAttendance(profileId); deleteUnusedEvents(profileId); - deleteUnusedHomeworks(profileId); + deleteUnusedHomework(profileId); deleteUnusedLessonChanges(profileId); deleteUnusedAnnouncements(profileId); deleteUnusedMessages(profileId); } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Notice.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/Notice.java similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Notice.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/Notice.java index 230dd596..f80ac904 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Notice.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/Notice.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.notices; import androidx.room.ColumnInfo; import androidx.room.Entity; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/NoticeDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/NoticeDao.java similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/NoticeDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/NoticeDao.java index 3fcda14b..0d6a28ec 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/NoticeDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/NoticeDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.notices; import androidx.lifecycle.LiveData; import androidx.sqlite.db.SimpleSQLiteQuery; @@ -11,7 +11,9 @@ import androidx.room.RawQuery; import java.util.List; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_NOTICE; +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata; + +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_NOTICE; @Dao public abstract class NoticeDao { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/NoticeFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/NoticeFull.java similarity index 75% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/NoticeFull.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/NoticeFull.java index 5746118b..4fbf3119 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/NoticeFull.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/NoticeFull.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.notices; public class NoticeFull extends Notice { public String teacherFullName = ""; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Profile.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/Profile.kt similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Profile.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/Profile.kt index 1404e8bf..d53118c6 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Profile.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/Profile.kt @@ -1,27 +1,22 @@ -package pl.szczodrzynski.edziennik.datamodels +package pl.szczodrzynski.edziennik.data.db.modules.profiles import androidx.room.ColumnInfo import androidx.room.Entity import android.content.Context -import android.graphics.BitmapFactory import android.graphics.PorterDuff import android.graphics.PorterDuffColorFilter import android.graphics.drawable.Drawable -import android.media.ThumbnailUtils import android.net.ConnectivityManager -import android.net.NetworkInfo import android.widget.ImageView -import androidx.core.graphics.drawable.RoundedBitmapDrawable import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory -import com.google.gson.JsonElement import com.google.gson.JsonObject import androidx.room.Ignore import pl.droidsonroids.gif.GifDrawable import pl.szczodrzynski.edziennik.colorFromName -import pl.szczodrzynski.edziennik.models.Date +import pl.szczodrzynski.edziennik.utils.models.Date import pl.szczodrzynski.navlib.ImageHolder import pl.szczodrzynski.navlib.R import pl.szczodrzynski.navlib.drawer.IDrawerProfile diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ProfileDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileDao.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ProfileDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileDao.java index a22aab66..2cb9fe68 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ProfileDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.profiles; import androidx.lifecycle.LiveData; import androidx.room.Dao; @@ -8,7 +8,7 @@ import androidx.room.Query; import java.util.List; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED; @Dao public interface ProfileDao { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ProfileFull.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileFull.kt similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ProfileFull.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileFull.kt index a221849a..ae41a733 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ProfileFull.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileFull.kt @@ -1,17 +1,18 @@ -package pl.szczodrzynski.edziennik.datamodels +package pl.szczodrzynski.edziennik.data.db.modules.profiles import android.content.Context import androidx.room.ColumnInfo import com.google.gson.JsonObject import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_AGENDA import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_ANNOUNCEMENTS -import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_ATTENDANCES +import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_ATTENDANCE import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_GRADES -import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_HOMEWORKS +import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_HOMEWORK import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_MESSAGES -import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_NOTICES +import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_BEHAVIOUR import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_TIMETABLE -import pl.szczodrzynski.edziennik.datamodels.LoginStore.* +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.* import java.util.* class ProfileFull : Profile { @@ -50,9 +51,9 @@ class ProfileFull : Profile { fragmentIds.add(DRAWER_ITEM_AGENDA) fragmentIds.add(DRAWER_ITEM_GRADES) fragmentIds.add(DRAWER_ITEM_MESSAGES) - fragmentIds.add(DRAWER_ITEM_HOMEWORKS) - fragmentIds.add(DRAWER_ITEM_NOTICES) - fragmentIds.add(DRAWER_ITEM_ATTENDANCES) + fragmentIds.add(DRAWER_ITEM_HOMEWORK) + fragmentIds.add(DRAWER_ITEM_BEHAVIOUR) + fragmentIds.add(DRAWER_ITEM_ATTENDANCE) return fragmentIds } LOGIN_TYPE_LIBRUS -> { @@ -61,9 +62,9 @@ class ProfileFull : Profile { fragmentIds.add(DRAWER_ITEM_AGENDA) fragmentIds.add(DRAWER_ITEM_GRADES) fragmentIds.add(DRAWER_ITEM_MESSAGES) - fragmentIds.add(DRAWER_ITEM_HOMEWORKS) - fragmentIds.add(DRAWER_ITEM_NOTICES) - fragmentIds.add(DRAWER_ITEM_ATTENDANCES) + fragmentIds.add(DRAWER_ITEM_HOMEWORK) + fragmentIds.add(DRAWER_ITEM_BEHAVIOUR) + fragmentIds.add(DRAWER_ITEM_ATTENDANCE) fragmentIds.add(DRAWER_ITEM_ANNOUNCEMENTS) return fragmentIds } @@ -73,8 +74,8 @@ class ProfileFull : Profile { fragmentIds.add(DRAWER_ITEM_AGENDA) fragmentIds.add(DRAWER_ITEM_GRADES) fragmentIds.add(DRAWER_ITEM_MESSAGES) - fragmentIds.add(DRAWER_ITEM_NOTICES) - fragmentIds.add(DRAWER_ITEM_ATTENDANCES) + fragmentIds.add(DRAWER_ITEM_BEHAVIOUR) + fragmentIds.add(DRAWER_ITEM_ATTENDANCE) fragmentIds.add(DRAWER_ITEM_ANNOUNCEMENTS) return fragmentIds } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Subject.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/subjects/Subject.java similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Subject.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/subjects/Subject.java index e927ae15..f5192f20 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Subject.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/subjects/Subject.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.subjects; import java.util.List; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/SubjectDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/subjects/SubjectDao.java similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/SubjectDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/subjects/SubjectDao.java index a1f63e1f..1698efce 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/SubjectDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/subjects/SubjectDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.subjects; import androidx.lifecycle.LiveData; import androidx.room.Dao; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Teacher.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/Teacher.java similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Teacher.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/Teacher.java index 2679b5a5..ba7e84c6 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Teacher.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/Teacher.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.teachers; import android.content.Context; import android.graphics.Bitmap; @@ -6,7 +6,6 @@ import android.graphics.Bitmap; import java.util.List; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.Ignore; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsence.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsence.kt new file mode 100644 index 00000000..76ed7450 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsence.kt @@ -0,0 +1,34 @@ +package pl.szczodrzynski.edziennik.data.db.modules.teachers + +import androidx.room.ColumnInfo +import androidx.room.Entity +import pl.szczodrzynski.edziennik.utils.models.Date +import pl.szczodrzynski.edziennik.utils.models.Time + +@Entity(tableName = "teacherAbsence", + primaryKeys = ["profileId", "teacherAbsenceId"]) +open class TeacherAbsence ( + + val profileId: Int, + + @ColumnInfo(name = "teacherAbsenceId") + val id: Long, + + val teacherId: Long, + + @ColumnInfo(name = "teacherAbsenceType") + val type: Long, + + @ColumnInfo(name = "teacherAbsenceDateFrom") + val dateFrom: Date, + + @ColumnInfo(name = "teacherAbsenceDateTo") + val dateTo: Date, + + @ColumnInfo(name = "teacherAbsenceTimeFrom") + val timeFrom: Time?, + + @ColumnInfo(name = "teacherAbsenceTimeTo") + val timeTo: Time? + +) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceDao.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceDao.kt new file mode 100644 index 00000000..543d8fab --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceDao.kt @@ -0,0 +1,37 @@ +package pl.szczodrzynski.edziennik.data.db.modules.teachers + +import androidx.lifecycle.LiveData +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata +import pl.szczodrzynski.edziennik.utils.models.Date + +@Dao +interface TeacherAbsenceDao { + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun add(teacherAbsence: TeacherAbsence) + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun addAll(teacherAbsenceList: List) + + @Query("SELECT * FROM teacherAbsence WHERE profileId = :profileId") + fun getAll(profileId: Int): List + + @Query("SELECT *, teachers.teacherName || ' ' || teachers.teacherSurname as teacherFullName, " + + "metadata.seen, metadata.notified, metadata.addedDate FROM teacherAbsence " + + "LEFT JOIN teachers USING (profileId, teacherId) " + + "LEFT JOIN metadata ON teacherAbsenceId = thingId AND metadata.thingType = " + Metadata.TYPE_TEACHER_ABSENCE + + " AND metadata.profileId = :profileId WHERE teachers.profileId = :profileId") + fun getAllFull(profileId: Int): List + + @Query("SELECT *, teachers.teacherName || ' ' || teachers.teacherSurname as teacherFullName, " + + "metadata.seen, metadata.notified, metadata.addedDate FROM teacherAbsence " + + "LEFT JOIN teachers USING (profileId, teacherId) " + + "LEFT JOIN metadata ON teacherAbsenceId = thingId AND metadata.thingType = " + Metadata.TYPE_TEACHER_ABSENCE + + " AND metadata.profileId = :profileId WHERE teachers.profileId = :profileId " + + "AND :date BETWEEN teacherAbsenceDateFrom AND teacherAbsenceDateTo") + fun getAllByDateFull(profileId: Int, date: Date): LiveData> +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceFull.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceFull.kt new file mode 100644 index 00000000..1c36c19c --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherAbsenceFull.kt @@ -0,0 +1,16 @@ +package pl.szczodrzynski.edziennik.data.db.modules.teachers + +import pl.szczodrzynski.edziennik.utils.models.Date +import pl.szczodrzynski.edziennik.utils.models.Time + +class TeacherAbsenceFull(profileId: Int, id: Long, teacherId: Long, type: Long, + dateFrom: Date, dateTo: Date, timeFrom: Time?, timeTo: Time?) + : TeacherAbsence(profileId, id, teacherId, type, dateFrom, dateTo, timeFrom, timeTo) { + + var teacherFullName = "" + + // metadata + var seen: Boolean = false + var notified: Boolean = false + var addedDate: Long = 0 +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/TeacherDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherDao.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/TeacherDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherDao.java index 649fea8f..cde76ccd 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/TeacherDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.teachers; import androidx.lifecycle.LiveData; import androidx.room.Dao; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Team.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teams/Team.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Team.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teams/Team.java index 51073444..eb5b4af7 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Team.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teams/Team.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.teams; import androidx.room.ColumnInfo; import androidx.room.Entity; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/TeamDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teams/TeamDao.java similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/TeamDao.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teams/TeamDao.java index 409b4b51..2abb9af5 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/TeamDao.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teams/TeamDao.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.datamodels; +package pl.szczodrzynski.edziennik.data.db.modules.teams; import androidx.lifecycle.LiveData; import androidx.room.Dao; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterAgendaCalendarFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterAgendaCalendarFragment.java deleted file mode 100644 index bad747f9..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterAgendaCalendarFragment.java +++ /dev/null @@ -1,138 +0,0 @@ -package pl.szczodrzynski.edziennik.fragments; - -import android.app.Activity; -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.os.AsyncTask; -import android.os.Bundle; -import android.os.Handler; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.databinding.DataBindingUtil; -import androidx.fragment.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.applandeo.materialcalendarview.CalendarView; -import com.applandeo.materialcalendarview.EventDay; -import com.mikepenz.iconics.IconicsColor; -import com.mikepenz.iconics.IconicsDrawable; -import com.mikepenz.iconics.IconicsSize; -import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; - -import pl.szczodrzynski.edziennik.App; -import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.databinding.FragmentRegisterAgendaCalendarBinding; -import pl.szczodrzynski.edziennik.datamodels.EventFull; -import pl.szczodrzynski.edziennik.datamodels.LessonFull; -import pl.szczodrzynski.edziennik.dialogs.EventListDialog; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.utils.Themes; - -import static pl.szczodrzynski.edziennik.utils.Utils.intToStr; - -public class RegisterAgendaCalendarFragment extends Fragment { - - private App app = null; - private Activity activity = null; - private FragmentRegisterAgendaCalendarBinding b = null; - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - activity = getActivity(); - if (getActivity() == null || getContext() == null) - return null; - app = (App) activity.getApplication(); - getContext().getTheme().applyStyle(Themes.INSTANCE.getAppTheme(), true); - if (app.profile == null) - return inflater.inflate(R.layout.fragment_loading, container, false); - // activity, context and profile is valid - b = DataBindingUtil.inflate(inflater, R.layout.fragment_register_agenda_calendar, container, false); - return b.getRoot(); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - if (app == null || app.profile == null || activity == null || b == null || !isAdded()) - return; - - List unreadEventDates = new ArrayList<>(); - - final Handler handler = new Handler(); - handler.postDelayed(() -> AsyncTask.execute(() -> { - Context c = getContext(); - Activity a = getActivity(); - assert c != null; - assert a != null; - if (!isAdded()) { - return; - } - - List eventList = new ArrayList<>(); - - List events = app.db.eventDao().getAllNow(App.profileId); - for (EventFull event : events) { - if (event.eventDate == null) - continue; - Calendar startTime = Calendar.getInstance(); - startTime.set( - event.eventDate.year, - event.eventDate.month - 1, - event.eventDate.day, - event.startTime == null ? 0 : event.startTime.hour, - event.startTime == null ? 0 : event.startTime.minute, - event.startTime == null ? 0 : event.startTime.second - ); - Drawable eventIcon = new IconicsDrawable(activity).icon(CommunityMaterial.Icon.cmd_checkbox_blank_circle).size(IconicsSize.dp(10)).color(IconicsColor.colorInt(event.getColor())); - eventList.add(new EventDay(startTime, eventIcon)); - if (!event.seen) { - unreadEventDates.add(event.eventDate.getValue()); - } - } - - List lessonChanges = app.db.lessonChangeDao().getAllChangesWithLessonsNow(App.profileId); - - for (LessonFull lesson: lessonChanges) { - Calendar startTime = Calendar.getInstance(); - if (lesson.lessonDate == null) { - continue; - } - startTime.set( - lesson.lessonDate.year, - lesson.lessonDate.month - 1, - lesson.lessonDate.day, - lesson.startTime.hour, - lesson.startTime.minute, - lesson.startTime.second); - Drawable eventIcon = new IconicsDrawable(activity).icon(CommunityMaterial.Icon.cmd_checkbox_blank_circle).size(IconicsSize.dp(10)).color(IconicsColor.colorInt(0xff78909c)); - eventList.add(new EventDay(startTime, eventIcon)); - } - - getActivity().runOnUiThread(() -> { - //List eventList = new ArrayList<>(); - - //Collections.sort(eventList, new EventListComparator()); - - CalendarView calendarView = b.agendaCalendarView; - calendarView.setEvents(eventList); - calendarView.setOnDayClickListener(eventDay -> { - Date dayDate = Date.fromCalendar(eventDay.getCalendar()); - int scrolledDate = dayDate.getValue(); - if (unreadEventDates.contains(scrolledDate)) { - AsyncTask.execute(() -> app.db.eventDao().setSeenByDate(App.profileId, Date.fromYmd(intToStr(scrolledDate)), true)); - unreadEventDates.remove(unreadEventDates.indexOf(scrolledDate)); - } - - new EventListDialog(getContext()).show(app, dayDate); - }); - b.progressBar.setVisibility(View.GONE); - }); - }), 300); - } - -} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterAgendaDefaultFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterAgendaDefaultFragment.java deleted file mode 100644 index b7d12bae..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterAgendaDefaultFragment.java +++ /dev/null @@ -1,367 +0,0 @@ -package pl.szczodrzynski.edziennik.fragments; - -import android.app.Activity; -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.os.AsyncTask; -import android.os.Bundle; -import android.os.Handler; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.databinding.DataBindingUtil; -import androidx.fragment.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Toast; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.applandeo.materialcalendarview.CalendarView; -import com.applandeo.materialcalendarview.EventDay; -import com.github.tibolte.agendacalendarview.AgendaCalendarView; -import com.github.tibolte.agendacalendarview.CalendarPickerController; -import com.github.tibolte.agendacalendarview.models.BaseCalendarEvent; -import com.github.tibolte.agendacalendarview.models.CalendarEvent; -import com.github.tibolte.agendacalendarview.models.IDayItem; -import com.mikepenz.iconics.IconicsColor; -import com.mikepenz.iconics.IconicsDrawable; -import com.mikepenz.iconics.IconicsSize; -import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Locale; - -import pl.szczodrzynski.edziennik.App; -import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.databinding.FragmentRegisterAgendaCalendarBinding; -import pl.szczodrzynski.edziennik.databinding.FragmentRegisterAgendaDefaultBinding; -import pl.szczodrzynski.edziennik.datamodels.EventFull; -import pl.szczodrzynski.edziennik.datamodels.LessonFull; -import pl.szczodrzynski.edziennik.dialogs.EventListDialog; -import pl.szczodrzynski.edziennik.dialogs.EventManualDialog; -import pl.szczodrzynski.edziennik.dialogs.LessonChangeDialog; -import pl.szczodrzynski.edziennik.fragments.agenda.LessonChangeEvent; -import pl.szczodrzynski.edziennik.fragments.agenda.LessonChangeEventRenderer; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; -import pl.szczodrzynski.edziennik.models.db.LessonChangeCounter; -import pl.szczodrzynski.edziennik.utils.Colors; -import pl.szczodrzynski.edziennik.utils.Themes; -import pl.szczodrzynski.edziennik.utils.Utils; -import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem; -import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetSeparatorItem; - -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_EVENT; -import static pl.szczodrzynski.edziennik.datamodels.Profile.AGENDA_CALENDAR; -import static pl.szczodrzynski.edziennik.datamodels.Profile.AGENDA_DEFAULT; -import static pl.szczodrzynski.edziennik.utils.Utils.bs; -import static pl.szczodrzynski.edziennik.utils.Utils.intToStr; - -public class RegisterAgendaDefaultFragment extends Fragment { - - private App app = null; - private MainActivity activity = null; - private FragmentRegisterAgendaDefaultBinding b_default = null; - private FragmentRegisterAgendaCalendarBinding b_calendar = null; - private int viewType = AGENDA_DEFAULT; - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - activity = (MainActivity) getActivity(); - if (getActivity() == null || getContext() == null) - return null; - app = (App) activity.getApplication(); - getContext().getTheme().applyStyle(Themes.INSTANCE.getAppTheme(), true); - if (app.profile == null) - return inflater.inflate(R.layout.fragment_loading, container, false); - // activity, context and profile is valid - viewType = app.profile.getAgendaViewType(); - if (viewType == AGENDA_DEFAULT) { - b_default = DataBindingUtil.inflate(inflater, R.layout.fragment_register_agenda_default, container, false); - return b_default.getRoot(); - } - else { - b_calendar = DataBindingUtil.inflate(inflater, R.layout.fragment_register_agenda_calendar, container, false); - return b_calendar.getRoot(); - } - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - if (app == null || app.profile == null || activity == null || (b_default == null && b_calendar == null) || !isAdded()) - return; - - activity.getBottomSheet().prependItems( - new BottomSheetPrimaryItem(true) - .withTitle(R.string.menu_add_event) - .withDescription(R.string.menu_add_event_desc) - .withIcon(CommunityMaterial.Icon.cmd_calendar_plus) - .withOnClickListener(v3 -> { - activity.getBottomSheet().close(); - new MaterialDialog.Builder(activity) - .title(R.string.main_menu_add) - .items(R.array.main_menu_add_options) - .itemsCallback((dialog, itemView, position, text) -> { - switch (position) { - case 0: - new EventManualDialog(activity).show(app, null, null, null, EventManualDialog.DIALOG_EVENT); - break; - case 1: - new EventManualDialog(activity).show(app, null, null, null, EventManualDialog.DIALOG_HOMEWORK); - break; - } - }) - .show(); - }), - new BottomSheetPrimaryItem(true) - .withTitle(R.string.menu_agenda_change_view) - .withIcon(viewType == AGENDA_DEFAULT ? CommunityMaterial.Icon.cmd_calendar : CommunityMaterial.Icon2.cmd_view_list) - .withOnClickListener(v3 -> { - activity.getBottomSheet().close(); - viewType = viewType == AGENDA_DEFAULT ? AGENDA_CALENDAR : AGENDA_DEFAULT; - app.profile.setAgendaViewType(viewType); - app.profileSaveAsync(); - activity.reloadTarget(); - }), - new BottomSheetSeparatorItem(true), - new BottomSheetPrimaryItem(true) - .withTitle(R.string.menu_mark_as_read) - .withIcon(CommunityMaterial.Icon.cmd_eye_check) - .withOnClickListener(v3 -> { - activity.getBottomSheet().close(); - AsyncTask.execute(() -> app.db.metadataDao().setAllSeen(App.profileId, TYPE_EVENT, true)); - Toast.makeText(activity, R.string.main_menu_mark_as_read_success, Toast.LENGTH_SHORT).show(); - }) - ); - activity.gainAttention(); - - if (viewType == AGENDA_DEFAULT) { - List unreadEventDates = new ArrayList<>(); - - final Handler handler = new Handler(); - handler.postDelayed(() -> AsyncTask.execute(() -> { - if (app == null || app.profile == null || activity == null || b_default == null || !isAdded()) - return; - - List eventList = new ArrayList<>(); - - List lessonChangeCounters = app.db.lessonChangeDao().getLessonChangeCountersNow(App.profileId); - for (LessonChangeCounter counter : lessonChangeCounters) { - Calendar startTime = Calendar.getInstance(); - Calendar endTime = Calendar.getInstance(); - if (counter.lessonChangeDate == null) { - continue; - } - startTime.set(counter.lessonChangeDate.year, counter.lessonChangeDate.month - 1, counter.lessonChangeDate.day, 10, 0, 0); - endTime.setTimeInMillis(startTime.getTimeInMillis() + (1000 * 60 * 45)); - eventList.add(new LessonChangeEvent( - counter.lessonChangeDate.getInMillis(), - 0xff78909c, - Colors.legibleTextColor(0xff78909c), - startTime, - endTime, - counter.profileId, - counter.lessonChangeDate, - counter.lessonChangeCount - )); - } - - - List events = app.db.eventDao().getAllNow(App.profileId); - for (EventFull event : events) { - Calendar startTime = Calendar.getInstance(); - Calendar endTime = Calendar.getInstance(); - if (event.eventDate == null) - continue; - startTime.set( - event.eventDate.year, - event.eventDate.month - 1, - event.eventDate.day, - event.startTime == null ? 0 : event.startTime.hour, - event.startTime == null ? 0 : event.startTime.minute, - event.startTime == null ? 0 : event.startTime.second - ); - endTime.setTimeInMillis(startTime.getTimeInMillis() + (1000 * 60 * 45)); - eventList.add(new BaseCalendarEvent(event.typeName + " - " + event.topic, - "", - (event.startTime == null ? getString(R.string.agenda_event_all_day) : event.startTime.getStringHM()) + - Utils.bs(", ", event.subjectLongName) + - Utils.bs(", ", event.teacherFullName) + - Utils.bs(", ", event.teamName), - event.getColor(), - Colors.legibleTextColor(event.getColor()), - startTime, - endTime, - event.startTime == null, - event.id, !event.seen)); - if (!event.seen) { - unreadEventDates.add(event.eventDate.getValue()); - } - } - - /*List lessonChanges = app.db.lessonChangeDao().getAllChangesWithLessonsNow(App.profileId); - for (LessonFull lesson: lessonChanges) { - Calendar startTime = Calendar.getInstance(); - Calendar endTime = Calendar.getInstance(); - if (lesson.lessonDate == null) { - continue; - } - startTime.set(lesson.lessonDate.year, lesson.lessonDate.month - 1, lesson.lessonDate.day, lesson.startTime.hour, lesson.startTime.minute, lesson.startTime.second); - endTime.setTimeInMillis(startTime.getTimeInMillis() + (1000 * 60 * 45)); - String description = lesson.changeTypeStr(activity); - if (lesson.changeType != TYPE_CANCELLED) { - if (lesson.subjectId != lesson.changeSubjectId && lesson.teacherId != lesson.changeTeacherId) { - description += " -> " + bs(null, lesson.changeSubjectLongName, ", ") + bs(lesson.changeTeacherFullName); - } else if (lesson.subjectId != lesson.changeSubjectId) { - description += " -> " + bs(lesson.changeSubjectLongName); - } else if (lesson.teacherId != lesson.changeTeacherId) { - description += " -> " + bs(lesson.changeTeacherFullName); - } - } - eventList.add(new BaseCalendarEvent(description, - "", - (lesson.startTime.getStringHM()) + - Utils.bs(", ", lesson.subjectLongName) + - Utils.bs(", ", lesson.teacherFullName) + - Utils.bs(", ", lesson.teamName), - 0xff78909c, - Colors.legibleTextColor(0xff78909c), - startTime, - endTime, - false, - (int)lesson.changeId, false)); - }*/ - - activity.runOnUiThread(() -> { - AgendaCalendarView mAgendaCalendarView = b_default.agendaDefaultView; - // minimum and maximum date of our calendar - // 2 month behind, one year ahead, example: March 2015 <-> May 2015 <-> May 2016 - Calendar minDate = Calendar.getInstance(); - Calendar maxDate = Calendar.getInstance(); - - minDate.add(Calendar.MONTH, -2); - minDate.set(Calendar.DAY_OF_MONTH, 1); - maxDate.add(Calendar.MONTH, 2); - - - mAgendaCalendarView.init(eventList, minDate, maxDate, Locale.getDefault(), new CalendarPickerController() { - @Override - public void onDaySelected(IDayItem dayItem) { - } - - @Override - public void onScrollToDate(Calendar calendar) { - int scrolledDate = Date.fromCalendar(calendar).getValue(); - if (unreadEventDates.contains(scrolledDate)) { - AsyncTask.execute(() -> app.db.eventDao().setSeenByDate(App.profileId, Date.fromYmd(intToStr(scrolledDate)), true)); - unreadEventDates.remove(unreadEventDates.indexOf(scrolledDate)); - } - } - - @Override - public void onEventSelected(CalendarEvent calendarEvent) { - if (calendarEvent instanceof BaseCalendarEvent) { - if (!calendarEvent.isPlaceholder() && !calendarEvent.isAllDay()) { - new EventListDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay()), Time.fromMillis(calendarEvent.getStartTime().getTimeInMillis()), true); - } else { - new EventListDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay())); - } - } else if (calendarEvent instanceof LessonChangeEvent) { - new LessonChangeDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay())); - //Toast.makeText(app, "Clicked "+((LessonChangeEvent) calendarEvent).getLessonChangeDate().getFormattedString(), Toast.LENGTH_SHORT).show(); - } - } - }, new LessonChangeEventRenderer()); - b_default.progressBar.setVisibility(View.GONE); - }); - }), 500); - } - else { - List unreadEventDates = new ArrayList<>(); - - final Handler handler = new Handler(); - handler.postDelayed(() -> AsyncTask.execute(() -> { - if (app == null || app.profile == null || activity == null || b_calendar == null || !isAdded()) - return; - Context c = getContext(); - Activity a = getActivity(); - assert c != null; - assert a != null; - if (!isAdded()) { - return; - } - - List eventList = new ArrayList<>(); - - List events = app.db.eventDao().getAllNow(App.profileId); - for (EventFull event : events) { - if (event.eventDate == null) - continue; - Calendar startTime = Calendar.getInstance(); - startTime.set( - event.eventDate.year, - event.eventDate.month - 1, - event.eventDate.day, - event.startTime == null ? 0 : event.startTime.hour, - event.startTime == null ? 0 : event.startTime.minute, - event.startTime == null ? 0 : event.startTime.second - ); - Drawable eventIcon = new IconicsDrawable(activity).icon(CommunityMaterial.Icon.cmd_checkbox_blank_circle).size(IconicsSize.dp(10)).color(IconicsColor.colorInt(event.getColor())); - eventList.add(new EventDay(startTime, eventIcon)); - if (!event.seen) { - unreadEventDates.add(event.eventDate.getValue()); - } - } - - List lessonChanges = app.db.lessonChangeDao().getAllChangesWithLessonsNow(App.profileId); - - for (LessonFull lesson: lessonChanges) { - Calendar startTime = Calendar.getInstance(); - if (lesson.lessonDate == null) { - continue; - } - startTime.set( - lesson.lessonDate.year, - lesson.lessonDate.month - 1, - lesson.lessonDate.day, - lesson.startTime.hour, - lesson.startTime.minute, - lesson.startTime.second); - Drawable eventIcon = new IconicsDrawable(activity).icon(CommunityMaterial.Icon.cmd_checkbox_blank_circle).size(IconicsSize.dp(10)).color(IconicsColor.colorInt(0xff78909c)); - eventList.add(new EventDay(startTime, eventIcon)); - } - - getActivity().runOnUiThread(() -> { - //List eventList = new ArrayList<>(); - - //Collections.sort(eventList, new EventListComparator()); - - CalendarView calendarView = b_calendar.agendaCalendarView; - calendarView.setEvents(eventList); - calendarView.setOnDayClickListener(eventDay -> { - Date dayDate = Date.fromCalendar(eventDay.getCalendar()); - int scrolledDate = dayDate.getValue(); - if (unreadEventDates.contains(scrolledDate)) { - AsyncTask.execute(() -> app.db.eventDao().setSeenByDate(App.profileId, Date.fromYmd(intToStr(scrolledDate)), true)); - unreadEventDates.remove(unreadEventDates.indexOf(scrolledDate)); - } - - new EventListDialog(getContext()).show(app, dayDate); - }); - b_calendar.progressBar.setVisibility(View.GONE); - }); - }), 300); - } - } - - public static class EventListComparator implements java.util.Comparator { - @Override - public int compare(CalendarEvent o1, CalendarEvent o2) { - return Long.compare(o1.getStartTime().getTimeInMillis(), o2.getStartTime().getTimeInMillis()); - //return (int)(o1.getStartTime().getTimeInMillis() - o2.getStartTime().getTimeInMillis()); - } - } -} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterHomeworksFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterHomeworksFragment.java deleted file mode 100644 index cb49eabb..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterHomeworksFragment.java +++ /dev/null @@ -1,127 +0,0 @@ -package pl.szczodrzynski.edziennik.fragments; - -import android.os.AsyncTask; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.databinding.DataBindingUtil; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.LinearLayoutManager; - -import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial; - -import pl.szczodrzynski.edziennik.App; -import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.adapters.HomeworksAdapter; -import pl.szczodrzynski.edziennik.databinding.FragmentRegisterHomeworksBinding; -import pl.szczodrzynski.edziennik.datamodels.Metadata; -import pl.szczodrzynski.edziennik.dialogs.EventManualDialog; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.utils.Themes; -import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem; -import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetSeparatorItem; - -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK; - -public class RegisterHomeworksFragment extends Fragment { - - private App app = null; - private MainActivity activity = null; - private FragmentRegisterHomeworksBinding b = null; - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - activity = (MainActivity) getActivity(); - if (getActivity() == null || getContext() == null) - return null; - app = (App) activity.getApplication(); - getContext().getTheme().applyStyle(Themes.INSTANCE.getAppTheme(), true); - if (app.profile == null) - return inflater.inflate(R.layout.fragment_loading, container, false); - // activity, context and profile is valid - b = DataBindingUtil.inflate(inflater, R.layout.fragment_register_homeworks, container, false); - b.refreshLayout.setParent(activity.getSwipeRefreshLayout()); - return b.getRoot(); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - if (app == null || app.profile == null || activity == null || b == null || !isAdded()) - return; - - activity.getBottomSheet().prependItems( - new BottomSheetPrimaryItem(true) - .withTitle(R.string.menu_add_event) - .withDescription(R.string.menu_add_event_desc) - .withIcon(CommunityMaterial.Icon.cmd_calendar_plus) - .withOnClickListener(v3 -> { - activity.getBottomSheet().close(); - new EventManualDialog(activity).show(app, null, null, null, EventManualDialog.DIALOG_HOMEWORK); - }), - new BottomSheetSeparatorItem(true), - new BottomSheetPrimaryItem(true) - .withTitle(R.string.menu_mark_as_read) - .withIcon(CommunityMaterial.Icon.cmd_eye_check) - .withOnClickListener(v3 -> { - activity.getBottomSheet().close(); - AsyncTask.execute(() -> app.db.metadataDao().setAllSeen(App.profileId, Metadata.TYPE_HOMEWORK, true)); - Toast.makeText(activity, R.string.main_menu_mark_as_read_success, Toast.LENGTH_SHORT).show(); - }) - ); - activity.gainAttention(); - - /*b.refreshLayout.setOnRefreshListener(() -> { - activity.syncCurrentFeature(MainActivity.DRAWER_ITEM_HOMEWORKS, b.refreshLayout); - });*/ - - LinearLayoutManager linearLayoutCurrentManager = new LinearLayoutManager(getContext()); - linearLayoutCurrentManager.setReverseLayout(false); - linearLayoutCurrentManager.setStackFromEnd(false); - LinearLayoutManager linearLayoutPastManager = new LinearLayoutManager(getContext()); - linearLayoutPastManager.setReverseLayout(true); - linearLayoutPastManager.setStackFromEnd(true); - - b.homeworksCurrentView.setHasFixedSize(true); - b.homeworksCurrentView.setLayoutManager(linearLayoutCurrentManager); - b.homeworksPastView.setHasFixedSize(true); - b.homeworksPastView.setLayoutManager(linearLayoutPastManager); - - app.db.eventDao().getAllByType(App.profileId, TYPE_HOMEWORK, "eventDate >= '"+Date.getToday().getStringY_m_d()+"'").observe(this, currentList -> { - if (app == null || app.profile == null || activity == null || b == null || !isAdded()) - return; - - if (currentList != null && currentList.size() > 0) { - HomeworksAdapter adapter = new HomeworksAdapter(getContext(), currentList); - b.homeworksCurrentView.setAdapter(adapter); - b.homeworksCurrentView.setVisibility(View.VISIBLE); - b.homeworksCurrentNoData.setVisibility(View.GONE); - } - else { - b.homeworksCurrentView.setVisibility(View.GONE); - b.homeworksCurrentNoData.setVisibility(View.VISIBLE); - } - }); - - app.db.eventDao().getAllByType(App.profileId, TYPE_HOMEWORK, "eventDate < '"+Date.getToday().getStringY_m_d()+"'").observe(this, pastList -> { - if (app == null || app.profile == null || activity == null || b == null || !isAdded()) - return; - - if (pastList != null && pastList.size() > 0) { - HomeworksAdapter adapter = new HomeworksAdapter(getContext(), pastList); - b.homeworksPastView.setAdapter(adapter); - b.homeworksPastView.setVisibility(View.VISIBLE); - b.homeworksPastNoData.setVisibility(View.GONE); - } - else { - b.homeworksPastView.setVisibility(View.GONE); - b.homeworksPastNoData.setVisibility(View.VISIBLE); - } - }); - } -} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/network/IonCookieManager.java_ b/app/src/main/java/pl/szczodrzynski/edziennik/network/IonCookieManager.java_ deleted file mode 100644 index 47a0dacf..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/network/IonCookieManager.java_ +++ /dev/null @@ -1,47 +0,0 @@ -package pl.szczodrzynski.edziennik.network; - -import android.content.Context; -import android.util.Log; - -import com.koushikdutta.async.http.Headers; -import com.koushikdutta.ion.Ion; - -import java.io.IOException; -import java.net.CookieManager; -import java.net.URI; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.List; - -public class IonCookieManager { - private static final String TAG = "IonCookieManager"; - private CookieManager manager; - - public IonCookieManager(Context context) { - Ion ion = Ion.getDefault(context); - manager = ion.getCookieMiddleware().getCookieManager(); - } - - public void storeCookies(URLConnection conn) throws IOException { - List cookies = conn.getHeaderFields().get("Set-Cookie"); - URI uri = URI.create(conn.getURL().toString()); - if(cookies != null) { - storeCookies(uri, cookies); - } - } - - public void storeCookies(URI uri, List cookies) throws IOException { - Headers headers = new Headers(); - headers.addAll("Set-Cookie", cookies); - Log.d(TAG, "storeAllCookies: "+cookies.toString()); - manager.put(uri, headers.getMultiMap()); - } - - public void storeCookie(URI uri, String cookieName, String cookieValue) throws IOException { - List cookie = new ArrayList(); - cookie.add(String.format("%s=%s", cookieName, cookieValue)); - Log.d(TAG, "storeCookie: "+String.format("%s=%s", cookieName, cookieValue)); - storeCookies(uri, cookie); - } - -} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/network/ServerRequest.java b/app/src/main/java/pl/szczodrzynski/edziennik/network/ServerRequest.java index 373fa30b..4d8f9a80 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/network/ServerRequest.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/network/ServerRequest.java @@ -16,10 +16,10 @@ import im.wangchao.mhttp.ThreadMode; import im.wangchao.mhttp.callback.JsonCallbackHandler; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.BuildConfig; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; import pl.szczodrzynski.edziennik.utils.Utils; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED; public class ServerRequest { private App app; @@ -67,7 +67,7 @@ public class ServerRequest { } private String sign(String signature, long timestamp) { - String password = "bmllX21hX3Rha19sYXR3bw=="+ BuildConfig.VERSION_CODE + timestamp; + String password = "Y3plZ29fdHVfc3p1a2Fzeg=="+ BuildConfig.VERSION_CODE + timestamp; return Utils.HmacMD5(password, signature); } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/sync/MyFirebaseMessagingService.java b/app/src/main/java/pl/szczodrzynski/edziennik/sync/MyFirebaseMessagingService.java index 7c55629e..d8841ebf 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/sync/MyFirebaseMessagingService.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/sync/MyFirebaseMessagingService.java @@ -17,19 +17,19 @@ import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.BuildConfig; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.datamodels.Event; -import pl.szczodrzynski.edziennik.datamodels.EventFull; -import pl.szczodrzynski.edziennik.datamodels.EventType; -import pl.szczodrzynski.edziennik.datamodels.FeedbackMessage; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; -import pl.szczodrzynski.edziennik.datamodels.Team; -import pl.szczodrzynski.edziennik.fragments.DebugFragment; -import pl.szczodrzynski.edziennik.models.Notification; +import pl.szczodrzynski.edziennik.data.db.modules.events.Event; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventType; +import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessage; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.teams.Team; +import pl.szczodrzynski.edziennik.ui.modules.base.DebugFragment; +import pl.szczodrzynski.edziennik.utils.models.Notification; import pl.szczodrzynski.edziennik.network.ServerRequest; import static pl.szczodrzynski.edziennik.App.APP_URL; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; import static pl.szczodrzynski.edziennik.utils.Utils.d; import static pl.szczodrzynski.edziennik.utils.Utils.strToInt; @@ -195,7 +195,7 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService { app.checkDevModePassword(); feedbackMessage.text = "devmode "+(App.devMode ? "allowed" : "disallowed"); } - Intent intent = new Intent("pl.szczodrzynski.edziennik.activities.FeedbackActivity"); + Intent intent = new Intent("pl.szczodrzynski.edziennik.ui.modules.base.FeedbackActivity"); intent.putExtra("type", "user_chat"); intent.putExtra("message", app.gson.toJson(feedbackMessage)); app.sendBroadcast(intent); @@ -217,7 +217,7 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService { feedbackMessage.fromUser = remoteMessage.getData().get("from_user"); feedbackMessage.fromUserName = remoteMessage.getData().get("from_user_name"); feedbackMessage.sentTime = Long.parseLong(remoteMessage.getData().get("sent_time")); - Intent intent = new Intent("pl.szczodrzynski.edziennik.activities.FeedbackActivity"); + Intent intent = new Intent("pl.szczodrzynski.edziennik.ui.modules.base.FeedbackActivity"); intent.putExtra("type", "user_chat"); intent.putExtra("message", app.gson.toJson(feedbackMessage)); app.sendBroadcast(intent); @@ -280,7 +280,7 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService { app.notifier.add(new Notification(app.getContext(), app.getString((oldEvent == null ? R.string.notification_shared_event_format : R.string.notification_shared_event_modified_format), event.sharedByName, eventType == null ? "wydarzenie" : eventType.name, event.eventDate.getFormattedString(), event.topic)) .withProfileData(profile.getId(), profile.getName()) .withType(event.type == TYPE_HOMEWORK ? Notification.TYPE_NEW_SHARED_HOMEWORK : Notification.TYPE_NEW_SHARED_EVENT) - .withFragmentRedirect(event.type == TYPE_HOMEWORK ? MainActivity.DRAWER_ITEM_HOMEWORKS : MainActivity.DRAWER_ITEM_AGENDA) + .withFragmentRedirect(event.type == TYPE_HOMEWORK ? MainActivity.DRAWER_ITEM_HOMEWORK : MainActivity.DRAWER_ITEM_AGENDA) .withLongExtra("eventDate", event.eventDate.getValue()) ); d(TAG, "Finishing adding event " + event); @@ -299,7 +299,7 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService { app.notifier.add(new Notification(app.getContext(), app.getString(R.string.notification_shared_event_removed_format, oldEvent.sharedByName, oldEvent.typeName, oldEvent.eventDate.getFormattedString(), oldEvent.topic)) .withProfileData(profile.getId(), profile.getName()) .withType(oldEvent.type == TYPE_HOMEWORK ? Notification.TYPE_NEW_SHARED_HOMEWORK : Notification.TYPE_NEW_SHARED_EVENT) - .withFragmentRedirect(oldEvent.type == TYPE_HOMEWORK ? MainActivity.DRAWER_ITEM_HOMEWORKS : MainActivity.DRAWER_ITEM_AGENDA) + .withFragmentRedirect(oldEvent.type == TYPE_HOMEWORK ? MainActivity.DRAWER_ITEM_HOMEWORK : MainActivity.DRAWER_ITEM_AGENDA) .withLongExtra("eventDate", oldEvent.eventDate.getValue()) ); app.db.eventDao().remove(oldEvent); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/sync/SyncService.java b/app/src/main/java/pl/szczodrzynski/edziennik/sync/SyncService.java index 5f4263ad..e3eddf3d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/sync/SyncService.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/sync/SyncService.java @@ -14,11 +14,11 @@ import java.util.Collection; import java.util.List; import pl.szczodrzynski.edziennik.App; -import pl.szczodrzynski.edziennik.api.AppError; -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; +import pl.szczodrzynski.edziennik.data.api.AppError; +import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; import static pl.szczodrzynski.edziennik.Notifier.ID_GET_DATA; import static pl.szczodrzynski.edziennik.Notifier.ID_GET_DATA_ERROR; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/dialogs/GenericDialog.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/GenericDialog.java similarity index 87% rename from app/src/main/java/pl/szczodrzynski/edziennik/dialogs/GenericDialog.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/GenericDialog.java index 2b5b23ef..df691a58 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/dialogs/GenericDialog.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/GenericDialog.java @@ -1,15 +1,11 @@ -package pl.szczodrzynski.edziennik.dialogs; +package pl.szczodrzynski.edziennik.ui.dialogs; import android.content.Context; -import android.content.res.Resources; -import androidx.annotation.ColorInt; -import android.util.TypedValue; import android.view.View; import com.afollestad.materialdialogs.MaterialDialog; import pl.szczodrzynski.edziennik.App; -import pl.szczodrzynski.edziennik.R; public class GenericDialog { private App app; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/dialogs/ChangelogDialog.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/changelog/ChangelogDialog.java similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/dialogs/ChangelogDialog.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/changelog/ChangelogDialog.java index d27b7726..dfae3081 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/dialogs/ChangelogDialog.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/changelog/ChangelogDialog.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.dialogs; +package pl.szczodrzynski.edziennik.ui.dialogs.changelog; import android.app.Dialog; import android.os.Bundle; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/EventListAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListAdapter.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/adapters/EventListAdapter.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListAdapter.java index b22b2308..ccf28951 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/EventListAdapter.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListAdapter.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.adapters; +package pl.szczodrzynski.edziennik.ui.dialogs.event; import android.content.Context; import android.graphics.PorterDuff; @@ -18,14 +18,12 @@ import java.util.List; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.datamodels.Event; -import pl.szczodrzynski.edziennik.datamodels.EventFull; -import pl.szczodrzynski.edziennik.dialogs.EventListDialog; -import pl.szczodrzynski.edziennik.dialogs.EventManualDialog; -import pl.szczodrzynski.edziennik.models.Date; +import pl.szczodrzynski.edziennik.data.db.modules.events.Event; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull; +import pl.szczodrzynski.edziennik.utils.models.Date; import pl.szczodrzynski.edziennik.utils.Utils; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK; import static pl.szczodrzynski.edziennik.utils.Utils.bs; import static pl.szczodrzynski.edziennik.utils.Utils.d; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/dialogs/EventListDialog.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListDialog.java similarity index 80% rename from app/src/main/java/pl/szczodrzynski/edziennik/dialogs/EventListDialog.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListDialog.java index dd974450..065eedda 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/dialogs/EventListDialog.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListDialog.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.dialogs; +package pl.szczodrzynski.edziennik.ui.dialogs.event; import android.content.Context; import android.content.DialogInterface; @@ -16,20 +16,15 @@ import androidx.lifecycle.LifecycleOwner; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import java.util.Calendar; -import java.util.List; -import java.util.Locale; - import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.adapters.EventListAdapter; -import pl.szczodrzynski.edziennik.datamodels.LessonChange; -import pl.szczodrzynski.edziennik.datamodels.LessonFull; -import pl.szczodrzynski.edziennik.fragments.agenda.LessonChangeEvent; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; -import pl.szczodrzynski.edziennik.models.db.LessonChangeCounter; -import pl.szczodrzynski.edziennik.utils.Colors; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsenceFull; +import pl.szczodrzynski.edziennik.ui.dialogs.lessonchange.LessonChangeDialog; +import pl.szczodrzynski.edziennik.ui.dialogs.teacherabsence.TeacherAbsenceDialog; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; public class EventListDialog { private App app; @@ -91,7 +86,7 @@ public class EventListDialog { private void actualShow(Date date, Time time, boolean noDefaultTimeWhenAdding) { dialog = new MaterialDialog.Builder(context) .title((time == null ? date.getFormattedString() : (lesson != null ? lesson.getSubjectLongName() : date.getFormattedString())+", "+time.getStringHM())) - .customView(R.layout.dialog_event_list, true) + .customView(R.layout.dialog_event_list, false) .neutralText(R.string.add) .positiveText(R.string.close) .autoDismiss(false) @@ -175,10 +170,11 @@ public class EventListDialog { examsView = dialogView.findViewById(R.id.eventListView); examsView.setHasFixedSize(false); - examsView.setNestedScrollingEnabled(false); + examsView.setNestedScrollingEnabled(true); examsView.setLayoutManager(new LinearLayoutManager(context)); - CardView lessonChangeContainer = dialogView.findViewById(R.id.lesson_change_container); + CardView lessonChangeContainer = dialogView.findViewById(R.id.lessonChangeContainer); + CardView teacherAbsenceContainer = dialogView.findViewById(R.id.teacherAbsenceContainer); //lessonChangeContainer.setVisibility(View.GONE); if (time == null) { app.db.lessonChangeDao().getLessonChangeCounterByDate(App.profileId, date).observe((LifecycleOwner) context, counter -> { @@ -186,14 +182,38 @@ public class EventListDialog { return; if (counter.lessonChangeCount > 0) { lessonChangeContainer.setVisibility(View.VISIBLE); - TextView lessonChangeCount = dialogView.findViewById(R.id.lesson_change_count); - lessonChangeCount.setText(Integer.toString(counter.lessonChangeCount)); + TextView lessonChangeCount = dialogView.findViewById(R.id.lessonChangeCount); + lessonChangeCount.setText(String.valueOf(counter.lessonChangeCount)); lessonChangeContainer.setCardBackgroundColor(0xff78909c); lessonChangeContainer.setOnClickListener((v -> { new LessonChangeDialog(context).show(app, date); })); } }); + + app.db.teacherAbsenceDao().getAllByDateFull(App.profileId, date).observe((LifecycleOwner) context, teacherAbsenceList -> { + if (teacherAbsenceList == null) + return; + if (teacherAbsenceList.size() > 0) { + int count = 0; + for (TeacherAbsenceFull teacherAbsence : teacherAbsenceList) { + Date dateFrom = teacherAbsence.getDateFrom(); + Date dateTo = teacherAbsence.getDateTo(); + + if (date.compareTo(dateFrom) >= 0 && date.compareTo(dateTo) <= 0) { + count++; + } + } + + teacherAbsenceContainer.setVisibility(View.VISIBLE); + TextView teacherAbsenceCount = dialogView.findViewById(R.id.teacherAbsenceCount); + teacherAbsenceCount.setText(String.valueOf(count)); + teacherAbsenceContainer.setCardBackgroundColor(0xffff1744); + teacherAbsenceContainer.setOnClickListener(( v -> { + new TeacherAbsenceDialog(context).show(app, date); + })); + } + }); } app.db.eventDao().getAllByDateTime(profileId, date, time).observe((LifecycleOwner) context, events -> { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/dialogs/EventManualDialog.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.java similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/dialogs/EventManualDialog.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.java index 6b5fca15..4a24d2e0 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/dialogs/EventManualDialog.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.dialogs; +package pl.szczodrzynski.edziennik.ui.dialogs.event; import android.app.Activity; @@ -36,29 +36,29 @@ import java.util.List; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.api.AppError; -import pl.szczodrzynski.edziennik.datamodels.Event; -import pl.szczodrzynski.edziennik.datamodels.EventFull; -import pl.szczodrzynski.edziennik.datamodels.EventType; -import pl.szczodrzynski.edziennik.datamodels.LessonFull; -import pl.szczodrzynski.edziennik.datamodels.Metadata; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; -import pl.szczodrzynski.edziennik.datamodels.Subject; -import pl.szczodrzynski.edziennik.datamodels.Teacher; -import pl.szczodrzynski.edziennik.datamodels.Team; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; -import pl.szczodrzynski.edziennik.models.Week; +import pl.szczodrzynski.edziennik.data.api.AppError; +import pl.szczodrzynski.edziennik.data.db.modules.events.Event; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventType; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull; +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher; +import pl.szczodrzynski.edziennik.data.db.modules.teams.Team; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Week; import pl.szczodrzynski.edziennik.network.ServerRequest; import pl.szczodrzynski.edziennik.utils.TextInputDropDown; import pl.szczodrzynski.edziennik.utils.Themes; import static pl.szczodrzynski.edziennik.App.APP_URL; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_DEFAULT; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_UNDEFINED; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_DEFAULT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_UNDEFINED; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED; import static pl.szczodrzynski.edziennik.utils.Utils.bs; import static pl.szczodrzynski.edziennik.utils.Utils.ns; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/dialogs/GradeDetailsDialog.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/grade/GradeDetailsDialog.java similarity index 83% rename from app/src/main/java/pl/szczodrzynski/edziennik/dialogs/GradeDetailsDialog.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/grade/GradeDetailsDialog.java index 4082cf5d..cabc3e63 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/dialogs/GradeDetailsDialog.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/grade/GradeDetailsDialog.java @@ -1,41 +1,29 @@ -package pl.szczodrzynski.edziennik.dialogs; +package pl.szczodrzynski.edziennik.ui.dialogs.grade; import android.content.Context; import android.content.DialogInterface; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; -import android.graphics.Typeface; import android.os.AsyncTask; import android.view.View; -import android.widget.LinearLayout; -import android.widget.TextView; -import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.ColorUtils; -import androidx.lifecycle.LifecycleOwner; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.afollestad.materialdialogs.MaterialDialog; import java.text.DecimalFormat; -import java.util.ArrayList; import java.util.List; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.adapters.EventListAdapter; -import pl.szczodrzynski.edziennik.adapters.GradesListAdapter; +import pl.szczodrzynski.edziennik.ui.modules.grades.GradesListAdapter; import pl.szczodrzynski.edziennik.databinding.DialogGradeDetailsBinding; -import pl.szczodrzynski.edziennik.datamodels.Grade; -import pl.szczodrzynski.edziennik.datamodels.GradeFull; -import pl.szczodrzynski.edziennik.datamodels.LessonChange; -import pl.szczodrzynski.edziennik.datamodels.LessonFull; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade; +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull; import pl.szczodrzynski.edziennik.utils.Colors; -import static pl.szczodrzynski.edziennik.datamodels.Profile.COLOR_MODE_DEFAULT; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.COLOR_MODE_DEFAULT; public class GradeDetailsDialog { private App app; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/dialogs/LessonChangeDialog.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/lessonchange/LessonChangeDialog.java similarity index 80% rename from app/src/main/java/pl/szczodrzynski/edziennik/dialogs/LessonChangeDialog.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/lessonchange/LessonChangeDialog.java index ed03ca71..4a298324 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/dialogs/LessonChangeDialog.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/lessonchange/LessonChangeDialog.java @@ -1,11 +1,8 @@ -package pl.szczodrzynski.edziennik.dialogs; +package pl.szczodrzynski.edziennik.ui.dialogs.lessonchange; import android.content.Context; -import android.content.res.Resources; -import android.util.TypedValue; import android.view.View; -import androidx.annotation.ColorInt; import androidx.databinding.DataBindingUtil; import androidx.lifecycle.LifecycleOwner; import androidx.recyclerview.widget.LinearLayoutManager; @@ -17,13 +14,11 @@ import java.util.List; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.adapters.TimetableAdapter; +import pl.szczodrzynski.edziennik.ui.modules.timetable.TimetableAdapter; import pl.szczodrzynski.edziennik.databinding.DialogLessonChangeListBinding; -import pl.szczodrzynski.edziennik.datamodels.Lesson; -import pl.szczodrzynski.edziennik.datamodels.LessonChange; -import pl.szczodrzynski.edziennik.datamodels.LessonFull; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; public class LessonChangeDialog { private App app; @@ -47,7 +42,7 @@ public class LessonChangeDialog { this.app = _app; dialog = new MaterialDialog.Builder(context) .title(date.getFormattedString()) - .customView(R.layout.dialog_lesson_change_list, true) + .customView(R.layout.dialog_lesson_change_list, false) .positiveText(R.string.close) .autoDismiss(false) .onPositive((dialog, which) -> dialog.dismiss()) @@ -58,8 +53,7 @@ public class LessonChangeDialog { if (b == null) return; - b.lessonChangeView.setHasFixedSize(false); - b.lessonChangeView.setNestedScrollingEnabled(false); + b.lessonChangeView.setHasFixedSize(true); b.lessonChangeView.setLayoutManager(new LinearLayoutManager(context)); app.db.lessonDao().getAllByDate(profileId, date, Time.getNow()).observe((LifecycleOwner) context, lessons -> { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/teacherabsence/TeacherAbsenceAdapter.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/teacherabsence/TeacherAbsenceAdapter.kt new file mode 100644 index 00000000..2d8eb2c6 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/teacherabsence/TeacherAbsenceAdapter.kt @@ -0,0 +1,56 @@ +package pl.szczodrzynski.edziennik.ui.dialogs.teacherabsence + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import pl.szczodrzynski.edziennik.R +import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsenceFull +import pl.szczodrzynski.edziennik.utils.models.Date + +class TeacherAbsenceAdapter( + private val context: Context, + private val date: Date, + private val teacherAbsenceList: List +) : RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val inflater: LayoutInflater = LayoutInflater.from(context) + val view: View = inflater.inflate(R.layout.row_dialog_teacher_absence_item, parent, false) + return ViewHolder(view) + } + + override fun getItemCount(): Int { + return teacherAbsenceList.size + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val teacherAbsence: TeacherAbsenceFull = teacherAbsenceList[position] + + holder.teacherAbsenceTeacher.text = teacherAbsence.teacherFullName + + val time = when (teacherAbsence.timeFrom != null && teacherAbsence.timeTo != null) { + true -> when (teacherAbsence.dateFrom.compareTo(teacherAbsence.dateTo)) { + 0 -> teacherAbsence.dateFrom.formattedStringShort + " " + + teacherAbsence.timeFrom.stringHM + " - " + teacherAbsence.timeTo.stringHM + + else -> teacherAbsence.dateFrom.formattedStringShort + " " + teacherAbsence.timeTo.stringHM + + " - " + teacherAbsence.dateTo.formattedStringShort + " " + teacherAbsence.timeTo.stringHM + } + + false -> when (teacherAbsence.dateFrom.compareTo(teacherAbsence.dateTo)) { + 0 -> teacherAbsence.dateFrom.formattedStringShort + else -> teacherAbsence.dateFrom.formattedStringShort + " - " + teacherAbsence.dateTo.formattedStringShort + } + } + + holder.teacherAbsenceTime.text = time + } + + class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + var teacherAbsenceTeacher: TextView = itemView.findViewById(R.id.teacherAbsenceTeacher) + var teacherAbsenceTime: TextView = itemView.findViewById(R.id.teacherAbsenceTime) + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/teacherabsence/TeacherAbsenceDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/teacherabsence/TeacherAbsenceDialog.kt new file mode 100644 index 00000000..55bf8ae0 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/teacherabsence/TeacherAbsenceDialog.kt @@ -0,0 +1,42 @@ +package pl.szczodrzynski.edziennik.ui.dialogs.teacherabsence + +import android.content.Context +import android.view.View +import androidx.databinding.DataBindingUtil +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.afollestad.materialdialogs.MaterialDialog +import pl.szczodrzynski.edziennik.App +import pl.szczodrzynski.edziennik.R +import pl.szczodrzynski.edziennik.databinding.DialogTeacherAbsenceListBinding +import pl.szczodrzynski.edziennik.utils.models.Date + +class TeacherAbsenceDialog(val context: Context) { + + val profileId: Int = App.profileId + private lateinit var b: DialogTeacherAbsenceListBinding + + fun show(app: App, date: Date) { + val dialog = MaterialDialog.Builder(context) + .title(date.formattedString) + .customView(R.layout.dialog_teacher_absence_list, false) + .positiveText(R.string.close) + .autoDismiss(false) + .onPositive { dialog, _ -> dialog.dismiss()} + .show() + + val customView: View = dialog.customView ?: return + b = DataBindingUtil.bind(customView) ?: return + + b.teacherAbsenceView.setHasFixedSize(true) + b.teacherAbsenceView.layoutManager = LinearLayoutManager(context) + + app.db.teacherAbsenceDao().getAllByDateFull(profileId, date).observe(context as LifecycleOwner, Observer { absenceList -> + val adapter = TeacherAbsenceAdapter(context, date, absenceList) + b.teacherAbsenceView.adapter = adapter + b.teacherAbsenceView.visibility = View.VISIBLE + }) + } + +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragment.java new file mode 100644 index 00000000..37db5001 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragment.java @@ -0,0 +1,421 @@ +package pl.szczodrzynski.edziennik.ui.modules.agenda; + +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.fragment.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import com.afollestad.materialdialogs.MaterialDialog; +import com.applandeo.materialcalendarview.CalendarView; +import com.applandeo.materialcalendarview.EventDay; +import com.github.tibolte.agendacalendarview.AgendaCalendarView; +import com.github.tibolte.agendacalendarview.CalendarPickerController; +import com.github.tibolte.agendacalendarview.models.BaseCalendarEvent; +import com.github.tibolte.agendacalendarview.models.CalendarEvent; +import com.github.tibolte.agendacalendarview.models.IDayItem; +import com.mikepenz.iconics.IconicsColor; +import com.mikepenz.iconics.IconicsDrawable; +import com.mikepenz.iconics.IconicsSize; +import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.Locale; + +import pl.szczodrzynski.edziennik.App; +import pl.szczodrzynski.edziennik.R; +import pl.szczodrzynski.edziennik.MainActivity; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsenceFull; +import pl.szczodrzynski.edziennik.databinding.FragmentAgendaCalendarBinding; +import pl.szczodrzynski.edziennik.databinding.FragmentAgendaDefaultBinding; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull; +import pl.szczodrzynski.edziennik.ui.dialogs.event.EventListDialog; +import pl.szczodrzynski.edziennik.ui.dialogs.event.EventManualDialog; +import pl.szczodrzynski.edziennik.ui.dialogs.lessonchange.LessonChangeDialog; +import pl.szczodrzynski.edziennik.ui.dialogs.teacherabsence.TeacherAbsenceDialog; +import pl.szczodrzynski.edziennik.ui.modules.agenda.lessonchange.LessonChangeCounter; +import pl.szczodrzynski.edziennik.ui.modules.agenda.lessonchange.LessonChangeEvent; +import pl.szczodrzynski.edziennik.ui.modules.agenda.lessonchange.LessonChangeEventRenderer; +import pl.szczodrzynski.edziennik.ui.modules.agenda.teacherabsence.TeacherAbsenceCounter; +import pl.szczodrzynski.edziennik.ui.modules.agenda.teacherabsence.TeacherAbsenceEvent; +import pl.szczodrzynski.edziennik.ui.modules.agenda.teacherabsence.TeacherAbsenceEventRenderer; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; +import pl.szczodrzynski.edziennik.utils.Colors; +import pl.szczodrzynski.edziennik.utils.Themes; +import pl.szczodrzynski.edziennik.utils.Utils; +import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem; +import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetSeparatorItem; + +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_EVENT; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.AGENDA_CALENDAR; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.AGENDA_DEFAULT; +import static pl.szczodrzynski.edziennik.utils.Utils.intToStr; + +public class AgendaFragment extends Fragment { + + private App app = null; + private MainActivity activity = null; + private FragmentAgendaDefaultBinding b_default = null; + private FragmentAgendaCalendarBinding b_calendar = null; + private int viewType = AGENDA_DEFAULT; + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + activity = (MainActivity) getActivity(); + if (getActivity() == null || getContext() == null) + return null; + app = (App) activity.getApplication(); + getContext().getTheme().applyStyle(Themes.INSTANCE.getAppTheme(), true); + if (app.profile == null) + return inflater.inflate(R.layout.fragment_loading, container, false); + // activity, context and profile is valid + viewType = app.profile.getAgendaViewType(); + if (viewType == AGENDA_DEFAULT) { + b_default = DataBindingUtil.inflate(inflater, R.layout.fragment_agenda_default, container, false); + return b_default.getRoot(); + } + else { + b_calendar = DataBindingUtil.inflate(inflater, R.layout.fragment_agenda_calendar, container, false); + return b_calendar.getRoot(); + } + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + if (app == null || app.profile == null || activity == null || (b_default == null && b_calendar == null) || !isAdded()) + return; + + activity.getBottomSheet().prependItems( + new BottomSheetPrimaryItem(true) + .withTitle(R.string.menu_add_event) + .withDescription(R.string.menu_add_event_desc) + .withIcon(CommunityMaterial.Icon.cmd_calendar_plus) + .withOnClickListener(v3 -> { + activity.getBottomSheet().close(); + new MaterialDialog.Builder(activity) + .title(R.string.main_menu_add) + .items(R.array.main_menu_add_options) + .itemsCallback((dialog, itemView, position, text) -> { + switch (position) { + case 0: + new EventManualDialog(activity).show(app, null, null, null, EventManualDialog.DIALOG_EVENT); + break; + case 1: + new EventManualDialog(activity).show(app, null, null, null, EventManualDialog.DIALOG_HOMEWORK); + break; + } + }) + .show(); + }), + new BottomSheetPrimaryItem(true) + .withTitle(R.string.menu_agenda_change_view) + .withIcon(viewType == AGENDA_DEFAULT ? CommunityMaterial.Icon.cmd_calendar : CommunityMaterial.Icon2.cmd_view_list) + .withOnClickListener(v3 -> { + activity.getBottomSheet().close(); + viewType = viewType == AGENDA_DEFAULT ? AGENDA_CALENDAR : AGENDA_DEFAULT; + app.profile.setAgendaViewType(viewType); + app.profileSaveAsync(); + activity.reloadTarget(); + }), + new BottomSheetSeparatorItem(true), + new BottomSheetPrimaryItem(true) + .withTitle(R.string.menu_mark_as_read) + .withIcon(CommunityMaterial.Icon.cmd_eye_check) + .withOnClickListener(v3 -> { + activity.getBottomSheet().close(); + AsyncTask.execute(() -> app.db.metadataDao().setAllSeen(App.profileId, TYPE_EVENT, true)); + Toast.makeText(activity, R.string.main_menu_mark_as_read_success, Toast.LENGTH_SHORT).show(); + }) + ); + activity.gainAttention(); + + if (viewType == AGENDA_DEFAULT) { + createDefaultAgendaView(); + } + else { + createCalendarAgendaView(); + } + } + + private void createDefaultAgendaView() { + List unreadEventDates = new ArrayList<>(); + + final Handler handler = new Handler(); + handler.postDelayed(() -> AsyncTask.execute(() -> { + if (app == null || app.profile == null || activity == null || b_default == null || !isAdded()) + return; + + List eventList = new ArrayList<>(); + + List lessonChangeCounters = app.db.lessonChangeDao().getLessonChangeCountersNow(App.profileId); + for (LessonChangeCounter counter : lessonChangeCounters) { + Calendar startTime = Calendar.getInstance(); + Calendar endTime = Calendar.getInstance(); + if (counter.lessonChangeDate == null) { + continue; + } + startTime.set(counter.lessonChangeDate.year, counter.lessonChangeDate.month - 1, counter.lessonChangeDate.day, 10, 0, 0); + endTime.setTimeInMillis(startTime.getTimeInMillis() + (1000 * 60 * 45)); + eventList.add(new LessonChangeEvent( + counter.lessonChangeDate.getInMillis(), + 0xff78909c, + Colors.legibleTextColor(0xff78909c), + startTime, + endTime, + counter.profileId, + counter.lessonChangeDate, + counter.lessonChangeCount + )); + } + + if (app.profile.getStudentData("showTeacherAbsences", true)) { + List teacherAbsenceList = app.db.teacherAbsenceDao().getAllFull(App.profileId); + List teacherAbsenceCounters = new ArrayList<>(); + + for (TeacherAbsenceFull absence : teacherAbsenceList) { + for (Date date = absence.getDateFrom().clone(); date.compareTo(absence.getDateTo()) < 1; date.stepForward(0, 0, 1)) { + boolean counterFound = false; + for (TeacherAbsenceCounter counter : teacherAbsenceCounters) { + if (counter.getTeacherAbsenceDate().compareTo(date) == 0) { + counter.setTeacherAbsenceCount(counter.getTeacherAbsenceCount() + 1); + counterFound = true; + break; + } + } + + if (!counterFound) { + teacherAbsenceCounters.add(new TeacherAbsenceCounter(date.clone(), 1)); + } + } + } + + for (TeacherAbsenceCounter counter : teacherAbsenceCounters) { + Calendar startTime = Calendar.getInstance(); + Calendar endTime = Calendar.getInstance(); + Date date = counter.getTeacherAbsenceDate(); + startTime.set(date.year, date.month - 1, date.day, 10, 0, 0); + endTime.setTimeInMillis(startTime.getTimeInMillis() + (1000 * 60 * 45)); + eventList.add(new TeacherAbsenceEvent( + date.getInMillis(), + 0xffff1744, + Colors.legibleTextColor(0xffff1744), + startTime, + endTime, + App.profileId, + date, + counter.getTeacherAbsenceCount() + )); + } + } + + + List events = app.db.eventDao().getAllNow(App.profileId); + for (EventFull event : events) { + Calendar startTime = Calendar.getInstance(); + Calendar endTime = Calendar.getInstance(); + if (event.eventDate == null) + continue; + startTime.set( + event.eventDate.year, + event.eventDate.month - 1, + event.eventDate.day, + event.startTime == null ? 0 : event.startTime.hour, + event.startTime == null ? 0 : event.startTime.minute, + event.startTime == null ? 0 : event.startTime.second + ); + endTime.setTimeInMillis(startTime.getTimeInMillis() + (1000 * 60 * 45)); + eventList.add(new BaseCalendarEvent(event.typeName + " - " + event.topic, + "", + (event.startTime == null ? getString(R.string.agenda_event_all_day) : event.startTime.getStringHM()) + + Utils.bs(", ", event.subjectLongName) + + Utils.bs(", ", event.teacherFullName) + + Utils.bs(", ", event.teamName), + event.getColor(), + Colors.legibleTextColor(event.getColor()), + startTime, + endTime, + event.startTime == null, + event.id, !event.seen)); + if (!event.seen) { + unreadEventDates.add(event.eventDate.getValue()); + } + } + + /*List lessonChanges = app.db.lessonChangeDao().getAllChangesWithLessonsNow(App.profileId); + for (LessonFull lesson: lessonChanges) { + Calendar startTime = Calendar.getInstance(); + Calendar endTime = Calendar.getInstance(); + if (lesson.lessonDate == null) { + continue; + } + startTime.set(lesson.lessonDate.year, lesson.lessonDate.month - 1, lesson.lessonDate.day, lesson.startTime.hour, lesson.startTime.minute, lesson.startTime.second); + endTime.setTimeInMillis(startTime.getTimeInMillis() + (1000 * 60 * 45)); + String description = lesson.changeTypeStr(activity); + if (lesson.changeType != TYPE_CANCELLED) { + if (lesson.subjectId != lesson.changeSubjectId && lesson.teacherId != lesson.changeTeacherId) { + description += " -> " + bs(null, lesson.changeSubjectLongName, ", ") + bs(lesson.changeTeacherFullName); + } else if (lesson.subjectId != lesson.changeSubjectId) { + description += " -> " + bs(lesson.changeSubjectLongName); + } else if (lesson.teacherId != lesson.changeTeacherId) { + description += " -> " + bs(lesson.changeTeacherFullName); + } + } + eventList.add(new BaseCalendarEvent(description, + "", + (lesson.startTime.getStringHM()) + + Utils.bs(", ", lesson.subjectLongName) + + Utils.bs(", ", lesson.teacherFullName) + + Utils.bs(", ", lesson.teamName), + 0xff78909c, + Colors.legibleTextColor(0xff78909c), + startTime, + endTime, + false, + (int)lesson.changeId, false)); + }*/ + + activity.runOnUiThread(() -> { + AgendaCalendarView mAgendaCalendarView = b_default.agendaDefaultView; + // minimum and maximum date of our calendar + // 2 month behind, one year ahead, example: March 2015 <-> May 2015 <-> May 2016 + Calendar minDate = Calendar.getInstance(); + Calendar maxDate = Calendar.getInstance(); + + minDate.add(Calendar.MONTH, -2); + minDate.set(Calendar.DAY_OF_MONTH, 1); + maxDate.add(Calendar.MONTH, 2); + + + mAgendaCalendarView.init(eventList, minDate, maxDate, Locale.getDefault(), new CalendarPickerController() { + @Override + public void onDaySelected(IDayItem dayItem) { + } + + @Override + public void onScrollToDate(Calendar calendar) { + int scrolledDate = Date.fromCalendar(calendar).getValue(); + if (unreadEventDates.contains(scrolledDate)) { + AsyncTask.execute(() -> app.db.eventDao().setSeenByDate(App.profileId, Date.fromYmd(intToStr(scrolledDate)), true)); + unreadEventDates.remove(unreadEventDates.indexOf(scrolledDate)); + } + } + + @Override + public void onEventSelected(CalendarEvent calendarEvent) { + if (calendarEvent instanceof BaseCalendarEvent) { + if (!calendarEvent.isPlaceholder() && !calendarEvent.isAllDay()) { + new EventListDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay()), Time.fromMillis(calendarEvent.getStartTime().getTimeInMillis()), true); + } else { + new EventListDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay())); + } + } else if (calendarEvent instanceof LessonChangeEvent) { + new LessonChangeDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay())); + //Toast.makeText(app, "Clicked "+((LessonChangeEvent) calendarEvent).getLessonChangeDate().getFormattedString(), Toast.LENGTH_SHORT).show(); + } else if (calendarEvent instanceof TeacherAbsenceEvent) { + new TeacherAbsenceDialog(activity).show(app, Date.fromCalendar(calendarEvent.getInstanceDay())); + } + } + }, new LessonChangeEventRenderer(), new TeacherAbsenceEventRenderer()); + b_default.progressBar.setVisibility(View.GONE); + }); + }), 500); + } + + private void createCalendarAgendaView() { + List unreadEventDates = new ArrayList<>(); + + final Handler handler = new Handler(); + handler.postDelayed(() -> AsyncTask.execute(() -> { + if (app == null || app.profile == null || activity == null || b_calendar == null || !isAdded()) + return; + Context c = getContext(); + Activity a = getActivity(); + assert c != null; + assert a != null; + if (!isAdded()) { + return; + } + + List eventList = new ArrayList<>(); + + List events = app.db.eventDao().getAllNow(App.profileId); + for (EventFull event : events) { + if (event.eventDate == null) + continue; + Calendar startTime = Calendar.getInstance(); + startTime.set( + event.eventDate.year, + event.eventDate.month - 1, + event.eventDate.day, + event.startTime == null ? 0 : event.startTime.hour, + event.startTime == null ? 0 : event.startTime.minute, + event.startTime == null ? 0 : event.startTime.second + ); + Drawable eventIcon = new IconicsDrawable(activity).icon(CommunityMaterial.Icon.cmd_checkbox_blank_circle).size(IconicsSize.dp(10)).color(IconicsColor.colorInt(event.getColor())); + eventList.add(new EventDay(startTime, eventIcon)); + if (!event.seen) { + unreadEventDates.add(event.eventDate.getValue()); + } + } + + List lessonChanges = app.db.lessonChangeDao().getAllChangesWithLessonsNow(App.profileId); + + for (LessonFull lesson: lessonChanges) { + Calendar startTime = Calendar.getInstance(); + if (lesson.lessonDate == null) { + continue; + } + startTime.set( + lesson.lessonDate.year, + lesson.lessonDate.month - 1, + lesson.lessonDate.day, + lesson.startTime.hour, + lesson.startTime.minute, + lesson.startTime.second); + Drawable eventIcon = new IconicsDrawable(activity).icon(CommunityMaterial.Icon.cmd_checkbox_blank_circle).size(IconicsSize.dp(10)).color(IconicsColor.colorInt(0xff78909c)); + eventList.add(new EventDay(startTime, eventIcon)); + } + + getActivity().runOnUiThread(() -> { + //List eventList = new ArrayList<>(); + + //Collections.sort(eventList, new EventListComparator()); + + CalendarView calendarView = b_calendar.agendaCalendarView; + calendarView.setEvents(eventList); + calendarView.setOnDayClickListener(eventDay -> { + Date dayDate = Date.fromCalendar(eventDay.getCalendar()); + int scrolledDate = dayDate.getValue(); + if (unreadEventDates.contains(scrolledDate)) { + AsyncTask.execute(() -> app.db.eventDao().setSeenByDate(App.profileId, Date.fromYmd(intToStr(scrolledDate)), true)); + unreadEventDates.remove(unreadEventDates.indexOf(scrolledDate)); + } + + new EventListDialog(getContext()).show(app, dayDate); + }); + b_calendar.progressBar.setVisibility(View.GONE); + }); + }), 300); + } + + public static class EventListComparator implements java.util.Comparator { + @Override + public int compare(CalendarEvent o1, CalendarEvent o2) { + return Long.compare(o1.getStartTime().getTimeInMillis(), o2.getStartTime().getTimeInMillis()); + //return (int)(o1.getStartTime().getTimeInMillis() - o2.getStartTime().getTimeInMillis()); + } + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/models/db/LessonChangeCounter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/lessonchange/LessonChangeCounter.java similarity index 52% rename from app/src/main/java/pl/szczodrzynski/edziennik/models/db/LessonChangeCounter.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/lessonchange/LessonChangeCounter.java index b98869c3..6c2cfaf2 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/models/db/LessonChangeCounter.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/lessonchange/LessonChangeCounter.java @@ -1,6 +1,6 @@ -package pl.szczodrzynski.edziennik.models.db; +package pl.szczodrzynski.edziennik.ui.modules.agenda.lessonchange; -import pl.szczodrzynski.edziennik.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Date; public class LessonChangeCounter { public int profileId; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/agenda/LessonChangeEvent.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/lessonchange/LessonChangeEvent.java similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/agenda/LessonChangeEvent.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/lessonchange/LessonChangeEvent.java index 0d92e6cd..077c2206 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/agenda/LessonChangeEvent.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/lessonchange/LessonChangeEvent.java @@ -1,13 +1,12 @@ -package pl.szczodrzynski.edziennik.fragments.agenda; +package pl.szczodrzynski.edziennik.ui.modules.agenda.lessonchange; -import com.github.tibolte.agendacalendarview.models.BaseCalendarEvent; import com.github.tibolte.agendacalendarview.models.CalendarEvent; import com.github.tibolte.agendacalendarview.models.IDayItem; import com.github.tibolte.agendacalendarview.models.IWeekItem; import java.util.Calendar; -import pl.szczodrzynski.edziennik.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Date; public class LessonChangeEvent implements CalendarEvent { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/agenda/LessonChangeEventRenderer.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/lessonchange/LessonChangeEventRenderer.java similarity index 77% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/agenda/LessonChangeEventRenderer.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/lessonchange/LessonChangeEventRenderer.java index 5a821614..2490e1bf 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/agenda/LessonChangeEventRenderer.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/lessonchange/LessonChangeEventRenderer.java @@ -1,8 +1,6 @@ -package pl.szczodrzynski.edziennik.fragments.agenda; +package pl.szczodrzynski.edziennik.ui.modules.agenda.lessonchange; -import android.graphics.Color; import android.view.View; -import android.widget.LinearLayout; import android.widget.TextView; import androidx.cardview.widget.CardView; @@ -10,14 +8,13 @@ import androidx.cardview.widget.CardView; import com.github.tibolte.agendacalendarview.render.EventRenderer; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.datamodels.Lesson; public class LessonChangeEventRenderer extends EventRenderer { @Override public void render(View view, LessonChangeEvent event) { CardView card = view.findViewById(R.id.lesson_change_card); TextView changeText = view.findViewById(R.id.lesson_change_text); - TextView changeCount = view.findViewById(R.id.lesson_change_count); + TextView changeCount = view.findViewById(R.id.lessonChangeCount); card.setCardBackgroundColor(event.getColor()); changeText.setTextColor(event.getTextColor()); changeCount.setTextColor(event.getTextColor()); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/teacherabsence/TeacherAbsenceCounter.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/teacherabsence/TeacherAbsenceCounter.kt new file mode 100644 index 00000000..6017be16 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/teacherabsence/TeacherAbsenceCounter.kt @@ -0,0 +1,10 @@ +package pl.szczodrzynski.edziennik.ui.modules.agenda.teacherabsence + +import pl.szczodrzynski.edziennik.utils.models.Date + +class TeacherAbsenceCounter ( + val teacherAbsenceDate: Date, + var teacherAbsenceCount: Int = 0 +) + + diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/teacherabsence/TeacherAbsenceEvent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/teacherabsence/TeacherAbsenceEvent.kt new file mode 100644 index 00000000..fc1c28db --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/teacherabsence/TeacherAbsenceEvent.kt @@ -0,0 +1,188 @@ +package pl.szczodrzynski.edziennik.ui.modules.agenda.teacherabsence + +import com.github.tibolte.agendacalendarview.models.CalendarEvent +import com.github.tibolte.agendacalendarview.models.IDayItem +import com.github.tibolte.agendacalendarview.models.IWeekItem +import pl.szczodrzynski.edziennik.utils.models.Date +import java.util.* + +class TeacherAbsenceEvent : CalendarEvent { + /** + * Id of the event. + */ + private var mId: Long = 0 + /** + * Color to be displayed in the agenda view. + */ + private var mColor: Int = 0 + /** + * Text color displayed on the background color + */ + private var mTextColor: Int = 0 + /** + * Calendar instance helping sorting the events per section in the agenda view. + */ + private var mInstanceDay: Calendar? = null + /** + * Start time of the event. + */ + private var mStartTime: Calendar? = null + /** + * End time of the event. + */ + private var mEndTime: Calendar? = null + /** + * References to a DayItem instance for that event, used to link interaction between the + * calendar view and the agenda view. + */ + private var mDayReference: IDayItem? = null + /** + * References to a WeekItem instance for that event, used to link interaction between the + * calendar view and the agenda view. + */ + private var mWeekReference: IWeekItem? = null + + + private var profileId: Int = 0 + var teacherAbsenceDate: Date? = null + var teacherAbsenceCount: Int = 0 + + constructor(calendarEvent: TeacherAbsenceEvent) { + this.mId = calendarEvent.id + this.mColor = calendarEvent.color + this.mTextColor = calendarEvent.textColor + this.mStartTime = calendarEvent.startTime + this.mEndTime = calendarEvent.endTime + this.profileId = calendarEvent.profileId + this.teacherAbsenceDate = calendarEvent.teacherAbsenceDate + this.teacherAbsenceCount = calendarEvent.teacherAbsenceCount + } + + constructor(mId: Long, mColor: Int, mTextColor: Int, mStartTime: Calendar, mEndTime: Calendar, profileId: Int, teacherAbsenceDate: Date, teacherAbsenceCount: Int) { + this.mId = mId + this.mColor = mColor + this.mTextColor = mTextColor + this.mStartTime = mStartTime + this.mEndTime = mEndTime + this.profileId = profileId + this.teacherAbsenceDate = teacherAbsenceDate + this.teacherAbsenceCount = teacherAbsenceCount + } + + override fun setPlaceholder(placeholder: Boolean) { + + } + + override fun isPlaceholder(): Boolean { + return false + } + + override fun getLocation(): String? { + return null + } + + override fun setLocation(mLocation: String) { + + } + + override fun getId(): Long { + return mId + } + + override fun setId(mId: Long) { + this.mId = mId + } + + override fun getShowBadge(): Boolean { + return false + } + + override fun setShowBadge(mShowBadge: Boolean) { + + } + + override fun getTextColor(): Int { + return mTextColor + } + + override fun setTextColor(mTextColor: Int) { + this.mTextColor = mTextColor + } + + override fun getDescription(): String? { + return null + } + + override fun setDescription(mDescription: String) { + + } + + override fun isAllDay(): Boolean { + return false + } + + override fun setAllDay(allDay: Boolean) { + + } + + override fun getStartTime(): Calendar? { + return mStartTime + } + + override fun setStartTime(mStartTime: Calendar) { + this.mStartTime = mStartTime + } + + override fun getEndTime(): Calendar? { + return mEndTime + } + + override fun setEndTime(mEndTime: Calendar) { + this.mEndTime = mEndTime + } + + override fun getTitle(): String? { + return null + } + + override fun setTitle(mTitle: String) { + + } + + override fun getInstanceDay(): Calendar? { + return mInstanceDay + } + + override fun setInstanceDay(mInstanceDay: Calendar) { + this.mInstanceDay = mInstanceDay + this.mInstanceDay!!.set(Calendar.HOUR, 0) + this.mInstanceDay!!.set(Calendar.MINUTE, 0) + this.mInstanceDay!!.set(Calendar.SECOND, 0) + this.mInstanceDay!!.set(Calendar.MILLISECOND, 0) + this.mInstanceDay!!.set(Calendar.AM_PM, 0) + } + + override fun getDayReference(): IDayItem? { + return mDayReference + } + + override fun setDayReference(mDayReference: IDayItem) { + this.mDayReference = mDayReference + } + + override fun getWeekReference(): IWeekItem? { + return mWeekReference + } + + override fun setWeekReference(mWeekReference: IWeekItem) { + this.mWeekReference = mWeekReference + } + + override fun copy(): CalendarEvent { + return TeacherAbsenceEvent(this) + } + + override fun getColor(): Int { + return mColor + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/teacherabsence/TeacherAbsenceEventRenderer.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/teacherabsence/TeacherAbsenceEventRenderer.kt new file mode 100644 index 00000000..3789beb8 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/teacherabsence/TeacherAbsenceEventRenderer.kt @@ -0,0 +1,21 @@ +package pl.szczodrzynski.edziennik.ui.modules.agenda.teacherabsence + +import android.view.View +import android.widget.TextView +import androidx.cardview.widget.CardView +import com.github.tibolte.agendacalendarview.render.EventRenderer +import pl.szczodrzynski.edziennik.R + +class TeacherAbsenceEventRenderer : EventRenderer() { + override fun render(view: View?, event: TeacherAbsenceEvent) { + val card = view?.findViewById(R.id.teacherAbsenceCard) + val changeText = view?.findViewById(R.id.teacherAbsenceText) + val changeCount = view?.findViewById(R.id.teacherAbsenceCount) + card?.setCardBackgroundColor(event.color) + changeText?.setTextColor(event.textColor) + changeCount?.setTextColor(event.textColor) + changeCount?.text = event.teacherAbsenceCount.toString() + } + + override fun getEventLayout(): Int { return R.layout.agenda_event_teacher_absence } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/AnnouncementsAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsAdapter.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/adapters/AnnouncementsAdapter.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsAdapter.java index 26df42c9..1b0d4fda 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/AnnouncementsAdapter.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsAdapter.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.adapters; +package pl.szczodrzynski.edziennik.ui.modules.announcements; import android.content.Context; import android.graphics.PorterDuff; @@ -15,7 +15,7 @@ import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.RecyclerView; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.databinding.RowAnnouncementsItemBinding; -import pl.szczodrzynski.edziennik.datamodels.AnnouncementFull; +import pl.szczodrzynski.edziennik.data.db.modules.announcements.AnnouncementFull; public class AnnouncementsAdapter extends RecyclerView.Adapter { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterAnnouncementsFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsFragment.java similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterAnnouncementsFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsFragment.java index e6f955db..c539486a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterAnnouncementsFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments; +package pl.szczodrzynski.edziennik.ui.modules.announcements; import android.os.AsyncTask; import android.os.Bundle; @@ -7,31 +7,31 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Toast; -import com.afollestad.materialdialogs.MaterialDialog; -import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.databinding.DataBindingUtil; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; + +import com.afollestad.materialdialogs.MaterialDialog; +import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial; + import pl.szczodrzynski.edziennik.App; -import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.adapters.AnnouncementsAdapter; +import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.databinding.DialogAnnouncementBinding; -import pl.szczodrzynski.edziennik.databinding.FragmentRegisterSchoolNoticesBinding; +import pl.szczodrzynski.edziennik.databinding.FragmentAnnouncementsBinding; import pl.szczodrzynski.edziennik.utils.Themes; import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ANNOUNCEMENT; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ANNOUNCEMENT; -public class RegisterAnnouncementsFragment extends Fragment { +public class AnnouncementsFragment extends Fragment { private App app = null; private MainActivity activity = null; - private FragmentRegisterSchoolNoticesBinding b = null; + private FragmentAnnouncementsBinding b = null; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -43,7 +43,7 @@ public class RegisterAnnouncementsFragment extends Fragment { if (app.profile == null) return inflater.inflate(R.layout.fragment_loading, container, false); // activity, context and profile is valid - b = DataBindingUtil.inflate(inflater, R.layout.fragment_register_school_notices, container, false); + b = DataBindingUtil.inflate(inflater, R.layout.fragment_announcements, container, false); b.refreshLayout.setParent(activity.getSwipeRefreshLayout()); return b.getRoot(); } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/AttendancesAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendanceAdapter.java similarity index 85% rename from app/src/main/java/pl/szczodrzynski/edziennik/adapters/AttendancesAdapter.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendanceAdapter.java index 79793f93..e1e53f5a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/AttendancesAdapter.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendanceAdapter.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.adapters; +package pl.szczodrzynski.edziennik.ui.modules.attendance; import android.content.Context; import android.graphics.PorterDuff; @@ -15,21 +15,21 @@ import java.util.List; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.datamodels.AttendanceFull; +import pl.szczodrzynski.edziennik.data.db.modules.attendance.AttendanceFull; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED_EXCUSED; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT; -import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED_EXCUSED; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT; +import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED; -public class AttendancesAdapter extends RecyclerView.Adapter { +public class AttendanceAdapter extends RecyclerView.Adapter { private Context context; public List attendanceList; //getting the context and product list with constructor - public AttendancesAdapter(Context mCtx, List noticeList) { + public AttendanceAdapter(Context mCtx, List noticeList) { this.context = mCtx; this.attendanceList = noticeList; } @@ -125,4 +125,4 @@ public class AttendancesAdapter extends RecyclerView.Adapter { - activity.syncCurrentFeature(MainActivity.DRAWER_ITEM_ATTENDANCES, b.refreshLayout); + activity.syncCurrentFeature(MainActivity.DRAWER_ITEM_ATTENDANCE, b.refreshLayout); });*/ b.attendancePercentage.setProgressTextAdapter(PERCENTAGE_ADAPTER); b.attendancePercentage.setMaxProgress(100.0f); - b.attendancesSummaryTitle.setOnClickListener((v -> { - PopupMenu popupMenu = new PopupMenu(activity, b.attendancesSummaryTitle, Gravity.END); + b.attendanceSummaryTitle.setOnClickListener((v -> { + PopupMenu popupMenu = new PopupMenu(activity, b.attendanceSummaryTitle, Gravity.END); popupMenu.getMenu().add(0, 0, 0, R.string.summary_mode_year); popupMenu.getMenu().add(0, 1, 1, R.string.summary_mode_semester_1); popupMenu.getMenu().add(0, 2, 2, R.string.summary_mode_semester_2); @@ -127,11 +124,11 @@ public class RegisterAttendancesFragment extends Fragment { })); if (app.profile.getLoginStoreType() == LOGIN_TYPE_MOBIDZIENNIK) { - long attendancesLastSync = app.profile.getStudentData("attendancesLastSync", (long)0); - if (attendancesLastSync == 0) { - attendancesLastSync = app.profile.getSemesterStart(1).getInMillis(); + long attendanceLastSync = app.profile.getStudentData("attendanceLastSync", (long)0); + if (attendanceLastSync == 0) { + attendanceLastSync = app.profile.getSemesterStart(1).getInMillis(); } - Date lastSyncDate = Date.fromMillis(attendancesLastSync); + Date lastSyncDate = Date.fromMillis(attendanceLastSync); if (lastSyncDate.getValue() < Week.getWeekStart().getValue()) { CafeBar.builder(activity) .to(activity.getNavView().getCoordinator()) @@ -159,13 +156,13 @@ public class RegisterAttendancesFragment extends Fragment { } if (app.profile.getLoginStoreType() == LOGIN_TYPE_MOBIDZIENNIK && false) { - b.attendancesSummarySubject.setVisibility(View.GONE); + b.attendanceSummarySubject.setVisibility(View.GONE); } else { - b.attendancesSummarySubject.setOnClickListener((v -> { + b.attendanceSummarySubject.setOnClickListener((v -> { AsyncTask.execute(() -> { List subjectList = app.db.subjectDao().getAllNow(App.profileId); - PopupMenu popupMenu = new PopupMenu(activity, b.attendancesSummarySubject, Gravity.END); + PopupMenu popupMenu = new PopupMenu(activity, b.attendanceSummarySubject, Gravity.END); popupMenu.getMenu().add(0, -1, 0, R.string.subject_filter_disabled); int index = 0; DecimalFormat format = new DecimalFormat("0.00"); @@ -181,7 +178,7 @@ public class RegisterAttendancesFragment extends Fragment { } popupMenu.setOnMenuItemClickListener((item -> { subjectIdFilter = item.getItemId(); - b.attendancesSummarySubject.setText(item.getTitle().toString().replaceAll("\\s-\\s[0-9]{1,2}\\.[0-9]{1,2}%", "")); + b.attendanceSummarySubject.setText(item.getTitle().toString().replaceAll("\\s-\\s[0-9]{1,2}\\.[0-9]{1,2}%", "")); updateList(); return true; })); @@ -193,20 +190,20 @@ public class RegisterAttendancesFragment extends Fragment { LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); - b.attendancesView.setHasFixedSize(true); - b.attendancesView.setLayoutManager(linearLayoutManager); + b.attendanceView.setHasFixedSize(true); + b.attendanceView.setLayoutManager(linearLayoutManager); - app.db.attendanceDao().getAll(App.profileId).observe(this, attendances -> { + app.db.attendanceDao().getAll(App.profileId).observe(this, attendance -> { if (app == null || app.profile == null || activity == null || b == null || !isAdded()) return; - if (attendances == null) { - b.attendancesView.setVisibility(View.GONE); - b.attendancesNoData.setVisibility(View.VISIBLE); + if (attendance == null) { + b.attendanceView.setVisibility(View.GONE); + b.attendanceNoData.setVisibility(View.VISIBLE); return; } - attendanceList = attendances; + attendanceList = attendance; countSubjectStats(); @@ -275,29 +272,29 @@ public class RegisterAttendancesFragment extends Fragment { } } if (filteredList.size() > 0) { - AttendancesAdapter adapter; - b.attendancesView.setVisibility(View.VISIBLE); - b.attendancesNoData.setVisibility(View.GONE); - if ((adapter = (AttendancesAdapter) b.attendancesView.getAdapter()) != null) { + AttendanceAdapter adapter; + b.attendanceView.setVisibility(View.VISIBLE); + b.attendanceNoData.setVisibility(View.GONE); + if ((adapter = (AttendanceAdapter) b.attendanceView.getAdapter()) != null) { adapter.attendanceList = filteredList; adapter.notifyDataSetChanged(); } else { - adapter = new AttendancesAdapter(getContext(), filteredList); - b.attendancesView.setAdapter(adapter); + adapter = new AttendanceAdapter(getContext(), filteredList); + b.attendanceView.setAdapter(adapter); } } else { - b.attendancesView.setVisibility(View.GONE); - b.attendancesNoData.setVisibility(View.VISIBLE); + b.attendanceView.setVisibility(View.GONE); + b.attendanceNoData.setVisibility(View.VISIBLE); } // SUMMARY if (displayMode == MODE_YEAR) { - b.attendancesSummaryTitle.setText(getString(R.string.attendances_summary_title_year)); + b.attendanceSummaryTitle.setText(getString(R.string.attendance_summary_title_year)); } else { - b.attendancesSummaryTitle.setText(getString(R.string.attendances_summary_title_semester_format, displayMode)); + b.attendanceSummaryTitle.setText(getString(R.string.attendance_summary_title_semester_format, displayMode)); } b.presentCountContainer.setVisibility(presentCount == 0 ? View.GONE : View.VISIBLE); b.presentCount.setText(String.format(Locale.getDefault(), "%d", presentCount)); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/activities/CrashActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashActivity.java similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/activities/CrashActivity.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashActivity.java index de8ed06c..f159282a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/activities/CrashActivity.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashActivity.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.activities; +package pl.szczodrzynski.edziennik.ui.modules.base; /* * Copyright 2014-2017 Eduard Ereza Martínez @@ -41,7 +41,7 @@ import pl.szczodrzynski.edziennik.network.ServerRequest; import pl.szczodrzynski.edziennik.utils.Themes; import static pl.szczodrzynski.edziennik.App.APP_URL; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED; public final class CrashActivity extends AppCompatActivity { @@ -177,4 +177,4 @@ public final class CrashActivity extends AppCompatActivity { Toast.makeText(CrashActivity.this, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show(); } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/activities/CrashGtfoActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashGtfoActivity.java similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/activities/CrashGtfoActivity.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashGtfoActivity.java index b954a9a4..c5b54d03 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/activities/CrashGtfoActivity.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashGtfoActivity.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.activities; +package pl.szczodrzynski.edziennik.ui.modules.base; import android.content.Context; import android.os.Bundle; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/DebugFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/DebugFragment.java similarity index 99% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/DebugFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/DebugFragment.java index 35faaca3..0e606126 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/DebugFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/DebugFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments; +package pl.szczodrzynski.edziennik.ui.modules.base; import android.os.Bundle; import androidx.annotation.NonNull; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/LoadingFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/LoadingFragment.kt similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/LoadingFragment.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/LoadingFragment.kt index 4573f4fd..b5626fa4 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/LoadingFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/LoadingFragment.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments +package pl.szczodrzynski.edziennik.ui.modules.base import android.os.Bundle import android.view.LayoutInflater @@ -20,4 +20,4 @@ class LoadingFragment : Fragment() { b = FragmentLoadingBinding.inflate(inflater) return b.root } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/TemplateFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/TemplateFragment.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/TemplateFragment.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/TemplateFragment.kt index a7c8d526..6b055750 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/TemplateFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/TemplateFragment.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments +package pl.szczodrzynski.edziennik.ui.modules.base import android.os.Bundle import android.view.LayoutInflater diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterNoticesFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/behaviour/BehaviourFragment.java similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterNoticesFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/behaviour/BehaviourFragment.java index fc495bbd..29f46afe 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterNoticesFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/behaviour/BehaviourFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments; +package pl.szczodrzynski.edziennik.ui.modules.behaviour; import android.graphics.Color; import android.os.AsyncTask; @@ -9,10 +9,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Toast; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.PopupMenu; @@ -22,23 +18,26 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + import pl.szczodrzynski.edziennik.App; -import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.adapters.NoticesAdapter; -import pl.szczodrzynski.edziennik.databinding.FragmentRegisterNoticesBinding; -import pl.szczodrzynski.edziennik.datamodels.Notice; -import pl.szczodrzynski.edziennik.datamodels.NoticeFull; +import pl.szczodrzynski.edziennik.R; +import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice; +import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeFull; +import pl.szczodrzynski.edziennik.databinding.FragmentBehaviourBinding; import pl.szczodrzynski.edziennik.utils.Themes; import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_NOTICE; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_NOTICE; -public class RegisterNoticesFragment extends Fragment { +public class BehaviourFragment extends Fragment { private App app = null; private MainActivity activity = null; - private FragmentRegisterNoticesBinding b = null; + private FragmentBehaviourBinding b = null; private int displayMode = MODE_YEAR; private static final int MODE_YEAR = 0; @@ -57,7 +56,7 @@ public class RegisterNoticesFragment extends Fragment { if (app.profile == null) return inflater.inflate(R.layout.fragment_loading, container, false); // activity, context and profile is valid - b = DataBindingUtil.inflate(inflater, R.layout.fragment_register_notices, container, false); + b = DataBindingUtil.inflate(inflater, R.layout.fragment_behaviour, container, false); b.refreshLayout.setParent(activity.getSwipeRefreshLayout()); return b.getRoot(); } @@ -79,7 +78,7 @@ public class RegisterNoticesFragment extends Fragment { ); /*b.refreshLayout.setOnRefreshListener(() -> { - activity.syncCurrentFeature(MainActivity.DRAWER_ITEM_NOTICES, b.refreshLayout); + activity.syncCurrentFeature(MainActivity.DRAWER_ITEM_BEHAVIOUR, b.refreshLayout); });*/ b.noticesSummaryTitle.setOnClickListener((v -> { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/NoticesAdapter.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/behaviour/NoticesAdapter.kt similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/adapters/NoticesAdapter.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/behaviour/NoticesAdapter.kt index ef8f1328..c9693842 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/NoticesAdapter.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/behaviour/NoticesAdapter.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.adapters +package pl.szczodrzynski.edziennik.ui.modules.behaviour import android.content.Context import android.graphics.PorterDuff @@ -18,11 +18,11 @@ import com.mikepenz.iconics.utils.colorRes import com.mikepenz.iconics.utils.sizeDp import pl.szczodrzynski.edziennik.App import pl.szczodrzynski.edziennik.R -import pl.szczodrzynski.edziennik.datamodels.Notice -import pl.szczodrzynski.edziennik.datamodels.NoticeFull -import pl.szczodrzynski.edziennik.models.Date +import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice +import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeFull +import pl.szczodrzynski.edziennik.utils.models.Date -import pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK import pl.szczodrzynski.edziennik.utils.Utils.bs class NoticesAdapter//getting the context and product list with constructor @@ -88,4 +88,4 @@ class NoticesAdapter//getting the context and product list with constructor var noticesItemTeacherName: TextView = itemView.findViewById(R.id.noticesItemTeacherName) var noticesItemAddedDate: TextView = itemView.findViewById(R.id.noticesItemAddedDate) } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/activities/FeedbackActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/feedback/FeedbackActivity.java similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/activities/FeedbackActivity.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/feedback/FeedbackActivity.java index 97cdba68..bb62522e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/activities/FeedbackActivity.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/feedback/FeedbackActivity.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.activities; +package pl.szczodrzynski.edziennik.ui.modules.feedback; import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; @@ -6,8 +6,8 @@ import androidx.databinding.DataBindingUtil; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.databinding.ActivityFeedbackBinding; -import pl.szczodrzynski.edziennik.datamodels.FeedbackMessage; -import pl.szczodrzynski.edziennik.datamodels.FeedbackMessageWithCount; +import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessage; +import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessageWithCount; import pl.szczodrzynski.edziennik.network.ServerRequest; import pl.szczodrzynski.edziennik.utils.Anim; import pl.szczodrzynski.edziennik.utils.Themes; @@ -352,7 +352,7 @@ public class FeedbackActivity extends AppCompatActivity { @Override protected void onResume() { super.onResume(); - registerReceiver(receiver, new IntentFilter("pl.szczodrzynski.edziennik.activities.FeedbackActivity")); + registerReceiver(receiver, new IntentFilter("pl.szczodrzynski.edziennik.ui.modules.base.FeedbackActivity")); } @Override diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/FeedbackFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/feedback/FeedbackFragment.kt similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/FeedbackFragment.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/feedback/FeedbackFragment.kt index a0b774fa..fd1d04bc 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/FeedbackFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/feedback/FeedbackFragment.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments +package pl.szczodrzynski.edziennik.ui.modules.feedback import android.content.BroadcastReceiver import android.content.Context @@ -25,7 +25,7 @@ import pl.szczodrzynski.edziennik.App.APP_URL import pl.szczodrzynski.edziennik.R import pl.szczodrzynski.edziennik.MainActivity import pl.szczodrzynski.edziennik.databinding.FragmentFeedbackBinding -import pl.szczodrzynski.edziennik.datamodels.FeedbackMessage +import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessage import pl.szczodrzynski.edziennik.network.ServerRequest import pl.szczodrzynski.edziennik.utils.Anim import pl.szczodrzynski.edziennik.utils.Themes @@ -323,7 +323,7 @@ class FeedbackFragment : Fragment() { override fun onResume() { super.onResume() if (receiver != null) - activity.registerReceiver(receiver, IntentFilter("pl.szczodrzynski.edziennik.activities.FeedbackActivity")) + activity.registerReceiver(receiver, IntentFilter("pl.szczodrzynski.edziennik.ui.modules.base.FeedbackActivity")) } override fun onPause() { @@ -331,4 +331,4 @@ class FeedbackFragment : Fragment() { if (receiver != null) activity.unregisterReceiver(receiver) } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/HelpFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/feedback/HelpFragment.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/HelpFragment.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/feedback/HelpFragment.kt index 4553a7b0..e7dfb5cc 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/HelpFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/feedback/HelpFragment.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments +package pl.szczodrzynski.edziennik.ui.modules.feedback import android.os.Bundle import androidx.fragment.app.Fragment diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterGradesFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesFragment.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterGradesFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesFragment.java index 693675d4..1a6b99dc 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterGradesFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments; +package pl.szczodrzynski.edziennik.ui.modules.grades; import android.os.AsyncTask; import android.os.Bundle; @@ -21,33 +21,32 @@ import java.util.ArrayList; import java.util.List; import pl.szczodrzynski.edziennik.App; -import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.adapters.GradesSubjectAdapter; -import pl.szczodrzynski.edziennik.databinding.FragmentRegisterGradesBinding; -import pl.szczodrzynski.edziennik.datamodels.Grade; -import pl.szczodrzynski.edziennik.datamodels.GradeFull; -import pl.szczodrzynski.edziennik.datamodels.Subject; -import pl.szczodrzynski.edziennik.models.ItemGradesSubjectModel; +import pl.szczodrzynski.edziennik.R; +import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade; +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull; +import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject; +import pl.szczodrzynski.edziennik.databinding.FragmentGradesBinding; import pl.szczodrzynski.edziennik.utils.Themes; +import pl.szczodrzynski.edziennik.utils.models.ItemGradesSubjectModel; import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem; import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetSeparatorItem; -import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_GRADE; -import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_AVG_2_AVG; -import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_AVG_2_SEM; -import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_AVG; -import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_SEM; -import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_ALL_GRADES; -import static pl.szczodrzynski.edziennik.models.AppConfig.ORDER_BY_DATE_ASC; -import static pl.szczodrzynski.edziennik.models.AppConfig.ORDER_BY_DATE_DESC; -import static pl.szczodrzynski.edziennik.models.AppConfig.ORDER_BY_SUBJECT_ASC; +import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_GRADE; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_AVG_2_AVG; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_AVG_2_SEM; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_SEM_2_AVG; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_SEM_2_SEM; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_ALL_GRADES; +import static pl.szczodrzynski.edziennik.utils.models.AppConfig.ORDER_BY_DATE_ASC; +import static pl.szczodrzynski.edziennik.utils.models.AppConfig.ORDER_BY_DATE_DESC; +import static pl.szczodrzynski.edziennik.utils.models.AppConfig.ORDER_BY_SUBJECT_ASC; -public class RegisterGradesFragment extends Fragment { +public class GradesFragment extends Fragment { private App app = null; private MainActivity activity = null; - private FragmentRegisterGradesBinding b = null; + private FragmentGradesBinding b = null; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -59,7 +58,7 @@ public class RegisterGradesFragment extends Fragment { if (app.profile == null) return inflater.inflate(R.layout.fragment_loading, container, false); // activity, context and profile is valid - b = DataBindingUtil.inflate(inflater, R.layout.fragment_register_grades, container, false); + b = DataBindingUtil.inflate(inflater, R.layout.fragment_grades, container, false); b.refreshLayout.setParent(activity.getSwipeRefreshLayout()); b.refreshLayout.setNestedScrollingEnabled(true); return b.getRoot(); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/GradesListAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesListAdapter.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/adapters/GradesListAdapter.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesListAdapter.java index 722aa823..0c1c1326 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/GradesListAdapter.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesListAdapter.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.adapters; +package pl.szczodrzynski.edziennik.ui.modules.grades; import android.content.Context; import android.graphics.PorterDuff; @@ -18,13 +18,13 @@ import java.util.List; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.datamodels.Grade; -import pl.szczodrzynski.edziennik.datamodels.GradeFull; -import pl.szczodrzynski.edziennik.dialogs.GradeDetailsDialog; -import pl.szczodrzynski.edziennik.models.Date; +import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade; +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull; +import pl.szczodrzynski.edziennik.ui.dialogs.grade.GradeDetailsDialog; +import pl.szczodrzynski.edziennik.utils.models.Date; import pl.szczodrzynski.edziennik.utils.Colors; -import static pl.szczodrzynski.edziennik.datamodels.Profile.COLOR_MODE_DEFAULT; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.COLOR_MODE_DEFAULT; public class GradesListAdapter extends RecyclerView.Adapter { private Context mContext; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/GradesSubjectAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesSubjectAdapter.java similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/adapters/GradesSubjectAdapter.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesSubjectAdapter.java index 0038612c..25705cb3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/GradesSubjectAdapter.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesSubjectAdapter.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.adapters; +package pl.szczodrzynski.edziennik.ui.modules.grades; import android.content.Context; import android.graphics.PorterDuff; @@ -30,10 +30,10 @@ import java.util.List; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.datamodels.AppDb; -import pl.szczodrzynski.edziennik.datamodels.GradeFull; -import pl.szczodrzynski.edziennik.datamodels.Subject; -import pl.szczodrzynski.edziennik.models.ItemGradesSubjectModel; +import pl.szczodrzynski.edziennik.data.db.AppDb; +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull; +import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject; +import pl.szczodrzynski.edziennik.utils.models.ItemGradesSubjectModel; import pl.szczodrzynski.edziennik.utils.Anim; import pl.szczodrzynski.edziennik.utils.Colors; import pl.szczodrzynski.edziennik.utils.Utils; @@ -41,10 +41,10 @@ import pl.szczodrzynski.edziennik.utils.Utils; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static pl.szczodrzynski.edziennik.MainActivity.TARGET_GRADES_EDITOR; -import static pl.szczodrzynski.edziennik.datamodels.Profile.COLOR_MODE_DEFAULT; -import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_AVG_2_SEM; -import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_AVG; -import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_SEM; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.COLOR_MODE_DEFAULT; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_AVG_2_SEM; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_SEM_2_AVG; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_SEM_2_SEM; public class GradesSubjectAdapter extends ArrayAdapter implements View.OnClickListener { private static final String TAG = "GradesSubjectAdapter"; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/GradesEditorAdapter.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorAdapter.kt similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/adapters/GradesEditorAdapter.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorAdapter.kt index 62701eff..c7553bb7 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/GradesEditorAdapter.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorAdapter.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.adapters +package pl.szczodrzynski.edziennik.ui.modules.grades.editor import android.content.Context import android.graphics.PorterDuff @@ -15,8 +15,7 @@ import com.daimajia.swipe.SwipeLayout import com.mikepenz.iconics.view.IconicsImageView import pl.szczodrzynski.edziennik.App import pl.szczodrzynski.edziennik.R -import pl.szczodrzynski.edziennik.fragments.GradesEditorFragment -import pl.szczodrzynski.edziennik.fragments.GradesEditorFragment.Companion.modifyGradeChooser +import pl.szczodrzynski.edziennik.ui.modules.grades.editor.GradesEditorFragment.Companion.modifyGradeChooser import pl.szczodrzynski.edziennik.utils.Colors.gradeNameToColor import java.text.DecimalFormat diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/GradesEditorFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorFragment.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/GradesEditorFragment.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorFragment.kt index 4d19f06c..7d8641ea 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/GradesEditorFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorFragment.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments +package pl.szczodrzynski.edziennik.ui.modules.grades.editor import android.graphics.PorterDuff import android.graphics.PorterDuffColorFilter @@ -13,13 +13,12 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.afollestad.materialdialogs.MaterialDialog import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.adapters.GradesEditorAdapter import pl.szczodrzynski.edziennik.databinding.FragmentGradesEditorBinding -import pl.szczodrzynski.edziennik.datamodels.Grade -import pl.szczodrzynski.edziennik.datamodels.Profile.Companion.YEAR_1_AVG_2_AVG -import pl.szczodrzynski.edziennik.datamodels.Profile.Companion.YEAR_1_AVG_2_SEM -import pl.szczodrzynski.edziennik.datamodels.Profile.Companion.YEAR_1_SEM_2_AVG -import pl.szczodrzynski.edziennik.datamodels.Profile.Companion.YEAR_ALL_GRADES +import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.Companion.YEAR_1_AVG_2_AVG +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.Companion.YEAR_1_AVG_2_SEM +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.Companion.YEAR_1_SEM_2_AVG +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.Companion.YEAR_ALL_GRADES import pl.szczodrzynski.edziennik.utils.Colors import pl.szczodrzynski.edziennik.utils.Themes import java.text.DecimalFormat diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/activities/CounterActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/CounterActivity.java similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/activities/CounterActivity.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/CounterActivity.java index 0e11eff0..14a6b71c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/activities/CounterActivity.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/CounterActivity.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.activities; +package pl.szczodrzynski.edziennik.ui.modules.home; import androidx.databinding.DataBindingUtil; import android.os.AsyncTask; @@ -15,12 +15,11 @@ import java.util.TimerTask; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.databinding.ActivityCounterBinding; -import pl.szczodrzynski.edziennik.datamodels.LessonFull; -import pl.szczodrzynski.edziennik.fragments.HomeFragment; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; -import static pl.szczodrzynski.edziennik.fragments.HomeFragment.updateInterval; +import static pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment.updateInterval; public class CounterActivity extends AppCompatActivity { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/HomeFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeFragment.java similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/HomeFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeFragment.java index 47c9e837..ce8f524f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/HomeFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments; +package pl.szczodrzynski.edziennik.ui.modules.home; import android.app.Activity; import android.content.Context; @@ -29,7 +29,6 @@ import androidx.databinding.DataBindingUtil; import androidx.fragment.app.Fragment; import com.afollestad.materialdialogs.MaterialDialog; -import com.google.gson.JsonObject; import com.mikepenz.iconics.IconicsColor; import com.mikepenz.iconics.IconicsDrawable; import com.mikepenz.iconics.IconicsSize; @@ -42,22 +41,17 @@ import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.BuildConfig; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.api.AppError; -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; -import pl.szczodrzynski.edziennik.api.v2.librus.Librus; import pl.szczodrzynski.edziennik.databinding.CardLuckyNumberBinding; import pl.szczodrzynski.edziennik.databinding.CardUpdateBinding; import pl.szczodrzynski.edziennik.databinding.FragmentHomeBinding; -import pl.szczodrzynski.edziennik.datamodels.GradeFull; -import pl.szczodrzynski.edziennik.datamodels.LessonFull; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; -import pl.szczodrzynski.edziennik.datamodels.Subject; -import pl.szczodrzynski.edziennik.messages.MessagesComposeActivity; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.ItemGradesSubjectModel; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject; +import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeActivity; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.ItemGradesSubjectModel; +import pl.szczodrzynski.edziennik.utils.models.Time; import pl.szczodrzynski.edziennik.receivers.BootReceiver; import pl.szczodrzynski.edziennik.utils.Colors; import pl.szczodrzynski.edziennik.utils.Themes; @@ -66,14 +60,13 @@ import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem; import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetSeparatorItem; import static pl.szczodrzynski.edziennik.App.UPDATES_ON_PLAY_STORE; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL; -import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_LIBRUS; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL; +import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; public class HomeFragment extends Fragment { private static final String TAG = "HomeFragment"; @@ -115,40 +108,6 @@ public class HomeFragment extends Fragment { return true; });*/ - b.testButton.setOnClickListener((v -> { - LoginStore loginStore = new LoginStore(1, LOGIN_TYPE_LIBRUS, new JsonObject()); - loginStore.putLoginData("email", "example@example.com"); - loginStore.putLoginData("password", "zaq1@WSX"); - Profile profile = new Profile(1, "test", "testsubname", 1); - profile.putStudentData("accountLogin", "1234567"); - new Librus(app, profile, loginStore).login(new SyncCallback() { - @Override - public void onLoginFirst(List profileList, LoginStore loginStore) { - - } - - @Override - public void onSuccess(Context activityContext, ProfileFull profileFull) { - - } - - @Override - public void onProgress(int progressStep) { - - } - - @Override - public void onActionStarted(int stringResId) { - - } - - @Override - public void onError(Context activityContext, @NonNull AppError error) { - - } - }); - })); - b.composeButton.setVisibility(BuildConfig.DEBUG ? View.VISIBLE : View.GONE); b.composeButton.setOnClickListener((v -> { startActivity(new Intent(activity, MessagesComposeActivity.class)); @@ -327,15 +286,15 @@ public class HomeFragment extends Fragment { if (app.appConfig.countInSeconds) { return 1000-(System.currentTimeMillis() % 1000); } - if (diff.minute > 5) { + if (diff.minute > 10) { //Log.d(TAG, "60 secs"); return 60000-(System.currentTimeMillis() % 60000); } - else if (diff.minute >= 1) { + else if (diff.minute >= 1 && false) { //Log.d(TAG, "3 secs"); return 3000-(System.currentTimeMillis() % 3000); } - else if (diff.second >= 40) { + else if (diff.second >= 40 && false) { //Log.d(TAG, "2 secs"); return 2000-(System.currentTimeMillis() % 2000); } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/HomeTimetableCard.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeTimetableCard.java similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/HomeTimetableCard.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeTimetableCard.java index 937d3fed..377efeb5 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/HomeTimetableCard.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeTimetableCard.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments; +package pl.szczodrzynski.edziennik.ui.modules.home; import android.content.Intent; import android.os.AsyncTask; @@ -23,17 +23,16 @@ import java.util.TimerTask; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.activities.CounterActivity; import pl.szczodrzynski.edziennik.databinding.CardTimetableBinding; -import pl.szczodrzynski.edziennik.datamodels.EventFull; -import pl.szczodrzynski.edziennik.datamodels.LessonFull; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; -import pl.szczodrzynski.edziennik.models.Week; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Week; -import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED; -import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE; -import static pl.szczodrzynski.edziennik.fragments.HomeFragment.updateInterval; +import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED; +import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE; +import static pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment.updateInterval; import static pl.szczodrzynski.edziennik.utils.Utils.bs; public class HomeTimetableCard { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/HomeworksAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkAdapter.java similarity index 51% rename from app/src/main/java/pl/szczodrzynski/edziennik/adapters/HomeworksAdapter.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkAdapter.java index c66baf98..38644e37 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/HomeworksAdapter.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkAdapter.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.adapters; +package pl.szczodrzynski.edziennik.ui.modules.homework; import android.content.Context; import android.graphics.PorterDuff; @@ -17,19 +17,19 @@ import java.util.List; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.datamodels.EventFull; -import pl.szczodrzynski.edziennik.dialogs.EventManualDialog; -import pl.szczodrzynski.edziennik.fragments.HomeFragment; -import pl.szczodrzynski.edziennik.models.Date; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull; +import pl.szczodrzynski.edziennik.ui.dialogs.event.EventManualDialog; +import pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment; +import pl.szczodrzynski.edziennik.utils.models.Date; import static pl.szczodrzynski.edziennik.utils.Utils.bs; -public class HomeworksAdapter extends RecyclerView.Adapter { +public class HomeworkAdapter extends RecyclerView.Adapter { private Context context; private List homeworkList; //getting the context and product list with constructor - public HomeworksAdapter(Context mCtx, List homeworkList) { + public HomeworkAdapter(Context mCtx, List homeworkList) { this.context = mCtx; this.homeworkList = homeworkList; } @@ -39,7 +39,7 @@ public class HomeworksAdapter extends RecyclerView.Adapter { app.db.metadataDao().setSeen(App.profileId, homework, true); }); } else { - holder.homeworksItemTopic.setBackground(null); + holder.homeworkItemTopic.setBackground(null); } - holder.homeworksItemEdit.setVisibility((homework.addedManually ? View.VISIBLE : View.GONE)); - holder.homeworksItemEdit.setOnClickListener(v -> { + holder.homeworkItemEdit.setVisibility((homework.addedManually ? View.VISIBLE : View.GONE)); + holder.homeworkItemEdit.setOnClickListener(v -> { new EventManualDialog(context).show(app, homework, null, null, EventManualDialog.DIALOG_HOMEWORK); }); if (homework.sharedBy == null) { - holder.homeworksItemSharedBy.setVisibility(View.GONE); + holder.homeworkItemSharedBy.setVisibility(View.GONE); } else if (homework.sharedByName != null) { - holder.homeworksItemSharedBy.setText(app.getString(R.string.event_shared_by_format, (homework.sharedBy.equals("self") ? app.getString(R.string.event_shared_by_self) : homework.sharedByName))); + holder.homeworkItemSharedBy.setText(app.getString(R.string.event_shared_by_format, (homework.sharedBy.equals("self") ? app.getString(R.string.event_shared_by_self) : homework.sharedByName))); } } @@ -110,23 +110,23 @@ public class HomeworksAdapter extends RecyclerView.Adapter + adapter.addFragment(HomeworkListFragment().also { fragment -> + fragment.arguments = Bundle().also { args -> + args.putInt("homeworkDate", HomeworkDate.CURRENT) + } + }, getString(R.string.homework_tab_current)) + + adapter.addFragment(HomeworkListFragment().also { fragment -> + fragment.arguments = Bundle().also { args -> + args.putInt("homeworkDate", HomeworkDate.PAST) + } + }, getString(R.string.homework_tab_past)) + } + + b.viewPager.currentItem = pageSelection + b.viewPager.clearOnPageChangeListeners() + b.viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) {} + override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {} + override fun onPageSelected(position: Int) { + pageSelection = position + } + }) + + b.tabLayout.setupWithViewPager(b.viewPager) + + activity.navView.bottomBar.fabEnable = true + activity.navView.bottomBar.fabExtendedText = getString(R.string.add) + activity.navView.bottomBar.fabIcon = CommunityMaterial.Icon2.cmd_plus + activity.navView.setFabOnClickListener(View.OnClickListener { + EventManualDialog(activity).show(app, null, null, null, EventManualDialog.DIALOG_HOMEWORK) + }) + + activity.gainAttention() + activity.gainAttentionFAB() + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkListFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkListFragment.kt new file mode 100644 index 00000000..e0f2daba --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkListFragment.kt @@ -0,0 +1,77 @@ +package pl.szczodrzynski.edziennik.ui.modules.homework + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import pl.szczodrzynski.edziennik.App +import pl.szczodrzynski.edziennik.MainActivity +import pl.szczodrzynski.edziennik.R +import pl.szczodrzynski.edziennik.databinding.HomeworkListBinding +import pl.szczodrzynski.edziennik.data.db.modules.events.Event +import pl.szczodrzynski.edziennik.getInt +import pl.szczodrzynski.edziennik.utils.models.Date +import pl.szczodrzynski.edziennik.utils.Themes + +class HomeworkListFragment : Fragment() { + + private lateinit var app: App + private lateinit var activity: MainActivity + private lateinit var b: HomeworkListBinding + + private var homeworkDate = HomeworkDate.CURRENT + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + activity = (getActivity() as MainActivity?) ?: return null + if (context == null) + return null + app = activity.application as App + context!!.theme.applyStyle(Themes.appTheme, true) + if (app.profile == null) + return inflater.inflate(R.layout.fragment_loading, container, false) + // activity, context and profile is valid + b = HomeworkListBinding.inflate(inflater) + return b.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + // TODO check if app, activity, b can be null + if (app.profile == null || !isAdded) + return + + if (arguments != null) { + homeworkDate = arguments.getInt("homeworkDate", HomeworkDate.CURRENT) + } + + val layoutManager = LinearLayoutManager(context) + layoutManager.reverseLayout = true + layoutManager.stackFromEnd = true + + b.homeworkView.setHasFixedSize(true) + b.homeworkView.layoutManager = layoutManager + + val filter = when(homeworkDate) { + HomeworkDate.CURRENT -> "eventDate > '" + Date.getToday().stringY_m_d + "'" + else -> "eventDate <= '" + Date.getToday().stringY_m_d + "'" + } + + app.db.eventDao() + .getAllByType(App.profileId, Event.TYPE_HOMEWORK, filter) + .observe(this, Observer { homeworkList -> + if (app.profile == null || !isAdded) return@Observer + + if (homeworkList != null && homeworkList.size > 0) { + val adapter = HomeworkAdapter(context, homeworkList) + b.homeworkView.adapter = adapter + b.homeworkView.visibility = View.VISIBLE + b.homeworkNoData.visibility = View.GONE + } else { + b.homeworkView.visibility = View.GONE + b.homeworkNoData.visibility = View.VISIBLE + } + }) + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/intro/ChangelogIntroActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/intro/ChangelogIntroActivity.java similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/intro/ChangelogIntroActivity.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/intro/ChangelogIntroActivity.java index d8d9441b..eac89b71 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/intro/ChangelogIntroActivity.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/intro/ChangelogIntroActivity.java @@ -1,10 +1,9 @@ -package pl.szczodrzynski.edziennik.intro; +package pl.szczodrzynski.edziennik.ui.modules.intro; import android.os.Build; import android.os.Bundle; import com.heinrichreimersoftware.materialintro.app.IntroActivity; -import com.heinrichreimersoftware.materialintro.slide.SimpleSlide; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.BuildConfig; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/intro/FragmentSlideMod.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/intro/FragmentSlideMod.java similarity index 99% rename from app/src/main/java/pl/szczodrzynski/edziennik/intro/FragmentSlideMod.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/intro/FragmentSlideMod.java index e2a0c9ca..1d3cfb92 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/intro/FragmentSlideMod.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/intro/FragmentSlideMod.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package pl.szczodrzynski.edziennik.intro; +package pl.szczodrzynski.edziennik.ui.modules.intro; import android.content.Context; import android.os.Build; @@ -284,4 +284,4 @@ public class FragmentSlideMod implements Slide, RestorableSlide, ButtonCtaSlide return localInflater.inflate(getArguments().getInt(ARGUMENT_LAYOUT_RES), container, false); } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginActivity.java similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginActivity.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginActivity.java index c6d49280..5d5b210d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginActivity.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginActivity.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import androidx.databinding.DataBindingUtil; import android.os.Bundle; @@ -14,7 +14,7 @@ import androidx.navigation.NavOptions; import androidx.navigation.Navigation; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.api.AppError; +import pl.szczodrzynski.edziennik.data.api.AppError; import pl.szczodrzynski.edziennik.databinding.ActivityLoginBinding; public class LoginActivity extends AppCompatActivity { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginChooserFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginChooserFragment.java similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginChooserFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginChooserFragment.java index 0e36f157..a2547b3a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginChooserFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginChooserFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import android.content.Intent; import android.os.Bundle; @@ -13,7 +13,7 @@ import androidx.fragment.app.Fragment; import androidx.navigation.NavController; import androidx.navigation.Navigation; import pl.szczodrzynski.edziennik.App; -import pl.szczodrzynski.edziennik.activities.FeedbackActivity; +import pl.szczodrzynski.edziennik.ui.modules.feedback.FeedbackActivity; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.databinding.FragmentLoginChooserBinding; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginFinishFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginFinishFragment.java similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginFinishFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginFinishFragment.java index 4adfd2b6..a5c9cd47 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginFinishFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginFinishFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import android.app.Activity; import android.content.Intent; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginIuczniowieFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginIuczniowieFragment.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginIuczniowieFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginIuczniowieFragment.java index feb1dc0a..e1eb8091 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginIuczniowieFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginIuczniowieFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import android.os.Bundle; @@ -18,12 +18,12 @@ import androidx.navigation.NavController; import androidx.navigation.Navigation; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.api.AppError; +import pl.szczodrzynski.edziennik.data.api.AppError; import pl.szczodrzynski.edziennik.databinding.FragmentLoginIuczniowieBinding; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_SCHOOL_NAME; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_IUCZNIOWIE; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_SCHOOL_NAME; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_IUCZNIOWIE; public class LoginIuczniowieFragment extends Fragment { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginIuczniowieHelpFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginIuczniowieHelpFragment.java similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginIuczniowieHelpFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginIuczniowieHelpFragment.java index 5de85bd2..7b5c9d96 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginIuczniowieHelpFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginIuczniowieHelpFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import androidx.databinding.DataBindingUtil; import android.os.Bundle; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginLibrusFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginLibrusFragment.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginLibrusFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginLibrusFragment.java index cde63c64..fb0612fd 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginLibrusFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginLibrusFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import android.os.Bundle; @@ -18,12 +18,12 @@ import androidx.navigation.NavController; import androidx.navigation.Navigation; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.api.AppError; +import pl.szczodrzynski.edziennik.data.api.AppError; import pl.szczodrzynski.edziennik.databinding.FragmentLoginLibrusBinding; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_LIBRUS_NOT_ACTIVATED; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_LIBRUS; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_LIBRUS_NOT_ACTIVATED; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_LIBRUS; public class LoginLibrusFragment extends Fragment { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginLibrusHelpFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginLibrusHelpFragment.java similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginLibrusHelpFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginLibrusHelpFragment.java index 5dcca8ab..6984498a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginLibrusHelpFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginLibrusHelpFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import androidx.databinding.DataBindingUtil; import android.os.Bundle; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginMigrationFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationFragment.java similarity index 88% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginMigrationFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationFragment.java index 11000498..cd881665 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginMigrationFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import android.app.Activity; import android.content.Context; @@ -18,22 +18,22 @@ import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.BuildConfig; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.databinding.FragmentLoginMigrationBinding; -import pl.szczodrzynski.edziennik.datamodels.Attendance; -import pl.szczodrzynski.edziennik.datamodels.Event; -import pl.szczodrzynski.edziennik.datamodels.EventType; -import pl.szczodrzynski.edziennik.datamodels.Grade; -import pl.szczodrzynski.edziennik.datamodels.Lesson; -import pl.szczodrzynski.edziennik.datamodels.LessonChange; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.LuckyNumber; -import pl.szczodrzynski.edziennik.datamodels.Metadata; -import pl.szczodrzynski.edziennik.datamodels.Notice; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.Subject; -import pl.szczodrzynski.edziennik.datamodels.Teacher; -import pl.szczodrzynski.edziennik.datamodels.Team; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance; +import pl.szczodrzynski.edziennik.data.db.modules.events.Event; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventType; +import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber; +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata; +import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher; +import pl.szczodrzynski.edziennik.data.db.modules.teams.Team; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; import android.util.LongSparseArray; import android.view.LayoutInflater; @@ -52,36 +52,36 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_CLASS_EVENT; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_DEFAULT; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_ESSAY; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_EXAM; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_EXCURSION; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_HOMEWORK; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_INFORMATION; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_PROJECT; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_PT_MEETING; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_READING; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_SHORT_QUIZ; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_CLASS_EVENT; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_DEFAULT; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_ESSAY; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXAM; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXCURSION; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_INFORMATION; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_PROJECT; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_PT_MEETING; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_READING; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_SHORT_QUIZ; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_DEMO; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_IUCZNIOWIE; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_LIBRUS; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_DISABLED; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_UNSPECIFIED; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_CLASS_EVENT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_DEFAULT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_ESSAY; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_EXAM; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_EXCURSION; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_HOMEWORK; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_INFORMATION; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_PROJECT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_PT_MEETING; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_READING; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_SHORT_QUIZ; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_CLASS_EVENT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_DEFAULT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_ESSAY; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXAM; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXCURSION; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_INFORMATION; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_PROJECT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_PT_MEETING; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_READING; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_SHORT_QUIZ; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_DEMO; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_IUCZNIOWIE; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_LIBRUS; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_DISABLED; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_UNSPECIFIED; public class LoginMigrationFragment extends Fragment { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginMigrationSyncFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationSyncFragment.java similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginMigrationSyncFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationSyncFragment.java index ebb8edad..8adeebf2 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginMigrationSyncFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationSyncFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import android.app.Activity; import android.content.Context; @@ -20,12 +20,12 @@ import androidx.navigation.NavController; import androidx.navigation.Navigation; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.api.AppError; -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; +import pl.szczodrzynski.edziennik.data.api.AppError; +import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback; import pl.szczodrzynski.edziennik.databinding.FragmentLoginMigrationSyncBinding; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; import pl.szczodrzynski.edziennik.sync.SyncJob; import pl.szczodrzynski.edziennik.sync.SyncService; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginMobidziennikFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMobidziennikFragment.java similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginMobidziennikFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMobidziennikFragment.java index 549bad84..0c4c5f33 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginMobidziennikFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMobidziennikFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import androidx.databinding.DataBindingUtil; import android.os.Bundle; @@ -16,14 +16,14 @@ import androidx.navigation.NavController; import androidx.navigation.Navigation; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.api.AppError; +import pl.szczodrzynski.edziennik.data.api.AppError; import pl.szczodrzynski.edziennik.databinding.FragmentLoginMobidziennikBinding; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_ARCHIVED; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_SERVER_ADDRESS; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_OLD_PASSWORD; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_ARCHIVED; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_SERVER_ADDRESS; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OLD_PASSWORD; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; public class LoginMobidziennikFragment extends Fragment { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginMobidziennikHelpFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMobidziennikHelpFragment.java similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginMobidziennikHelpFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMobidziennikHelpFragment.java index f6ba19ab..511f6682 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginMobidziennikHelpFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMobidziennikHelpFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import androidx.databinding.DataBindingUtil; import android.os.Bundle; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginProfileObject.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProfileObject.java similarity index 78% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginProfileObject.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProfileObject.java index 8bed9821..9ee42950 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginProfileObject.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProfileObject.java @@ -1,12 +1,12 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import java.util.ArrayList; import java.util.List; import androidx.annotation.NonNull; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; public class LoginProfileObject { LoginStore loginStore = null; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginProgressFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProgressFragment.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginProgressFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProgressFragment.java index 572cb78d..93f00fa3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginProgressFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProgressFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import androidx.databinding.DataBindingUtil; @@ -20,15 +20,15 @@ import androidx.navigation.NavController; import androidx.navigation.Navigation; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.api.Edziennik; -import pl.szczodrzynski.edziennik.api.AppError; -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; +import pl.szczodrzynski.edziennik.data.api.Edziennik; +import pl.szczodrzynski.edziennik.data.api.AppError; +import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback; import pl.szczodrzynski.edziennik.databinding.FragmentLoginProgressBinding; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER; public class LoginProgressFragment extends Fragment { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginSummaryFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSummaryFragment.java similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginSummaryFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSummaryFragment.java index d2e48969..43efd3fe 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginSummaryFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSummaryFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import androidx.databinding.DataBindingUtil; @@ -26,7 +26,7 @@ import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.databinding.FragmentLoginSummaryBinding; import pl.szczodrzynski.edziennik.databinding.RowLoginProfileListItemBinding; -import pl.szczodrzynski.edziennik.datamodels.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; public class LoginSummaryFragment extends Fragment { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginSyncErrorFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSyncErrorFragment.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginSyncErrorFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSyncErrorFragment.java index 3dc7d1cf..951c53e8 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginSyncErrorFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSyncErrorFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import android.os.Bundle; @@ -11,7 +11,6 @@ import androidx.navigation.Navigation; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.databinding.FragmentLoginSyncErrorBinding; -import pl.szczodrzynski.edziennik.login.LoginActivity; import android.view.LayoutInflater; import android.view.View; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginSyncFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSyncFragment.java similarity index 76% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginSyncFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSyncFragment.java index ba0d70d0..3b8c436e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginSyncFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSyncFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import android.content.Context; @@ -22,40 +22,40 @@ import androidx.navigation.NavController; import androidx.navigation.Navigation; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.api.AppError; -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; +import pl.szczodrzynski.edziennik.data.api.AppError; +import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback; import pl.szczodrzynski.edziennik.databinding.FragmentLoginSyncBinding; -import pl.szczodrzynski.edziennik.datamodels.EventType; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventType; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; import pl.szczodrzynski.edziennik.sync.SyncJob; import pl.szczodrzynski.edziennik.sync.SyncService; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_CLASS_EVENT; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_DEFAULT; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_EXAM; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_EXCURSION; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_HOMEWORK; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_INFORMATION; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_PROJECT; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_PT_MEETING; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_READING; -import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_SHORT_QUIZ; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_CLASS_EVENT; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_DEFAULT; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_ESSAY; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXAM; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXCURSION; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_INFORMATION; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_PROJECT; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_PT_MEETING; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_READING; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_SHORT_QUIZ; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_DISABLED; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_UNSPECIFIED; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_CLASS_EVENT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_DEFAULT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_EXAM; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_EXCURSION; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_HOMEWORK; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_INFORMATION; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_PROJECT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_PT_MEETING; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_READING; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_SHORT_QUIZ; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_CLASS_EVENT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_DEFAULT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_ESSAY; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXAM; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXCURSION; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_INFORMATION; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_PROJECT; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_PT_MEETING; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_READING; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_SHORT_QUIZ; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_DISABLED; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_UNSPECIFIED; import static pl.szczodrzynski.edziennik.utils.Utils.d; public class LoginSyncFragment extends Fragment { @@ -224,4 +224,4 @@ public class LoginSyncFragment extends Fragment { begin(); } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginTemplateFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginTemplateFragment.java similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginTemplateFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginTemplateFragment.java index 8a2ed9df..41ff3beb 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginTemplateFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginTemplateFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import androidx.databinding.DataBindingUtil; import android.os.Bundle; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginVulcanFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginVulcanFragment.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginVulcanFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginVulcanFragment.java index 297a0ca8..7b65eead 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginVulcanFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginVulcanFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import android.content.Intent; import android.graphics.Color; @@ -36,16 +36,16 @@ import javax.crypto.ShortBufferException; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.activities.QrScannerActivity; -import pl.szczodrzynski.edziennik.api.AppError; +import pl.szczodrzynski.edziennik.ui.modules.webpush.QrScannerActivity; +import pl.szczodrzynski.edziennik.data.api.AppError; import pl.szczodrzynski.edziennik.databinding.FragmentLoginVulcanBinding; import pl.szczodrzynski.edziennik.utils.Utils; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_EXPIRED_TOKEN; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_PIN; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_SYMBOL; -import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_TOKEN; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_EXPIRED_TOKEN; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_PIN; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_SYMBOL; +import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_TOKEN; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN; public class LoginVulcanFragment extends Fragment { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginVulcanHelpFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginVulcanHelpFragment.java similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/login/LoginVulcanHelpFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginVulcanHelpFragment.java index 9a1875d0..0aa899ae 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginVulcanHelpFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginVulcanHelpFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.login; +package pl.szczodrzynski.edziennik.ui.modules.login; import androidx.databinding.DataBindingUtil; import android.os.Bundle; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesAdapter.java similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesAdapter.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesAdapter.java index 33d3e5b7..35b75308 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesAdapter.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesAdapter.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.messages; +package pl.szczodrzynski.edziennik.ui.modules.messages; import android.graphics.Typeface; import android.text.Html; @@ -17,12 +17,11 @@ import androidx.recyclerview.widget.RecyclerView; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.databinding.MessagesItemBinding; -import pl.szczodrzynski.edziennik.datamodels.MessageFull; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.utils.Utils; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull; +import pl.szczodrzynski.edziennik.utils.models.Date; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DRAFT; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DRAFT; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT; public class MessagesAdapter extends RecyclerView.Adapter { private App app; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesComposeActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeActivity.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesComposeActivity.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeActivity.java index 767e73de..ff22e48e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesComposeActivity.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeActivity.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.messages; +package pl.szczodrzynski.edziennik.ui.modules.messages; import android.content.Context; import android.graphics.Color; @@ -35,14 +35,14 @@ import java.util.List; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.api.Edziennik; -import pl.szczodrzynski.edziennik.api.AppError; -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; -import pl.szczodrzynski.edziennik.databinding.MessagesComposeActivityBinding; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; -import pl.szczodrzynski.edziennik.datamodels.Teacher; +import pl.szczodrzynski.edziennik.data.api.AppError; +import pl.szczodrzynski.edziennik.data.api.Edziennik; +import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher; +import pl.szczodrzynski.edziennik.databinding.ActivityComposeMessageBinding; import pl.szczodrzynski.edziennik.utils.Colors; import pl.szczodrzynski.edziennik.utils.Themes; @@ -50,7 +50,7 @@ public class MessagesComposeActivity extends AppCompatActivity { private static final String TAG = "MessageCompose"; private App app; - private MessagesComposeActivityBinding b; + private ActivityComposeMessageBinding b; private List teachers = new ArrayList<>(); private ActionBar actionBar; private MessagesComposeInfo composeInfo; @@ -60,7 +60,7 @@ public class MessagesComposeActivity extends AppCompatActivity { super.onCreate(savedInstanceState); app = (App)getApplication(); setTheme(Themes.INSTANCE.getAppTheme()); - b = DataBindingUtil.inflate(getLayoutInflater(), R.layout.messages_compose_activity, null, false); + b = DataBindingUtil.inflate(getLayoutInflater(), R.layout.activity_compose_message, null, false); setContentView(b.getRoot()); composeInfo = Edziennik.getApi(app, app.profile.getLoginStoreType()).getComposeInfo(app.profile); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesComposeInfo.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeInfo.java similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesComposeInfo.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeInfo.java index ad472272..6812e00d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesComposeInfo.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeInfo.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.messages; +package pl.szczodrzynski.edziennik.ui.modules.messages; public class MessagesComposeInfo { /** diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesComposeSuggestionAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeSuggestionAdapter.java similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesComposeSuggestionAdapter.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeSuggestionAdapter.java index 441959fe..748e2c32 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesComposeSuggestionAdapter.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeSuggestionAdapter.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.messages; +package pl.szczodrzynski.edziennik.ui.modules.messages; import android.content.Context; import android.text.Html; @@ -19,7 +19,7 @@ import java.util.Comparator; import java.util.List; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.datamodels.Teacher; +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher; public class MessagesComposeSuggestionAdapter extends ArrayAdapter { @@ -188,4 +188,4 @@ public class MessagesComposeSuggestionAdapter extends ArrayAdapter { } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesDetailsFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesDetailsFragment.java similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesDetailsFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesDetailsFragment.java index 1174b654..645b66d3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesDetailsFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesDetailsFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.messages; +package pl.szczodrzynski.edziennik.ui.modules.messages; import android.content.Context; import android.content.Intent; @@ -51,17 +51,17 @@ import im.wangchao.mhttp.callback.FileCallbackHandler; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.api.Edziennik; -import pl.szczodrzynski.edziennik.api.AppError; -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; +import pl.szczodrzynski.edziennik.data.api.Edziennik; +import pl.szczodrzynski.edziennik.data.api.AppError; +import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback; import pl.szczodrzynski.edziennik.databinding.MessagesDetailsBinding; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.MessageFull; -import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; import pl.szczodrzynski.edziennik.utils.Anim; import pl.szczodrzynski.edziennik.utils.Themes; import pl.szczodrzynski.edziennik.utils.Utils; @@ -673,4 +673,4 @@ public class MessagesDetailsFragment extends Fragment { .show(); b.messageSender.setOnClickListener(onClickListener); b.messageProfileBackground.setOnClickListener(onClickListener); - }*/ \ No newline at end of file + }*/ diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesFragment.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesFragment.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesFragment.kt index bee3ff13..db7fae3b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesFragment.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.messages +package pl.szczodrzynski.edziennik.ui.modules.messages import android.os.Bundle import android.view.LayoutInflater @@ -12,7 +12,7 @@ import pl.szczodrzynski.edziennik.App import pl.szczodrzynski.edziennik.R import pl.szczodrzynski.edziennik.MainActivity import pl.szczodrzynski.edziennik.databinding.FragmentMessagesBinding -import pl.szczodrzynski.edziennik.datamodels.Message +import pl.szczodrzynski.edziennik.data.db.modules.messages.Message import pl.szczodrzynski.edziennik.utils.Themes import java.util.* @@ -103,4 +103,4 @@ class MessagesFragment : Fragment() { return mFragmentTitleList[position] } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesListFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesListFragment.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesListFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesListFragment.java index 07a3a8a6..17e77c41 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesListFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesListFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.messages; +package pl.szczodrzynski.edziennik.ui.modules.messages; import android.content.Context; @@ -29,20 +29,20 @@ import java.util.List; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.api.AppError; -import pl.szczodrzynski.edziennik.api.Edziennik; -import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; +import pl.szczodrzynski.edziennik.data.api.AppError; +import pl.szczodrzynski.edziennik.data.api.Edziennik; +import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback; import pl.szczodrzynski.edziennik.databinding.MessagesListBinding; -import pl.szczodrzynski.edziennik.datamodels.LoginStore; -import pl.szczodrzynski.edziennik.datamodels.Message; -import pl.szczodrzynski.edziennik.datamodels.MessageFull; -import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.ProfileFull; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.data.db.modules.messages.Message; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; import pl.szczodrzynski.edziennik.utils.Themes; import static androidx.recyclerview.widget.RecyclerView.NO_POSITION; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_LIBRUS; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_LIBRUS; import static pl.szczodrzynski.edziennik.utils.Utils.d; public class MessagesListFragment extends Fragment { @@ -76,7 +76,6 @@ public class MessagesListFragment extends Fragment { return inflater.inflate(R.layout.fragment_loading, container, false); // activity, context and profile is valid b = DataBindingUtil.inflate(inflater, R.layout.messages_list, container, false); - b.refreshLayout.setParent(activity.getSwipeRefreshLayout()); return b.getRoot(); } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesUtils.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesUtils.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesUtils.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesUtils.java index d7c97888..91ed9a56 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/messages/MessagesUtils.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesUtils.java @@ -1,24 +1,22 @@ -package pl.szczodrzynski.edziennik.messages; +package pl.szczodrzynski.edziennik.ui.modules.messages; -import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; -import android.graphics.drawable.Drawable; import androidx.core.graphics.ColorUtils; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.datamodels.MessageFull; -import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull; +import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull; import pl.szczodrzynski.edziennik.utils.Colors; import pl.szczodrzynski.edziennik.utils.Utils; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DELETED; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DRAFT; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED; -import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DELETED; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DRAFT; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED; +import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT; public class MessagesUtils { public static class MessageInfo { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterMessagesWebFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesWebFragment.java similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterMessagesWebFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesWebFragment.java index 9c168eaf..343f4076 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterMessagesWebFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesWebFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments; +package pl.szczodrzynski.edziennik.ui.modules.messages; import android.Manifest; import android.annotation.SuppressLint; @@ -17,12 +17,6 @@ import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.provider.MediaStore; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.app.ActivityCompat; -import androidx.databinding.DataBindingUtil; -import androidx.fragment.app.Fragment; -import androidx.core.content.FileProvider; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -39,6 +33,13 @@ import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.core.content.FileProvider; +import androidx.databinding.DataBindingUtil; +import androidx.fragment.app.Fragment; + import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.StackingBehavior; @@ -51,7 +52,7 @@ import java.util.Date; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.databinding.FragmentRegisterMessagesWebBinding; +import pl.szczodrzynski.edziennik.databinding.FragmentMessagesWebBinding; import pl.szczodrzynski.edziennik.utils.Anim; import pl.szczodrzynski.edziennik.utils.Themes; @@ -59,12 +60,12 @@ import static android.app.Activity.RESULT_OK; import static android.content.Context.DOWNLOAD_SERVICE; import static pl.szczodrzynski.edziennik.utils.Utils.readableFileSize; -public class RegisterMessagesWebFragment extends Fragment { +public class MessagesWebFragment extends Fragment { private static final String TAG = "RegisterMessagesWeb"; private App app = null; private Activity activity = null; - private FragmentRegisterMessagesWebBinding b = null; + private FragmentMessagesWebBinding b = null; private WebView webView; private ProgressBar progressBar; @@ -80,7 +81,7 @@ public class RegisterMessagesWebFragment extends Fragment { if (app.profile == null) return inflater.inflate(R.layout.fragment_loading, container, false); // activity, context and profile is valid - b = DataBindingUtil.inflate(inflater, R.layout.fragment_register_messages_web, container, false); + b = DataBindingUtil.inflate(inflater, R.layout.fragment_messages_web, container, false); return b.getRoot(); } @@ -350,7 +351,7 @@ public class RegisterMessagesWebFragment extends Fragment { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); - RegisterMessagesWebFragment.this.error.setVisibility(View.GONE); + MessagesWebFragment.this.error.setVisibility(View.GONE); loadingFinished = false; //SHOW LOADING IF IT ISNT ALREADY VISIBLE if (progressBar.getVisibility() != View.VISIBLE) @@ -385,8 +386,8 @@ public class RegisterMessagesWebFragment extends Fragment { if (app == null || app.profile == null || activity == null || b == null || !isAdded()) return; - RegisterMessagesWebFragment.this.error.setVisibility(View.VISIBLE); - RegisterMessagesWebFragment.this.error.setText(getString(R.string.error_occured_format, error.toString())); + MessagesWebFragment.this.error.setVisibility(View.VISIBLE); + MessagesWebFragment.this.error.setText(getString(R.string.error_occured_format, error.toString())); super.onReceivedError(view, request, error); } }); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/messages/SlideExplode.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/SlideExplode.java similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/messages/SlideExplode.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/SlideExplode.java index bac1d687..6161b6dd 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/messages/SlideExplode.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/SlideExplode.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.messages; +package pl.szczodrzynski.edziennik.ui.modules.messages; import android.animation.Animator; import android.animation.ObjectAnimator; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/messages/Transitions.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/Transitions.java similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/messages/Transitions.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/Transitions.java index 67b3a5b3..4e6f38a2 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/messages/Transitions.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/Transitions.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.messages; +package pl.szczodrzynski.edziennik.ui.modules.messages; import android.animation.TimeInterpolator; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/NotificationsAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notifications/NotificationsAdapter.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/adapters/NotificationsAdapter.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notifications/NotificationsAdapter.java index 8ec253b0..f54810b9 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/NotificationsAdapter.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notifications/NotificationsAdapter.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.adapters; +package pl.szczodrzynski.edziennik.ui.modules.notifications; import android.app.Activity; import android.content.Context; @@ -19,8 +19,8 @@ import java.util.List; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Notification; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Notification; import static pl.szczodrzynski.edziennik.utils.Utils.d; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterNotificationsFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notifications/NotificationsFragment.java similarity index 87% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterNotificationsFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notifications/NotificationsFragment.java index 7b96196c..0ed54999 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/RegisterNotificationsFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notifications/NotificationsFragment.java @@ -1,28 +1,28 @@ -package pl.szczodrzynski.edziennik.fragments; +package pl.szczodrzynski.edziennik.ui.modules.notifications; import android.app.Activity; import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.databinding.DataBindingUtil; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.adapters.NotificationsAdapter; -import pl.szczodrzynski.edziennik.databinding.FragmentRegisterNotificationsBinding; +import pl.szczodrzynski.edziennik.databinding.FragmentNotificationsBinding; import pl.szczodrzynski.edziennik.utils.Themes; -public class RegisterNotificationsFragment extends Fragment { +public class NotificationsFragment extends Fragment { private App app = null; private Activity activity = null; - private FragmentRegisterNotificationsBinding b = null; + private FragmentNotificationsBinding b = null; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -34,7 +34,7 @@ public class RegisterNotificationsFragment extends Fragment { if (app.profile == null) return inflater.inflate(R.layout.fragment_loading, container, false); // activity, context and profile is valid - b = DataBindingUtil.inflate(inflater, R.layout.fragment_register_notifications, container, false); + b = DataBindingUtil.inflate(inflater, R.layout.fragment_notifications, container, false); return b.getRoot(); } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/ProfileManagerFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/ProfileManagerFragment.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/ProfileManagerFragment.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/ProfileManagerFragment.kt index 43dc77a2..06952328 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/ProfileManagerFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/ProfileManagerFragment.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments +package pl.szczodrzynski.edziennik.ui.modules.settings import android.os.Bundle import androidx.fragment.app.Fragment diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/activities/SettingsLicenseActivity.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/SettingsLicenseActivity.kt similarity index 99% rename from app/src/main/java/pl/szczodrzynski/edziennik/activities/SettingsLicenseActivity.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/SettingsLicenseActivity.kt index 32b40443..31933c4d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/activities/SettingsLicenseActivity.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/SettingsLicenseActivity.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.activities +package pl.szczodrzynski.edziennik.ui.modules.settings import android.content.Context import android.net.Uri diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/SettingsNewFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/SettingsNewFragment.java similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/fragments/SettingsNewFragment.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/SettingsNewFragment.java index df163e34..932e89eb 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/fragments/SettingsNewFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/SettingsNewFragment.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.fragments; +package pl.szczodrzynski.edziennik.ui.modules.settings; import android.app.Activity; import android.content.Context; @@ -45,27 +45,28 @@ import pl.szczodrzynski.edziennik.BuildConfig; import pl.szczodrzynski.edziennik.Notifier; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.activities.SettingsLicenseActivity; -import pl.szczodrzynski.edziennik.activities.WebPushConfigActivity; -import pl.szczodrzynski.edziennik.dialogs.ChangelogDialog; -import pl.szczodrzynski.edziennik.models.Endpoint; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; +import pl.szczodrzynski.edziennik.ui.modules.webpush.WebPushConfigActivity; +import pl.szczodrzynski.edziennik.ui.dialogs.changelog.ChangelogDialog; +import pl.szczodrzynski.edziennik.utils.models.Endpoint; +import pl.szczodrzynski.edziennik.utils.models.Time; import pl.szczodrzynski.edziennik.network.NetworkUtils; import pl.szczodrzynski.edziennik.network.ServerRequest; import pl.szczodrzynski.edziennik.receivers.BootReceiver; import pl.szczodrzynski.edziennik.sync.SyncJob; +import pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment; import pl.szczodrzynski.edziennik.utils.Themes; import pl.szczodrzynski.edziennik.utils.Utils; import static android.app.Activity.RESULT_OK; import static pl.szczodrzynski.edziennik.App.APP_URL; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_DISABLED; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED; -import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_AVG_2_AVG; -import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_AVG_2_SEM; -import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_AVG; -import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_SEM; -import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_ALL_GRADES; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_DISABLED; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_AVG_2_AVG; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_AVG_2_SEM; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_SEM_2_AVG; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_SEM_2_SEM; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_ALL_GRADES; import static pl.szczodrzynski.edziennik.utils.Utils.d; import static pl.szczodrzynski.edziennik.utils.Utils.getRealPathFromURI; import static pl.szczodrzynski.edziennik.utils.Utils.getResizedBitmap; @@ -350,9 +351,9 @@ public class SettingsNewFragment extends MaterialAboutFragment { buttonIds.add(MainActivity.DRAWER_ITEM_AGENDA); buttonIds.add(MainActivity.DRAWER_ITEM_GRADES); buttonIds.add(MainActivity.DRAWER_ITEM_MESSAGES); - buttonIds.add(MainActivity.DRAWER_ITEM_HOMEWORKS); - buttonIds.add(MainActivity.DRAWER_ITEM_NOTICES); - buttonIds.add(MainActivity.DRAWER_ITEM_ATTENDANCES); + buttonIds.add(MainActivity.DRAWER_ITEM_HOMEWORK); + buttonIds.add(MainActivity.DRAWER_ITEM_BEHAVIOUR); + buttonIds.add(MainActivity.DRAWER_ITEM_ATTENDANCE); buttonIds.add(MainActivity.DRAWER_ITEM_ANNOUNCEMENTS); buttonIds.add(MainActivity.DRAWER_ITEM_NOTIFICATIONS); buttonIds.add(MainActivity.DRAWER_ITEM_SETTINGS); @@ -365,7 +366,7 @@ public class SettingsNewFragment extends MaterialAboutFragment { buttonCaptions.add(getString(R.string.menu_messages)); buttonCaptions.add(getString(R.string.menu_homework)); buttonCaptions.add(getString(R.string.menu_notices)); - buttonCaptions.add(getString(R.string.menu_attendances)); + buttonCaptions.add(getString(R.string.menu_attendance)); buttonCaptions.add(getString(R.string.menu_announcements)); buttonCaptions.add(getString(R.string.menu_notifications)); buttonCaptions.add(getString(R.string.menu_settings)); @@ -1057,6 +1058,25 @@ public class SettingsNewFragment extends MaterialAboutFragment { }) ); + if (app.profile.getLoginStoreType() == LoginStore.LOGIN_TYPE_LIBRUS) { + items.add( + new MaterialAboutSwitchItem( + getString(R.string.settings_register_show_teacher_absences_text), + null, + new IconicsDrawable(activity) + .icon(CommunityMaterial.Icon.cmd_account_arrow_right) + .size(IconicsSize.dp(iconSizeDp)) + .color(IconicsColor.colorInt(iconColor)) + ) + .setChecked(app.profile.getStudentData("showTeacherAbsences", true)) + .setOnChangeAction((isChecked, tag) -> { + app.profile.putStudentData("showTeacherAbsences", isChecked); + app.profileSaveAsync(); + return true; + }) + ); + } + } return items; } @@ -1091,8 +1111,8 @@ public class SettingsNewFragment extends MaterialAboutFragment { case "Events": stringRes = R.string.settings_sync_customize_endpoint_events; break; - case "Homeworks": - stringRes = R.string.settings_sync_customize_endpoint_homeworks; + case "Homework": + stringRes = R.string.settings_sync_customize_endpoint_homework; break; case "LuckyNumber": case "LuckyNumbers": @@ -1101,8 +1121,8 @@ public class SettingsNewFragment extends MaterialAboutFragment { case "Notices": stringRes = R.string.settings_sync_customize_endpoint_notices; break; - case "Attendances": - stringRes = R.string.settings_sync_customize_endpoint_attendances; + case "Attendance": + stringRes = R.string.settings_sync_customize_endpoint_attendance; break; case "Announcements": stringRes = R.string.settings_sync_customize_endpoint_announcements; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/TimetableAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableAdapter.java similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/adapters/TimetableAdapter.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableAdapter.java index d056c26c..def0b58f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/adapters/TimetableAdapter.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableAdapter.java @@ -1,7 +1,6 @@ -package pl.szczodrzynski.edziennik.adapters; +package pl.szczodrzynski.edziennik.ui.modules.timetable; import android.content.Context; -import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.Typeface; @@ -25,16 +24,16 @@ import java.util.List; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.datamodels.EventFull; -import pl.szczodrzynski.edziennik.datamodels.LessonChange; -import pl.szczodrzynski.edziennik.datamodels.LessonFull; -import pl.szczodrzynski.edziennik.dialogs.EventListDialog; -import pl.szczodrzynski.edziennik.models.Date; +import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull; +import pl.szczodrzynski.edziennik.ui.dialogs.event.EventListDialog; +import pl.szczodrzynski.edziennik.utils.models.Date; import pl.szczodrzynski.edziennik.utils.SpannableHtmlTagHandler; import pl.szczodrzynski.edziennik.utils.Themes; import pl.szczodrzynski.edziennik.utils.Utils; -import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK; +import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK; public class TimetableAdapter extends RecyclerView.Adapter { private static final String TAG = "TimetableAdapter"; @@ -199,4 +198,4 @@ public class TimetableAdapter extends RecyclerView.Adapter weekEnd || i < weekBeginning) { pageTitle.append(", ").append(date.getStringDm()); } - adapter.addFragment(registerTimetableDayFragment, pageTitle.toString()); + adapter.addFragment(timetableDayFragment, pageTitle.toString()); date.stepForward(0, 0, 1); } viewPager.setAdapter(adapter); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/activities/QrScannerActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/webpush/QrScannerActivity.java similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/activities/QrScannerActivity.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/webpush/QrScannerActivity.java index bd91328c..b9028ac5 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/activities/QrScannerActivity.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/webpush/QrScannerActivity.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.activities; +package pl.szczodrzynski.edziennik.ui.modules.webpush; import android.Manifest; import android.content.pm.PackageManager; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/activities/WebPushConfigActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/webpush/WebPushConfigActivity.java similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/activities/WebPushConfigActivity.java rename to app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/webpush/WebPushConfigActivity.java index 916416e0..dcb652dd 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/activities/WebPushConfigActivity.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/webpush/WebPushConfigActivity.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.activities; +package pl.szczodrzynski.edziennik.ui.modules.webpush; import android.Manifest; import android.content.pm.PackageManager; @@ -43,7 +43,7 @@ import pl.szczodrzynski.edziennik.utils.Themes; import pl.szczodrzynski.edziennik.utils.Utils; import static pl.szczodrzynski.edziennik.App.APP_URL; -import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED; +import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED; public class WebPushConfigActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler { private static final String TAG = "WebPushConfigActivity"; @@ -296,4 +296,4 @@ public class WebPushConfigActivity extends AppCompatActivity implements ZXingSca } super.onBackPressed(); } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/utils/Colors.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/Colors.java index f01da724..ce9cdbcf 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/utils/Colors.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/Colors.java @@ -10,7 +10,7 @@ import android.graphics.drawable.StateListDrawable; import android.graphics.drawable.shapes.RoundRectShape; import android.os.Build; import androidx.core.graphics.ColorUtils; -import pl.szczodrzynski.edziennik.datamodels.Grade; +import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade; import java.security.MessageDigest; import java.util.Arrays; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/models/AppConfig.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/AppConfig.java similarity index 88% rename from app/src/main/java/pl/szczodrzynski/edziennik/models/AppConfig.java rename to app/src/main/java/pl/szczodrzynski/edziennik/utils/models/AppConfig.java index 05a6d362..2aefccf0 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/models/AppConfig.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/AppConfig.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.models; +package pl.szczodrzynski.edziennik.utils.models; import android.util.Pair; @@ -12,10 +12,10 @@ import pl.szczodrzynski.edziennik.BuildConfig; import pl.szczodrzynski.edziennik.MainActivity; import pl.szczodrzynski.edziennik.widgets.WidgetConfig; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_IUCZNIOWIE; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_LIBRUS; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; -import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_IUCZNIOWIE; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_LIBRUS; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; +import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN; public class AppConfig { private static final String TAG = "AppConfig"; @@ -38,7 +38,7 @@ public class AppConfig { miniDrawerButtonIds.add(MainActivity.DRAWER_ITEM_AGENDA); miniDrawerButtonIds.add(MainActivity.DRAWER_ITEM_GRADES); miniDrawerButtonIds.add(MainActivity.DRAWER_ITEM_MESSAGES); - miniDrawerButtonIds.add(MainActivity.DRAWER_ITEM_HOMEWORKS); + miniDrawerButtonIds.add(MainActivity.DRAWER_ITEM_HOMEWORK); miniDrawerButtonIds.add(MainActivity.DRAWER_ITEM_SETTINGS); fcmToken = ""; fcmTokens = new TreeMap<>(); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/models/Date.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Date.java similarity index 99% rename from app/src/main/java/pl/szczodrzynski/edziennik/models/Date.java rename to app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Date.java index 1c609f2b..3b69cdc9 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/models/Date.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Date.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.models; +package pl.szczodrzynski.edziennik.utils.models; import androidx.annotation.NonNull; @@ -222,4 +222,4 @@ public class Date implements Comparable { ", day=" + day + '}'; } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/models/Endpoint.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Endpoint.java similarity index 90% rename from app/src/main/java/pl/szczodrzynski/edziennik/models/Endpoint.java rename to app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Endpoint.java index 56b4f239..79bfaacf 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/models/Endpoint.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Endpoint.java @@ -1,6 +1,4 @@ -package pl.szczodrzynski.edziennik.models; - -import androidx.annotation.StringRes; +package pl.szczodrzynski.edziennik.utils.models; import java.util.List; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/models/ItemGradesSubjectModel.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemGradesSubjectModel.java similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/models/ItemGradesSubjectModel.java rename to app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemGradesSubjectModel.java index 48f04b27..2d2bc614 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/models/ItemGradesSubjectModel.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemGradesSubjectModel.java @@ -1,10 +1,10 @@ -package pl.szczodrzynski.edziennik.models; +package pl.szczodrzynski.edziennik.utils.models; import java.util.List; -import pl.szczodrzynski.edziennik.datamodels.GradeFull; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.datamodels.Subject; +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject; public class ItemGradesSubjectModel { public Profile profile; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/models/ItemTimetableModel.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemTimetableModel.java similarity index 65% rename from app/src/main/java/pl/szczodrzynski/edziennik/models/ItemTimetableModel.java rename to app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemTimetableModel.java index 515f6dc0..e9527793 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/models/ItemTimetableModel.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemTimetableModel.java @@ -1,9 +1,9 @@ -package pl.szczodrzynski.edziennik.models; +package pl.szczodrzynski.edziennik.utils.models; import java.util.List; -import pl.szczodrzynski.edziennik.datamodels.Event; -import pl.szczodrzynski.edziennik.datamodels.LessonFull; +import pl.szczodrzynski.edziennik.data.db.modules.events.Event; +import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull; public class ItemTimetableModel { public LessonFull lesson; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/models/ItemWidgetTimetableModel.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemWidgetTimetableModel.java similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/models/ItemWidgetTimetableModel.java rename to app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemWidgetTimetableModel.java index 15f09f08..479845da 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/models/ItemWidgetTimetableModel.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemWidgetTimetableModel.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.models; +package pl.szczodrzynski.edziennik.utils.models; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/models/NavTarget.kt b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/NavTarget.kt similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/models/NavTarget.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/utils/models/NavTarget.kt index 38389c83..5e707993 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/models/NavTarget.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/NavTarget.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.models +package pl.szczodrzynski.edziennik.utils.models import androidx.fragment.app.Fragment import com.mikepenz.iconics.typeface.IIcon @@ -88,4 +88,4 @@ data class NavTarget( this.subItems = items return this } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/models/Notification.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Notification.java similarity index 99% rename from app/src/main/java/pl/szczodrzynski/edziennik/models/Notification.java rename to app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Notification.java index 6d420358..047cd16f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/models/Notification.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Notification.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.models; +package pl.szczodrzynski.edziennik.utils.models; import android.content.Context; import android.content.Intent; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/models/Time.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Time.java similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/models/Time.java rename to app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Time.java index f990df1a..07b1c422 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/models/Time.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Time.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.models; +package pl.szczodrzynski.edziennik.utils.models; import java.util.Calendar; @@ -56,6 +56,9 @@ public class Time { return this; } + /** + * HHMMSS + */ public static Time fromHms(String time) { try { @@ -67,6 +70,9 @@ public class Time { } } + /** + * HH:MM + */ public static Time fromH_m(String time) { try { @@ -78,6 +84,9 @@ public class Time { } } + /** + * HH:MM:SS + */ public static Time fromH_m_s(String time) { try { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/models/db/UnreadCounter.kt b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/UnreadCounter.kt similarity index 87% rename from app/src/main/java/pl/szczodrzynski/edziennik/models/db/UnreadCounter.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/utils/models/UnreadCounter.kt index 04530296..73fbb1a8 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/models/db/UnreadCounter.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/UnreadCounter.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.models.db +package pl.szczodrzynski.edziennik.utils.models import pl.szczodrzynski.navlib.drawer.IUnreadCounter diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/models/Week.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Week.java similarity index 76% rename from app/src/main/java/pl/szczodrzynski/edziennik/models/Week.java rename to app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Week.java index 33a5866b..309466c8 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/models/Week.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/Week.java @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.models; +package pl.szczodrzynski.edziennik.utils.models; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -15,7 +15,7 @@ public class Week { public static int SATURDAY = 5; public static int SUNDAY = 6; - public static pl.szczodrzynski.edziennik.models.Date getNearestWeekDayDate(int day) + public static pl.szczodrzynski.edziennik.utils.models.Date getNearestWeekDayDate(int day) { Calendar c = Calendar.getInstance(); int dayDiff = day - getTodayWeekDay(); @@ -23,21 +23,21 @@ public class Week { dayDiff = 7 + dayDiff; } c.setTimeInMillis(c.getTimeInMillis() + (dayDiff * 24 * 60 * 60 * 1000)); - return new pl.szczodrzynski.edziennik.models.Date(c.get(Calendar.YEAR), c.get(Calendar.MONTH)+1, c.get(Calendar.DAY_OF_MONTH)); + return new pl.szczodrzynski.edziennik.utils.models.Date(c.get(Calendar.YEAR), c.get(Calendar.MONTH)+1, c.get(Calendar.DAY_OF_MONTH)); } - public static pl.szczodrzynski.edziennik.models.Date getWeekStart() { - pl.szczodrzynski.edziennik.models.Date date = pl.szczodrzynski.edziennik.models.Date.getToday(); + public static pl.szczodrzynski.edziennik.utils.models.Date getWeekStart() { + pl.szczodrzynski.edziennik.utils.models.Date date = pl.szczodrzynski.edziennik.utils.models.Date.getToday(); date.stepForward(0, 0, -date.getWeekDay()); return date; } - public static pl.szczodrzynski.edziennik.models.Date getWeekEnd() { - pl.szczodrzynski.edziennik.models.Date date = pl.szczodrzynski.edziennik.models.Date.getToday(); + public static pl.szczodrzynski.edziennik.utils.models.Date getWeekEnd() { + pl.szczodrzynski.edziennik.utils.models.Date date = pl.szczodrzynski.edziennik.utils.models.Date.getToday(); date.stepForward(0, 0, 6-date.getWeekDay()); return date; } - public static int getWeekDayFromDate(pl.szczodrzynski.edziennik.models.Date date) + public static int getWeekDayFromDate(pl.szczodrzynski.edziennik.utils.models.Date date) { Calendar c = Calendar.getInstance(); c.set(date.year, date.month - 1, date.day); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/WidgetConfigActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/WidgetConfigActivity.java index 9649cc0b..4004109c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/WidgetConfigActivity.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/WidgetConfigActivity.java @@ -3,22 +3,15 @@ package pl.szczodrzynski.edziennik.widgets; import android.app.Activity; import android.app.WallpaperManager; import android.appwidget.AppWidgetManager; -import android.content.ComponentName; import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.ColorDrawable; -import android.media.ThumbnailUtils; import android.os.AsyncTask; import android.os.Bundle; import android.widget.SeekBar; -import androidx.core.graphics.drawable.RoundedBitmapDrawable; -import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory; - import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.simplelist.MaterialSimpleListAdapter; import com.afollestad.materialdialogs.simplelist.MaterialSimpleListItem; @@ -29,12 +22,11 @@ import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.WidgetTimetable; import pl.szczodrzynski.edziennik.databinding.DialogWidgetConfigBinding; -import pl.szczodrzynski.edziennik.datamodels.Profile; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; import pl.szczodrzynski.edziennik.widgets.luckynumber.WidgetLuckyNumber; import pl.szczodrzynski.edziennik.widgets.notifications.WidgetNotifications; import static pl.szczodrzynski.edziennik.ExtensionsKt.filterOutArchived; -import static pl.szczodrzynski.edziennik.utils.Utils.d; public class WidgetConfigActivity extends Activity { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/luckynumber/WidgetLuckyNumber.java b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/luckynumber/WidgetLuckyNumber.java index 7c2b847c..6ce5640c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/luckynumber/WidgetLuckyNumber.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/luckynumber/WidgetLuckyNumber.java @@ -24,8 +24,8 @@ import java.lang.reflect.Method; import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; -import pl.szczodrzynski.edziennik.datamodels.Profile; -import pl.szczodrzynski.edziennik.models.Date; +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; +import pl.szczodrzynski.edziennik.utils.models.Date; import pl.szczodrzynski.edziennik.sync.SyncJob; import pl.szczodrzynski.edziennik.widgets.WidgetConfig; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/notifications/WidgetNotificationsListProvider.java b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/notifications/WidgetNotificationsListProvider.java index ff655dca..b3da2ee6 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/notifications/WidgetNotificationsListProvider.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/notifications/WidgetNotificationsListProvider.java @@ -7,13 +7,10 @@ import android.util.Log; import android.widget.RemoteViews; import android.widget.RemoteViewsService; -import java.util.List; - import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.ItemWidgetTimetableModel; -import pl.szczodrzynski.edziennik.models.Notification; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Notification; public class WidgetNotificationsListProvider implements RemoteViewsService.RemoteViewsFactory { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/timetable/LessonDetailsActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/timetable/LessonDetailsActivity.java index 12f7c157..7be441e6 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/timetable/LessonDetailsActivity.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/timetable/LessonDetailsActivity.java @@ -14,9 +14,9 @@ import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.MainActivity; import pl.szczodrzynski.edziennik.WidgetTimetable; -import pl.szczodrzynski.edziennik.dialogs.EventListDialog; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.ui.dialogs.event.EventListDialog; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.Time; import pl.szczodrzynski.edziennik.utils.Themes; import static android.content.Intent.FLAG_ACTIVITY_REORDER_TO_FRONT; @@ -68,4 +68,4 @@ public class LessonDetailsActivity extends AppCompatActivity { Toast.makeText(app, R.string.error_reading_lesson_details, Toast.LENGTH_SHORT).show(); finish(); } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/timetable/WidgetTimetableListProvider.java b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/timetable/WidgetTimetableListProvider.java index 01e3475f..2872c15f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/timetable/WidgetTimetableListProvider.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/timetable/WidgetTimetableListProvider.java @@ -28,9 +28,9 @@ import java.util.List; import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.WidgetTimetable; -import pl.szczodrzynski.edziennik.models.Date; -import pl.szczodrzynski.edziennik.models.ItemWidgetTimetableModel; -import pl.szczodrzynski.edziennik.models.Time; +import pl.szczodrzynski.edziennik.utils.models.Date; +import pl.szczodrzynski.edziennik.utils.models.ItemWidgetTimetableModel; +import pl.szczodrzynski.edziennik.utils.models.Time; public class WidgetTimetableListProvider implements RemoteViewsService.RemoteViewsFactory { @@ -308,4 +308,4 @@ public class WidgetTimetableListProvider implements RemoteViewsService.RemoteVie public boolean hasStableIds() { return true; } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/timetable/WidgetTimetableService.java b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/timetable/WidgetTimetableService.java index eedc3f5b..594fe591 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/timetable/WidgetTimetableService.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/timetable/WidgetTimetableService.java @@ -3,8 +3,6 @@ package pl.szczodrzynski.edziennik.widgets.timetable; import android.content.Intent; import android.widget.RemoteViewsService; -import pl.szczodrzynski.edziennik.widgets.timetable.WidgetTimetableListProvider; - public class WidgetTimetableService extends RemoteViewsService { /* * So pretty simple just defining the Adapter of the listview @@ -16,4 +14,4 @@ public class WidgetTimetableService extends RemoteViewsService { return (new WidgetTimetableListProvider(this.getApplicationContext(), intent)); } -} \ No newline at end of file +} diff --git a/app/src/main/res/layout/messages_compose_activity.xml b/app/src/main/res/layout/activity_compose_message.xml similarity index 97% rename from app/src/main/res/layout/messages_compose_activity.xml rename to app/src/main/res/layout/activity_compose_message.xml index d826b83b..ce5cb2e3 100644 --- a/app/src/main/res/layout/messages_compose_activity.xml +++ b/app/src/main/res/layout/activity_compose_message.xml @@ -6,7 +6,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - tools:context=".messages.MessagesComposeActivity"> + tools:context=".ui.modules.messages.MessagesComposeActivity"> - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_feedback.xml b/app/src/main/res/layout/activity_feedback.xml index 59860d56..503b0e60 100644 --- a/app/src/main/res/layout/activity_feedback.xml +++ b/app/src/main/res/layout/activity_feedback.xml @@ -7,7 +7,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - tools:context=".activities.FeedbackActivity"> + tools:context=".ui.modules.feedback.FeedbackActivity"> - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_web_push_config.xml b/app/src/main/res/layout/activity_web_push_config.xml index eee650a6..17e62ec6 100644 --- a/app/src/main/res/layout/activity_web_push_config.xml +++ b/app/src/main/res/layout/activity_web_push_config.xml @@ -17,147 +17,154 @@ android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> - - - + android:layout_height="match_parent"> - - - - - - - + android:text="Przekazywanie powiadomień pozwala przesyłać wszystkie powiadomienia z tego urządzenia na wszystkie sparowane komputery, widoczne poniżej.\n\nPowiadomienia będą się wyświetlać w przeglądarce, w okienku pop-up, w prawym dolnym rogu ekranu.\n\nLista komputerów docelowych jest niezależna od wybranego profilu ucznia." /> - +