MCPcopy Index your code
hub / github.com/abdularis/AndroidButtonProgress

github.com/abdularis/AndroidButtonProgress @1.1.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 1.1.0 ↗ · + Follow
98 symbols 173 edges 5 files 4 documented · 4%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

AndroidButtonProgress

Android Arsenal

This is a combination of button and progress bar. There are 4 states in this view first Idle, Indeterminate, Determinate and Finish. it makes you easy to manage download button state in your app ui.

In a download case you can use this as.

  • 1st show download button to the user
  • 2nd show indeterminate progress bar, it tells the user that the download is connecting.
  • 3rd show determinate progress bar, which tells the user that the download is progressing
  • 4th show finish button/icon

Demo

demo

Usage

Use jitpack

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}

Gradle

dependencies {
        implementation 'com.github.abdularis:androidbuttonprogress:1.0.2'
}

Please always use same width and height for this button progress view

<com.github.abdularis.buttonprogress.DownloadButtonProgress
    android:layout_width="45dp"
    android:layout_height="45dp"/>

sc1

You can also

<com.github.abdularis.buttonprogress.DownloadButtonProgress
    android:layout_width="72dp"
    android:layout_height="72dp"
    app:progressIndeterminateSweepAngle="1"
    app:state="INDETERMINATE"/>

demo1

Use custom drawable for every state

<com.github.abdularis.buttonprogress.DownloadButtonProgress
    android:id="@+id/button_progress_2"
    android:layout_width="64dp"
    android:layout_height="64dp"
    android:layout_marginTop="20dp"
    app:idleIconDrawable="@drawable/ic_download"
    app:idleBackgroundDrawable="@drawable/bg_button_progress"
    app:cancelIconDrawable="@drawable/ic_cancel"
    app:indeterminateBackgroundDrawable="@drawable/bg_button_progress"
    app:progressIndeterminateColor="#828282"
    app:determinateBackgroundDrawable="@drawable/bg_button_progress"
    app:progressDeterminateColor="#ef2241"
    app:finishIconDrawable="@drawable/ic_finish"
    app:finishBackgroundDrawable="@drawable/bg_button_progress"/>

sc1

Note: you can use DownloadButtonProgress as upload button too just replace the idle download icon with upload icon! :)

Click listener

DownloadButtonProgress btn = findViewById(R.id.button_progress_id);

btn.addOnClickListener(new DownloadButtonProgress.OnClickListener() {
    @Override
    public void onIdleButtonClick(View view) {
        // called when download button/icon is clicked
    }

    @Override
    public void onCancelButtonClick(View view) {
        // called when cancel button/icon is clicked
    }

    @Override
    public void onFinishButtonClick(View view) {
        // called when finish button/icon is clicked
    }
});

Attributes

attrs for DownloadButtonProgress

<declare-styleable name="DownloadButtonProgress">
    <attr name="state" format="enum">
        <enum name="IDLE" value="1"/>
        <enum name="INDETERMINATE" value="2"/>
        <enum name="DETERMINATE" value="3"/>
        <enum name="FINISHED" value="4"/>           
    </attr>
    <attr name="cancelable" format="boolean"/>
    <attr name="progressIndeterminateSweepAngle" format="integer"/>

    <attr name="idleBackgroundColor" format="color"/>
    <attr name="finishBackgroundColor" format="color"/>
    <attr name="indeterminateBackgroundColor" format="color"/>
    <attr name="determinateBackgroundColor" format="color"/>

    <attr name="idleBackgroundDrawable" format="reference"/>
    <attr name="finishBackgroundDrawable" format="reference"/>
    <attr name="indeterminateBackgroundDrawable" format="reference"/>
    <attr name="determinateBackgroundDrawable" format="reference"/>

    <attr name="progress" format="integer"/>
    <attr name="maxProgress" format="integer"/>
    <attr name="progressWidth" format="dimension"/>
    <attr name="progressMargin" format="dimension"/>
    <attr name="progressDeterminateColor" format="color"/>
    <attr name="progressIndeterminateColor" format="color"/>

    <attr name="idleIconDrawable" format="reference"/>
    <attr name="idleIconWidth" format="dimension"/>
    <attr name="idleIconHeight" format="dimension"/>

    <attr name="cancelIconDrawable" format="reference"/>
    <attr name="cancelIconWidth" format="dimension"/>
    <attr name="cancelIconHeight" format="dimension"/>

    <attr name="finishIconDrawable" format="reference"/>
    <attr name="finishIconWidth" format="dimension"/>
    <attr name="finishIconHeight" format="dimension"/>
</declare-styleable>

License

Apache License 2.0

Extension points exported contracts — how you extend this code

OnClickListener (Interface)
(no doc) [1 implementers]
library/src/main/java/com/github/abdularis/buttonprogress/DownloadButtonProgress.java
OnStateChangedListener (Interface)
(no doc) [1 implementers]
library/src/main/java/com/github/abdularis/buttonprogress/DownloadButtonProgress.java

Core symbols most depended-on inside this repo

callStateChangedListener
called by 4
library/src/main/java/com/github/abdularis/buttonprogress/DownloadButtonProgress.java
drawDrawableInCenter
called by 4
library/src/main/java/com/github/abdularis/buttonprogress/DownloadButtonProgress.java
setIndeterminate
called by 2
library/src/main/java/com/github/abdularis/buttonprogress/DownloadButtonProgress.java
setProgressRectBounds
called by 2
library/src/main/java/com/github/abdularis/buttonprogress/DownloadButtonProgress.java
setListenerFor
called by 2
sample/src/main/java/com/github/abdularis/sample/MainActivity.java
initBackgroundDrawableFromAttribs
called by 1
library/src/main/java/com/github/abdularis/buttonprogress/DownloadButtonProgress.java
getCurrState
called by 1
library/src/main/java/com/github/abdularis/buttonprogress/DownloadButtonProgress.java
getMaxProgress
called by 1
library/src/main/java/com/github/abdularis/buttonprogress/DownloadButtonProgress.java

Shape

Method 91
Class 5
Interface 2

Languages

Java100%

Modules by API surface

library/src/main/java/com/github/abdularis/buttonprogress/DownloadButtonProgress.java80 symbols
sample/src/main/java/com/github/abdularis/sample/SampleTask.java7 symbols
sample/src/main/java/com/github/abdularis/sample/MainActivity.java7 symbols
sample/src/test/java/com/github/abdularis/sample/ExampleUnitTest.java2 symbols
sample/src/androidTest/java/com/github/abdularis/sample/ExampleInstrumentedTest.java2 symbols

For agents

$ claude mcp add AndroidButtonProgress \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact