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 88a90ec4..60bb4418 100644 --- a/app/src/main/assets/pl-changelog.html +++ b/app/src/main/assets/pl-changelog.html @@ -31,6 +31,15 @@ +

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.
  • diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/App.java b/app/src/main/java/pl/szczodrzynski/edziennik/App.java index 37b11cc5..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") 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 62fe8cd9..6cf8dec7 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt @@ -19,7 +19,7 @@ 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 @@ -41,21 +41,35 @@ import com.mikepenz.materialdrawer.model.ProfileDrawerItem import com.mikepenz.materialdrawer.model.interfaces.IProfile 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.navlib.bottomsheet.items.BottomSheetPrimaryItem @@ -83,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 @@ -109,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) @@ -129,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) @@ -522,9 +536,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 @@ -538,9 +552,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 @@ -740,6 +754,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}") @@ -848,7 +865,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 fb6b3031..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(); @@ -1196,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"); @@ -1281,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 93% 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 d431dae2..ff04e59e 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<>(); @@ -290,14 +294,16 @@ public class Librus implements EdziennikInterface { 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"); @@ -347,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"); @@ -362,16 +370,18 @@ public class Librus implements EdziennikInterface { 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) { @@ -507,6 +517,9 @@ public class Librus implements EdziennikInterface { case "TextGrades": getTextGrades(); break; + case "GradesComments": + getGradesComments(); + break; case "BehaviourGrades": getBehaviourGrades(); break; @@ -516,8 +529,8 @@ public class Librus implements EdziennikInterface { case "CustomTypes": getCustomTypes(); break; - case "Homeworks": - getHomeworks(); + case "Homework": + getHomework(); break; case "LuckyNumbers": getLuckyNumbers(); @@ -525,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(); @@ -543,6 +556,9 @@ public class Librus implements EdziennikInterface { case "TeacherFreeDays": getTeacherFreeDays(); break; + case "SchoolFreeDays": + getSchoolFreeDays(); + break; case "MessagesLogin": getMessagesLogin(); break; @@ -584,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); @@ -1412,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"); } @@ -1910,7 +1929,7 @@ 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"); @@ -1964,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 @@ -2716,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; @@ -2781,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)); @@ -2882,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 { @@ -2901,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)); @@ -2909,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(); @@ -2986,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)); @@ -3101,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) { @@ -3135,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"); } @@ -3165,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 @@ -3351,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())); @@ -3762,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 93% 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 6e76974e..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,9 +108,9 @@ 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"; @@ -259,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"); @@ -297,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"); @@ -380,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(); @@ -1152,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; @@ -1374,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()); @@ -1382,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(); @@ -1419,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"); }); } @@ -1459,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", 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()); @@ -1497,12 +1497,12 @@ 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"); }); } 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 84% 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..05ac2fb1 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 = 54) @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,27 @@ 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"); + } + }; public static AppDb getDatabase(final Context context) { @@ -535,7 +607,10 @@ 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 + ) .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/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 94% 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 1836d5a9..24df37d0 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"; 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/agenda_event_lesson_change.xml b/app/src/main/res/layout/agenda_event_lesson_change.xml index 36a9a36d..c51f9b35 100644 --- a/app/src/main/res/layout/agenda_event_lesson_change.xml +++ b/app/src/main/res/layout/agenda_event_lesson_change.xml @@ -9,8 +9,8 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/agenda_event_teacher_absence.xml b/app/src/main/res/layout/agenda_event_teacher_absence.xml new file mode 100644 index 00000000..785256d0 --- /dev/null +++ b/app/src/main/res/layout/agenda_event_teacher_absence.xml @@ -0,0 +1,14 @@ + + + + + + diff --git a/app/src/main/res/layout/dialog_event_list.xml b/app/src/main/res/layout/dialog_event_list.xml index d1ff5684..f71208a8 100644 --- a/app/src/main/res/layout/dialog_event_list.xml +++ b/app/src/main/res/layout/dialog_event_list.xml @@ -1,25 +1,38 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> + + @@ -27,6 +40,8 @@ android:id="@+id/eventListLessonDetails" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginLeft="24dp" + android:layout_marginRight="24dp" android:orientation="vertical"> + + + + - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_grade_details.xml b/app/src/main/res/layout/dialog_grade_details.xml index d875abd5..52d8a8d2 100644 --- a/app/src/main/res/layout/dialog_grade_details.xml +++ b/app/src/main/res/layout/dialog_grade_details.xml @@ -5,11 +5,11 @@ - - + + + type="pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull" /> diff --git a/app/src/main/res/layout/dialog_lesson_change_list.xml b/app/src/main/res/layout/dialog_lesson_change_list.xml index c43f50df..bc99ba3a 100644 --- a/app/src/main/res/layout/dialog_lesson_change_list.xml +++ b/app/src/main/res/layout/dialog_lesson_change_list.xml @@ -1,14 +1,15 @@ - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_teacher_absence_list.xml b/app/src/main/res/layout/dialog_teacher_absence_list.xml new file mode 100644 index 00000000..e29a6a4b --- /dev/null +++ b/app/src/main/res/layout/dialog_teacher_absence_list.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/fragment_register_agenda_calendar.xml b/app/src/main/res/layout/fragment_agenda_calendar.xml similarity index 100% rename from app/src/main/res/layout/fragment_register_agenda_calendar.xml rename to app/src/main/res/layout/fragment_agenda_calendar.xml diff --git a/app/src/main/res/layout/fragment_register_agenda_default.xml b/app/src/main/res/layout/fragment_agenda_default.xml similarity index 100% rename from app/src/main/res/layout/fragment_register_agenda_default.xml rename to app/src/main/res/layout/fragment_agenda_default.xml diff --git a/app/src/main/res/layout/fragment_register_school_notices.xml b/app/src/main/res/layout/fragment_announcements.xml similarity index 100% rename from app/src/main/res/layout/fragment_register_school_notices.xml rename to app/src/main/res/layout/fragment_announcements.xml diff --git a/app/src/main/res/layout/fragment_register_attendances.xml b/app/src/main/res/layout/fragment_attendance.xml similarity index 97% rename from app/src/main/res/layout/fragment_register_attendances.xml rename to app/src/main/res/layout/fragment_attendance.xml index c8992f78..c0ddb3d4 100644 --- a/app/src/main/res/layout/fragment_register_attendances.xml +++ b/app/src/main/res/layout/fragment_attendance.xml @@ -27,7 +27,7 @@ android:orientation="vertical"> - \ No newline at end of file + diff --git a/app/src/main/res/layout/fragment_register_notices.xml b/app/src/main/res/layout/fragment_behaviour.xml similarity index 100% rename from app/src/main/res/layout/fragment_register_notices.xml rename to app/src/main/res/layout/fragment_behaviour.xml diff --git a/app/src/main/res/layout/fragment_debug.xml b/app/src/main/res/layout/fragment_debug.xml index 2608ac75..6dd2413c 100644 --- a/app/src/main/res/layout/fragment_debug.xml +++ b/app/src/main/res/layout/fragment_debug.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".fragments.DebugFragment"> + tools:context=".ui.modules.base.DebugFragment"> + tools:context=".ui.modules.home.HomeFragment"> - \ No newline at end of file + diff --git a/app/src/main/res/layout/fragment_homework.xml b/app/src/main/res/layout/fragment_homework.xml new file mode 100644 index 00000000..91d904be --- /dev/null +++ b/app/src/main/res/layout/fragment_homework.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_register_messages_web.xml b/app/src/main/res/layout/fragment_messages_web.xml similarity index 100% rename from app/src/main/res/layout/fragment_register_messages_web.xml rename to app/src/main/res/layout/fragment_messages_web.xml diff --git a/app/src/main/res/layout/fragment_register_notifications.xml b/app/src/main/res/layout/fragment_notifications.xml similarity index 100% rename from app/src/main/res/layout/fragment_register_notifications.xml rename to app/src/main/res/layout/fragment_notifications.xml diff --git a/app/src/main/res/layout/fragment_register_homeworks.xml b/app/src/main/res/layout/fragment_register_homeworks.xml deleted file mode 100644 index 1bca5365..00000000 --- a/app/src/main/res/layout/fragment_register_homeworks.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_register_timetable.xml b/app/src/main/res/layout/fragment_timetable.xml similarity index 100% rename from app/src/main/res/layout/fragment_register_timetable.xml rename to app/src/main/res/layout/fragment_timetable.xml diff --git a/app/src/main/res/layout/fragment_register_timetable_day.xml b/app/src/main/res/layout/fragment_timetable_day.xml similarity index 100% rename from app/src/main/res/layout/fragment_register_timetable_day.xml rename to app/src/main/res/layout/fragment_timetable_day.xml diff --git a/app/src/main/res/layout/homework_list.xml b/app/src/main/res/layout/homework_list.xml new file mode 100644 index 00000000..bfcc4960 --- /dev/null +++ b/app/src/main/res/layout/homework_list.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/messages_list.xml b/app/src/main/res/layout/messages_list.xml index 2021cf68..e3eca8fe 100644 --- a/app/src/main/res/layout/messages_list.xml +++ b/app/src/main/res/layout/messages_list.xml @@ -5,20 +5,14 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - + android:layout_height="match_parent" + android:clipChildren="false" + android:transitionGroup="false" + tools:listitem="@layout/messages_item" + tools:targetApi="lollipop" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/row_dialog_teacher_absence_item.xml b/app/src/main/res/layout/row_dialog_teacher_absence_item.xml new file mode 100644 index 00000000..6aacce23 --- /dev/null +++ b/app/src/main/res/layout/row_dialog_teacher_absence_item.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/row_homeworks_item.xml b/app/src/main/res/layout/row_homework_item.xml similarity index 91% rename from app/src/main/res/layout/row_homeworks_item.xml rename to app/src/main/res/layout/row_homework_item.xml index a7067e77..629bac4a 100644 --- a/app/src/main/res/layout/row_homeworks_item.xml +++ b/app/src/main/res/layout/row_homework_item.xml @@ -7,7 +7,7 @@ android:orientation="vertical"> - \ No newline at end of file + diff --git a/app/src/main/res/layout/row_dialog_lesson_change_item.xml b/app/src/main/res/layout/row_lesson_change_item.xml similarity index 89% rename from app/src/main/res/layout/row_dialog_lesson_change_item.xml rename to app/src/main/res/layout/row_lesson_change_item.xml index dad07f00..2ba7ea25 100644 --- a/app/src/main/res/layout/row_dialog_lesson_change_item.xml +++ b/app/src/main/res/layout/row_lesson_change_item.xml @@ -1,7 +1,7 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/row_teacher_absence_item.xml b/app/src/main/res/layout/row_teacher_absence_item.xml new file mode 100644 index 00000000..4f40e05a --- /dev/null +++ b/app/src/main/res/layout/row_teacher_absence_item.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + diff --git a/app/src/main/res/navigation/nav_login.xml b/app/src/main/res/navigation/nav_login.xml index 9c2b1bba..825b646f 100644 --- a/app/src/main/res/navigation/nav_login.xml +++ b/app/src/main/res/navigation/nav_login.xml @@ -6,7 +6,7 @@ - \ No newline at end of file + diff --git a/app/src/main/res/navigation/nav_main.xml b/app/src/main/res/navigation/nav_main.xml deleted file mode 100644 index b161f2f4..00000000 --- a/app/src/main/res/navigation/nav_main.xml +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index c005d191..82f32af5 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -69,8 +69,8 @@ Releases: All subjects Summary - loading… - Summary - semester %d  - Summary - all year  + Summary - semester %d  + Summary - all year  Back Adjust the bell sync time. Format: ±H:MM:SS Incorrect format @@ -287,11 +287,7 @@ Help Notification forwarding allows you to pair a PC web browser to receive notifications on your desktop. This includes new grades, events, homework etc.\n\nClick \"Notification forwarding\" to begin. Registraton will run automatically on the first login.\n\nThere will be some data sent to the app server:\n- your school and class ID\n- your e-register username\n- your first and last name\n\nThe only data visible to others is your name (when sharing events). Any private data (like password, grades etc.) won\'t be sent anywhere. Learn more in the Privacy policy. - There is no current homework. - Current homework Edit - No previous homework. - Past homework I agree I disagree Incorrect format @@ -405,7 +401,7 @@ Add a new student Agenda Notice board - Attendance + Attendance Grades Grade editing simulator Help @@ -548,7 +544,7 @@ Open-source licenses Privacy policy E-register - © Kuba Szczodrzyński September 2019 + © Kuba Szczodrzyński September 2018 - October 2019 Click to check for updates Update Version @@ -602,12 +598,12 @@ Share exams in your class Enable Event sharing Notice board - Attendances + Attendances Class free days Classrooms Events/agenda Grades - Homework + Homework Lucky number Messages - received Messages - sent @@ -684,7 +680,7 @@ Getting account info Getting notice board Getting attendance types - Getting attendance + Getting attendance Getting behaviour grades categories Getting behaviour grades Getting agenda @@ -751,9 +747,9 @@ Syncing agenda… All Syncing announcements… - Syncing attendances… + Syncing attendance… Syncing grades… - Syncing homeworks… + Syncing homework… Syncing received messages… Syncing sent messages… Syncing notices… @@ -827,4 +823,36 @@ yesterday You\'re offline. Try enabling Wi-Fi or mobile data. Internet connection - \ No newline at end of file + Current + Past + There is no homework. + By date + By subject + LIBRUS account has lost connection with the Synergia account. Login on portal.librus.pl or in the Librus mobile app and follow the instructions to fix the problem. + Compose + Add a new profile + Add or remove students\' profiles + Wrong module given: %d Report it to the application developer + Add event + Save own event or homework in the agenda + Change Agenda view + Debugging + Help and FAQ + Save the timetable as an image + Generates timetable for the whole week + End-of-year average calculation method + Grade averages + Show semester and end-of-year averages + Grades color + Sort grades + Message + Set your register number + Add an attachment + Abort message + Save draft + Send + Absent teachers + Getting grade comments + Getting school free days + Show teacher absences in Agenda + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0dd0cdc8..c5326ab6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -76,8 +76,8 @@ Zwolnienia: Wszystkie przedmioty Podsumowanie - ładowanie… - Podsumowanie - semestr %d  - Podsumowanie - cały rok  + Podsumowanie - semestr %d  + Podsumowanie - cały rok  Wróć Dostosuj wartość przesunięcia dzwonka. Format: ±H:MM:SS Nieprawidłowy format @@ -308,13 +308,9 @@ Pomoc Przekazywanie powiadomień umożliwia sparowanie z przeglądarką internetową w celu wysyłania wszystkich powiadomień z aplikacji na komputer. Można do nich zaliczyć np. nowe oceny, wydarzenia, zadania domowe itp.\n\nKliknij \"Przekazywanie powiadomień\", aby rozpocząć. Rejestracja odbędzie się automatycznie przy pierwszym logowaniu do e-dziennika.\n\nDo poprawnego działania funkcji zostaną przesłane:\n- Twój identyfikator szkoły i klasy\n- Twoja nazwa użytkownika do e-dziennika\n- Twoje imię i nazwisko\n\nJedyne dane widoczne dla innych osób z twojej klasy to Imię i Nazwisko podczas udostępniania wydarzeń. Nie zostaną wysłane żadne prywatne dane, takie jak hasła, oceny itp. Dowiedz się więcej w Polityce Prywatności. - Brak aktualnych zadań domowych. - Aktualne zadania Edytuj - Brak poprzednich zadań domowych. - Poprzednie zadania - %s, %s - %s %s + %s, %s + %s %s Zgadzam się Nie zgadzam się Nieprawidłowy format @@ -429,7 +425,7 @@ Dodaj nowego ucznia Terminarz Tablica ogłoszeń - Frekwencja + Frekwencja Zapisz plan lekcji jako obraz Generuje plan lekcji na cały tydzień Oceny @@ -593,7 +589,7 @@ Licencje open-source Polityka prywatności E-dziennik - © Kuba Szczodrzyński wrzesień 2019 + © Kuba Szczodrzyński wrzesień 2018 - październik 2019 Kliknij, aby sprawdzić aktualizacje Aktualizacja Wersja @@ -647,12 +643,12 @@ Udostępniaj sprawdziany w swojej klasie Włącz Udostępnianie wydarzeń Tablica ogłoszeń - Obecności/nieobecności + Obecności/nieobecności Dni wolne klasy Sale lekcyjne Wydarzenia/terminarz Oceny - Zadania domowe + Zadania domowe Szczęśliwy numerek Wiadomości odebrane Wiadomości wysłane @@ -730,7 +726,7 @@ Pobieranie informacji o koncie Pobieranie ogłoszeń szkolnych Pobieranie kategorii obecności - Pobieranie obecności + Pobieranie obecności Pobieranie kategorii ocen z zachowania Pobieranie ocen z zachowania Pobieranie kalendarza @@ -798,9 +794,9 @@ Pobieram terminarz… Wszystkie Pobieram tablicę ogłoszeń… - Pobieram obecności… + Pobieram obecności… Pobieram oceny… - Pobieram zadania domowe… + Pobieram zadania domowe… Pobieram wiadomości odebrane… Pobieram wiadomości wysłane… Pobieram uwagi… @@ -908,4 +904,11 @@ Serwer Discord Dołącz do naszego serwera Discord! Debugowanie + Pobieranie dni wolnych szkoły + Aktualne + Minione + Brak zadań domowych. + Nieobecni nauczyciele + Pobieranie komentarzy ocen + Pokazuj nieobecności nauczycieli w Terminarzu diff --git a/app/src/main/res/xml/widget_lucky_number_info.xml b/app/src/main/res/xml/widget_lucky_number_info.xml index e768ceaa..18721b35 100644 --- a/app/src/main/res/xml/widget_lucky_number_info.xml +++ b/app/src/main/res/xml/widget_lucky_number_info.xml @@ -12,4 +12,4 @@ android:updatePeriodMillis="1800000" android:widgetCategory="home_screen" android:configure="pl.szczodrzynski.edziennik.widgets.WidgetConfigActivity" - tools:ignore="UnusedAttribute" /> \ No newline at end of file + tools:ignore="UnusedAttribute" /> diff --git a/app/src/main/res/xml/widget_notifications_info.xml b/app/src/main/res/xml/widget_notifications_info.xml index b4931451..e15ea4b9 100644 --- a/app/src/main/res/xml/widget_notifications_info.xml +++ b/app/src/main/res/xml/widget_notifications_info.xml @@ -12,4 +12,4 @@ android:updatePeriodMillis="5400000" android:widgetCategory="home_screen" android:configure="pl.szczodrzynski.edziennik.widgets.WidgetConfigActivity" - tools:ignore="UnusedAttribute" /> \ No newline at end of file + tools:ignore="UnusedAttribute" /> diff --git a/app/src/main/res/xml/widget_timetable_info.xml b/app/src/main/res/xml/widget_timetable_info.xml index e8b8dadb..a549737f 100644 --- a/app/src/main/res/xml/widget_timetable_info.xml +++ b/app/src/main/res/xml/widget_timetable_info.xml @@ -12,4 +12,4 @@ android:updatePeriodMillis="1800000" android:widgetCategory="home_screen" android:configure="pl.szczodrzynski.edziennik.widgets.WidgetConfigActivity" - tools:ignore="UnusedAttribute" /> \ No newline at end of file + tools:ignore="UnusedAttribute" /> diff --git a/build.gradle b/build.gradle index aadf871a..ca180a12 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ buildscript { kotlin_version = '1.3.50' release = [ - versionName: "3.0.3", - versionCode: 3000399 + versionName: "3.1", + versionCode: 3010099 ] setup = [ @@ -44,7 +44,7 @@ buildscript { iconics : "4.0.1-b02", font_cmd : "3.5.95.1-kotlin", - navlib : "84d6447887", + navlib : "e4ad01dc87", gifdrawable : "1.2.15" ]