misp-bump/app/src/main/java/lu/circl/mispbump/custom_views/UploadAction.java

110 lines
3.2 KiB
Java

package lu.circl.mispbump.custom_views;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.core.widget.ImageViewCompat;
import lu.circl.mispbump.R;
public class UploadAction extends LinearLayoutCompat {
private Context context;
public enum UploadState {
PENDING,
LOADING,
DONE,
ERROR
}
private TextView errorView;
private UploadState currentUploadState;
private ImageView stateView;
private ProgressBar progressBar;
public UploadAction(Context context) {
super(context);
this.context = context;
}
public UploadAction(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.UploadAction);
String title = a.getString(R.styleable.UploadAction_title);
a.recycle();
LayoutInflater inflater = LayoutInflater.from(context);
View baseView = inflater.inflate(R.layout.view_upload_action, this);
errorView = findViewById(R.id.error);
TextView titleView = baseView.findViewById(R.id.title);
titleView.setText(title);
stateView = findViewById(R.id.stateView);
progressBar = findViewById(R.id.progressBar);
}
/**
* Displays an error message for the upload action.
* @param error a string to show or null to hide
*/
public void setError(String error) {
if (error == null) {
errorView.setVisibility(GONE);
}
errorView.setText(error);
errorView.setVisibility(VISIBLE);
}
public void setCurrentUploadState(UploadState state) {
currentUploadState = state;
progressBar.setVisibility(GONE);
switch (state) {
case PENDING:
stateView.setVisibility(VISIBLE);
stateView.setImageResource(R.drawable.ic_info_outline);
ImageViewCompat.setImageTintList(stateView, ColorStateList.valueOf(context.getColor(R.color.status_amber)));
break;
case LOADING:
stateView.setVisibility(GONE);
progressBar.setVisibility(VISIBLE);
break;
case DONE:
stateView.setVisibility(VISIBLE);
stateView.setImageResource(R.drawable.ic_check);
ImageViewCompat.setImageTintList(stateView, ColorStateList.valueOf(context.getColor(R.color.status_green)));
break;
case ERROR:
stateView.setVisibility(VISIBLE);
stateView.setImageResource(R.drawable.ic_error_outline);
ImageViewCompat.setImageTintList(stateView, ColorStateList.valueOf(context.getColor(R.color.status_red)));
break;
}
}
public UploadState getCurrentUploadState() {
return currentUploadState;
}
}