🪐 Modern Android development with Hilt, Coroutines, Flow, JetPack(ViewModel) based on MVVM architecture.

Overview

Ceres


🪐 Modern Android development with Hilt, Coroutines, Flow, JetPack(ViewModel) based on MVVM architecture.


Download

License Maven Central API Android CI Profile Portfolio

Gradle

Add the dependency below to your module's build.* file.

  • for build.gradle
dependencies {
  implementation 'dev.teogor:ceres-core:1.0.0-beta01'
}
  • for build.gradle.kts
dependencies {
  implementation("dev.teogor:ceres-core:1.0.0-beta01")
}

Note: This library has more modules therefore include only the ones that you want to use.

Find this repository useful? ❤️

Support it by joining stargazers for this repository.
Also, follow me on GitHub for my next creations! 🤩

License

  Designed and developed by 2022 teogor (Teodor Grigor)

  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.
Comments
  • Crash: `GlobalData.java line 19`

    Crash: `GlobalData.java line 19`

    Crash: GlobalData.java line 19

    Caused by java.lang.NullPointerException
           at dev.teogor.ceres.core.global.GlobalData.getActivity(GlobalData.java:19)
           at dev.teogor.ceres.ads.formats.AppOpenAd.show(AppOpenAd.java:19)
           at dev.teogor.ceres.ads.startup.AdsProvider.showAd(AdsProvider.java:69)
           at android.app.Application.dispatchActivityStarted(Application.java:405)
           at android.app.Activity.dispatchActivityStarted(Activity.java:1406)
           at android.app.Activity.onStart(Activity.java:1922)
           at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:6)
           at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java)
           at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1455)
           at android.app.Activity.performStart(Activity.java:8315)
           at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4136)
           at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
           at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
           at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
           at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
           at android.os.Handler.dispatchMessage(Handler.java:106)
           at android.os.Looper.loopOnce(Looper.java:226)
           at android.os.Looper.loop(Looper.java:313)
           at android.app.ActivityThread.main(ActivityThread.java:8751)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
    
    @bug @priority-critical 
    opened by zeoowl-dev 4
  • [`ceres-firebase`] Failed to resolve $firebase-module dependency

    [`ceres-firebase`] Failed to resolve $firebase-module dependency

    Please complete the following information:

    • Library Version: 1.0.0-alpha01

    Describe the Bug:

    With the ceres-firebase module added the below error is thrown:

    Failed to resolve: com.google.firebase:firebase-appindexing
    

    Expected Behavior:

    The project should build succesfully

    @bug @good-first-issue @priority-high @maintenance @dependency-update 
    opened by zeoowl-dev 4
  • AppOpenAd is empty

    AppOpenAd is empty

    In some cases the app open as is empty therefore the activity's overlay is shown; this will look like the UI freezes and it requires an onBackPressed event.

    Possible reason: it has to do with the cache flow for ad

    @bug @security @priority-critical ads 
    opened by teogor 3
  • Added option to flag activities as non-safe

    Added option to flag activities as non-safe

    Guidelines

    Added option to flag activities as non-safe

    closes #27 #28

    Types of changes

    What types of changes does your code introduce?

    • [x] Bugfix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Preparing a pull request for review

    Ensure your change is properly formatted by running:

    $ ./gradlew spotlessApply
    

    Please correct any failures before requesting a review.

    @priority-critical @issue @feature @bug-fix 
    opened by teogor 3
  • Crash: `BaseTransientBottomBar.java line 146`

    Crash: `BaseTransientBottomBar.java line 146`

    Crash: BaseTransientBottomBar.java line 146

    Caused by java.lang.reflect.InvocationTargetException
           at java.lang.reflect.Constructor.newInstance0(Constructor.java)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
           at android.view.LayoutInflater.createView(LayoutInflater.java:858)
           at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1010)
           at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:663)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:538)
           at dev.teogor.ceres.m3.snackbar.BaseTransientBottomBar.<init>(BaseTransientBottomBar.java:36)
           at dev.teogor.ceres.m3.snackbar.Snackbar.<init>(Snackbar.java)
           at dev.teogor.ceres.m3.snackbar.Snackbar.makeInternal(Snackbar.java:88)
           at dev.teogor.ceres.m3.SnackbarBetaM3.buildSnackbar(SnackbarBetaM3.java:88)
           at dev.teogor.ceres.m3.SnackbarBetaM3.buildSnackbar$default(SnackbarBetaM3.java:88)
           at dev.teogor.ceres.m3.SnackbarBetaM3.<init>(SnackbarBetaM3.java:88)
           at dev.teogor.ceres.m3.SnackbarBetaM3.<init>(SnackbarBetaM3.java:88)
           at dev.teogor.ceres.m3.SnackbarBetaM3$Builder.prepareSnackbar(SnackbarBetaM3.java:137)
           at dev.teogor.ceres.m3.app.BaseActivityM3.processUiEvent(BaseActivityM3.java:137)
           at dev.teogor.ceres.components.app.BaseFragment.processUiEvent(BaseFragment.java:33)
           at dev.teogor.ceres.components.app.BaseFragment$$InternalSyntheticLambda$1$93e51e306c0a7d91c4b850e5dc67e12181e9dcc370125f1a29100ef6cd2df40f$2.onChanged(BaseFragment.java:33)
           at com.google.android.datatransport.runtime.scheduling.persistence.SQLiteEventStore$$ExternalSyntheticLambda5.d(R8$$SyntheticClass:30)
           at androidx.lifecycle.LiveData.considerNotify(LiveData.java:29)
           at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:56)
           at androidx.lifecycle.LiveData.setValue(LiveData.java:14)
           at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java)
           at dev.teogor.ceres.components.events.SingleLiveEvent.setValue(SingleLiveEvent.java:6)
           at com.zeoowl.lwp.aquarium.presentation.feature.home.HomeFragment.setupObservers$lambda-0(HomeFragment.java:111)
           at com.zeoowl.lwp.aquarium.presentation.feature.home.HomeFragment$$InternalSyntheticLambda$1$d0691176a84501196567b810ae9f295ada733c275072e27364673e0325f59bb2$0.onChanged(HomeFragment.java:111)
           at androidx.lifecycle.LiveData.considerNotify(LiveData.java:29)
           at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:56)
           at androidx.lifecycle.LiveData.setValue(LiveData.java:14)
           at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java)
           at dev.teogor.ceres.ads.view.NativeAdView.prepNativeAd$lambda-0(NativeAdView.java:71)
           at dev.teogor.ceres.ads.view.NativeAdView$$InternalSyntheticLambda$1$3a59988f7bfb7fb66125d11b40a4f22e0b10de53fdf4ff5ea0c81630a2e5acf7$0.onChanged(NativeAdView.java:71)
           at androidx.lifecycle.LiveData.considerNotify(LiveData.java:29)
           at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:56)
           at androidx.lifecycle.LiveData.setValue(LiveData.java:14)
           at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java)
           at androidx.lifecycle.LiveData$1.run(LiveData.java:18)
           at android.os.Handler.handleCallback(Handler.java:938)
           at android.os.Handler.dispatchMessage(Handler.java:99)
           at android.os.Looper.loopOnce(Looper.java:226)
           at android.os.Looper.loop(Looper.java:313)
           at android.app.ActivityThread.main(ActivityThread.java:8751)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
    
    Caused by java.lang.IllegalArgumentException: dev.teogor.ceres.m3.snackbar.Snackbar.SnackbarLayout requires a value for the com.zeoowl.lwp.aquarium:attr/colorSurface attribute to be set in your app theme. You can either set the attribute in your theme or update your theme to inherit from Theme.MaterialComponents (or a descendant).
           at com.google.android.material.resources.MaterialAttributes.resolveTypedValueOrThrow(MaterialAttributes.java:32)
           at com.google.android.material.resources.MaterialAttributes.resolveTypedValueOrThrow(MaterialAttributes.java:17)
           at com.google.android.material.color.MaterialColors.getColor(MaterialColors.java:17)
           at com.google.android.material.color.MaterialColors.layer(MaterialColors.java:146)
           at dev.teogor.ceres.m3.snackbar.BaseTransientBottomBar$SnackbarBaseLayout.createThemedBackground(BaseTransientBottomBar.java:146)
           at dev.teogor.ceres.m3.snackbar.BaseTransientBottomBar$SnackbarBaseLayout.<init>(BaseTransientBottomBar.java:146)
           at dev.teogor.ceres.m3.snackbar.Snackbar$SnackbarLayout.<init>(Snackbar.java)
           at java.lang.reflect.Constructor.newInstance0(Constructor.java)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
           at android.view.LayoutInflater.createView(LayoutInflater.java:858)
           at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1010)
           at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:663)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:538)
           at dev.teogor.ceres.m3.snackbar.BaseTransientBottomBar.<init>(BaseTransientBottomBar.java:36)
           at dev.teogor.ceres.m3.snackbar.Snackbar.<init>(Snackbar.java)
           at dev.teogor.ceres.m3.snackbar.Snackbar.makeInternal(Snackbar.java:88)
           at dev.teogor.ceres.m3.SnackbarBetaM3.buildSnackbar(SnackbarBetaM3.java:88)
           at dev.teogor.ceres.m3.SnackbarBetaM3.buildSnackbar$default(SnackbarBetaM3.java:88)
           at dev.teogor.ceres.m3.SnackbarBetaM3.<init>(SnackbarBetaM3.java:88)
           at dev.teogor.ceres.m3.SnackbarBetaM3.<init>(SnackbarBetaM3.java:88)
           at dev.teogor.ceres.m3.SnackbarBetaM3$Builder.prepareSnackbar(SnackbarBetaM3.java:137)
           at dev.teogor.ceres.m3.app.BaseActivityM3.processUiEvent(BaseActivityM3.java:137)
           at dev.teogor.ceres.components.app.BaseFragment.processUiEvent(BaseFragment.java:33)
           at dev.teogor.ceres.components.app.BaseFragment$$InternalSyntheticLambda$1$93e51e306c0a7d91c4b850e5dc67e12181e9dcc370125f1a29100ef6cd2df40f$2.onChanged(BaseFragment.java:33)
           at com.google.android.datatransport.runtime.scheduling.persistence.SQLiteEventStore$$ExternalSyntheticLambda5.d(R8$$SyntheticClass:30)
           at androidx.lifecycle.LiveData.considerNotify(LiveData.java:29)
           at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:56)
           at androidx.lifecycle.LiveData.setValue(LiveData.java:14)
           at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java)
           at dev.teogor.ceres.components.events.SingleLiveEvent.setValue(SingleLiveEvent.java:6)
           at com.zeoowl.lwp.aquarium.presentation.feature.home.HomeFragment.setupObservers$lambda-0(HomeFragment.java:111)
           at com.zeoowl.lwp.aquarium.presentation.feature.home.HomeFragment$$InternalSyntheticLambda$1$d0691176a84501196567b810ae9f295ada733c275072e27364673e0325f59bb2$0.onChanged(HomeFragment.java:111)
           at androidx.lifecycle.LiveData.considerNotify(LiveData.java:29)
           at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:56)
           at androidx.lifecycle.LiveData.setValue(LiveData.java:14)
           at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java)
           at dev.teogor.ceres.ads.view.NativeAdView.prepNativeAd$lambda-0(NativeAdView.java:71)
           at dev.teogor.ceres.ads.view.NativeAdView$$InternalSyntheticLambda$1$3a59988f7bfb7fb66125d11b40a4f22e0b10de53fdf4ff5ea0c81630a2e5acf7$0.onChanged(NativeAdView.java:71)
           at androidx.lifecycle.LiveData.considerNotify(LiveData.java:29)
           at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:56)
           at androidx.lifecycle.LiveData.setValue(LiveData.java:14)
           at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java)
           at androidx.lifecycle.LiveData$1.run(LiveData.java:18)
           at android.os.Handler.handleCallback(Handler.java:938)
           at android.os.Handler.dispatchMessage(Handler.java:99)
           at android.os.Looper.loopOnce(Looper.java:226)
           at android.os.Looper.loop(Looper.java:313)
           at android.app.ActivityThread.main(ActivityThread.java:8751)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
    
    @bug @priority-critical 
    opened by zeoowl-dev 3
  • `Ad` open functions should be converted to data class

    `Ad` open functions should be converted to data class

    Ad open functions should be converted to data class. For example the native ad will contain a native ad builder where we will pass the relevant elements for the native ad.

    @priority-low @feature ads 
    opened by zeoowl-dev 2
  • Invalid class extender - `Logger`

    Invalid class extender - `Logger`

    Currently there are multiple classes that implement or extend the Logger. Even though this adds the option to log($message) from the base class, in case that it is not used it adds a new function to each of its parents.

    I would recommend to look into kotlin-extensions

    @priority-very-low components extensions 
    opened by zeoflow-dev 2
  • Binding adapter already exists

    Binding adapter already exists

    This is the message from console-log

    warning: Binding adapter AK(dev.teogor.ceres.m3.widgets.bar.ToolBar, dev.teogor.ceres.components.toolbar.ToolbarType) already exists for type! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#toolbarBindingType with dev.teogor.ceres.m3.binding.BindingMethods#toolbarBindingType
    warning: Binding adapter AK(dev.teogor.ceres.m3.widgets.bar.ToolBar, dev.teogor.ceres.components.toolbar.ToolbarType) already exists for type! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#toolbarBindingType with dev.teogor.ceres.m3.binding.BindingMethods#toolbarBindingType
    warning: Binding adapter AK(dev.teogor.ceres.m3.widgets.bar.ToolBar, boolean) already exists for is_transparent! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#toolbarBindingIsTransparent with dev.teogor.ceres.m3.binding.BindingMethods#toolbarBindingIsTransparent
    warning: Binding adapter AK(dev.teogor.ceres.m3.widgets.bar.ToolBar, boolean) already exists for is_transparent! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#toolbarBindingIsTransparent with dev.teogor.ceres.m3.binding.BindingMethods#toolbarBindingIsTransparent
    warning: Binding adapter AK(dev.teogor.ceres.m3.SwitchComponentM3, dev.teogor.ceres.m3.SwitchComponentM3.OnCheckedChangeListener) already exists for onCheckedChange! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementCheck with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementCheck
    warning: Binding adapter AK(dev.teogor.ceres.m3.SwitchComponentM3, dev.teogor.ceres.m3.SwitchComponentM3.OnCheckedChangeListener) already exists for onCheckedChange! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementCheck with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementCheck
    warning: Binding adapter AK(dev.teogor.ceres.m3.SwitchComponentM3, dev.teogor.ceres.m3.SwitchComponentM3.OnClickedChangeListener) already exists for onClicked! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementClick with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementClick
    warning: Binding adapter AK(dev.teogor.ceres.m3.SwitchComponentM3, dev.teogor.ceres.m3.SwitchComponentM3.OnClickedChangeListener) already exists for onClicked! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementClick with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementClick
    warning: Binding adapter AK(dev.teogor.ceres.m3.SwitchComponentM3, androidx.lifecycle.MutableLiveData<java.lang.String>) already exists for subtitle! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementSubtitle with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementSubtitle
    warning: Binding adapter AK(dev.teogor.ceres.m3.SwitchComponentM3, androidx.lifecycle.MutableLiveData<java.lang.String>) already exists for subtitle! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementSubtitle with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementSubtitle
    warning: Binding adapter AK(dev.teogor.ceres.m3.SwitchComponentM3, androidx.lifecycle.MutableLiveData<java.lang.String>) already exists for title! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementTitle with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementTitle
    warning: Binding adapter AK(dev.teogor.ceres.m3.SwitchComponentM3, androidx.lifecycle.MutableLiveData<java.lang.String>) already exists for title! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementTitle with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementTitle
    warning: Binding adapter AK(dev.teogor.ceres.m3.SwitchComponentM3, androidx.lifecycle.MutableLiveData<java.lang.Boolean>) already exists for checked! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementChecked with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementChecked
    warning: Binding adapter AK(dev.teogor.ceres.m3.SwitchComponentM3, androidx.lifecycle.MutableLiveData<java.lang.Boolean>) already exists for checked! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementChecked with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementChecked
    warning: Binding adapter AK(dev.teogor.ceres.m3.ColorsContainerM3, dev.teogor.ceres.m3.ColorsContainerM3.OnColorPickListener) already exists for onColorPick! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementChecked with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementChecked
    warning: Binding adapter AK(dev.teogor.ceres.m3.ColorsContainerM3, dev.teogor.ceres.m3.ColorsContainerM3.OnColorPickListener) already exists for onColorPick! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementChecked with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementChecked
    warning: Binding adapter AK(dev.teogor.ceres.m3.ColorsContainerM3, androidx.lifecycle.MutableLiveData<java.lang.Integer>) already exists for pickedColor! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementChecked with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementChecked
    warning: Binding adapter AK(dev.teogor.ceres.m3.ColorsContainerM3, androidx.lifecycle.MutableLiveData<java.lang.Integer>) already exists for pickedColor! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementChecked with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementChecked
    warning: Binding adapter AK(dev.teogor.ceres.m3.ImageComponentM3, dev.teogor.ceres.m3.ImageComponentM3.OnClickedChangeListener) already exists for onClicked! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementClick with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementClick
    warning: Binding adapter AK(dev.teogor.ceres.m3.ImageComponentM3, dev.teogor.ceres.m3.ImageComponentM3.OnClickedChangeListener) already exists for onClicked! Overriding dev.teogor.ceres.m3.binding.BindingMethods.Companion#onContentElementClick with dev.teogor.ceres.m3.binding.BindingMethods#onContentElementClick
    
    @environment @priority-medium bindings 
    opened by zeoflow-dev 2
  • Dependency on `splash-screen`

    Dependency on `splash-screen`

    Currently the project depends on splash-screen library.

    override fun drawEdgeToEdge(splashScreen: SplashScreen?) {
        super.drawEdgeToEdge(splashScreen)
    
        binding.bottomNavigation.applyInsetter {
          type(navigationBars = true) {
            padding()
          }
        }
    
        val startTime = System.currentTimeMillis()
        val elapsed = System.currentTimeMillis() - startTime
        val keepSplashOnScreen =
          elapsed <= SPLASH_MIN_DURATION || !ready && elapsed <= SPLASH_MAX_DURATION
        // splashScreen?.setKeepOnScreenCondition{keepSplashOnScreen}
    
        setSplashScreenExitAnimation(splashScreen)
      }
    
    @bug @priority-medium @dependency-update 
    opened by zeoowl-dev 2
  • Prepared env for next release

    Prepared env for next release

    Guidelines

    Prepared env for next release

    Types of changes

    What types of changes does your code introduce?

    • [ ] Bugfix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Preparing a pull request for review

    Ensure your change is properly formatted by running:

    $ ./gradlew spotlessApply
    

    Please correct any failures before requesting a review.

    @environment @priority-very-low 
    opened by teogor 2
  • Added run configurations for spotless

    Added run configurations for spotless

    Guidelines

    Added run configurations for spotless

    Types of changes

    What types of changes does your code introduce?

    • [ ] Bugfix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Preparing a pull request for review

    Ensure your change is properly formatted by running:

    $ ./gradlew spotlessApply
    

    Please correct any failures before requesting a review.

    @environment @priority-very-low 
    opened by teogor 2
  • Crash when attempting to show the same native ad in the same fragment

    Crash when attempting to show the same native ad in the same fragment

    When the NativeAdView is added multiple times in the same fragment that implements the same ad and adbinder crashes.

    TODO: check if it crashes when we apply different implementations

    java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
      at android.view.ViewGroup.addViewInner(ViewGroup.java:6084)
      at android.view.ViewGroup.addView(ViewGroup.java:5903)
      at android.view.ViewGroup.addView(ViewGroup.java:5843)
      at android.view.ViewGroup.addView(ViewGroup.java:5815)
      at dev.teogor.ceres.ads.view.NativeAdView.addAd(NativeAdView.kt:115)
      at dev.teogor.ceres.ads.view.NativeAdView.prepNativeAd$lambda-0(NativeAdView.kt:79)
      at dev.teogor.ceres.ads.view.NativeAdView.$r8$lambda$xEyKj0WPgw_LDaJKFeGv9QmCnFU(Unknown Source:0)
      at dev.teogor.ceres.ads.view.NativeAdView$$ExternalSyntheticLambda0.onChanged(Unknown Source:6)
      at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
      at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151)
      at androidx.lifecycle.LiveData.setValue(LiveData.java:309)
      at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
      at androidx.lifecycle.LiveData$1.run(LiveData.java:93)
      at android.os.Handler.handleCallback(Handler.java:938)
      at android.os.Handler.dispatchMessage(Handler.java:99)
      at android.os.Looper.loopOnce(Looper.java:226)
      at android.os.Looper.loop(Looper.java:313)
      at android.app.ActivityThread.main(ActivityThread.java:8751)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
    
    opened by zeoflow-dev 1
Releases(1.0.0-beta01)
  • 1.0.0-beta01(Nov 9, 2022)

    Changes

    - Security

    Fixed empty AppOpenAd (#74) by @teogor Added flag to know if an AdActivity was shown (#62) by @teogor Fixed flow for caching ads (#57) by @teogor

    - Enhancement

    Created configurator for NativeAd (#82) by @teogor Added flag to disable app-open-ad once (#80) by @teogor Implemented Toolbar compatible with M3 Guidelines (#78) by @teogor Improved M3 Color Scheme (#66) by @teogor Created DigitsImage & DigitsImageM3 Components (#65) by @teogor Created Toolbar.Builder (#64) by @teogor Added safe-calls extensions for resources (#63) by @teogor Created module-data configurator (#61) by @teogor Added flag to show AppOpenAd on new activity launched (#59) by @teogor Created extensions for MaterialShapeDrawable (#46) by @teogor

    - Bug Fixes

    Fixed crash on API-21 in the splash-screen-animator (#76) by @teogor Fixed empty AppOpenAd (#74) by @teogor Added lastStableActivity to ensure safe activity call (#69) by @teogor Created Toolbar.Builder (#64) by @teogor Added flag to know if an AdActivity was shown (#62) by @teogor Fixed: Attempting to retrieve NavController on null (#60) by @teogor Added flag to show AppOpenAd on new activity launched (#59) by @teogor Fixed flow for caching ads (#57) by @teogor

    - Documentation

    Prepared docs for release 1.0.0-beta01 (#83) by @teogor

    - Others

    Added new animation for different ToolBar states (#72) by @teogor Added new scrollable views that are m3 aware (#71) by @teogor Fixed duplication of BindingsAdapter in m3 (#70) by @teogor Refactored M3 Generator (#48) by @teogor Refactored Snackbar and some utils to kotlin (#47) by @teogor

    Full Changelog: https://github.com/teogor/ceres/compare/1.0.0-alpha04...1.0.0-beta01
    Source code(tar.gz)
    Source code(zip)
  • 1.0.0-alpha04(Nov 2, 2022)

    Changes

    - Security

    Fixed flow for NativeAd (#37) by @teogor

    - Enhancement

    Fixed cannot manage TextViewM3 programmatically (#39) by @teogor Added option to flag activities as non-safe (#38) by @teogor Fixed not working without fragments or navigation controller (#33) by @teogor

    - Bug Fixes

    Fixed cannot manage TextViewM3 programmatically (#39) by @teogor Added option to flag activities as non-safe (#38) by @teogor Fixed flow for NativeAd (#37) by @teogor Removed dependency on splash-screen in base module (#34) by @teogor Fixed not working without fragments or navigation controller (#33) by @teogor Manage the SplashScreen in the app's style (#31) by @teogor Fixed ViewDataBinding is leaking (#29) by @teogor

    - Maintenance

    Prepared for 1.0.0-alpha04 release (#40) by @teogor

    - Dependency Updates

    Removed dependency on splash-screen in base module (#34) by @teogor

    - Documentation

    Prepared for 1.0.0-alpha04 release (#40) by @teogor

    Full Changelog: https://github.com/teogor/ceres/compare/1.0.0-alpha03...1.0.0-alpha04

    Source code(tar.gz)
    Source code(zip)
  • 1.0.0-alpha03(Oct 27, 2022)

    Changes

    - Security

    Fixed functionality of NativeAdView (#24) by @teogor

    - Bug Fixes

    Fixed functionality of NativeAdView (#24) by @teogor Updated Vanniktech plugin version to latest (#20) by @teogor

    - Dependency Updates

    Prepared for next release 1.0.0-alpha03 (#25) by @teogor Fixed github workflow (#18) by @teogor

    - Documentation

    Prepared for next release 1.0.0-alpha03 (#25) by @teogor Updated DOCS (#21) by @teogor Fixed wrong assets (#19) by @teogor Fixed github workflow (#18) by @teogor

    - Others

    Updated git-config/hooks (#22) by @teogor

    Full Changelog: https://github.com/teogor/ceres/compare/1.0.0-alpha02...1.0.0-alpha03
    Source code(tar.gz)
    Source code(zip)
  • 1.0.0-alpha02(Oct 24, 2022)

    Changes

    - Enhancement

    added dependency on Binary Compatibility Validator (#12) by @teogor

    - Bug Fixes

    Added default file for remote config (#15) by @teogor

    - Maintenance

    Added workflows for android (#16) by @teogor Added default file for remote config (#15) by @teogor

    - Dependency Updates

    Added default file for remote config (#15) by @teogor

    - Documentation

    Updated README.MD with current environment (#8) by @teogor

    - Others

    Prepared env for next release (#17) by @teogor Added run configurations for spotless (#14) by @teogor Updated ZeoBot's ENV (#13) by @teogor

    Full Changelog: https://github.com/teogor/ceres/compare/1.0.0-alpha01...1.0.0-alpha02

    Source code(tar.gz)
    Source code(zip)
  • 1.0.0-alpha01(Oct 21, 2022)

    Changes

    - New

    Uploaded ceres library (#4) by @teogor

    - Enhancement

    Uploaded ceres library (#4) by @teogor

    - Maintenance

    Uploaded ceres library (#4) by @teogor Created .github elements (#2) by @teogor ZeoBot's Environment Prepared (#1) by @teogor and @zeobot[bot]

    - Documentation

    Prepare for Alpha-Release v1.0.0-alpha01 (#6) by @teogor Created DOCS (#5) by @teogor

    - Others

    Prepared environment for android (#3) by @teogor

    Full Changelog: https://github.com/teogor/ceres/commits/1.0.0-alpha01


    This discussion was created from the release 1.0.0-alpha01. Source code(tar.gz)
    Source code(zip)
Owner
Teodor G.
I am constantly curious and have a passion for creating exceptional UXes with efficient back end services. OpenSource @ source.teogor.dev
Teodor G.
CryptoMovies is a small app that show modern Android developement: with Hilt, Coroutines, Flow, Jetpack and Material Design 3

CryptoMovies is a small app that show modern Android developement: with Hilt, Coroutines, Flow, Jetpack and Material Design 3.

Leonardo Pirro 7 Sep 2, 2022
Built with Jetpack compose, multi modules MVVM clean architecture, coroutines + flow, dependency injection, jetpack navigation and other jetpack components

RickAndMortyCompose - Work in progress A simple app using Jetpack compose, clean architecture, multi modules, coroutines + flows, dependency injection

Daniel Waiguru 9 Jul 13, 2022
Delish, a Food Recipes App in Jetpack Compose and Hilt based on modern Android tech-stacks and MVVM clean architecture.

Delish Screens Tech stack & Open-source libraries 100% Kotlin based + Coroutines + Flow for asynchronous. Dagger Hilt 2.37 Accompanist JetPack Jetpack

Mohamed Elbehiry 305 Dec 12, 2022
A minimal notes application in Jetpack Compose with MVVM architecture. Built with components like DataStore, Coroutines, ViewModel, LiveData, Room, Navigation-Compose, Coil, koin etc.

Paper - A Minimal Notes App A minimal notes application in Jetpack Compose with MVVM architecture. Built with components like DataStore, Coroutines, V

Akshay Sharma 139 Jan 2, 2023
FaceTimeClone app that implements Coroutines , mvvm architecture , clean architecture , navigation component , hilt , etc.... using kotlin language

This repository contains a FaceTimeClone app that implements Coroutines , mvvm architecture , clean architecture , navigation component , hilt , etc.... using kotlin language

null 17 Dec 13, 2022
A cryptocurrency application with clean architecture (MVVM, Jetpack Compose, Flow, Dagger Hilt)

Amirypto A cryptocurrency application built with Clean architecture and Jetpack component (MVVM, Jetpack Compose, Flow, Hilt, Retrofit). It was made t

null 6 Aug 20, 2022
Includes jetpack compose, navigation, paging, hilt, retrofit, coil, coroutines, flow..

Nextflix-Composable A Clean Architecture App to show use of multi-module-architecture in a Jetpack Compose. The modules are as follow: app: Presentati

Talha Fakıoğlu 198 Jan 1, 2023
Android To-Do MVVM Architecture App written in Kotlin.(ViewModel, ROOM, Livedata, Coroutines)

MVVM-To-Do-App A To-Do application written in kotlin using Android Architectural components What's new? Room + Coroutines - Upgraded Room to v2.1. Roo

Naveen T P 77 Dec 8, 2022
Sample application to demonstrate Multi-module Clean MVVM Architecture and usage of Android Hilt, Kotlin Flow, Navigation Graph, Unit tests etc.

MoneyHeist-Chars Sample application to demonstrate Multi-module Clean MVVM Architecture and usage of Android Hilt, Kotlin Flow, Navigation Graph, Room

Hisham 20 Nov 19, 2022
Example Multi module architecture Android project using MVVM, Dynamic Features, Dagger-Hilt, Coroutines and Navigation Components

ModularDynamicFeatureHilt An Android template project following a multi module approach with clean architecture. It has been built following Clean Arc

Mbuodile Obiosio 25 Nov 23, 2022
Educational App made with Retrofit, Coroutines, Navigation Component, Room, Dagger Hilt, Flow & Material Motion Animations.

TechHub TechHub is a sample educational app that provides courses for people who want to learn new skills in mostly tech-related areas. The goal of th

Jon Areas 32 Dec 20, 2022
Skeleton project for show the architecture of Android project using MVVM, Clean Architecture and Kotlin coroutine Flow

ClearScoreDemo Skeleton project for showing the architecture of Android project using MVVM, Clean architecture and Kotlin coroutine Flow App Architect

Plabon Modak 1 Mar 6, 2022
This app features - Modern Design, MVVM, Hilt, Room, StateFlow, Jetpack Compose

MyMusic is a beautiful app showing how to build modern looking interfaces using Jetpack Compose, recommended libraries, best practices and architectur

Ibrahim 54 Dec 27, 2022
Clean Architecture Modular Project: MVI + Jetpack Compose + Coroutines + Flows + Hilt + UnitTests

NyTimes for Clean Architecture The purpose of this project is to consolidate some of the learned insights throughout the years about the Clean Archite

Ahmed mahmoud abo elnaga 8 Oct 27, 2022
Extension functions over Android's callback-based APIs which allows writing them in a sequential way within coroutines or observe multiple callbacks through kotlin flow.

callback-ktx A lightweight Android library that wraps Android's callback-based APIs into suspending extension functions which allow writing them in a

Sagar Viradiya 171 Oct 31, 2022
ViewModel LiveData Sample - Sample of using ViewModel, LiveData and Data Binding

ViewModel_LiveData_Sample Sample Code for Lesson 8 using ViewModel, LiveData and

null 0 Mar 18, 2022
E-Commerce application with MVVM & Clean Arch - Hilt - Coroutines - Retrofit - Firebase - Room DB.

E-Commerce-App E-Commerce application with MVVM & Clean Arch - Hilt - Coroutines - Retrofit - Firebase - Room DB. API Link Project Features MVVM with

Caner Türe 37 Nov 30, 2022
Sample app that implements MVVM architecture using Kotlin, ViewModel, LiveData, and etc.

TheShard is a project to showcase different architectural approaches to developing Android apps. In its different branches you will find the same app (A movie Listing and detail page) implemented with small differences.

null 17 Aug 19, 2021