├── .github ├── FUNDING.yml └── workflows │ ├── android-ci-generated-artifact.yml │ ├── android-ci.yml │ └── detekt-analysis.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── LICENSE ├── PRIVACY-POLICY.md ├── README.md ├── SECURITY.md ├── action.yml ├── app ├── .gitignore ├── build.gradle.kts ├── frogoboxmedia.jks ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── frogobox │ │ └── appuikit │ │ ├── MainActivity.kt │ │ ├── animation │ │ ├── SampleFrogoAnimationActivity.kt │ │ └── SampleFrogoAnimationTransitionActivity.kt │ │ ├── compose │ │ └── ComposeActivity.kt │ │ ├── core │ │ ├── BaseActivity.kt │ │ ├── BaseFragment.kt │ │ └── BasePagerAdapter.kt │ │ ├── loadingindicator │ │ ├── DetailLoadingIndicatorActivity.kt │ │ └── SampleFrogoLoadingIndicatorViewActivity.kt │ │ ├── model │ │ ├── Layout.kt │ │ ├── Main.kt │ │ └── People.kt │ │ ├── recycler │ │ ├── FrogoRvAdapter.kt │ │ ├── FrogoRvConstant.kt │ │ ├── RecyclerGridFragment.kt │ │ ├── RecyclerListFragment.kt │ │ ├── RecyclerViewActivity.kt │ │ └── RecyclerViewDetailActivity.kt │ │ └── ui │ │ └── theme │ │ ├── Color.kt │ │ ├── Shape.kt │ │ ├── Theme.kt │ │ └── Type.kt │ └── res │ ├── drawable-v24 │ └── ic_launcher_foreground.xml │ ├── drawable │ ├── ic_artist.xml │ └── ic_launcher_background.xml │ ├── layout │ ├── activity_detail_loading_indicator_view.xml │ ├── activity_main.xml │ ├── activity_recycler_view.xml │ ├── activity_recycler_view_detail.xml │ ├── activity_sample_frogo_animation.xml │ ├── activity_sample_frogo_animation_transition.xml │ ├── activity_sample_loading_indicator_view.xml │ ├── fragment_recycler_grid.xml │ ├── fragment_recycler_list.xml │ └── item_indicator.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ └── values │ ├── colors.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle.kts ├── buildSrc ├── .gitignore ├── build.gradle.kts └── src │ └── main │ └── kotlin │ ├── DependencyGradle.kt │ └── ProjectSetting.kt ├── core-ui-android ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── frogobox │ │ └── ui │ │ ├── animation │ │ ├── FrogoAnimation.kt │ │ ├── FrogoSingleAnimation.kt │ │ ├── IFrogoAnimation.kt │ │ ├── core │ │ │ ├── Attention.kt │ │ │ ├── Bounce.kt │ │ │ ├── Fade.kt │ │ │ ├── Flip.kt │ │ │ ├── IAttention.kt │ │ │ ├── IBounce.kt │ │ │ ├── IFade.kt │ │ │ ├── IFlip.kt │ │ │ ├── IRotate.kt │ │ │ ├── ISlide.kt │ │ │ ├── IZoom.kt │ │ │ ├── Rotate.kt │ │ │ ├── Slide.kt │ │ │ └── Zoom.kt │ │ └── util │ │ │ └── Constant.kt │ │ ├── compose │ │ ├── DataBuilder.kt │ │ ├── FrogoComposeList.kt │ │ └── theme │ │ │ ├── Color.kt │ │ │ ├── Dimens.kt │ │ │ ├── Shape.kt │ │ │ ├── Theme.kt │ │ │ └── Type.kt │ │ ├── ext │ │ └── ViewExt.kt │ │ ├── fireworks │ │ ├── AnimatedParticle.kt │ │ ├── Particle.kt │ │ ├── ParticleField.kt │ │ ├── ParticleSystem.kt │ │ ├── initializers │ │ │ ├── AccelerationInitializer.kt │ │ │ ├── ParticleInitializer.kt │ │ │ ├── RotationInitializer.kt │ │ │ ├── RotationSpeedInitializer.kt │ │ │ ├── ScaleInitializer.kt │ │ │ ├── SpeedModuleAndRangeInitializer.kt │ │ │ └── SpeeddByComponentsInitializer.kt │ │ └── modifiers │ │ │ ├── AccelerationModifier.kt │ │ │ ├── AlphaModifier.kt │ │ │ ├── ParticleModifier.kt │ │ │ └── ScaleModifier.kt │ │ └── loadingindicator │ │ ├── FrogoLoadingIndicatorView.java │ │ ├── Indicator.java │ │ └── indicators │ │ ├── BallBeatIndicator.java │ │ ├── BallClipRotateIndicator.java │ │ ├── BallClipRotateMultipleIndicator.java │ │ ├── BallClipRotatePulseIndicator.java │ │ ├── BallGridBeatIndicator.java │ │ ├── BallGridPulseIndicator.java │ │ ├── BallPulseIndicator.java │ │ ├── BallPulseRiseIndicator.java │ │ ├── BallPulseSyncIndicator.java │ │ ├── BallRotateIndicator.java │ │ ├── BallScaleIndicator.java │ │ ├── BallScaleMultipleIndicator.java │ │ ├── BallScaleRippleIndicator.java │ │ ├── BallScaleRippleMultipleIndicator.java │ │ ├── BallSpinFadeLoaderIndicator.java │ │ ├── BallTrianglePathIndicator.java │ │ ├── BallZigZagDeflectIndicator.java │ │ ├── BallZigZagIndicator.java │ │ ├── CubeTransitionIndicator.java │ │ ├── LineScaleIndicator.java │ │ ├── LineScalePartyIndicator.java │ │ ├── LineScalePulseOutIndicator.java │ │ ├── LineScalePulseOutRapidIndicator.java │ │ ├── LineSpinFadeLoaderIndicator.java │ │ ├── PacmanIndicator.java │ │ ├── SemiCircleSpinIndicator.java │ │ ├── SquareSpinIndicator.java │ │ └── TriangleSkewSpinIndicator.java │ └── res │ ├── anim │ ├── blink.xml │ ├── bounce.xml │ ├── card_enter.xml │ ├── card_exit.xml │ ├── diagonal_right_enter.xml │ ├── diagonal_right_exit.xml │ ├── fade_enter.xml │ ├── fade_enter_2.xml │ ├── fade_exit.xml │ ├── fade_exit_2.xml │ ├── fade_in.xml │ ├── fade_out.xml │ ├── flip.xml │ ├── fly_exit.xml │ ├── in_out_enter.xml │ ├── in_out_exit.xml │ ├── move.xml │ ├── rotate.xml │ ├── sequential.xml │ ├── shake_animation.xml │ ├── shrink_enter.xml │ ├── shrink_exit.xml │ ├── slide_down.xml │ ├── slide_down_enter.xml │ ├── slide_down_exit.xml │ ├── slide_in_left.xml │ ├── slide_left_enter.xml │ ├── slide_left_exit.xml │ ├── slide_out_right.xml │ ├── slide_up.xml │ ├── slide_up_enter.xml │ ├── slide_up_exit.xml │ ├── spin_enter.xml │ ├── spin_exit.xml │ ├── split_enter.xml │ ├── split_exit.xml │ ├── swipe_left_enter.xml │ ├── swipe_left_exit.xml │ ├── swipe_right_enter.xml │ ├── swipe_right_exit.xml │ ├── together.xml │ ├── windmill_enter.xml │ ├── windmill_exit.xml │ ├── zoom_enter.xml │ ├── zoom_exit.xml │ ├── zoom_in.xml │ └── zoom_out.xml │ ├── drawable │ ├── frogo_bg_accent_16dp.xml │ ├── frogo_bg_accent_32dp.xml │ ├── frogo_bg_accent_4dp.xml │ ├── frogo_bg_accent_8dp.xml │ ├── frogo_bg_amber_16dp.xml │ ├── frogo_bg_amber_32dp.xml │ ├── frogo_bg_amber_4dp.xml │ ├── frogo_bg_amber_8dp.xml │ ├── frogo_bg_black_16dp.xml │ ├── frogo_bg_black_32dp.xml │ ├── frogo_bg_black_4dp.xml │ ├── frogo_bg_black_8dp.xml │ ├── frogo_bg_blue_16dp.xml │ ├── frogo_bg_blue_32dp.xml │ ├── frogo_bg_blue_4dp.xml │ ├── frogo_bg_blue_8dp.xml │ ├── frogo_bg_card_16dp.xml │ ├── frogo_bg_card_32dp.xml │ ├── frogo_bg_card_4dp.xml │ ├── frogo_bg_card_8dp.xml │ ├── frogo_bg_cyan_16dp.xml │ ├── frogo_bg_cyan_32dp.xml │ ├── frogo_bg_cyan_4dp.xml │ ├── frogo_bg_cyan_8dp.xml │ ├── frogo_bg_dark_yellow_16dp.xml │ ├── frogo_bg_dark_yellow_32dp.xml │ ├── frogo_bg_dark_yellow_4dp.xml │ ├── frogo_bg_dark_yellow_8dp.xml │ ├── frogo_bg_deep_purple_16dp.xml │ ├── frogo_bg_deep_purple_32dp.xml │ ├── frogo_bg_deep_purple_4dp.xml │ ├── frogo_bg_deep_purple_8dp.xml │ ├── frogo_bg_green_16dp.xml │ ├── frogo_bg_green_32dp.xml │ ├── frogo_bg_green_4dp.xml │ ├── frogo_bg_green_8dp.xml │ ├── frogo_bg_indigo_16dp.xml │ ├── frogo_bg_indigo_32dp.xml │ ├── frogo_bg_indigo_4dp.xml │ ├── frogo_bg_indigo_8dp.xml │ ├── frogo_bg_light_blue_16dp.xml │ ├── frogo_bg_light_blue_32dp.xml │ ├── frogo_bg_light_blue_4dp.xml │ ├── frogo_bg_light_blue_8dp.xml │ ├── frogo_bg_light_green_16dp.xml │ ├── frogo_bg_light_green_32dp.xml │ ├── frogo_bg_light_green_4dp.xml │ ├── frogo_bg_light_green_8dp.xml │ ├── frogo_bg_lime_16dp.xml │ ├── frogo_bg_lime_32dp.xml │ ├── frogo_bg_lime_4dp.xml │ ├── frogo_bg_lime_8dp.xml │ ├── frogo_bg_orange_16dp.xml │ ├── frogo_bg_orange_32dp.xml │ ├── frogo_bg_orange_4dp.xml │ ├── frogo_bg_orange_8dp.xml │ ├── frogo_bg_pink_16dp.xml │ ├── frogo_bg_pink_32dp.xml │ ├── frogo_bg_pink_4dp.xml │ ├── frogo_bg_pink_8dp.xml │ ├── frogo_bg_primary_16dp.xml │ ├── frogo_bg_primary_32dp.xml │ ├── frogo_bg_primary_4dp.xml │ ├── frogo_bg_primary_8dp.xml │ ├── frogo_bg_primary_dark_16dp.xml │ ├── frogo_bg_primary_dark_32dp.xml │ ├── frogo_bg_primary_dark_4dp.xml │ ├── frogo_bg_primary_dark_8dp.xml │ ├── frogo_bg_purple_16dp.xml │ ├── frogo_bg_purple_32dp.xml │ ├── frogo_bg_purple_4dp.xml │ ├── frogo_bg_purple_8dp.xml │ ├── frogo_bg_red_16dp.xml │ ├── frogo_bg_red_32dp.xml │ ├── frogo_bg_red_4dp.xml │ ├── frogo_bg_red_8dp.xml │ ├── frogo_bg_teal_16dp.xml │ ├── frogo_bg_teal_32dp.xml │ ├── frogo_bg_teal_4dp.xml │ ├── frogo_bg_teal_8dp.xml │ ├── frogo_bg_white_16dp.xml │ ├── frogo_bg_white_32dp.xml │ ├── frogo_bg_white_4dp.xml │ ├── frogo_bg_white_8dp.xml │ ├── frogo_bg_yellow_16dp.xml │ ├── frogo_bg_yellow_32dp.xml │ ├── frogo_bg_yellow_4dp.xml │ ├── frogo_bg_yellow_8dp.xml │ ├── frogo_bg_yellow_lime_16dp.xml │ ├── frogo_bg_yellow_lime_32dp.xml │ ├── frogo_bg_yellow_lime_4dp.xml │ ├── frogo_bg_yellow_lime_8dp.xml │ └── frogo_ic_empty_view.xml │ ├── layout │ ├── frogo_container_empty_view.xml │ ├── frogo_empty_view.xml │ ├── frogo_rv_grid_type_1.xml │ ├── frogo_rv_grid_type_2.xml │ ├── frogo_rv_grid_type_3.xml │ ├── frogo_rv_grid_type_4.xml │ ├── frogo_rv_grid_type_5.xml │ ├── frogo_rv_grid_type_6.xml │ ├── frogo_rv_grid_type_7.xml │ ├── frogo_rv_list_type_1.xml │ ├── frogo_rv_list_type_10.xml │ ├── frogo_rv_list_type_11.xml │ ├── frogo_rv_list_type_12.xml │ ├── frogo_rv_list_type_2.xml │ ├── frogo_rv_list_type_3.xml │ ├── frogo_rv_list_type_4.xml │ ├── frogo_rv_list_type_5.xml │ ├── frogo_rv_list_type_6.xml │ ├── frogo_rv_list_type_7.xml │ ├── frogo_rv_list_type_8.xml │ └── frogo_rv_list_type_9.xml │ ├── values-night │ ├── colors.xml │ └── themes.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ ├── dimens.xml │ ├── global_colors.xml │ ├── strings.xml │ ├── styles.xml │ └── themes.xml ├── core-ui ├── .gitignore ├── build.gradle.kts └── src │ └── main │ └── java │ └── com │ └── frogobox │ └── coreui │ ├── DataBuilder.kt │ ├── FrogoComposeList.kt │ └── theme │ ├── Color.kt │ ├── Dimens.kt │ ├── Shape.kt │ ├── Theme.kt │ └── Type.kt ├── docs ├── image │ ├── demo_apps.gif │ ├── mad_score.png │ ├── ss_banner.png │ ├── ss_drawables.png │ ├── ss_grid_type_1.png │ ├── ss_grid_type_2.png │ ├── ss_grid_type_3.png │ ├── ss_grid_type_4.png │ ├── ss_grid_type_5.png │ ├── ss_grid_type_6.png │ ├── ss_grid_type_7.png │ ├── ss_home_grid.png │ ├── ss_home_list.png │ ├── ss_list_type_1.png │ ├── ss_list_type_10.png │ ├── ss_list_type_11.png │ ├── ss_list_type_12.png │ ├── ss_list_type_2.png │ ├── ss_list_type_3.png │ ├── ss_list_type_4.png │ ├── ss_list_type_5.png │ ├── ss_list_type_6.png │ ├── ss_list_type_7.png │ ├── ss_list_type_8.png │ └── ss_list_type_9.png ├── recyclerview_grid.md └── recyclerview_list.md ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── jitpack.yml └── settings.gradle.kts /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: amirisback 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: amirisback 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: https://saweria.co/amirisback 13 | -------------------------------------------------------------------------------- /.github/workflows/android-ci.yml: -------------------------------------------------------------------------------- 1 | name: Android CI 2 | 3 | env: 4 | # The name of the main module repository 5 | main_project_module: app 6 | 7 | # The name of the Play Store 8 | playstore_name: Frogobox ID 9 | 10 | on: 11 | # Triggers the workflow on push or pull request events but only for default and protected branches 12 | push: 13 | branches: [ master ] 14 | pull_request: 15 | branches: [ master ] 16 | 17 | workflow_dispatch: 18 | # The workflow will be dispatched to the default queue 19 | 20 | jobs: 21 | build: 22 | 23 | runs-on: ubuntu-latest 24 | 25 | steps: 26 | - uses: actions/checkout@v3 27 | 28 | # Set Current Date As Env Variable 29 | - name: Set current date as env variable 30 | run: echo "date_today=$(date +'%Y-%m-%d')" >> $GITHUB_ENV 31 | 32 | # Set Repository Name As Env Variable 33 | - name: Set repository name as env variable 34 | run: echo "repository_name=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}')" >> $GITHUB_ENV 35 | 36 | - name: Set Up JDK 37 | uses: actions/setup-java@v3 38 | with: 39 | distribution: 'zulu' # See 'Supported distributions' for available options 40 | java-version: '17' 41 | cache: 'gradle' 42 | 43 | - name: Change wrapper permissions 44 | run: chmod +x ./gradlew 45 | 46 | # Run Tests Build 47 | - name: Run gradle tests 48 | run: ./gradlew test 49 | 50 | # Run Build Project 51 | - name: Build gradle project 52 | run: ./gradlew build -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | /.gradle 3 | .gradle 4 | .idea 5 | /local.properties 6 | /.idea/libraries 7 | /.idea/modules.xml 8 | /.idea/workspace.xml 9 | .DS_Store 10 | build 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | 15 | built application files 16 | *.apk 17 | *.aab 18 | 19 | files for the dex VM 20 | *.dex 21 | 22 | Java class files 23 | *.class 24 | 25 | generated files 26 | bin/ 27 | gen/ 28 | .externalNativeBuild/ 29 | 30 | Local configuration file (sdk path, etc) 31 | local.properties 32 | app/version.properties 33 | 34 | # SonarQube 35 | .sonar/ 36 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Use this section to tell people about which versions of your project are 6 | currently being supported with security updates. 7 | 8 | | Version | Supported | 9 | |---------|--------------------| 10 | | 5.1.x | :white_check_mark: | 11 | | 5.0.x | :x: | 12 | | 4.0.x | :white_check_mark: | 13 | | < 4.0 | :x: | 14 | 15 | ## Reporting a Vulnerability 16 | 17 | Use this section to tell people how to report a vulnerability. 18 | 19 | Tell them where to go, how often they can expect to get an update on a 20 | reported vulnerability, what to expect if the vulnerability is accepted or 21 | declined, etc. 22 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'Frogo-UI' 2 | description: 'Library Easy UI Kit Based on Design Guideline, Full and Clear Documentation, :books:' 3 | author: 'Muhammad Faisal Amir - Frogobox' 4 | branding: 5 | icon: archive 6 | color: green 7 | inputs: 8 | myInput: 9 | description: 'Input to use' 10 | required: false 11 | default: 'world' 12 | runs: 13 | using: 'docker' 14 | image: 'Dockerfile' 15 | args: 16 | - ${{ inputs.myInput }} -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/frogoboxmedia.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frogobox/frogo-ui/cc0459c5dff52c515b267225bddc294d896cf241/app/frogoboxmedia.jks -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle.kts.kts. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/main/java/com/frogobox/appuikit/animation/SampleFrogoAnimationActivity.kt: -------------------------------------------------------------------------------- 1 | package com.frogobox.appuikit.animation 2 | 3 | import android.content.Intent 4 | import android.os.Bundle 5 | import com.frogobox.ui.animation.FrogoAnimation 6 | import com.frogobox.ui.animation.core.Attention 7 | import com.frogobox.appuikit.core.BaseActivity 8 | import com.frogobox.appuikit.databinding.ActivitySampleFrogoAnimationBinding 9 | 10 | class SampleFrogoAnimationActivity : BaseActivity() { 11 | 12 | override fun setupViewBinding(): ActivitySampleFrogoAnimationBinding { 13 | return ActivitySampleFrogoAnimationBinding.inflate(layoutInflater) 14 | } 15 | 16 | override fun onCreate(savedInstanceState: Bundle?) { 17 | super.onCreate(savedInstanceState) 18 | setupDetailActivity("Frogo Animation") 19 | 20 | FrogoAnimation().apply { 21 | setAnimation(Attention.Ruberband(binding.textView)) 22 | setRepeated() 23 | setDuration(1500) 24 | }.start() 25 | 26 | binding.btnTransition.setOnClickListener { 27 | startActivity( 28 | Intent( 29 | this@SampleFrogoAnimationActivity, 30 | SampleFrogoAnimationTransitionActivity::class.java 31 | ) 32 | ) 33 | } 34 | 35 | } 36 | 37 | 38 | } -------------------------------------------------------------------------------- /app/src/main/java/com/frogobox/appuikit/animation/SampleFrogoAnimationTransitionActivity.kt: -------------------------------------------------------------------------------- 1 | package com.frogobox.appuikit.animation 2 | 3 | import android.os.Bundle 4 | import com.frogobox.appuikit.core.BaseActivity 5 | import com.frogobox.appuikit.databinding.ActivitySampleFrogoAnimationTransitionBinding 6 | 7 | class SampleFrogoAnimationTransitionActivity : BaseActivity() { 8 | 9 | override fun setupViewBinding(): ActivitySampleFrogoAnimationTransitionBinding { 10 | return ActivitySampleFrogoAnimationTransitionBinding.inflate(layoutInflater) 11 | } 12 | 13 | override fun onCreate(savedInstanceState: Bundle?) { 14 | super.onCreate(savedInstanceState) 15 | 16 | binding.apply { 17 | 18 | } 19 | 20 | } 21 | 22 | } -------------------------------------------------------------------------------- /app/src/main/java/com/frogobox/appuikit/core/BasePagerAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.frogobox.appuikit.core 2 | 3 | import androidx.fragment.app.Fragment 4 | import androidx.fragment.app.FragmentActivity 5 | import androidx.viewpager2.adapter.FragmentStateAdapter 6 | 7 | 8 | /** 9 | * Created by Faisal Amir 10 | * FrogoBox Inc License 11 | * ========================================= 12 | * SpeechBooster 13 | * Copyright (C) 04/09/2019. 14 | * All rights reserved 15 | * ----------------------------------------- 16 | * Name : Muhammad Faisal Amir 17 | * E-mail : faisalamircs@gmail.com 18 | * Github : github.com/amirisback 19 | * LinkedIn : linkedin.com/in/faisalamircs 20 | * ----------------------------------------- 21 | * FrogoBox Software Industries 22 | * com.frogobox.speechbooster.util.helper 23 | * 24 | */ 25 | 26 | class BasePagerAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity) { 27 | 28 | val fragments = ArrayList() 29 | val titles = ArrayList() 30 | 31 | fun setupPagerFragment(fragment: Fragment, title: String) { 32 | fragments.add(fragment) 33 | titles.add(title) 34 | } 35 | 36 | override fun createFragment(position: Int): Fragment { 37 | return fragments[position] 38 | } 39 | 40 | override fun getItemCount(): Int { 41 | return fragments.size 42 | } 43 | 44 | } -------------------------------------------------------------------------------- /app/src/main/java/com/frogobox/appuikit/loadingindicator/DetailLoadingIndicatorActivity.kt: -------------------------------------------------------------------------------- 1 | package com.frogobox.appuikit.loadingindicator 2 | 3 | import android.os.Bundle 4 | import android.view.View 5 | import com.frogobox.appuikit.core.BaseActivity 6 | import com.frogobox.appuikit.databinding.ActivityDetailLoadingIndicatorViewBinding 7 | 8 | /** 9 | * Created by Jack Wang on 2016/8/5. 10 | */ 11 | class DetailLoadingIndicatorActivity : BaseActivity() { 12 | 13 | override fun setupViewBinding(): ActivityDetailLoadingIndicatorViewBinding { 14 | return ActivityDetailLoadingIndicatorViewBinding.inflate(layoutInflater) 15 | } 16 | 17 | override fun onCreate(savedInstanceState: Bundle?) { 18 | super.onCreate(savedInstanceState) 19 | val indicator = intent.getStringExtra("indicator") 20 | binding.fli.setIndicator(indicator) 21 | } 22 | 23 | fun hideClick(view: View?) { 24 | binding.fli.hide() 25 | // or fli.smoothToHide(); 26 | } 27 | 28 | fun showClick(view: View?) { 29 | binding.fli.show() 30 | // or fli.smoothToShow(); 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /app/src/main/java/com/frogobox/appuikit/model/Layout.kt: -------------------------------------------------------------------------------- 1 | package com.frogobox.appuikit.model 2 | 3 | /* 4 | * Created by faisalamir on 20/05/21 5 | * FrogoUIKit 6 | * ----------------------------------------- 7 | * Name : Muhammad Faisal Amir 8 | * E-mail : faisalamircs@gmail.com 9 | * Github : github.com/amirisback 10 | * ----------------------------------------- 11 | * Copyright (C) 2021 FrogoBox Inc. 12 | * All rights reserved 13 | * 14 | */ 15 | 16 | data class Layout( 17 | val name: String, 18 | val type: String, 19 | val layout: Int, 20 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/frogobox/appuikit/model/Main.kt: -------------------------------------------------------------------------------- 1 | package com.frogobox.appuikit.model 2 | 3 | import android.content.Intent 4 | 5 | /* 6 | * Created by faisalamir on 21/05/21 7 | * FrogoUIKit 8 | * ----------------------------------------- 9 | * Name : Muhammad Faisal Amir 10 | * E-mail : faisalamircs@gmail.com 11 | * Github : github.com/amirisback 12 | * ----------------------------------------- 13 | * Copyright (C) 2021 FrogoBox Inc. 14 | * All rights reserved 15 | * 16 | */ 17 | data class Main( 18 | val name: String, 19 | val intent: Intent 20 | ) 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/frogobox/appuikit/model/People.kt: -------------------------------------------------------------------------------- 1 | package com.frogobox.appuikit.model 2 | 3 | /* 4 | * Created by faisalamir on 09/09/21 5 | * FrogoAndroidUIKit 6 | * ----------------------------------------- 7 | * Name : Muhammad Faisal Amir 8 | * E-mail : faisalamircs@gmail.com 9 | * Github : github.com/amirisback 10 | * ----------------------------------------- 11 | * Copyright (C) 2021 FrogoBox Inc. 12 | * All rights reserved 13 | * 14 | */ 15 | data class People( 16 | val name: String, 17 | val role: String 18 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/frogobox/appuikit/recycler/RecyclerViewActivity.kt: -------------------------------------------------------------------------------- 1 | package com.frogobox.appuikit.recycler 2 | 3 | import android.os.Bundle 4 | import com.frogobox.appuikit.core.BaseActivity 5 | import com.frogobox.appuikit.core.BasePagerAdapter 6 | import com.frogobox.appuikit.databinding.ActivityRecyclerViewBinding 7 | 8 | class RecyclerViewActivity : BaseActivity() { 9 | 10 | override fun setupViewBinding(): ActivityRecyclerViewBinding { 11 | return ActivityRecyclerViewBinding.inflate(layoutInflater) 12 | } 13 | 14 | override fun onCreate(savedInstanceState: Bundle?) { 15 | super.onCreate(savedInstanceState) 16 | setupDetailActivity("List UI RecyclerView") 17 | setupViewPager() 18 | } 19 | 20 | private fun setupViewPager() { 21 | val pagerAdapter = BasePagerAdapter(this).apply { 22 | setupPagerFragment(RecyclerListFragment(), "List") 23 | setupPagerFragment(RecyclerGridFragment(),"Grid") 24 | } 25 | 26 | binding.apply { 27 | viewpager.adapter = pagerAdapter 28 | setupTabTitles(tablayout, viewpager, pagerAdapter.titles) 29 | } 30 | } 31 | 32 | } -------------------------------------------------------------------------------- /app/src/main/java/com/frogobox/appuikit/ui/theme/Color.kt: -------------------------------------------------------------------------------- 1 | package com.frogobox.appuikit.ui.theme 2 | 3 | import androidx.compose.ui.graphics.Color 4 | 5 | val Purple200 = Color(0xFFBB86FC) 6 | val Purple500 = Color(0xFF6200EE) 7 | val Purple700 = Color(0xFF3700B3) 8 | val Teal200 = Color(0xFF03DAC5) -------------------------------------------------------------------------------- /app/src/main/java/com/frogobox/appuikit/ui/theme/Shape.kt: -------------------------------------------------------------------------------- 1 | package com.frogobox.appuikit.ui.theme 2 | 3 | import androidx.compose.foundation.shape.RoundedCornerShape 4 | import androidx.compose.material.Shapes 5 | import androidx.compose.ui.unit.dp 6 | 7 | val Shapes = Shapes( 8 | small = RoundedCornerShape(4.dp), 9 | medium = RoundedCornerShape(4.dp), 10 | large = RoundedCornerShape(0.dp) 11 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/frogobox/appuikit/ui/theme/Theme.kt: -------------------------------------------------------------------------------- 1 | package com.frogobox.appuikit.ui.theme 2 | 3 | import androidx.compose.foundation.isSystemInDarkTheme 4 | import androidx.compose.material.MaterialTheme 5 | import androidx.compose.material.darkColors 6 | import androidx.compose.material.lightColors 7 | import androidx.compose.runtime.Composable 8 | 9 | private val DarkColorPalette = darkColors( 10 | primary = Purple200, 11 | primaryVariant = Purple700, 12 | secondary = Teal200 13 | ) 14 | 15 | private val LightColorPalette = lightColors( 16 | primary = Purple500, 17 | primaryVariant = Purple700, 18 | secondary = Teal200 19 | 20 | /* Other default colors to override 21 | background = Color.White, 22 | surface = Color.White, 23 | onPrimary = Color.White, 24 | onSecondary = Color.Black, 25 | onBackground = Color.Black, 26 | onSurface = Color.Black, 27 | */ 28 | ) 29 | 30 | @Composable 31 | fun FrogoAndroidUIKitTheme( 32 | darkTheme: Boolean = isSystemInDarkTheme(), 33 | content: @Composable() () -> Unit 34 | ) { 35 | val colors = if (darkTheme) { 36 | DarkColorPalette 37 | } else { 38 | LightColorPalette 39 | } 40 | 41 | MaterialTheme( 42 | colors = colors, 43 | typography = Typography, 44 | shapes = Shapes, 45 | content = content 46 | ) 47 | } -------------------------------------------------------------------------------- /app/src/main/java/com/frogobox/appuikit/ui/theme/Type.kt: -------------------------------------------------------------------------------- 1 | package com.frogobox.appuikit.ui.theme 2 | 3 | import androidx.compose.material.Typography 4 | import androidx.compose.ui.text.TextStyle 5 | import androidx.compose.ui.text.font.FontFamily 6 | import androidx.compose.ui.text.font.FontWeight 7 | import androidx.compose.ui.unit.sp 8 | 9 | // Set of Material typography styles to start with 10 | val Typography = Typography( 11 | body1 = TextStyle( 12 | fontFamily = FontFamily.Default, 13 | fontWeight = FontWeight.Normal, 14 | fontSize = 16.sp 15 | ) 16 | /* Other default text styles to override 17 | button = TextStyle( 18 | fontFamily = FontFamily.Default, 19 | fontWeight = FontWeight.W500, 20 | fontSize = 14.sp 21 | ), 22 | caption = TextStyle( 23 | fontFamily = FontFamily.Default, 24 | fontWeight = FontWeight.Normal, 25 | fontSize = 12.sp 26 | ) 27 | */ 28 | ) -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_detail_loading_indicator_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 19 | 20 | 21 | 22 | 25 | 26 |