mirror of
https://github.com/Nezumi-2711/Foodify-Shipper.git
synced 2026-09-23 04:09:52 +00:00
Improve UI, fix bugs.
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
package com.sjapps.library;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ExampleInstrumentedTest {
|
||||
@Test
|
||||
public void useAppContext() {
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||
assertEquals("com.sjapps.library.test", appContext.getPackageName());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.sjapps.library">
|
||||
|
||||
|
||||
</manifest>
|
||||
@@ -0,0 +1,437 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.StyleRes;
|
||||
|
||||
import com.sjapps.library.R;
|
||||
/**@since 1.6*/
|
||||
@SuppressWarnings("unused")
|
||||
public class BasicDialog extends SJDialog{
|
||||
@Deprecated
|
||||
public static final String LONG_TYPE = "long";
|
||||
@Deprecated
|
||||
public static final String SHORT_TYPE = "short";
|
||||
|
||||
private boolean isDeleteDialog;
|
||||
|
||||
public BasicDialog(){
|
||||
twoButtons = true;
|
||||
}
|
||||
/** @since 1.4*/
|
||||
public BasicDialog Short(Context context, String Title){
|
||||
return Short(context,Title,null);
|
||||
}
|
||||
/** @since 1.0*/
|
||||
public BasicDialog Short(Context context, String Title, String Btn1Txt, String Btn2Txt){
|
||||
return Builder(context,Title,null,Btn1Txt,Btn2Txt);
|
||||
}
|
||||
/** @since 1.0*/
|
||||
public BasicDialog Short(Context context, String Title, String Btn2Txt){
|
||||
return Short(context,Title,null,Btn2Txt);
|
||||
}
|
||||
/** @since 1.4*/
|
||||
public BasicDialog Long(Context context, String Title, String Message){
|
||||
return Long(context,Title,Message,null);
|
||||
}
|
||||
/** @since 1.0*/
|
||||
public BasicDialog Long(Context context, String Title, String Text, String Btn1Txt, String Btn2Txt){
|
||||
return Builder(context,Title,Text,Btn1Txt,Btn2Txt);
|
||||
}
|
||||
/** @since 1.0*/
|
||||
public BasicDialog Long(Context context, String Title, String Text, String Btn2Txt){
|
||||
return Long(context,Title,Text,null,Btn2Txt);
|
||||
}
|
||||
/** @since 1.0*/
|
||||
public BasicDialog Delete(Context context, String Title){
|
||||
return Builder(context,Title,null,null,null).deleteAttributes();
|
||||
}
|
||||
/** @since 1.0*/
|
||||
public BasicDialog Delete(Context context){
|
||||
return Builder(context).deleteAttributes();
|
||||
}
|
||||
|
||||
public BasicDialog Delete(Context context, int theme){
|
||||
return Builder(context,theme).deleteAttributes();
|
||||
}
|
||||
|
||||
public BasicDialog Delete(Context context, boolean useAppTheme){
|
||||
return Builder(context,useAppTheme).deleteAttributes();
|
||||
}
|
||||
|
||||
private BasicDialog deleteAttributes(){
|
||||
isDeleteDialog = true;
|
||||
return setTitle("Delete?")
|
||||
.setRightButtonColor(MATERIAL3_RED_BUTTON)
|
||||
.setRightButtonText("Delete");
|
||||
}
|
||||
/**
|
||||
* @deprecated Use {@link BasicDialog#Builder(Context)}
|
||||
* */
|
||||
@Deprecated(since = "1.6")
|
||||
public BasicDialog DialogBuilder(Context context){
|
||||
return Builder(context);
|
||||
}
|
||||
/**
|
||||
* @deprecated Use {@link BasicDialog#Builder(Context, boolean)}
|
||||
* @since 1.6
|
||||
*/
|
||||
@Deprecated
|
||||
public BasicDialog DialogBuilder(Context context, boolean useAppTheme){
|
||||
return Builder(context, useAppTheme);
|
||||
}
|
||||
/**
|
||||
* @deprecated Use {@link BasicDialog#Builder(Context, int)}
|
||||
*/
|
||||
@Deprecated(since = "1.6")
|
||||
public BasicDialog DialogBuilder(Context context, int theme){
|
||||
return Builder(context,theme);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Dialog type is automatic. Use {@link BasicDialog#Builder(Context)}
|
||||
* @since 1.3
|
||||
*/
|
||||
@Deprecated(since = "1.4")
|
||||
public BasicDialog DialogBuilder(Context context, String dialogType){
|
||||
return Builder(context);
|
||||
}
|
||||
/**
|
||||
* @deprecated Use {@link BasicDialog#Builder(Context, String, String, String, String)}
|
||||
* @since 1.0
|
||||
*/
|
||||
@Deprecated(since = "1.6")
|
||||
public BasicDialog DialogBuilder(Context context, String Title, String Text, String Btn1Txt, String Btn2Txt){
|
||||
return Builder(context,Title,Text,Btn1Txt,Btn2Txt);
|
||||
}
|
||||
public BasicDialog Builder(Context context){
|
||||
super.Builder(context,R.layout.basic_dialog);
|
||||
return this;
|
||||
}
|
||||
public BasicDialog Builder(Context context, boolean useAppTheme){
|
||||
super.Builder(context,R.layout.basic_dialog,useAppTheme);
|
||||
return this;
|
||||
}
|
||||
public BasicDialog Builder(Context context,@StyleRes int theme){
|
||||
super.Builder(context,R.layout.basic_dialog,theme,false);
|
||||
return this;
|
||||
}
|
||||
public BasicDialog Builder(Context context, String Title, String Text, String Btn1Txt, String Btn2Txt){
|
||||
super.Builder(context,R.layout.basic_dialog);
|
||||
TextView TitleTv = dialog.findViewById(R.id.titleText);
|
||||
if (Btn1Txt == null) {
|
||||
button1.setOnClickListener(v -> dialog.dismiss());
|
||||
}else button1.setText(Btn1Txt);
|
||||
if (Btn2Txt != null) {
|
||||
button2.setText(Btn2Txt);
|
||||
}
|
||||
if (Text != null){
|
||||
setMessage(Text);
|
||||
}
|
||||
if (Title == null){
|
||||
return this;
|
||||
}
|
||||
TitleTv.setText(Title);
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Set a dialog type.
|
||||
* @param dialogType type of a dialog. Supported types: {@link #SHORT_TYPE} and {@link #LONG_TYPE}
|
||||
* @return current class
|
||||
* @deprecated Old method, not in use. Remove this.
|
||||
* @since 1.4
|
||||
* */
|
||||
@Deprecated
|
||||
public BasicDialog setDialogType(String dialogType){
|
||||
//Nothing here!!
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public BasicDialog setOldTheme(){
|
||||
super.setOldTheme();
|
||||
if (isDeleteDialog)
|
||||
super.setRightButtonColor(RED_BUTTON);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.3*/
|
||||
@Override
|
||||
public BasicDialog setTitle(String title){
|
||||
super.setTitle(title);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.3*/
|
||||
@Override
|
||||
public BasicDialog setMessage(String message){
|
||||
super.setMessage(message);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @since 1.6
|
||||
* */
|
||||
@Override
|
||||
public BasicDialog setTitleAlignment(int textAlignment) {
|
||||
super.setTitleAlignment(textAlignment);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @since 1.6
|
||||
* */
|
||||
@Override
|
||||
public BasicDialog setMessageAlignment(int textAlignment) {
|
||||
super.setMessageAlignment(textAlignment);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public BasicDialog setTextColor(int color) {
|
||||
super.setTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public BasicDialog setTitleTextColor(int color) {
|
||||
super.setTitleTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public BasicDialog setMessageTextColor(int color) {
|
||||
super.setMessageTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.4*/
|
||||
@Override
|
||||
public BasicDialog setLeftButtonText(String text){
|
||||
super.setLeftButtonText(text);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.4*/
|
||||
@Override
|
||||
public BasicDialog setRightButtonText(String text){
|
||||
super.setRightButtonText(text);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.4*/
|
||||
@Override
|
||||
public BasicDialog setButtonsTextColor(@ColorInt int color){
|
||||
super.setButtonsTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.4*/
|
||||
@Override
|
||||
public BasicDialog setLeftButtonTextColor(@ColorInt int color){
|
||||
super.setLeftButtonTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.4*/
|
||||
@Override
|
||||
public BasicDialog setRightButtonTextColor(@ColorInt int color){
|
||||
super.setRightButtonTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.4*/
|
||||
@Override
|
||||
public BasicDialog setButtonsColor(@ColorInt int color){
|
||||
super.setButtonsColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.4*/
|
||||
@Override
|
||||
public BasicDialog setLeftButtonColor(@ColorInt int color){
|
||||
super.setLeftButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.4*/
|
||||
@Override
|
||||
public BasicDialog setRightButtonColor(@ColorInt int color){
|
||||
super.setRightButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BasicDialog setButtonsColor(@ButtonColor String color){
|
||||
super.setButtonsColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BasicDialog setLeftButtonColor(@ButtonColor String color){
|
||||
super.setLeftButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BasicDialog setRightButtonColor(@ButtonColor String color){
|
||||
super.setRightButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public BasicDialog setDialogBackgroundColor(int color) {
|
||||
super.setDialogBackgroundColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.3*/
|
||||
@Override
|
||||
public BasicDialog setDialogBackgroundResource(@DrawableRes int drawable){
|
||||
super.setDialogBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.3*/
|
||||
@Override
|
||||
public BasicDialog setButtonsBackgroundResource(@DrawableRes int drawable){
|
||||
super.setButtonsBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.3*/
|
||||
@Override
|
||||
public BasicDialog setLeftButtonBackgroundResource(@DrawableRes int drawable){
|
||||
super.setLeftButtonBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.3*/
|
||||
@Override
|
||||
public BasicDialog setRightButtonBackgroundResource(@DrawableRes int drawable){
|
||||
super.setRightButtonBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.0*/
|
||||
@Override
|
||||
public BasicDialog onButtonClick(DialogButtonEvent dialogButtonEvent){
|
||||
super.onButtonClick(dialogButtonEvent);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.0*/
|
||||
@Override
|
||||
public BasicDialog onButtonClick(DialogButtonEvents dialogButtonEvents) {
|
||||
super.onButtonClick(dialogButtonEvents);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.3*/
|
||||
@Override
|
||||
public BasicDialog show() {
|
||||
super.show();
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int setButtonsRootLayoutID() {
|
||||
return R.id.buttons;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.4*/
|
||||
@Override
|
||||
public BasicDialog setMaxDialogWidth(int maxDialogWidth) {
|
||||
super.setMaxDialogWidth(maxDialogWidth);
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public BasicDialog setOnTouchListener(View.OnTouchListener onTouchListener) {
|
||||
super.setOnTouchListener(onTouchListener);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public BasicDialog swipeToDismiss(boolean isSwipeToDismiss) {
|
||||
super.swipeToDismiss(isSwipeToDismiss);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public BasicDialog setDialogAnimations(int styleRes) {
|
||||
super.setDialogAnimations(styleRes);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setButtons() {
|
||||
setButton1(R.id.btn1);
|
||||
setButton2(R.id.btn2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Button getLeftButton() {
|
||||
return super.getLeftButton();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Button getRightButton() {
|
||||
return super.getRightButton();
|
||||
}
|
||||
|
||||
/**@since 1.6*/
|
||||
@Override
|
||||
public TextView getTitleTextView() {
|
||||
return super.getTitleTextView();
|
||||
}
|
||||
|
||||
/**@since 1.6*/
|
||||
@Override
|
||||
public TextView getMessageTextView() {
|
||||
return super.getMessageTextView();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,393 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.StyleRes;
|
||||
|
||||
import com.sjapps.library.R;
|
||||
/**@since 1.5*/
|
||||
@SuppressWarnings("unused")
|
||||
public class CustomViewDialog extends SJDialog{
|
||||
|
||||
private LinearLayout rootView;
|
||||
|
||||
public CustomViewDialog(){
|
||||
|
||||
}
|
||||
|
||||
public CustomViewDialog Builder(Context context){
|
||||
return Builder(context,false);
|
||||
}
|
||||
|
||||
public CustomViewDialog Builder(Context context,@StyleRes int theme){
|
||||
super.Builder(context,R.layout.custom_view_dialog,theme, false);
|
||||
rootView = dialog.findViewById(R.id.customViewRoot);
|
||||
onLeftButtonClick(dialog::dismiss);
|
||||
return this;
|
||||
}
|
||||
|
||||
public CustomViewDialog Builder(Context context,boolean useAppTheme){
|
||||
super.Builder(context,R.layout.custom_view_dialog,useAppTheme);
|
||||
rootView = dialog.findViewById(R.id.customViewRoot);
|
||||
onLeftButtonClick(dialog::dismiss);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setOldTheme(){
|
||||
super.setOldTheme();
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setTitle(String title){
|
||||
super.setTitle(title);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setMessage(String message) {
|
||||
super.setMessage(message);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @since 1.6
|
||||
* */
|
||||
@Override
|
||||
public CustomViewDialog setTitleAlignment(int textAlignment) {
|
||||
super.setTitleAlignment(textAlignment);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @since 1.6
|
||||
* */
|
||||
@Override
|
||||
public CustomViewDialog setMessageAlignment(int textAlignment) {
|
||||
super.setMessageAlignment(textAlignment);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setTextColor(int color) {
|
||||
super.setTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public CustomViewDialog setTitleTextColor(int color) {
|
||||
super.setTitleTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public CustomViewDialog setMessageTextColor(int color) {
|
||||
super.setMessageTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a button text.
|
||||
* @param text button text
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
* */
|
||||
public CustomViewDialog setButtonText(String text){
|
||||
return setLeftButtonText(text);
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setLeftButtonText(String text){
|
||||
super.setLeftButtonText(text);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setRightButtonText(String text){
|
||||
super.setRightButtonText(text);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set button text color.
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
* */
|
||||
public CustomViewDialog setButtonTextColor(@ColorInt int color){
|
||||
return setLeftButtonTextColor(color);
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setButtonsTextColor(@ColorInt int color){
|
||||
super.setButtonsTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setLeftButtonTextColor(@ColorInt int color){
|
||||
super.setLeftButtonTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setRightButtonTextColor(@ColorInt int color){
|
||||
super.setRightButtonTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set button color.
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
* */
|
||||
public CustomViewDialog setButtonColor(@ColorInt int color){
|
||||
return setLeftButtonColor(color);
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setButtonsColor(@ColorInt int color){
|
||||
super.setButtonsColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setLeftButtonColor(@ColorInt int color){
|
||||
super.setLeftButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setRightButtonColor(@ColorInt int color){
|
||||
super.setRightButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomViewDialog setButtonColor(@ButtonColor String color) {
|
||||
super.setButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomViewDialog setButtonsColor(@ButtonColor String color){
|
||||
super.setButtonsColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomViewDialog setLeftButtonColor(@ButtonColor String color){
|
||||
super.setLeftButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomViewDialog setRightButtonColor(@ButtonColor String color){
|
||||
super.setRightButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public CustomViewDialog setDialogBackgroundColor(int color) {
|
||||
super.setDialogBackgroundColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setDialogBackgroundResource(@DrawableRes int drawable){
|
||||
super.setDialogBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background resource for button.
|
||||
* @param drawable resource id
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
* */
|
||||
public CustomViewDialog setButtonBackgroundResource(@DrawableRes int drawable){
|
||||
return setLeftButtonBackgroundResource(drawable);
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setButtonsBackgroundResource(@DrawableRes int drawable){
|
||||
super.setButtonsBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setLeftButtonBackgroundResource(@DrawableRes int drawable){
|
||||
super.setLeftButtonBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setRightButtonBackgroundResource(@DrawableRes int drawable){
|
||||
super.setRightButtonBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set onClick listener for a button
|
||||
*
|
||||
* @param dialogButtonEvent dialog button event
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public CustomViewDialog onButtonClick(DialogButtonEvent dialogButtonEvent){
|
||||
if (twoButtons)
|
||||
super.onButtonClick(dialogButtonEvent);
|
||||
else
|
||||
super.onLeftButtonClick(dialogButtonEvent);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog onButtonClick(DialogButtonEvents dialogButtonEvents) {
|
||||
super.onButtonClick(dialogButtonEvents);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog show() {
|
||||
super.show();
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int setButtonsRootLayoutID() {
|
||||
return R.id.buttons;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setMaxDialogWidth(int maxDialogWidth) {
|
||||
super.setMaxDialogWidth(maxDialogWidth);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog setDialogAnimations(int styleRes) {
|
||||
super.setDialogAnimations(styleRes);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setButtons() {
|
||||
setButton1(R.id.btn1);
|
||||
setButton2(R.id.btn2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Button getLeftButton() {
|
||||
return super.getLeftButton();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Button getRightButton() {
|
||||
return super.getRightButton();
|
||||
}
|
||||
|
||||
/**@since 1.6*/
|
||||
@Override
|
||||
public TextView getTitleTextView() {
|
||||
return super.getTitleTextView();
|
||||
}
|
||||
|
||||
/**@since 1.6*/
|
||||
@Override
|
||||
public TextView getMessageTextView() {
|
||||
return super.getMessageTextView();
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public CustomViewDialog dialogWithTwoButtons() {
|
||||
super.dialogWithTwoButtons();
|
||||
setButton2Visibility(View.VISIBLE);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public CustomViewDialog setOnTouchListener(View.OnTouchListener onTouchListener) {
|
||||
super.setOnTouchListener(onTouchListener);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public CustomViewDialog swipeToDismiss(boolean isSwipeToDismiss) {
|
||||
super.swipeToDismiss(isSwipeToDismiss);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setButton2Visibility(int visibility) {
|
||||
super.setButton2Visibility(visibility);
|
||||
}
|
||||
|
||||
public CustomViewDialog addCustomView(View view){
|
||||
rootView.addView(view);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
|
||||
public interface DialogButtonEvent {
|
||||
void onButtonClick();
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
|
||||
public interface DialogButtonEvents {
|
||||
void onLeftButtonClick();
|
||||
void onRightButtonClick();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
||||
public class ImageListItem {
|
||||
|
||||
private String name;
|
||||
private Drawable image;
|
||||
private Object data;
|
||||
|
||||
public ImageListItem() {
|
||||
}
|
||||
|
||||
public ImageListItem(String name, Drawable image) {
|
||||
this.name = name;
|
||||
this.image = image;
|
||||
}
|
||||
|
||||
public ImageListItem(String name, Drawable image, Object data) {
|
||||
this.name = name;
|
||||
this.image = image;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Drawable getImage() {
|
||||
return image;
|
||||
}
|
||||
|
||||
public void setImage(Drawable image) {
|
||||
this.image = image;
|
||||
}
|
||||
|
||||
public Object getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(Object data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ImageListItem{" +
|
||||
"name='" + name + '\'' +
|
||||
", image=" + image +
|
||||
", data=" + data +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,931 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StyleRes;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.sjapps.library.R;
|
||||
import com.sjapps.library.customdialog.adapter.DefaultImageListAdapter;
|
||||
import com.sjapps.library.customdialog.adapter.DefaultListAdapter;
|
||||
import com.sjapps.library.customdialog.adapter.DefaultListAdapterGeneric;
|
||||
import com.sjapps.library.customdialog.list.events.ListItemClick;
|
||||
import com.sjapps.library.customdialog.list.events.ListItemClickObj;
|
||||
|
||||
import java.util.ArrayList;
|
||||
/**@since 1.5*/
|
||||
@SuppressWarnings({"unused", "unchecked","UnusedReturnValue"})
|
||||
public class ListDialog extends SJDialog {
|
||||
|
||||
RecyclerView listRV;
|
||||
boolean isSelectableList = false;
|
||||
boolean hideEmptyListTxt = false;
|
||||
boolean hasAdapter = false;
|
||||
boolean waitForLayoutManager = false;
|
||||
|
||||
private @DrawableRes int listItemBgRes = R.drawable.ripple_list;
|
||||
private @DrawableRes int listItemBgResSelected = R.drawable.ripple_list_selected;
|
||||
private @ColorInt int listItemBgColor = -1;
|
||||
private @ColorInt int listItemBgColorSelected = -1;
|
||||
private int listItemTextColor = 1;
|
||||
private RecyclerView.LayoutManager layoutManager = null;
|
||||
|
||||
RecyclerView.Adapter<?> adapter;
|
||||
ArrayList<?> selectedItems = new ArrayList<>();
|
||||
TextView emptyListTxt;
|
||||
|
||||
public ListDialog() {
|
||||
|
||||
}
|
||||
|
||||
public ListDialog Builder(Context context) {
|
||||
return Builder(context, false);
|
||||
}
|
||||
|
||||
public ListDialog Builder(Context context, @StyleRes int theme) {
|
||||
super.Builder(context, R.layout.list_dialog, theme, false);
|
||||
listRV = dialog.findViewById(R.id.list);
|
||||
onLeftButtonClick(dialog::dismiss);
|
||||
emptyListTxt = dialog.findViewById(R.id.emptyListTxt);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ListDialog Builder(Context context, boolean useAppTheme) {
|
||||
super.Builder(context, R.layout.list_dialog, useAppTheme);
|
||||
listRV = dialog.findViewById(R.id.list);
|
||||
onLeftButtonClick(dialog::dismiss);
|
||||
emptyListTxt = dialog.findViewById(R.id.emptyListTxt);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setOldTheme() {
|
||||
super.setOldTheme();
|
||||
setListOldColor();
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setTitle(String title) {
|
||||
super.setTitle(title);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setMessage(String message) {
|
||||
super.setMessage(message);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @since 1.6
|
||||
* */
|
||||
@Override
|
||||
public ListDialog setTitleAlignment(int textAlignment) {
|
||||
super.setTitleAlignment(textAlignment);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @since 1.6
|
||||
* */
|
||||
@Override
|
||||
public ListDialog setMessageAlignment(int textAlignment) {
|
||||
super.setMessageAlignment(textAlignment);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public ListDialog setTextColor(int color) {
|
||||
super.setTextColor(color);
|
||||
setListItemTextColor(color);
|
||||
setEmptyListTxtColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public ListDialog setTitleTextColor(int color) {
|
||||
super.setTitleTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public ListDialog setMessageTextColor(int color) {
|
||||
super.setMessageTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a button text.
|
||||
*
|
||||
* @param text button text
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public ListDialog setButtonText(String text) {
|
||||
return setLeftButtonText(text);
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setLeftButtonText(String text) {
|
||||
super.setLeftButtonText(text);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setRightButtonText(String text) {
|
||||
super.setRightButtonText(text);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set button text color.
|
||||
*
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public ListDialog setButtonTextColor(@ColorInt int color) {
|
||||
return setLeftButtonTextColor(color);
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setButtonsTextColor(@ColorInt int color) {
|
||||
super.setButtonsTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setLeftButtonTextColor(@ColorInt int color) {
|
||||
super.setLeftButtonTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setRightButtonTextColor(@ColorInt int color) {
|
||||
super.setRightButtonTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set button color.
|
||||
*
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public ListDialog setButtonColor(@ColorInt int color) {
|
||||
return setLeftButtonColor(color);
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setButtonsColor(@ColorInt int color) {
|
||||
super.setButtonsColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setLeftButtonColor(@ColorInt int color) {
|
||||
super.setLeftButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setRightButtonColor(@ColorInt int color) {
|
||||
super.setRightButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListDialog setButtonColor(@ButtonColor String color) {
|
||||
super.setButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListDialog setButtonsColor(@ButtonColor String color) {
|
||||
super.setButtonsColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListDialog setLeftButtonColor(@ButtonColor String color) {
|
||||
super.setLeftButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListDialog setRightButtonColor(@ButtonColor String color) {
|
||||
super.setRightButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public ListDialog setDialogBackgroundColor(int color) {
|
||||
super.setDialogBackgroundColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setDialogBackgroundResource(@DrawableRes int drawable) {
|
||||
super.setDialogBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background resource for button.
|
||||
*
|
||||
* @param drawable resource id
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public ListDialog setButtonBackgroundResource(@DrawableRes int drawable) {
|
||||
return setLeftButtonBackgroundResource(drawable);
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setButtonsBackgroundResource(@DrawableRes int drawable) {
|
||||
super.setButtonsBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setLeftButtonBackgroundResource(@DrawableRes int drawable) {
|
||||
super.setLeftButtonBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setRightButtonBackgroundResource(@DrawableRes int drawable) {
|
||||
super.setRightButtonBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set onClick listener for a button
|
||||
*
|
||||
* @param dialogButtonEvent dialog button event
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
@Override
|
||||
public ListDialog onButtonClick(DialogButtonEvent dialogButtonEvent) {
|
||||
if (twoButtons)
|
||||
super.onButtonClick(dialogButtonEvent);
|
||||
else
|
||||
super.onLeftButtonClick(dialogButtonEvent);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog onButtonClick(DialogButtonEvents dialogButtonEvents) {
|
||||
super.onButtonClick(dialogButtonEvents);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog show() {
|
||||
if (layoutManager == null)
|
||||
layoutManager = new LinearLayoutManager(context);
|
||||
if (!waitForLayoutManager)
|
||||
listRV.setLayoutManager(layoutManager);
|
||||
|
||||
listRV.setAdapter(adapter);
|
||||
if (adapter == null)
|
||||
checkListsSize(0);
|
||||
|
||||
super.show();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setMaxDialogWidth(int maxDialogWidth) {
|
||||
super.setMaxDialogWidth(maxDialogWidth);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog setDialogAnimations(int styleRes) {
|
||||
super.setDialogAnimations(styleRes);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public ListDialog dialogWithTwoButtons() {
|
||||
super.dialogWithTwoButtons();
|
||||
setButton2Visibility(View.VISIBLE);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setButton2Visibility(int visibility) {
|
||||
super.setButton2Visibility(visibility);
|
||||
}
|
||||
|
||||
private void setListOldColor() {
|
||||
listItemBgRes = R.drawable.ripple_list_old;
|
||||
listItemBgResSelected = R.drawable.ripple_list_selected_old;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background resource for a list
|
||||
*
|
||||
* @param drawable drawable resource
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public ListDialog setListBackgroundResource(@DrawableRes int drawable) {
|
||||
listRV.setBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background resource for a item in a list
|
||||
*
|
||||
* @param drawable drawable resource
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public ListDialog setListItemBackgroundResource(@DrawableRes int drawable) {
|
||||
listItemBgRes = drawable;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background resource for a selected item in a list
|
||||
*
|
||||
* @param drawable drawable resource
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public ListDialog setListItemSelectedBackgroundResource(@DrawableRes int drawable) {
|
||||
listItemBgResSelected = drawable;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background color for a item in a list
|
||||
*
|
||||
* @param color {@link ColorInt}
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
*/
|
||||
public ListDialog setListItemBackgroundColor(@ColorInt int color) {
|
||||
listItemBgColor = color;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background color for a selected item in a list
|
||||
*
|
||||
* @param color {@link ColorInt}
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
*/
|
||||
public ListDialog setListItemSelectedBackgroundColor(@ColorInt int color) {
|
||||
listItemBgColorSelected = color;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set text color for item in a list
|
||||
*
|
||||
* @param listItemTextColor color for a text
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
*/
|
||||
public ListDialog setListItemTextColor(int listItemTextColor) {
|
||||
this.listItemTextColor = listItemTextColor;
|
||||
return this;
|
||||
}
|
||||
|
||||
private void setEmptyListTxtColor(int color) {
|
||||
emptyListTxt.setTextColor(color);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide {@link #emptyListTxt} when list is empty
|
||||
* @since 1.6
|
||||
* @return current class
|
||||
*/
|
||||
public ListDialog hideEmptyListText() {
|
||||
hideEmptyListTxt = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set text to display when list is empty
|
||||
* @param text Text
|
||||
* @since 1.6
|
||||
* @return current class
|
||||
*/
|
||||
public ListDialog setEmptyListText(String text){
|
||||
emptyListTxt.setText(text);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a dialog list
|
||||
*
|
||||
* @return dialog list
|
||||
* @since 1.5
|
||||
*/
|
||||
public RecyclerView getRecycleView() {
|
||||
return listRV;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int setButtonsRootLayoutID() {
|
||||
return R.id.buttons;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setButtons() {
|
||||
setButton1(R.id.btn1);
|
||||
setButton2(R.id.btn2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Button getLeftButton() {
|
||||
return super.getLeftButton();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Button getRightButton() {
|
||||
return super.getRightButton();
|
||||
}
|
||||
|
||||
/**@since 1.6*/
|
||||
@Override
|
||||
public TextView getTitleTextView() {
|
||||
return super.getTitleTextView();
|
||||
}
|
||||
|
||||
/**@since 1.6*/
|
||||
@Override
|
||||
public TextView getMessageTextView() {
|
||||
return super.getMessageTextView();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set items for a list
|
||||
*
|
||||
* @param listOfItems Array of {@link String}
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public ListDialog setItems(String[] listOfItems) {
|
||||
return setItems(listOfItems, (ListItemClick) null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set items for a list and ListItemClick event
|
||||
*
|
||||
* @param listOfItems Array of {@link String}
|
||||
* @param itemClick ListItemClick event
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public ListDialog setItems(String[] listOfItems, @Nullable ListItemClick itemClick) {
|
||||
|
||||
if (hasAdapter)
|
||||
throw tooManyAdapters;
|
||||
|
||||
if (!isSelectableList && itemClick == null)
|
||||
throw nullListItemClick(ListItemClick.class);
|
||||
|
||||
checkListsSize(listOfItems.length);
|
||||
|
||||
adapter = new DefaultListAdapter(listOfItems,
|
||||
isSelectableList,
|
||||
itemClick,
|
||||
(ArrayList<String>) selectedItems,
|
||||
listItemBgRes,
|
||||
listItemBgResSelected,
|
||||
listItemTextColor,
|
||||
listItemBgColor,
|
||||
listItemBgColorSelected);
|
||||
hasAdapter = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set items for a list and String value of an object for use in a list
|
||||
*
|
||||
* @param objArray Array of {@link Object}
|
||||
* @param value {@link ListItemValue} for getting String value of an object
|
||||
* @param <T> Type of an Object
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public <T> ListDialog setItems(T[] objArray, ListItemValue<T> value) {
|
||||
return setItems(objArray, value, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set items for a list and String values of an object for use in a list
|
||||
*
|
||||
* @param objArray Array of {@link Object}
|
||||
* @param values {@link ListItemValues} for getting String values of an object. {@link ListItemValues#getValue1(Object)}
|
||||
* for first value and {@link ListItemValues#getValue1(Object)} for second value
|
||||
* @param <T> Type of an Object
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public <T> ListDialog setItems(T[] objArray, ListItemValues<T> values) {
|
||||
return setItems(objArray, values, null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set items for a list and String value of an object for use in a list
|
||||
*
|
||||
* @param arrayList {@link ArrayList} of {@link Object}
|
||||
* @param value {@link ListItemValue} for getting String value of an object
|
||||
* @param <T> Type of an Object
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public <T> ListDialog setItems(ArrayList<T> arrayList, ListItemValue<T> value) {
|
||||
return setItems(arrayList, value, null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set items for a list and String values of an object for use in a list
|
||||
*
|
||||
* @param arrayList {@link ArrayList} of {@link Object}
|
||||
* @param values {@link ListItemValues} for getting String values of an object. {@link ListItemValues#getValue1(Object)}
|
||||
* for first value and {@link ListItemValues#getValue1(Object)} for second value
|
||||
* @param <T> Type of an Object
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public <T> ListDialog setItems(ArrayList<T> arrayList, ListItemValues<T> values) {
|
||||
return setItems(arrayList, values, null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set items for a list, String value of an object for use in a list and ListItemClick event
|
||||
*
|
||||
* @param objArray Array of {@link Object}
|
||||
* @param value {@link ListItemValue} for getting String value of an object
|
||||
* @param itemClick ListItemClick event
|
||||
* @param <T> Type of an Object
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public <T> ListDialog setItems(T[] objArray, ListItemValue<T> value, @Nullable ListItemClickObj<T> itemClick) {
|
||||
|
||||
if (hasAdapter)
|
||||
throw tooManyAdapters;
|
||||
|
||||
if (!isSelectableList && itemClick == null)
|
||||
throw nullListItemClick(ListItemClickObj.class);
|
||||
|
||||
checkListsSize(objArray.length);
|
||||
|
||||
adapter = new DefaultListAdapterGeneric<>(objArray,
|
||||
value,
|
||||
isSelectableList,
|
||||
itemClick,
|
||||
(ArrayList<T>) selectedItems,
|
||||
listItemBgRes,
|
||||
listItemBgResSelected,
|
||||
listItemTextColor,
|
||||
listItemBgColor,
|
||||
listItemBgColorSelected);
|
||||
hasAdapter = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set items for a list, String values of an object for use in a list and ListItemClick event
|
||||
*
|
||||
* @param objArray Array of {@link Object}
|
||||
* @param values {@link ListItemValues} for getting String values of an object. {@link ListItemValues#getValue1(Object)}
|
||||
* for first value and {@link ListItemValues#getValue1(Object)} for second value
|
||||
* @param itemClick ListItemClick event
|
||||
* @param <T> Type of an Object
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public <T> ListDialog setItems(T[] objArray, ListItemValues<T> values, @Nullable ListItemClickObj<T> itemClick) {
|
||||
|
||||
if (hasAdapter)
|
||||
throw tooManyAdapters;
|
||||
|
||||
if (!isSelectableList && itemClick == null)
|
||||
throw nullListItemClick(ListItemClickObj.class);
|
||||
|
||||
checkListsSize(objArray.length);
|
||||
|
||||
adapter = new DefaultListAdapterGeneric<>(objArray,
|
||||
values,
|
||||
isSelectableList,
|
||||
itemClick,
|
||||
(ArrayList<T>) selectedItems,
|
||||
listItemBgRes,
|
||||
listItemBgResSelected,
|
||||
listItemTextColor,
|
||||
listItemBgColor,
|
||||
listItemBgColorSelected);
|
||||
hasAdapter = true;
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set items for a list, String value of an object for use in a list and ListItemClick event
|
||||
*
|
||||
* @param arrayList {@link ArrayList} of {@link Object}
|
||||
* @param value {@link ListItemValue} for getting String value of an object
|
||||
* @param itemClick ListItemClick event
|
||||
* @param <T> Type of an Object
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public <T> ListDialog setItems(ArrayList<T> arrayList, ListItemValue<T> value, @Nullable ListItemClickObj<T> itemClick) {
|
||||
|
||||
if (hasAdapter)
|
||||
throw tooManyAdapters;
|
||||
|
||||
if (!isSelectableList && itemClick == null)
|
||||
throw nullListItemClick(ListItemClickObj.class);
|
||||
|
||||
checkListsSize(arrayList.size());
|
||||
|
||||
adapter = new DefaultListAdapterGeneric<>(arrayList,
|
||||
value,
|
||||
isSelectableList,
|
||||
itemClick,
|
||||
(ArrayList<T>) selectedItems,
|
||||
listItemBgRes,
|
||||
listItemBgResSelected,
|
||||
listItemTextColor,
|
||||
listItemBgColor,
|
||||
listItemBgColorSelected);
|
||||
hasAdapter = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set items for a list, String values of an object for use in a list and ListItemClick event
|
||||
*
|
||||
* @param arrayList {@link ArrayList} of {@link Object}
|
||||
* @param values {@link ListItemValues} for getting String values of an object. {@link ListItemValues#getValue1(Object)}
|
||||
* for first value and {@link ListItemValues#getValue1(Object)} for second value
|
||||
* @param itemClick ListItemClick event
|
||||
* @param <T> Type of an Object
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public <T> ListDialog setItems(ArrayList<T> arrayList, ListItemValues<T> values, @Nullable ListItemClickObj<T> itemClick) {
|
||||
|
||||
if (hasAdapter)
|
||||
throw tooManyAdapters;
|
||||
|
||||
if (!isSelectableList && itemClick == null)
|
||||
throw nullListItemClick(ListItemClickObj.class);
|
||||
|
||||
checkListsSize(arrayList.size());
|
||||
|
||||
adapter = new DefaultListAdapterGeneric<>(arrayList,
|
||||
values,
|
||||
isSelectableList,
|
||||
itemClick,
|
||||
(ArrayList<T>) selectedItems,
|
||||
listItemBgRes,
|
||||
listItemBgResSelected,
|
||||
listItemTextColor,
|
||||
listItemBgColor,
|
||||
listItemBgColorSelected);
|
||||
hasAdapter = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set image items for a list
|
||||
* @param arrayList {@link ArrayList} of {@link ImageListItem}
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
*/
|
||||
public ListDialog setImageItems(ArrayList<ImageListItem> arrayList) {
|
||||
return setImageItems(arrayList, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set image items for a list and ListItemClick event
|
||||
* @param arrayList {@link ArrayList} of {@link ImageListItem}
|
||||
* @param itemClick ListItemClick event
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
*/
|
||||
public ListDialog setImageItems(ArrayList<ImageListItem> arrayList, @Nullable ListItemClickObj<ImageListItem> itemClick) {
|
||||
|
||||
if (hasAdapter)
|
||||
throw tooManyAdapters;
|
||||
|
||||
if (!isSelectableList && itemClick == null)
|
||||
throw nullListItemClick(ListItemClickObj.class);
|
||||
|
||||
checkListsSize(arrayList.size());
|
||||
|
||||
adapter = new DefaultImageListAdapter(arrayList,
|
||||
isSelectableList,
|
||||
itemClick,
|
||||
(ArrayList<ImageListItem>) selectedItems,
|
||||
listItemBgRes,
|
||||
listItemBgResSelected,
|
||||
listItemTextColor,
|
||||
listItemBgColor,
|
||||
listItemBgColorSelected);
|
||||
|
||||
hasAdapter = true;
|
||||
waitForLayoutManager = true;
|
||||
listRV.post(() -> {
|
||||
int maxItemCount = listRV.getWidth() / functions.dpToPixels(context,80);
|
||||
if (maxItemCount == 0)
|
||||
maxItemCount = 1;
|
||||
setLayoutManager(new GridLayoutManager(context, arrayList.size()!=0 ? Math.min(maxItemCount, arrayList.size()):1));
|
||||
listRV.setLayoutManager(layoutManager);
|
||||
waitForLayoutManager = false;
|
||||
});
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a list adapter
|
||||
*
|
||||
* @param adapter RecycleView {@link RecyclerView.Adapter adapter}
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public ListDialog setAdapter(RecyclerView.Adapter<?> adapter) {
|
||||
if (hasAdapter)
|
||||
throw tooManyAdapters;
|
||||
this.adapter = adapter;
|
||||
hasAdapter = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param layoutManager {@link RecyclerView.LayoutManager LayoutManager }
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
*/
|
||||
public ListDialog setLayoutManager(RecyclerView.LayoutManager layoutManager) {
|
||||
this.layoutManager = layoutManager;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list adapter
|
||||
*
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public RecyclerView.Adapter<?> getListAdapter() {
|
||||
return adapter;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Background resource for views in RecycleView
|
||||
* @since 1.5
|
||||
*/
|
||||
public int getListItemBgRes() {
|
||||
return listItemBgRes;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Background resource for selected views in RecycleView
|
||||
* @since 1.5
|
||||
*/
|
||||
public int getListItemBgResSelected() {
|
||||
return listItemBgResSelected;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create list with multi selectable items. Use {@link #getSelectedItems()} fet getting selected items
|
||||
*
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
public ListDialog setSelectableList() {
|
||||
isSelectableList = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isSelectableList() {
|
||||
return isSelectableList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListDialog setOnTouchListener(View.OnTouchListener onTouchListener) {
|
||||
super.setOnTouchListener(onTouchListener);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListDialog swipeToDismiss(boolean isSwipeToDismiss) {
|
||||
super.swipeToDismiss(isSwipeToDismiss);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get selected items in a list
|
||||
*
|
||||
* @return ArrayList of selected items in a list
|
||||
* @since 1.5
|
||||
*/
|
||||
public <T> ArrayList<T> getSelectedItems() {
|
||||
return (ArrayList<T>) selectedItems;
|
||||
}
|
||||
|
||||
void checkListsSize(int size) {
|
||||
|
||||
if (hideEmptyListTxt) {
|
||||
emptyListTxt.setVisibility(View.GONE);
|
||||
return;
|
||||
}
|
||||
emptyListTxt.setVisibility((size > 0) ? View.GONE : View.VISIBLE);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
private NullPointerException nullListItemClick(Class className) {
|
||||
return new NullPointerException(
|
||||
String.format("%s is null. Set %s event or use setSelectableList() for selecting multiple item in a list",
|
||||
className.getSimpleName(),
|
||||
className.getSimpleName())
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
private final UnsupportedOperationException tooManyAdapters = new UnsupportedOperationException("Too many Adapters for RecyclerView");
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
||||
public interface ListItemImageValue<T> {
|
||||
/**
|
||||
* Get String value of an Object for using in a list
|
||||
* @param obj Current Object for getting first String value of it
|
||||
* @return String value
|
||||
*/
|
||||
String getTitle(T obj);
|
||||
|
||||
/**
|
||||
* Get Drawable value of an Object for use in a list item
|
||||
* @param obj Current Object for getting second String value of it
|
||||
* @return Drawable
|
||||
*/
|
||||
Drawable getImage(T obj);
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
|
||||
public interface ListItemValue<T> {
|
||||
/**
|
||||
* Get String value of an Object for using in a list
|
||||
* @param obj Current Object for getting String value of it
|
||||
* @return String value
|
||||
*/
|
||||
String getValue(T obj);
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
|
||||
public interface ListItemValues<T> {
|
||||
/**
|
||||
* Get String value of an Object for use in the first value of a list item
|
||||
* @param obj Current Object for getting first String value of it
|
||||
* @return String value
|
||||
*/
|
||||
String getValue1(T obj);
|
||||
|
||||
/**
|
||||
* Get String value of an Object for use in the second value of a list item
|
||||
* @param obj Current Object for getting second String value of it
|
||||
* @return String value
|
||||
*/
|
||||
String getValue2(T obj);
|
||||
}
|
||||
@@ -0,0 +1,270 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.StyleRes;
|
||||
|
||||
import com.sjapps.library.R;
|
||||
/**@since 1.3*/
|
||||
@SuppressWarnings("unused")
|
||||
public class MessageDialog extends SJDialog{
|
||||
|
||||
private boolean isErrorDialog;
|
||||
|
||||
public MessageDialog(){
|
||||
onlyOneButton = true;
|
||||
}
|
||||
|
||||
public MessageDialog Builder(Context context){
|
||||
super.Builder(context,R.layout.message_dialog);
|
||||
onButtonClick(() -> dialog.dismiss());
|
||||
return this;
|
||||
}
|
||||
public MessageDialog Builder(Context context,@StyleRes int theme){
|
||||
super.Builder(context,R.layout.message_dialog,theme, false);
|
||||
onButtonClick(() -> dialog.dismiss());
|
||||
return this;
|
||||
}
|
||||
public MessageDialog Builder(Context context,boolean useAppTheme){
|
||||
super.Builder(context,R.layout.message_dialog,useAppTheme);
|
||||
onButtonClick(() -> dialog.dismiss());
|
||||
return this;
|
||||
}
|
||||
public MessageDialog ErrorDialogBuilder(Context context){
|
||||
return Builder(context).errorDialogAttributes();
|
||||
}
|
||||
public MessageDialog ErrorDialogBuilder(Context context,@StyleRes int theme){
|
||||
return Builder(context,theme).errorDialogAttributes();
|
||||
}
|
||||
public MessageDialog ErrorDialogBuilder(Context context,boolean useAppTheme){
|
||||
return Builder(context,useAppTheme).errorDialogAttributes();
|
||||
}
|
||||
|
||||
private MessageDialog errorDialogAttributes(){
|
||||
isErrorDialog = true;
|
||||
return setDialogBackgroundResource(R.drawable.dialog_background_material3_red)
|
||||
.setTextColor(context.getResources().getColor(R.color.SJDialog_ErrorTextColor, context.getTheme()))
|
||||
.setButtonColor(MATERIAL3_RED_BUTTON)
|
||||
.setTitle("Error");
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.5*/
|
||||
@Override
|
||||
public MessageDialog setOldTheme(){
|
||||
super.setOldTheme();
|
||||
if (isErrorDialog) {
|
||||
setDialogBackgroundResource(R.drawable.dialog_background_red);
|
||||
setTextColor(defaultOldColorWhite);
|
||||
setButtonColor(defaultOldColorWhite);
|
||||
setButtonTextColor(defaultOldColorBlack);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.3*/
|
||||
@Override
|
||||
public MessageDialog setTitle(String title){
|
||||
super.setTitle(title);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.3*/
|
||||
@Override
|
||||
public MessageDialog setMessage(String message) {
|
||||
super.setMessage(message);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @since 1.6
|
||||
* */
|
||||
@Override
|
||||
public MessageDialog setTitleAlignment(int textAlignment) {
|
||||
super.setTitleAlignment(textAlignment);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @since 1.6
|
||||
* */
|
||||
@Override
|
||||
public MessageDialog setMessageAlignment(int textAlignment) {
|
||||
super.setMessageAlignment(textAlignment);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public MessageDialog setTextColor(int color) {
|
||||
super.setTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public MessageDialog setTitleTextColor(int color) {
|
||||
super.setTitleTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public MessageDialog setMessageTextColor(int color) {
|
||||
super.setMessageTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a button text.
|
||||
* @param text button text
|
||||
* @return current class
|
||||
* @since 1.4
|
||||
* */
|
||||
public MessageDialog setButtonText(String text){
|
||||
super.setLeftButtonText(text);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set button text color.
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.4
|
||||
* */
|
||||
public MessageDialog setButtonTextColor(@ColorInt int color){
|
||||
super.setLeftButtonTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set button color.
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.4
|
||||
* */
|
||||
public MessageDialog setButtonColor(@ColorInt int color){
|
||||
super.setLeftButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MessageDialog setButtonColor(@ButtonColor String color){
|
||||
super.setButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public MessageDialog setDialogBackgroundColor(int color) {
|
||||
super.setDialogBackgroundColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.3*/
|
||||
@Override
|
||||
public MessageDialog setDialogBackgroundResource(@DrawableRes int drawable){
|
||||
super.setDialogBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background resource for button.
|
||||
* @param drawable resource id
|
||||
* @return current class
|
||||
* @since 1.3
|
||||
* */
|
||||
public MessageDialog setButtonBackgroundResource(@DrawableRes int drawable){
|
||||
super.setLeftButtonBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set onClick listener for a button
|
||||
* @param dialogButtonEvent dialog button events
|
||||
* @return current class
|
||||
* */
|
||||
@Override
|
||||
public MessageDialog onButtonClick(DialogButtonEvent dialogButtonEvent){
|
||||
super.onLeftButtonClick(dialogButtonEvent);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setButtons() {
|
||||
setButton1(R.id.btn);
|
||||
}
|
||||
|
||||
public Button getButton() {
|
||||
return super.getLeftButton();
|
||||
}
|
||||
|
||||
/**@since 1.6*/
|
||||
@Override
|
||||
public TextView getTitleTextView() {
|
||||
return super.getTitleTextView();
|
||||
}
|
||||
|
||||
/**@since 1.6*/
|
||||
@Override
|
||||
public TextView getMessageTextView() {
|
||||
return super.getMessageTextView();
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.4*/
|
||||
@Override
|
||||
public MessageDialog setMaxDialogWidth(int maxDialogWidth){
|
||||
super.setMaxDialogWidth(maxDialogWidth);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MessageDialog setDialogAnimations(int styleRes) {
|
||||
super.setDialogAnimations(styleRes);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.3*/
|
||||
@Override
|
||||
public MessageDialog show(){
|
||||
super.show();
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int setButtonsRootLayoutID() {
|
||||
return R.id.buttonRoot;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public MessageDialog setOnTouchListener(View.OnTouchListener onTouchListener) {
|
||||
super.setOnTouchListener(onTouchListener);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**{@inheritDoc}
|
||||
* @since 1.6*/
|
||||
@Override
|
||||
public MessageDialog swipeToDismiss(boolean isSwipeToDismiss) {
|
||||
super.swipeToDismiss(isSwipeToDismiss);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,744 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.view.ContextThemeWrapper;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
|
||||
import android.widget.Button;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.IdRes;
|
||||
import androidx.annotation.IntDef;
|
||||
import androidx.annotation.LayoutRes;
|
||||
import androidx.annotation.StringDef;
|
||||
import androidx.annotation.StyleRes;
|
||||
|
||||
import com.sjapps.library.R;
|
||||
|
||||
@SuppressWarnings({"unused", "UnusedReturnValue"})
|
||||
public abstract class SJDialog {
|
||||
|
||||
public static final String RED_BUTTON = "RedBtn";
|
||||
public static final String MATERIAL3_RED_BUTTON = "Material3RedBtn";
|
||||
public static final String OLD_BUTTON_COLOR = "OldBtnColor";
|
||||
/** Sets text alignment to {@link View#TEXT_ALIGNMENT_VIEW_START}
|
||||
* @since 1.6
|
||||
* */
|
||||
public static final int TEXT_ALIGNMENT_LEFT = View.TEXT_ALIGNMENT_VIEW_START;
|
||||
/** Sets text alignment to {@link View#TEXT_ALIGNMENT_VIEW_END}
|
||||
* @since 1.6
|
||||
* */
|
||||
public static final int TEXT_ALIGNMENT_RIGHT = View.TEXT_ALIGNMENT_VIEW_END;
|
||||
/** Sets text alignment to {@link View#TEXT_ALIGNMENT_CENTER}
|
||||
* @since 1.6
|
||||
* */
|
||||
public static final int TEXT_ALIGNMENT_CENTER = View.TEXT_ALIGNMENT_CENTER;
|
||||
|
||||
private @LayoutRes int Btn1Resource = R.layout.button_template;
|
||||
private @LayoutRes int Btn2Resource = R.layout.button_template;
|
||||
|
||||
@ColorInt int defaultOldThemeTextColor;
|
||||
@ColorInt int defaultOldColorWhite = 0xFFE5E5E5;
|
||||
@ColorInt int defaultOldColorBlack = 0xFF333333;
|
||||
|
||||
private final int defaultTheme = R.style.Theme_SJDialog;
|
||||
private int newTheme = -1;
|
||||
private boolean usesDefaultTheme = true;
|
||||
private boolean isSwipeToDismiss = true;
|
||||
private boolean isDefaultOnTouchListener = true;
|
||||
private View.OnTouchListener dialogOnTouchListener = null;
|
||||
|
||||
public Dialog dialog;
|
||||
protected Button button1, button2;
|
||||
private LinearLayout background;
|
||||
private int maxDialogWidth = 600;
|
||||
Context context;
|
||||
|
||||
DialogButtonEvent dialogButtonEvent;
|
||||
DialogButtonEvents dialogButtonEvents;
|
||||
|
||||
@StringDef({RED_BUTTON, MATERIAL3_RED_BUTTON, OLD_BUTTON_COLOR})
|
||||
public @interface ButtonColor {
|
||||
}
|
||||
|
||||
@IntDef({TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER})
|
||||
public @interface TextAlignment {
|
||||
}
|
||||
|
||||
protected boolean onlyOneButton = false;
|
||||
protected boolean twoButtons = false;
|
||||
private boolean leftBtnOnClick = false;
|
||||
|
||||
protected SJDialog Builder(Context context, @LayoutRes int layoutResID) {
|
||||
Builder(context, layoutResID, defaultTheme, false);
|
||||
return this;
|
||||
}
|
||||
|
||||
protected SJDialog Builder(Context context, @LayoutRes int layoutResID, boolean useAppTheme) {
|
||||
Builder(context, layoutResID, defaultTheme, useAppTheme);
|
||||
return this;
|
||||
}
|
||||
|
||||
protected SJDialog Builder(Context context, @LayoutRes int layoutResID, @StyleRes int theme, boolean useAppTheme) {
|
||||
this.context = context;
|
||||
defaultOldThemeTextColor = context.getResources().getColor(R.color.SJDialog_OldThemeTextColor, context.getTheme());
|
||||
dialog = useAppTheme ?
|
||||
new Dialog(new ContextThemeWrapper(context, context.getTheme())) :
|
||||
new Dialog(new ContextThemeWrapper(context, theme));
|
||||
setContentView(layoutResID);
|
||||
setDialogSize();
|
||||
dialog.getWindow().getAttributes().gravity = Gravity.BOTTOM;
|
||||
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||
dialog.getWindow().getAttributes().windowAnimations = R.style.SJDialogAnimation;
|
||||
background = dialog.findViewById(R.id.dialogBackground);
|
||||
setButtons();
|
||||
if (theme != defaultTheme || useAppTheme) {
|
||||
usesDefaultTheme = false;
|
||||
newTheme = !useAppTheme ? theme : -1;
|
||||
regenerateButtons();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
protected void setDialogSize() {
|
||||
if (context == null)
|
||||
throw new NullPointerException("context is null");
|
||||
if (dialog == null) {
|
||||
throw new NullPointerException("dialog is null");
|
||||
}
|
||||
functions.SetDialogSize(context, dialog, maxDialogWidth);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* By default dialog colors will be set to material3 dynamic colors.
|
||||
* With this method you can set the dialog color for the background
|
||||
* and buttons to the older non-dynamic colors
|
||||
*
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
protected SJDialog setOldTheme() {
|
||||
setButtonsColor(OLD_BUTTON_COLOR);
|
||||
setDialogBackgroundResource(R.drawable.dialog_background_old);
|
||||
setTextColor(defaultOldThemeTextColor);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a dialog title.
|
||||
*
|
||||
* @param title title of a dialog
|
||||
* @return current class
|
||||
* @since 1.3
|
||||
*/
|
||||
protected SJDialog setTitle(String title) {
|
||||
TextView TitleTv = getTitleTextView();
|
||||
TitleTv.setText(title);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a dialog message.
|
||||
*
|
||||
* @param message message of a dialog
|
||||
* @return current class
|
||||
* @since 1.3
|
||||
*/
|
||||
protected SJDialog setMessage(String message) {
|
||||
TextView msg = getMessageTextView();
|
||||
msg.setText(message);
|
||||
msg.setVisibility(View.VISIBLE);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the text alignment for Title TextView. Default is set to {@link SJDialog#TEXT_ALIGNMENT_CENTER}
|
||||
* @param textAlignment The text alignment to set. Supported types: {@link SJDialog#TEXT_ALIGNMENT_LEFT}, {@link SJDialog#TEXT_ALIGNMENT_RIGHT} and {@link SJDialog#TEXT_ALIGNMENT_CENTER}
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
* */
|
||||
protected SJDialog setTitleAlignment(@TextAlignment int textAlignment){
|
||||
TextView title = getTitleTextView();
|
||||
title.setGravity(Gravity.RIGHT);
|
||||
title.setTextAlignment(textAlignment);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the text alignment for Message TextView. Default is set to {@link SJDialog#TEXT_ALIGNMENT_LEFT}
|
||||
* @param textAlignment The text alignment to set. Supported types: {@link SJDialog#TEXT_ALIGNMENT_LEFT}, {@link SJDialog#TEXT_ALIGNMENT_RIGHT} and {@link SJDialog#TEXT_ALIGNMENT_CENTER}
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
* */
|
||||
protected SJDialog setMessageAlignment(@TextAlignment int textAlignment){
|
||||
TextView msg = getMessageTextView();
|
||||
msg.setTextAlignment(textAlignment);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set text color.
|
||||
*
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
*/
|
||||
protected SJDialog setTextColor(@ColorInt int color) {
|
||||
setTitleTextColor(color);
|
||||
setMessageTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set title text color.
|
||||
*
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
*/
|
||||
protected SJDialog setTitleTextColor(@ColorInt int color) {
|
||||
getTitleTextView().setTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set message text color.
|
||||
*
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
*/
|
||||
protected SJDialog setMessageTextColor(@ColorInt int color) {
|
||||
getMessageTextView().setTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a text to left button.
|
||||
*
|
||||
* @param text button text
|
||||
* @return current class
|
||||
* @since 1.4
|
||||
*/
|
||||
protected SJDialog setLeftButtonText(String text) {
|
||||
button1.setText(text);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a text to right button.
|
||||
*
|
||||
* @param text button text
|
||||
* @return current class
|
||||
* @since 1.4
|
||||
*/
|
||||
protected SJDialog setRightButtonText(String text) {
|
||||
if (!twoButtons)
|
||||
throw OneButtonException();
|
||||
button2.setText(text);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set text color for all buttons.
|
||||
*
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.4
|
||||
*/
|
||||
protected SJDialog setButtonsTextColor(@ColorInt int color) {
|
||||
button1.setTextColor(color);
|
||||
if (twoButtons)
|
||||
button2.setTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set text color for left button.
|
||||
*
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.4
|
||||
*/
|
||||
protected SJDialog setLeftButtonTextColor(@ColorInt int color) {
|
||||
button1.setTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set text color for right button.
|
||||
*
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.4
|
||||
*/
|
||||
protected SJDialog setRightButtonTextColor(@ColorInt int color) {
|
||||
if (!twoButtons)
|
||||
throw OneButtonException();
|
||||
button2.setTextColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background color for all buttons.
|
||||
*
|
||||
* @param color Color to use for tinting buttons
|
||||
* @return current class
|
||||
* @since 1.4
|
||||
*/
|
||||
protected SJDialog setButtonsColor(@ColorInt int color) {
|
||||
checkButtonResource(0);
|
||||
button1.getBackground().setTint(color);
|
||||
if (twoButtons) {
|
||||
checkButtonResource(1);
|
||||
button2.getBackground().setTint(color);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background color for left button.
|
||||
*
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.4
|
||||
*/
|
||||
protected SJDialog setLeftButtonColor(@ColorInt int color) {
|
||||
checkButtonResource(0);
|
||||
button1.getBackground().setTint(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background color for right button.
|
||||
*
|
||||
* @param color Color to use for tinting this drawable
|
||||
* @return current class
|
||||
* @since 1.4
|
||||
*/
|
||||
protected SJDialog setRightButtonColor(@ColorInt int color) {
|
||||
if (!twoButtons)
|
||||
throw OneButtonException();
|
||||
|
||||
checkButtonResource(1);
|
||||
button2.getBackground().setTint(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
protected SJDialog setButtonColor(@ButtonColor String color) {
|
||||
checkButtonResource(0);
|
||||
setLeftButtonColor(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
protected SJDialog setButtonsColor(@ButtonColor String color) {
|
||||
setLeftButtonColor(color);
|
||||
if (twoButtons)
|
||||
setRightButtonColor(color);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
protected SJDialog setLeftButtonColor(@ButtonColor String color) {
|
||||
checkButtonResource(0);
|
||||
switch (color) {
|
||||
case RED_BUTTON:
|
||||
setLeftButtonBackgroundResource(R.drawable.ripple_button_red);
|
||||
setLeftButtonTextColor(Color.WHITE);
|
||||
break;
|
||||
case MATERIAL3_RED_BUTTON:
|
||||
setLeftButtonBackgroundResource(R.drawable.ripple_button_material3_red);
|
||||
setLeftButtonTextColor(context.getResources().getColor(R.color.md_theme_onError, context.getTheme()));
|
||||
break;
|
||||
case OLD_BUTTON_COLOR:
|
||||
setLeftButtonBackgroundResource(R.drawable.ripple_button_old);
|
||||
setLeftButtonTextColor(Color.WHITE);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException(color + " is not a valid argument");
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
protected SJDialog setRightButtonColor(@ButtonColor String color) {
|
||||
if (!twoButtons)
|
||||
throw OneButtonException();
|
||||
checkButtonResource(1);
|
||||
switch (color) {
|
||||
case RED_BUTTON:
|
||||
setRightButtonBackgroundResource(R.drawable.ripple_button_red);
|
||||
setRightButtonTextColor(Color.WHITE);
|
||||
break;
|
||||
case MATERIAL3_RED_BUTTON:
|
||||
setRightButtonBackgroundResource(R.drawable.ripple_button_material3_red);
|
||||
setRightButtonTextColor(context.getResources().getColor(R.color.md_theme_onError, context.getTheme()));
|
||||
break;
|
||||
case OLD_BUTTON_COLOR:
|
||||
setRightButtonBackgroundResource(R.drawable.ripple_button_old);
|
||||
setRightButtonTextColor(Color.WHITE);
|
||||
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException(color + " is not a valid argument");
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Change dialog color
|
||||
* @param color {@link ColorInt}
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
*/
|
||||
protected SJDialog setDialogBackgroundColor(@ColorInt int color){
|
||||
background.getBackground().mutate().setTint(color);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background resource for dialog.
|
||||
*
|
||||
* @param drawable resource id
|
||||
* @return current class
|
||||
* @since 1.3
|
||||
*/
|
||||
protected SJDialog setDialogBackgroundResource(@DrawableRes int drawable) {
|
||||
background.setBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background resource for all buttons.
|
||||
*
|
||||
* @param drawable resource id
|
||||
* @return current class
|
||||
* @since 1.3
|
||||
*/
|
||||
protected SJDialog setButtonsBackgroundResource(@DrawableRes int drawable) {
|
||||
checkButtonResource(0);
|
||||
button1.setBackgroundResource(drawable);
|
||||
if (twoButtons) {
|
||||
checkButtonResource(1);
|
||||
button2.setBackgroundResource(drawable);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background resource for left button.
|
||||
*
|
||||
* @param drawable resource id
|
||||
* @return current class
|
||||
* @since 1.3
|
||||
*/
|
||||
protected SJDialog setLeftButtonBackgroundResource(@DrawableRes int drawable) {
|
||||
checkButtonResource(0);
|
||||
button1.setBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set background resource for right button.
|
||||
*
|
||||
* @param drawable resource id
|
||||
* @return current class
|
||||
* @since 1.3
|
||||
*/
|
||||
protected SJDialog setRightButtonBackgroundResource(@DrawableRes int drawable) {
|
||||
if (!twoButtons)
|
||||
throw OneButtonException();
|
||||
|
||||
checkButtonResource(1);
|
||||
button2.setBackgroundResource(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set onClick listener for right button
|
||||
*
|
||||
* @param dialogButtonEvent dialog button events
|
||||
* @return current class
|
||||
* @since 1.0
|
||||
*/
|
||||
protected SJDialog onButtonClick(DialogButtonEvent dialogButtonEvent) {
|
||||
leftBtnOnClick = false;
|
||||
this.dialogButtonEvent = dialogButtonEvent;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set onClick listener for both buttons
|
||||
*
|
||||
* @param dialogButtonEvents dialog button events
|
||||
* @return current class
|
||||
* @since 1.0
|
||||
*/
|
||||
protected SJDialog onButtonClick(DialogButtonEvents dialogButtonEvents) {
|
||||
this.dialogButtonEvents = dialogButtonEvents;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set onClick listener for left button
|
||||
*
|
||||
* @param dialogButtonEvent dialog button event
|
||||
* @return current class
|
||||
*/
|
||||
protected SJDialog onLeftButtonClick(DialogButtonEvent dialogButtonEvent) {
|
||||
leftBtnOnClick = true;
|
||||
this.dialogButtonEvent = dialogButtonEvent;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creating dialog with two buttons. Use this method before changing buttons attributes
|
||||
* @since 1.5
|
||||
*/
|
||||
protected SJDialog dialogWithTwoButtons() {
|
||||
twoButtons = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* show dialog
|
||||
* @since 1.3
|
||||
*/
|
||||
protected SJDialog show() {
|
||||
setDialogTouchListener();
|
||||
addOnClickListener();
|
||||
dialog.show();
|
||||
return this;
|
||||
}
|
||||
|
||||
private void addOnClickListener() {
|
||||
if (dialogButtonEvents == null && dialogButtonEvent == null)
|
||||
return;
|
||||
|
||||
if (dialogButtonEvents != null) {
|
||||
button1.setOnClickListener(v -> dialogButtonEvents.onLeftButtonClick());
|
||||
button2.setOnClickListener(v -> dialogButtonEvents.onRightButtonClick());
|
||||
return;
|
||||
}
|
||||
|
||||
if (!twoButtons) {
|
||||
button1.setOnClickListener(v -> dialogButtonEvent.onButtonClick());
|
||||
return;
|
||||
}
|
||||
|
||||
if (leftBtnOnClick) {
|
||||
button1.setOnClickListener(v -> dialogButtonEvent.onButtonClick());
|
||||
return;
|
||||
}
|
||||
|
||||
button1.setOnClickListener(v -> dismiss());
|
||||
button2.setOnClickListener(v -> dialogButtonEvent.onButtonClick());
|
||||
}
|
||||
|
||||
/**
|
||||
* dismiss dialog
|
||||
* @since 1.3
|
||||
*/
|
||||
public void dismiss() {
|
||||
dialog.dismiss();
|
||||
}
|
||||
|
||||
private void setContentView(@LayoutRes int layoutResID) {
|
||||
dialog.setContentView(layoutResID);
|
||||
}
|
||||
|
||||
protected void setButton1(@IdRes int id) {
|
||||
this.button1 = dialog.findViewById(id);
|
||||
}
|
||||
|
||||
protected void setButton2(@IdRes int id) {
|
||||
this.button2 = dialog.findViewById(id);
|
||||
}
|
||||
|
||||
protected abstract @IdRes int setButtonsRootLayoutID();
|
||||
|
||||
protected abstract void setButtons();
|
||||
|
||||
|
||||
private void regenerateButtons() {
|
||||
LinearLayout buttons = dialog.findViewById(setButtonsRootLayoutID());
|
||||
regenerateLeftBtn(buttons);
|
||||
if (onlyOneButton) {
|
||||
return;
|
||||
}
|
||||
regenerateRightBtn(buttons);
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
private void regenerateLeftBtn(LinearLayout buttons) {
|
||||
if (buttons == null)
|
||||
buttons = dialog.findViewById(setButtonsRootLayoutID());
|
||||
|
||||
String txt = button1.getText().toString();
|
||||
buttons.removeView(button1);
|
||||
button1 = (Button) LayoutInflater
|
||||
.from(newTheme != -1 ? new ContextThemeWrapper(context, newTheme) : context)
|
||||
.inflate(Btn1Resource,buttons,false);
|
||||
button1.setText(txt);
|
||||
buttons.addView(button1, 0);
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
private void regenerateRightBtn(LinearLayout buttons) {
|
||||
if (buttons == null)
|
||||
buttons = dialog.findViewById(setButtonsRootLayoutID());
|
||||
|
||||
int btn2Visibility = button2.getVisibility();
|
||||
String txt = button2.getText().toString();
|
||||
buttons.removeView(button2);
|
||||
button2 = (Button) LayoutInflater
|
||||
.from(newTheme != -1 ? new ContextThemeWrapper(context, newTheme) : context)
|
||||
.inflate(Btn2Resource,buttons,false);
|
||||
button2.setVisibility(btn2Visibility);
|
||||
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) button2.getLayoutParams();
|
||||
params.setMarginStart(functions.dpToPixels(context,10));
|
||||
button2.setLayoutParams(params);
|
||||
button2.setText(txt);
|
||||
buttons.addView(button2, 1);
|
||||
}
|
||||
|
||||
private void checkButtonResource(int i) {
|
||||
if (usesDefaultTheme)
|
||||
return;
|
||||
|
||||
if (i == 0) {
|
||||
if (Btn1Resource == R.layout.button_template) {
|
||||
Btn1Resource = R.layout.button_template_1;
|
||||
regenerateLeftBtn(null);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (i == 1) {
|
||||
if (Btn2Resource == R.layout.button_template) {
|
||||
Btn2Resource = R.layout.button_template_1;
|
||||
regenerateRightBtn(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void setButton2Visibility(int visibility) {
|
||||
button2.setVisibility(visibility);
|
||||
}
|
||||
|
||||
protected TextView getTitleTextView() {
|
||||
return dialog.findViewById(R.id.titleText);
|
||||
}
|
||||
|
||||
protected TextView getMessageTextView() {
|
||||
return dialog.findViewById(R.id.messageTxt);
|
||||
}
|
||||
|
||||
protected Button getLeftButton() {
|
||||
return button1;
|
||||
}
|
||||
|
||||
protected Button getRightButton() {
|
||||
return button2;
|
||||
}
|
||||
|
||||
public int getMaxDialogWidth() {
|
||||
return this.maxDialogWidth;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the maximum width for dialog
|
||||
*
|
||||
* @param maxDialogWidth set value for {@link #maxDialogWidth}. Default is 600dp
|
||||
* @return current class
|
||||
* @since 1.4
|
||||
*/
|
||||
protected SJDialog setMaxDialogWidth(int maxDialogWidth) {
|
||||
this.maxDialogWidth = maxDialogWidth;
|
||||
setDialogSize();
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set animation for a dialog
|
||||
*
|
||||
* @param styleRes style resource
|
||||
* @return current class
|
||||
* @since 1.5
|
||||
*/
|
||||
protected SJDialog setDialogAnimations(@StyleRes int styleRes) {
|
||||
dialog.getWindow().getAttributes().windowAnimations = styleRes;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable or disable swipe down to dismiss dialog. Default is set to true
|
||||
*
|
||||
* @param isSwipeToDismiss Enable or disable swipe action
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
*/
|
||||
protected SJDialog swipeToDismiss(boolean isSwipeToDismiss){
|
||||
this.isSwipeToDismiss = isSwipeToDismiss;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set dialog OnTouchListener. by default is set to {@link SwipeDismissTouchListener}.
|
||||
* If this method is used, swipe to dismiss will not work.
|
||||
*
|
||||
* @param onTouchListener onTouchListener for dialog view
|
||||
* @return current class
|
||||
* @since 1.6
|
||||
*/
|
||||
protected SJDialog setOnTouchListener(View.OnTouchListener onTouchListener) {
|
||||
dialogOnTouchListener = onTouchListener;
|
||||
isDefaultOnTouchListener = false;
|
||||
return this;
|
||||
}
|
||||
|
||||
private void setDialogTouchListener() {
|
||||
|
||||
if (isDefaultOnTouchListener)
|
||||
dialogOnTouchListener = new SwipeDismissTouchListener(
|
||||
dialog.getWindow().getDecorView(),
|
||||
new SwipeDismissTouchListener.DismissCallbacks() {
|
||||
@Override
|
||||
public boolean canDismiss() {
|
||||
return isSwipeToDismiss;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDismiss(View view) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
dialog.getWindow().getDecorView().setOnTouchListener(dialogOnTouchListener);
|
||||
}
|
||||
|
||||
private OneButtonException OneButtonException() {
|
||||
return new OneButtonException("Trying to access right button when dialog has only one button. Use 'dialogWithTwoButtons()' to fix the problem.");
|
||||
}
|
||||
}
|
||||
|
||||
class OneButtonException extends RuntimeException {
|
||||
public OneButtonException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
/**
|
||||
* by SlaVcE
|
||||
* Setting up custom dialog.
|
||||
* @deprecated SetupDialog is renamed to BasicDialog. Use {@link BasicDialog} instead.
|
||||
* @since 1.0
|
||||
*/
|
||||
@Deprecated(since = "1.6")
|
||||
public class SetupDialog extends BasicDialog{ }
|
||||
+216
@@ -0,0 +1,216 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.VelocityTracker;
|
||||
import android.view.View;
|
||||
import android.view.ViewConfiguration;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
|
||||
public class SwipeDismissTouchListener implements View.OnTouchListener {
|
||||
private final int mSlop;
|
||||
private final long mAnimationTime;
|
||||
|
||||
// Fixed properties
|
||||
private final View mView;
|
||||
private final DismissCallbacks mCallbacks;
|
||||
private int mViewHeight = 1; // 1 and not 0 to prevent dividing by zero
|
||||
|
||||
// Transient properties
|
||||
private float mDownX;
|
||||
private float mDownY;
|
||||
private boolean mSwiping;
|
||||
private int mSwipingSlop;
|
||||
private VelocityTracker mVelocityTracker;
|
||||
private float mTranslationY;
|
||||
|
||||
/**
|
||||
* The callback interface used by {@link SwipeDismissTouchListener} to inform its client
|
||||
* about a successful dismissal of the view for which it was created.
|
||||
*/
|
||||
public interface DismissCallbacks {
|
||||
/**
|
||||
* Called to determine whether the view can be dismissed.
|
||||
*/
|
||||
boolean canDismiss();
|
||||
|
||||
/**
|
||||
* Called when the user has indicated they she would like to dismiss the view.
|
||||
*
|
||||
* @param view The originating {@link android.view.View} to be dismissed.
|
||||
*/
|
||||
void onDismiss(View view);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new swipe-to-dismiss touch listener for the given view.
|
||||
*
|
||||
* @param view The view to make dismissable.
|
||||
* @param callbacks The callback to trigger when the user has indicated that would like to
|
||||
* dismiss this view.
|
||||
*/
|
||||
public SwipeDismissTouchListener(View view, DismissCallbacks callbacks) {
|
||||
ViewConfiguration vc = ViewConfiguration.get(view.getContext());
|
||||
mSlop = vc.getScaledTouchSlop();
|
||||
mAnimationTime = view.getContext().getResources().getInteger(android.R.integer.config_shortAnimTime);
|
||||
mView = view;
|
||||
mCallbacks = callbacks;
|
||||
}
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
@Override
|
||||
public boolean onTouch(View view, MotionEvent motionEvent) {
|
||||
// offset because the view is translated during swipe
|
||||
motionEvent.offsetLocation(0, mTranslationY);
|
||||
|
||||
boolean returnTrue = false;
|
||||
|
||||
if (mViewHeight < 2) {
|
||||
mViewHeight = mView.getHeight();
|
||||
}
|
||||
|
||||
switch (motionEvent.getActionMasked()) {
|
||||
case MotionEvent.ACTION_DOWN: {
|
||||
// TODO: ensure this is a finger, and set a flag
|
||||
mDownX = motionEvent.getRawX();
|
||||
mDownY = motionEvent.getRawY();
|
||||
if (mCallbacks.canDismiss()) {
|
||||
mVelocityTracker = VelocityTracker.obtain();
|
||||
mVelocityTracker.addMovement(motionEvent);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
case MotionEvent.ACTION_UP: {
|
||||
if (mVelocityTracker == null) {
|
||||
break;
|
||||
}
|
||||
|
||||
float deltaY = motionEvent.getRawY() - mDownY;
|
||||
mVelocityTracker.addMovement(motionEvent);
|
||||
mVelocityTracker.computeCurrentVelocity(1000);
|
||||
|
||||
boolean dismiss = false;
|
||||
boolean dismissDown = false;
|
||||
if (deltaY > (float) mViewHeight / 2 && mSwiping) {
|
||||
dismiss = true;
|
||||
dismissDown = deltaY > 0;
|
||||
returnTrue = true;
|
||||
} else if (Math.abs(deltaY) > 0){
|
||||
returnTrue = true;
|
||||
}
|
||||
if (dismiss) {
|
||||
// dismiss
|
||||
mView.animate()
|
||||
.translationY(dismissDown ? mViewHeight : 0)
|
||||
.alpha(0)
|
||||
.setDuration(mAnimationTime)
|
||||
.setListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
performDismiss();
|
||||
}
|
||||
});
|
||||
|
||||
} else if (mSwiping) {
|
||||
// cancel
|
||||
|
||||
mView.animate()
|
||||
.translationY(0)
|
||||
.alpha(1)
|
||||
.setDuration(mAnimationTime)
|
||||
.setListener(null);
|
||||
}
|
||||
mVelocityTracker.recycle();
|
||||
mVelocityTracker = null;
|
||||
mTranslationY = 0;
|
||||
mDownX = 0;
|
||||
mDownY = 0;
|
||||
mSwiping = false;
|
||||
break;
|
||||
}
|
||||
|
||||
case MotionEvent.ACTION_CANCEL: {
|
||||
if (mVelocityTracker == null) {
|
||||
break;
|
||||
}
|
||||
mView.animate()
|
||||
.translationY(0)
|
||||
.alpha(1)
|
||||
.setDuration(mAnimationTime)
|
||||
.setListener(null);
|
||||
mVelocityTracker.recycle();
|
||||
mVelocityTracker = null;
|
||||
mTranslationY = 0;
|
||||
mDownX = 0;
|
||||
mDownY = 0;
|
||||
mSwiping = false;
|
||||
break;
|
||||
}
|
||||
|
||||
case MotionEvent.ACTION_MOVE: {
|
||||
if (mVelocityTracker == null) {
|
||||
break;
|
||||
}
|
||||
mVelocityTracker.addMovement(motionEvent);
|
||||
float deltaX = motionEvent.getRawX() - mDownX;
|
||||
float deltaY = motionEvent.getRawY() - mDownY;
|
||||
if (Math.abs(deltaY) > mSlop && Math.abs(deltaX) < Math.abs(deltaY) / 2) {
|
||||
mSwiping = true;
|
||||
mSwipingSlop = (deltaY > 0 ? mSlop : 0);
|
||||
mView.getParent().requestDisallowInterceptTouchEvent(true);
|
||||
|
||||
|
||||
MotionEvent cancelEvent = MotionEvent.obtain(motionEvent);
|
||||
cancelEvent.setAction(MotionEvent.ACTION_CANCEL | (motionEvent.getActionIndex() << MotionEvent.ACTION_POINTER_INDEX_SHIFT));
|
||||
mView.onTouchEvent(cancelEvent);
|
||||
cancelEvent.recycle();
|
||||
}
|
||||
|
||||
if (mSwiping) {
|
||||
mTranslationY = deltaY;
|
||||
if (deltaY - mSwipingSlop < 0)
|
||||
mView.setTranslationY(0);
|
||||
else mView.setTranslationY(deltaY - mSwipingSlop);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
return returnTrue;
|
||||
}
|
||||
|
||||
private void performDismiss() {
|
||||
// Animate the dismissed view to zero-height and then fire the dismiss callback.
|
||||
// This triggers layout on each animation frame; in the future we may want to do something
|
||||
// smarter and more performant.
|
||||
|
||||
final ViewGroup.LayoutParams lp = mView.getLayoutParams();
|
||||
final int originalHeight = mView.getHeight();
|
||||
|
||||
ValueAnimator animator = ValueAnimator.ofInt(originalHeight, 1).setDuration(mAnimationTime);
|
||||
|
||||
animator.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
mCallbacks.onDismiss(mView);
|
||||
// Reset view presentation
|
||||
mView.setAlpha(1f);
|
||||
mView.setTranslationX(0);
|
||||
lp.height = originalHeight;
|
||||
mView.setLayoutParams(lp);
|
||||
}
|
||||
});
|
||||
|
||||
animator.addUpdateListener(valueAnimator -> {
|
||||
lp.height = (Integer) valueAnimator.getAnimatedValue();
|
||||
mView.setLayoutParams(lp);
|
||||
});
|
||||
|
||||
animator.start();
|
||||
}
|
||||
}
|
||||
+162
@@ -0,0 +1,162 @@
|
||||
package com.sjapps.library.customdialog.adapter;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.sjapps.library.R;
|
||||
import com.sjapps.library.customdialog.ImageListItem;
|
||||
import com.sjapps.library.customdialog.list.events.ListItemClickObj;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class DefaultImageListAdapter extends RecyclerView.Adapter<DefaultImageListAdapter.ViewHolder> {
|
||||
|
||||
public ArrayList<ImageListItem> arrayListItems;
|
||||
|
||||
boolean isSelectable;
|
||||
|
||||
int itemBgRes;
|
||||
int itemBgResSelected;
|
||||
int listItemBgColor;
|
||||
int listItemBgColorSelected;
|
||||
int textColor;
|
||||
|
||||
ListItemClickObj<ImageListItem> itemClick;
|
||||
ArrayList<ImageListItem> selectedItems;
|
||||
|
||||
|
||||
public static class ViewHolder extends RecyclerView.ViewHolder {
|
||||
TextView valTxt;
|
||||
ImageView imageView;
|
||||
|
||||
public ViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
valTxt = itemView.findViewById(R.id.value1Txt);
|
||||
imageView = itemView.findViewById(R.id.imageView);
|
||||
}
|
||||
|
||||
public TextView getTxt() {
|
||||
return valTxt;
|
||||
}
|
||||
|
||||
public ImageView getImageView() {
|
||||
return imageView;
|
||||
}
|
||||
|
||||
public View getView() {
|
||||
return itemView.findViewById(R.id.layoutItem);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public DefaultImageListAdapter(ArrayList<ImageListItem> arrayList,
|
||||
boolean isSelectable,
|
||||
@Nullable ListItemClickObj<ImageListItem> itemClick,
|
||||
ArrayList<ImageListItem> selectedItems,
|
||||
int itemBgRes,
|
||||
int itemBgResSelected,
|
||||
int textColor,
|
||||
int listItemBgColor,
|
||||
int listItemBgColorSelected) {
|
||||
this.itemClick = itemClick;
|
||||
this.isSelectable = isSelectable;
|
||||
this.selectedItems = selectedItems;
|
||||
this.itemBgRes = itemBgRes;
|
||||
this.itemBgResSelected = itemBgResSelected;
|
||||
this.textColor = textColor;
|
||||
this.arrayListItems = arrayList;
|
||||
this.listItemBgColor = listItemBgColor;
|
||||
this.listItemBgColorSelected = listItemBgColorSelected;
|
||||
}
|
||||
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public DefaultImageListAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.default_image_list_item, parent, false);
|
||||
return new DefaultImageListAdapter.ViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
|
||||
setValues(holder, position);
|
||||
setBackground(holder, position);
|
||||
|
||||
if (textColor != 1) {
|
||||
holder.getTxt().setTextColor(textColor);
|
||||
}
|
||||
|
||||
if (isSelectable) {
|
||||
holder.getView().setOnClickListener(v ->
|
||||
checkSelected(holder, arrayListItems.get(position))
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
holder.getView().setOnClickListener(v -> itemClick.onClick(position, arrayListItems.get(position)));
|
||||
|
||||
}
|
||||
|
||||
private void setBackground(@NonNull ViewHolder holder, int position) {
|
||||
if (!isSelectable) {
|
||||
setItemResource(holder, itemBgRes);
|
||||
return;
|
||||
}
|
||||
|
||||
if (selectedItems.contains(arrayListItems.get(position))) {
|
||||
setItemResource(holder, itemBgResSelected);
|
||||
setItemColor(holder,listItemBgColorSelected);
|
||||
}
|
||||
else {
|
||||
setItemResource(holder, itemBgRes);
|
||||
setItemColor(holder,listItemBgColor);
|
||||
}
|
||||
}
|
||||
|
||||
private void setValues(@NonNull ViewHolder holder, int position) {
|
||||
holder.getTxt().setText(arrayListItems.get(position).getName());
|
||||
holder.getImageView().setImageDrawable(arrayListItems.get(position).getImage());
|
||||
|
||||
}
|
||||
|
||||
private void checkSelected(@NonNull ViewHolder holder,ImageListItem obj) {
|
||||
if (!selectedItems.contains(obj))
|
||||
selectItem(holder, obj);
|
||||
else deselectItem(holder, obj);
|
||||
}
|
||||
|
||||
private void selectItem(@NonNull ViewHolder holder,ImageListItem obj) {
|
||||
selectedItems.add(obj);
|
||||
setItemResource(holder, itemBgResSelected);
|
||||
setItemColor(holder,listItemBgColorSelected);
|
||||
}
|
||||
|
||||
private void deselectItem(@NonNull ViewHolder holder,ImageListItem obj) {
|
||||
selectedItems.remove(obj);
|
||||
setItemResource(holder, itemBgRes);
|
||||
setItemColor(holder,listItemBgColor);
|
||||
}
|
||||
|
||||
private void setItemResource(@NonNull ViewHolder holder, int drawable) {
|
||||
holder.getView().setBackgroundResource(drawable);
|
||||
}
|
||||
|
||||
private void setItemColor(@NonNull ViewHolder holder, int color){
|
||||
if (color == -1)
|
||||
return;
|
||||
holder.getView().getBackground().mutate().setTint(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return arrayListItems.size();
|
||||
}
|
||||
}
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
package com.sjapps.library.customdialog.adapter;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.sjapps.library.R;
|
||||
import com.sjapps.library.customdialog.list.events.ListItemClick;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class DefaultListAdapter extends RecyclerView.Adapter<DefaultListAdapterGeneric.ViewHolder> {
|
||||
|
||||
String[] items;
|
||||
boolean isSelectable;
|
||||
ListItemClick itemClick;
|
||||
ArrayList<String> selectedItems;
|
||||
int itemBgRes;
|
||||
int itemBgResSelected;
|
||||
int listItemBgColor;
|
||||
int listItemBgColorSelected;
|
||||
int textColor;
|
||||
|
||||
|
||||
public DefaultListAdapter(String[] items,
|
||||
boolean isSelectable,
|
||||
ListItemClick itemClick,
|
||||
ArrayList<String> selectedItems,
|
||||
int itemBgRes,
|
||||
int itemBgResSelected,
|
||||
int textColor,
|
||||
int listItemBgColor,
|
||||
int listItemBgColorSelected) {
|
||||
this.items = items;
|
||||
this.isSelectable = isSelectable;
|
||||
this.itemClick = itemClick;
|
||||
this.selectedItems = selectedItems;
|
||||
this.itemBgRes = itemBgRes;
|
||||
this.itemBgResSelected = itemBgResSelected;
|
||||
this.textColor = textColor;
|
||||
this.listItemBgColor = listItemBgColor;
|
||||
this.listItemBgColorSelected = listItemBgColorSelected;
|
||||
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public DefaultListAdapterGeneric.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.default_list_item,parent,false);
|
||||
return new DefaultListAdapterGeneric.ViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull DefaultListAdapterGeneric.ViewHolder holder, int position) {
|
||||
holder.getVal1Txt().setText(items[position]);
|
||||
|
||||
if (selectedItems.contains(items[position])) {
|
||||
setItemResource(holder, itemBgResSelected);
|
||||
setItemColor(holder,listItemBgColorSelected);
|
||||
}
|
||||
else {
|
||||
setItemResource(holder, itemBgRes);
|
||||
setItemColor(holder,listItemBgColor);
|
||||
}
|
||||
if (textColor != 1)
|
||||
holder.getVal1Txt().setTextColor(textColor);
|
||||
|
||||
if (isSelectable) {
|
||||
holder.getView().setOnClickListener(v -> {
|
||||
if (!selectedItems.contains(items[position]))
|
||||
selectItem(holder,position);
|
||||
else deselectItem(holder, position);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
holder.getView().setOnClickListener(v -> itemClick.onClick(position,items[position]));
|
||||
|
||||
}
|
||||
|
||||
private void selectItem(@NonNull DefaultListAdapterGeneric.ViewHolder holder, int position){
|
||||
selectedItems.add(items[position]);
|
||||
setItemResource(holder,itemBgResSelected);
|
||||
setItemColor(holder,listItemBgColorSelected);
|
||||
|
||||
}
|
||||
|
||||
private void deselectItem(@NonNull DefaultListAdapterGeneric.ViewHolder holder, int position){
|
||||
selectedItems.remove(items[position]);
|
||||
setItemResource(holder,itemBgRes);
|
||||
setItemColor(holder,listItemBgColor);
|
||||
}
|
||||
|
||||
private void setItemResource(@NonNull DefaultListAdapterGeneric.ViewHolder holder, int drawable){
|
||||
holder.getView().setBackgroundResource(drawable);
|
||||
}
|
||||
|
||||
private void setItemColor(@NonNull DefaultListAdapterGeneric.ViewHolder holder, int color){
|
||||
if (color == -1)
|
||||
return;
|
||||
holder.getView().getBackground().mutate().setTint(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return items.length;
|
||||
}
|
||||
|
||||
}
|
||||
+290
@@ -0,0 +1,290 @@
|
||||
package com.sjapps.library.customdialog.adapter;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.sjapps.library.R;
|
||||
import com.sjapps.library.customdialog.ListItemValue;
|
||||
import com.sjapps.library.customdialog.ListItemValues;
|
||||
import com.sjapps.library.customdialog.list.events.ListItemClickObj;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class DefaultListAdapterGeneric<T> extends RecyclerView.Adapter<DefaultListAdapterGeneric.ViewHolder> {
|
||||
|
||||
public ArrayList<T> arrayListItems;
|
||||
public T[] listObj;
|
||||
|
||||
private ListItemValue<T> value;
|
||||
private ListItemValues<T> values;
|
||||
|
||||
boolean isArrList;
|
||||
boolean isObjArr;
|
||||
boolean hasTwoVal;
|
||||
boolean isSelectable;
|
||||
|
||||
int itemBgRes;
|
||||
int itemBgResSelected;
|
||||
int listItemBgColor;
|
||||
int listItemBgColorSelected;
|
||||
int textColor;
|
||||
|
||||
ListItemClickObj<T> itemClick;
|
||||
ArrayList<T> selectedItems;
|
||||
|
||||
|
||||
public static class ViewHolder extends RecyclerView.ViewHolder{
|
||||
TextView val1Txt;
|
||||
TextView val2Txt;
|
||||
|
||||
public ViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
val1Txt = itemView.findViewById(R.id.value1Txt);
|
||||
val2Txt = itemView.findViewById(R.id.value2Txt);
|
||||
}
|
||||
|
||||
public TextView getVal1Txt() {
|
||||
return val1Txt;
|
||||
}
|
||||
|
||||
public TextView getVal2Txt() {
|
||||
return val2Txt;
|
||||
}
|
||||
|
||||
public View getView(){
|
||||
return itemView.findViewById(R.id.layoutItem);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public DefaultListAdapterGeneric(T[] objArray,
|
||||
ListItemValue<T> value,
|
||||
boolean isSelectable,
|
||||
@Nullable ListItemClickObj<T> itemClick,
|
||||
ArrayList<T> selectedItems,
|
||||
int itemBgRes,
|
||||
int itemBgResSelected,
|
||||
int textColor,
|
||||
int listItemBgColor,
|
||||
int listItemBgColorSelected){
|
||||
this.value = value;
|
||||
this.itemClick = itemClick;
|
||||
this.isSelectable = isSelectable;
|
||||
this.selectedItems = selectedItems;
|
||||
this.itemBgRes = itemBgRes;
|
||||
this.itemBgResSelected = itemBgResSelected;
|
||||
this.textColor = textColor;
|
||||
this.listItemBgColor = listItemBgColor;
|
||||
this.listItemBgColorSelected = listItemBgColorSelected;
|
||||
ObjArrayAdapter(objArray);
|
||||
}
|
||||
|
||||
public DefaultListAdapterGeneric(T[] objArray,
|
||||
ListItemValues<T> values,
|
||||
boolean isSelectable,
|
||||
@Nullable ListItemClickObj<T> itemClick,
|
||||
ArrayList<T> selectedItems,
|
||||
int itemBgRes,
|
||||
int itemBgResSelected,
|
||||
int textColor,
|
||||
int listItemBgColor,
|
||||
int listItemBgColorSelected){
|
||||
this.values = values;
|
||||
this.itemClick = itemClick;
|
||||
hasTwoVal = true;
|
||||
this.isSelectable = isSelectable;
|
||||
this.selectedItems = selectedItems;
|
||||
this.itemBgRes = itemBgRes;
|
||||
this.itemBgResSelected = itemBgResSelected;
|
||||
this.textColor = textColor;
|
||||
this.listItemBgColor = listItemBgColor;
|
||||
this.listItemBgColorSelected = listItemBgColorSelected;
|
||||
ObjArrayAdapter(objArray);
|
||||
}
|
||||
|
||||
public DefaultListAdapterGeneric(ArrayList<T> arrayList,
|
||||
ListItemValue<T> value,
|
||||
boolean isSelectable,
|
||||
@Nullable ListItemClickObj<T> itemClick,
|
||||
ArrayList<T> selectedItems,
|
||||
int itemBgRes,
|
||||
int itemBgResSelected,
|
||||
int textColor,
|
||||
int listItemBgColor,
|
||||
int listItemBgColorSelected){
|
||||
this.value = value;
|
||||
this.itemClick = itemClick;
|
||||
this.isSelectable = isSelectable;
|
||||
this.selectedItems = selectedItems;
|
||||
this.itemBgRes = itemBgRes;
|
||||
this.itemBgResSelected = itemBgResSelected;
|
||||
this.textColor = textColor;
|
||||
this.listItemBgColor = listItemBgColor;
|
||||
this.listItemBgColorSelected = listItemBgColorSelected;
|
||||
ArrayListAdapter(arrayList);
|
||||
}
|
||||
|
||||
public DefaultListAdapterGeneric(ArrayList<T> arrayList,
|
||||
ListItemValues<T> values,
|
||||
boolean isSelectable,
|
||||
@Nullable ListItemClickObj<T> itemClick,
|
||||
ArrayList<T> selectedItems,
|
||||
int itemBgRes,
|
||||
int itemBgResSelected,
|
||||
int textColor,
|
||||
int listItemBgColor,
|
||||
int listItemBgColorSelected){
|
||||
this.values = values;
|
||||
this.itemClick = itemClick;
|
||||
hasTwoVal = true;
|
||||
this.isSelectable = isSelectable;
|
||||
this.selectedItems = selectedItems;
|
||||
this.itemBgRes = itemBgRes;
|
||||
this.itemBgResSelected = itemBgResSelected;
|
||||
this.textColor = textColor;
|
||||
this.listItemBgColor = listItemBgColor;
|
||||
this.listItemBgColorSelected = listItemBgColorSelected;
|
||||
ArrayListAdapter(arrayList);
|
||||
}
|
||||
|
||||
private void ObjArrayAdapter(T[] objArray){
|
||||
this.listObj = objArray;
|
||||
isObjArr = true;
|
||||
|
||||
}
|
||||
|
||||
private void ArrayListAdapter(ArrayList<T> arrayList){
|
||||
this.arrayListItems = arrayList;
|
||||
isArrList = true;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public DefaultListAdapterGeneric.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.default_list_item,parent,false);
|
||||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull DefaultListAdapterGeneric.ViewHolder holder, int position) {
|
||||
setValues(holder,position);
|
||||
setBackground(holder,position);
|
||||
|
||||
if (textColor != 1){
|
||||
holder.getVal1Txt().setTextColor(textColor);
|
||||
holder.getVal2Txt().setTextColor(textColor);
|
||||
}
|
||||
|
||||
if (isSelectable){
|
||||
holder.getView().setOnClickListener(v -> {
|
||||
if (isArrList)
|
||||
checkSelected(holder, arrayListItems.get(position));
|
||||
else if (isObjArr)
|
||||
checkSelected(holder, listObj[position]);
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (isArrList)
|
||||
holder.getView().setOnClickListener(v -> itemClick.onClick(position,arrayListItems.get(position)));
|
||||
|
||||
if (isObjArr)
|
||||
holder.getView().setOnClickListener(v -> itemClick.onClick(position,listObj[position]));
|
||||
|
||||
}
|
||||
|
||||
private void setBackground(@NonNull DefaultListAdapterGeneric.ViewHolder holder, int position) {
|
||||
if (!isSelectable) {
|
||||
setItemResource(holder,itemBgRes);
|
||||
return;
|
||||
}
|
||||
if (isArrList) {
|
||||
if (selectedItems.contains(arrayListItems.get(position))) {
|
||||
setItemResource(holder, itemBgResSelected);
|
||||
setItemColor(holder,listItemBgColorSelected);
|
||||
}
|
||||
else {
|
||||
setItemResource(holder, itemBgRes);
|
||||
setItemColor(holder,listItemBgColor);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (isObjArr)
|
||||
if (selectedItems.contains(listObj[position])) {
|
||||
setItemResource(holder, itemBgResSelected);
|
||||
setItemColor(holder,listItemBgColorSelected);
|
||||
}
|
||||
else {
|
||||
setItemResource(holder, itemBgRes);
|
||||
setItemColor(holder,listItemBgColor);
|
||||
}
|
||||
}
|
||||
|
||||
private void setValues(@NonNull DefaultListAdapterGeneric.ViewHolder holder, int position){
|
||||
if (isArrList){
|
||||
if (!hasTwoVal) {
|
||||
holder.getVal1Txt().setText(value.getValue(arrayListItems.get(position)));
|
||||
return;
|
||||
}
|
||||
holder.getVal1Txt().setText(values.getValue1(arrayListItems.get(position)));
|
||||
holder.getVal2Txt().setText(values.getValue2(arrayListItems.get(position)));
|
||||
holder.getVal2Txt().setVisibility(View.VISIBLE);
|
||||
return;
|
||||
}
|
||||
if (isObjArr) {
|
||||
if (!hasTwoVal) {
|
||||
holder.getVal1Txt().setText(value.getValue(listObj[position]));
|
||||
return;
|
||||
}
|
||||
holder.getVal1Txt().setText(values.getValue1(listObj[position]));
|
||||
holder.getVal2Txt().setText(values.getValue2(listObj[position]));
|
||||
holder.getVal2Txt().setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkSelected(@NonNull DefaultListAdapterGeneric.ViewHolder holder, T obj){
|
||||
if (!selectedItems.contains(obj))
|
||||
selectItem(holder,obj);
|
||||
else deselectItem(holder,obj);
|
||||
}
|
||||
|
||||
private void selectItem(@NonNull DefaultListAdapterGeneric.ViewHolder holder, T obj){
|
||||
selectedItems.add(obj);
|
||||
setItemResource(holder, itemBgResSelected);
|
||||
setItemColor(holder,listItemBgColorSelected);
|
||||
|
||||
}
|
||||
|
||||
private void deselectItem(@NonNull DefaultListAdapterGeneric.ViewHolder holder, T obj){
|
||||
selectedItems.remove(obj);
|
||||
setItemResource(holder,itemBgRes);
|
||||
setItemColor(holder,listItemBgColor);
|
||||
|
||||
}
|
||||
|
||||
private void setItemResource(@NonNull DefaultListAdapterGeneric.ViewHolder holder, int drawable){
|
||||
holder.getView().setBackgroundResource(drawable);
|
||||
}
|
||||
|
||||
private void setItemColor(@NonNull DefaultListAdapterGeneric.ViewHolder holder, int color){
|
||||
if (color == -1)
|
||||
return;
|
||||
holder.getView().getBackground().mutate().setTint(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (isArrList)
|
||||
return arrayListItems.size();
|
||||
if (isObjArr)
|
||||
return listObj.length;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.sjapps.library.customdialog;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.sjapps.library.R;
|
||||
|
||||
public class functions {
|
||||
public static void SetDialogSize(@NonNull Context context, Dialog dialog, int maxWidth){
|
||||
Configuration configuration = context.getResources().getConfiguration();
|
||||
int width = ViewGroup.LayoutParams.MATCH_PARENT;
|
||||
int height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
|
||||
if (configuration.screenWidthDp > maxWidth)
|
||||
width = dpToPixels(context,maxWidth);
|
||||
|
||||
dialog.getWindow().setLayout(width, height);
|
||||
|
||||
}
|
||||
public static int dpToPixels(@NonNull Context context, float dp) {
|
||||
Resources r = context.getResources();
|
||||
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.sjapps.library.customdialog.list.events;
|
||||
|
||||
public interface ListItemClick {
|
||||
void onClick(int position, String value);
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package com.sjapps.library.customdialog.list.events;
|
||||
|
||||
public interface ListItemClickObj<T> {
|
||||
void onClick(int position, T obj);
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
>
|
||||
<alpha
|
||||
android:duration="200"
|
||||
android:fromAlpha="0"
|
||||
android:toAlpha="1"
|
||||
/>
|
||||
<translate
|
||||
android:duration="300"
|
||||
android:fromYDelta="5%"
|
||||
android:toYDelta="0"
|
||||
/>
|
||||
|
||||
</set>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
>
|
||||
<alpha
|
||||
android:duration="200"
|
||||
android:fromAlpha="1"
|
||||
android:toAlpha="0"
|
||||
/>
|
||||
<translate
|
||||
android:duration="300"
|
||||
android:fromYDelta="0"
|
||||
android:toYDelta="5%"
|
||||
/>
|
||||
|
||||
</set>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="?colorSecondaryContainer"/>
|
||||
<corners android:radius="30dp"/>
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="?colorErrorContainer"/>
|
||||
<corners android:radius="30dp"/>
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/SJDialog_oldBackground"/>
|
||||
<corners android:radius="30dp"/>
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/SJDialog_OldThemeErrorDialog"/>
|
||||
<corners android:radius="30dp"/>
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="#ffffff">
|
||||
<item android:id="@+id/mask">
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="?colorPrimary"/>
|
||||
<corners android:radius="60dp"/>
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
|
||||
</ripple>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="#ffffff">
|
||||
<item android:id="@+id/mask">
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="?colorError"/>
|
||||
<corners android:radius="60dp"/>
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
|
||||
</ripple>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="#ffffff">
|
||||
<item android:id="@+id/mask">
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/SJDialog_oldButton"/>
|
||||
<corners android:radius="60dp"/>
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
|
||||
</ripple>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="#ffffff">
|
||||
<item android:id="@+id/mask">
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/SJDialog_red"/>
|
||||
<corners android:radius="60dp"/>
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
|
||||
</ripple>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="?colorPrimary">
|
||||
<item android:id="@+id/mask">
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="?colorSecondaryContainer"/>
|
||||
<corners android:radius="20dp"/>
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
|
||||
</ripple>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="#ffffff">
|
||||
<item android:id="@+id/mask">
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/SJDialog_oldBackground"/>
|
||||
<corners android:radius="20dp"/>
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
|
||||
</ripple>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="?colorPrimary">
|
||||
<item android:id="@+id/mask">
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="?colorPrimaryInverse"/>
|
||||
<corners android:radius="20dp"/>
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
|
||||
</ripple>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="#ffffff">
|
||||
<item android:id="@+id/mask">
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/SJDialog_oldBackground2"/>
|
||||
<corners android:radius="20dp"/>
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
|
||||
</ripple>
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/dialog"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingBottom="10dp"
|
||||
|
||||
>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/dialogBackground"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:background="@drawable/dialog_background"
|
||||
android:gravity="bottom"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/titleText"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:fontFamily="@font/koho_bold"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:textColor="?colorOnSecondaryContainer"
|
||||
android:layout_weight="1"
|
||||
android:text="Title"
|
||||
android:textAlignment="center"
|
||||
android:textSize="25dp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/messageTxt"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Message"
|
||||
android:fontFamily="@font/koho"
|
||||
android:textAlignment="viewStart"
|
||||
android:layout_gravity="center"
|
||||
android:textSize="20dp"
|
||||
android:textColor="?colorOnSecondaryContainer"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/buttons"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn1"
|
||||
style="@style/SJDialog.ButtonStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="45dp"
|
||||
android:layout_weight="0.5"
|
||||
android:fontFamily="@font/koho"
|
||||
android:autoSizeMaxTextSize="14dp"
|
||||
android:autoSizeMinTextSize="5dp"
|
||||
android:autoSizeStepGranularity="1dp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:maxLines="1"
|
||||
android:visibility="visible"
|
||||
android:text="Cancel" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn2"
|
||||
style="@style/SJDialog.ButtonStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="45dp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:fontFamily="@font/koho"
|
||||
android:layout_weight="0.5"
|
||||
android:autoSizeMaxTextSize="14dp"
|
||||
android:autoSizeMinTextSize="5dp"
|
||||
android:autoSizeStepGranularity="1dp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:maxLines="1"
|
||||
android:visibility="visible"
|
||||
android:text="Ok" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Button xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
style="@style/SJDialog.ButtonStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="45dp"
|
||||
|
||||
android:layout_weight="1"
|
||||
android:autoSizeMaxTextSize="14dp"
|
||||
android:autoSizeMinTextSize="5dp"
|
||||
android:autoSizeStepGranularity="1dp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:maxLines="1"
|
||||
android:text="Btn"
|
||||
/>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Button xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
style="@style/SJDialog.ButtonStyle"
|
||||
android:theme="@style/Theme.SJDialog"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="45dp"
|
||||
|
||||
android:layout_weight="1"
|
||||
android:autoSizeMaxTextSize="14dp"
|
||||
android:autoSizeMinTextSize="5dp"
|
||||
android:autoSizeStepGranularity="1dp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:maxLines="1"
|
||||
android:text="Btn"
|
||||
/>
|
||||
@@ -0,0 +1,107 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/dialog"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingVertical="10dp"
|
||||
|
||||
>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/dialogBackground"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:background="@drawable/dialog_background"
|
||||
android:gravity="bottom"
|
||||
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/titleText"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:textColor="?colorOnSecondaryContainer"
|
||||
android:text="Title"
|
||||
android:textAlignment="center"
|
||||
android:textSize="25dp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/messageTxt"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Message"
|
||||
android:textAlignment="viewStart"
|
||||
android:layout_gravity="center"
|
||||
android:textSize="20dp"
|
||||
android:textColor="?colorOnSecondaryContainer"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
>
|
||||
<LinearLayout
|
||||
android:id="@+id/customViewRoot"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
/>
|
||||
</ScrollView>
|
||||
<LinearLayout
|
||||
android:id="@+id/buttons"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn1"
|
||||
style="@style/SJDialog.ButtonStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="45dp"
|
||||
android:layout_weight="1"
|
||||
android:autoSizeMaxTextSize="14dp"
|
||||
android:autoSizeMinTextSize="5dp"
|
||||
android:autoSizeStepGranularity="1dp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:maxLines="1"
|
||||
android:text="Cancel" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn2"
|
||||
style="@style/SJDialog.ButtonStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="45dp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_weight="1"
|
||||
android:autoSizeMaxTextSize="14dp"
|
||||
android:autoSizeMinTextSize="5dp"
|
||||
android:autoSizeStepGranularity="1dp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:maxLines="1"
|
||||
android:visibility="gone"
|
||||
android:text="Ok" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:minHeight="70dp"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/layoutItem"
|
||||
android:background="@drawable/ripple_list"
|
||||
android:clipChildren="true"
|
||||
android:layout_width="80dp"
|
||||
android:layout_margin="5dp"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:paddingVertical="5dp"
|
||||
android:layout_gravity="center"
|
||||
|
||||
>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imageView"
|
||||
android:layout_width="45dp"
|
||||
android:layout_height="45dp"
|
||||
android:layout_gravity="center"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/value1Txt"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="30dp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:autoSizeMinTextSize="5dp"
|
||||
android:autoSizeMaxTextSize="10dp"
|
||||
android:autoSizeStepGranularity="1dp"
|
||||
android:textSize="10dp"
|
||||
android:textColor="?colorOnSecondaryContainer"
|
||||
android:layout_weight="1"
|
||||
android:maxLines="2"
|
||||
android:textAlignment="center"
|
||||
android:gravity="center"
|
||||
android:textStyle="bold"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:text="Value"
|
||||
|
||||
/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:minHeight="70dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="5dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/layoutItem"
|
||||
android:background="@drawable/ripple_list"
|
||||
android:clipChildren="true"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:paddingVertical="5dp"
|
||||
|
||||
>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/value1Txt"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="30dp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:autoSizeMinTextSize="5dp"
|
||||
android:autoSizeMaxTextSize="25dp"
|
||||
android:autoSizeStepGranularity="1dp"
|
||||
android:textSize="20dp"
|
||||
android:textColor="?colorOnSecondaryContainer"
|
||||
android:layout_weight="1"
|
||||
android:maxLines="1"
|
||||
android:gravity="center"
|
||||
android:textStyle="bold"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:text="Value"
|
||||
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/value2Txt"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="30dp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:autoSizeMinTextSize="5dp"
|
||||
android:autoSizeMaxTextSize="25dp"
|
||||
android:autoSizeStepGranularity="1dp"
|
||||
android:textSize="15dp"
|
||||
android:textColor="?colorOnSecondaryContainer"
|
||||
android:layout_weight="1"
|
||||
android:maxLines="1"
|
||||
android:gravity="center"
|
||||
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:text="Value"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,110 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/dialog"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingVertical="10dp"
|
||||
|
||||
>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/dialogBackground"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
|
||||
android:background="@drawable/dialog_background"
|
||||
android:gravity="bottom"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/titleText"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:text="Title"
|
||||
android:textAlignment="center"
|
||||
android:textColor="?colorOnSecondaryContainer"
|
||||
android:textSize="25dp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/messageTxt"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="Message"
|
||||
android:textAlignment="viewStart"
|
||||
android:textColor="?colorOnSecondaryContainer"
|
||||
android:textSize="20dp"
|
||||
android:visibility="gone" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/emptyListTxt"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="List is empty"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginTop="20dp"
|
||||
android:textColor="?colorOnSecondaryContainer"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_weight="1"
|
||||
|
||||
/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/buttons"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn1"
|
||||
style="@style/SJDialog.ButtonStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="45dp"
|
||||
android:layout_weight="1"
|
||||
android:autoSizeMaxTextSize="14dp"
|
||||
android:autoSizeMinTextSize="5dp"
|
||||
android:autoSizeStepGranularity="1dp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:maxLines="1"
|
||||
android:text="Cancel"
|
||||
android:visibility="visible" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn2"
|
||||
style="@style/SJDialog.ButtonStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="45dp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_weight="1"
|
||||
android:autoSizeMaxTextSize="14dp"
|
||||
android:autoSizeMinTextSize="5dp"
|
||||
android:autoSizeStepGranularity="1dp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:maxLines="1"
|
||||
android:text="Ok"
|
||||
android:visibility="gone" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/dialog"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingBottom="10dp"
|
||||
>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/dialogBackground"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:background="@drawable/dialog_background"
|
||||
android:gravity="bottom"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/titleText"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_weight="1"
|
||||
android:textColor="?colorOnSecondaryContainer"
|
||||
android:text="Title"
|
||||
android:textAlignment="center"
|
||||
android:textSize="25dp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/messageTxt"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:textColor="?colorOnSecondaryContainer"
|
||||
android:text="Message"
|
||||
android:textAlignment="viewStart"
|
||||
android:textSize="20dp"
|
||||
android:visibility="gone" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/buttonRoot"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn"
|
||||
style="@style/SJDialog.ButtonStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="45dp"
|
||||
android:layout_weight="1"
|
||||
android:autoSizeMaxTextSize="14dp"
|
||||
android:autoSizeMinTextSize="5dp"
|
||||
android:autoSizeStepGranularity="1dp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:maxLines="1"
|
||||
android:text="Ok" />
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,48 @@
|
||||
<resources>
|
||||
<color name="md_theme_primary">#B2C5FF</color>
|
||||
<color name="md_theme_onPrimary">#002A79</color>
|
||||
<color name="md_theme_primaryContainer">#003EA9</color>
|
||||
<color name="md_theme_onPrimaryContainer">#DAE2FF</color>
|
||||
<color name="md_theme_secondary">#C1C6DD</color>
|
||||
<color name="md_theme_onSecondary">#2A3042</color>
|
||||
<color name="md_theme_secondaryContainer">#414659</color>
|
||||
<color name="md_theme_onSecondaryContainer">#DCE1F9</color>
|
||||
<color name="md_theme_tertiary">#C0C1FF</color>
|
||||
<color name="md_theme_onTertiary">#1200AA</color>
|
||||
<color name="md_theme_tertiaryContainer">#2510E1</color>
|
||||
<color name="md_theme_onTertiaryContainer">#E1E0FF</color>
|
||||
<color name="md_theme_error">#FFB4A9</color>
|
||||
<color name="md_theme_errorContainer">#930006</color>
|
||||
<color name="md_theme_onError">#680003</color>
|
||||
<color name="md_theme_onErrorContainer">#FFDAD4</color>
|
||||
<color name="md_theme_background">#1B1B1F</color>
|
||||
<color name="md_theme_onBackground">#E3E1E6</color>
|
||||
<color name="md_theme_surface">#1B1B1F</color>
|
||||
<color name="md_theme_onSurface">#E3E1E6</color>
|
||||
<color name="md_theme_surfaceVariant">#44464E</color>
|
||||
<color name="md_theme_onSurfaceVariant">#C6C6D0</color>
|
||||
<color name="md_theme_outline">#8F909A</color>
|
||||
<color name="md_theme_inverseOnSurface">#1B1B1F</color>
|
||||
<color name="md_theme_inverseSurface">#E3E1E6</color>
|
||||
<color name="md_theme_inversePrimary">#0053DC</color>
|
||||
<color name="md_theme_shadow">#000000</color>
|
||||
<color name="md_theme_primaryInverse">#0053DC</color>
|
||||
|
||||
<color name="seed">#0060F4</color>
|
||||
<color name="error">#BA1B1B</color>
|
||||
<color name="Custom0">#625FCD</color>
|
||||
|
||||
|
||||
<color name="overlay_light_primary">#9C4146</color>
|
||||
<color name="overlay_light_onPrimary">#FFFFFF</color>
|
||||
<color name= "overlay_light_primaryContainer">#FFDADB</color>
|
||||
<color name="overlay_light_onPrimaryContainer">#400008</color>
|
||||
|
||||
<color name="SJDialog_oldBackground">#333333</color>
|
||||
<color name="SJDialog_oldBackground2">#4a4a4a</color>
|
||||
<color name="SJDialog_oldButton">#0060f4</color>
|
||||
<color name="SJDialog_red">#BA1B1B</color>
|
||||
|
||||
<color name="SJDialog_OldThemeTextColor">#E5E5E5</color>
|
||||
<color name="SJDialog_ErrorTextColor">#FFDAD4</color>
|
||||
</resources>
|
||||
@@ -0,0 +1,36 @@
|
||||
<resources>
|
||||
|
||||
<style name="Theme.SJDialog" parent="Theme.Material3.DynamicColors.DayNight">
|
||||
<item name="colorPrimary">@color/md_theme_primary</item>
|
||||
<item name="colorOnPrimary">@color/md_theme_onPrimary</item>
|
||||
<item name="colorPrimaryContainer">@color/md_theme_primaryContainer</item>
|
||||
<item name="colorOnPrimaryContainer">@color/md_theme_onPrimaryContainer</item>
|
||||
<item name="colorSecondary">@color/md_theme_secondary</item>
|
||||
<item name="colorOnSecondary">@color/md_theme_onSecondary</item>
|
||||
<item name="colorSecondaryContainer">@color/md_theme_secondaryContainer</item>
|
||||
<item name="colorOnSecondaryContainer">@color/md_theme_onSecondaryContainer</item>
|
||||
<item name="colorTertiary">@color/md_theme_tertiary</item>
|
||||
<item name="colorOnTertiary">@color/md_theme_onTertiary</item>
|
||||
<item name="colorTertiaryContainer">@color/md_theme_tertiaryContainer</item>
|
||||
<item name="colorOnTertiaryContainer">@color/md_theme_onTertiaryContainer</item>
|
||||
<item name="colorError">@color/md_theme_error</item>
|
||||
<item name="colorErrorContainer">@color/md_theme_errorContainer</item>
|
||||
<item name="colorOnError">@color/md_theme_onError</item>
|
||||
<item name="colorOnErrorContainer">@color/md_theme_onErrorContainer</item>
|
||||
<item name="android:colorBackground">@color/md_theme_background</item>
|
||||
<item name="colorOnBackground">@color/md_theme_onBackground</item>
|
||||
<item name="colorSurface">@color/md_theme_surface</item>
|
||||
<item name="colorOnSurface">@color/md_theme_onSurface</item>
|
||||
<item name="colorSurfaceVariant">@color/md_theme_surfaceVariant</item>
|
||||
<item name="colorOnSurfaceVariant">@color/md_theme_onSurfaceVariant</item>
|
||||
<item name="colorOutline">@color/md_theme_outline</item>
|
||||
<item name="colorOnSurfaceInverse">@color/md_theme_inverseOnSurface</item>
|
||||
<item name="colorSurfaceInverse">@color/md_theme_inverseSurface</item>
|
||||
<item name="colorPrimaryInverse">@color/md_theme_primaryInverse</item>
|
||||
|
||||
<item name="materialButtonStyle">@style/SJDialog.ButtonStyle</item>
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,49 @@
|
||||
<resources>
|
||||
<color name="md_theme_primary">#0053DC</color>
|
||||
<color name="md_theme_onPrimary">#FFFFFF</color>
|
||||
<color name="md_theme_primaryContainer">#DAE2FF</color>
|
||||
<color name="md_theme_onPrimaryContainer">#00174D</color>
|
||||
<color name="md_theme_secondary">#585E71</color>
|
||||
<color name="md_theme_onSecondary">#FFFFFF</color>
|
||||
<color name="md_theme_secondaryContainer">#DCE1F9</color>
|
||||
<color name="md_theme_onSecondaryContainer">#151B2C</color>
|
||||
<color name="md_theme_tertiary">#433EF7</color>
|
||||
<color name="md_theme_onTertiary">#FFFFFF</color>
|
||||
<color name="md_theme_tertiaryContainer">#E1E0FF</color>
|
||||
<color name="md_theme_onTertiaryContainer">#07006D</color>
|
||||
<color name="md_theme_error">#BA1B1B</color>
|
||||
<color name="md_theme_errorContainer">#FFDAD4</color>
|
||||
<color name="md_theme_onError">#FFFFFF</color>
|
||||
<color name="md_theme_onErrorContainer">#410001</color>
|
||||
<color name="md_theme_background">#FEFBFF</color>
|
||||
<color name="md_theme_onBackground">#1B1B1F</color>
|
||||
<color name="md_theme_surface">#FEFBFF</color>
|
||||
<color name="md_theme_onSurface">#1B1B1F</color>
|
||||
<color name="md_theme_surfaceVariant">#E2E2EC</color>
|
||||
<color name="md_theme_onSurfaceVariant">#44464E</color>
|
||||
<color name="md_theme_outline">#75767F</color>
|
||||
<color name="md_theme_inverseOnSurface">#F2F0F5</color>
|
||||
<color name="md_theme_inverseSurface">#303033</color>
|
||||
<color name="md_theme_inversePrimary">#B2C5FF</color>
|
||||
<color name="md_theme_shadow">#000000</color>
|
||||
<color name="md_theme_primaryInverse">#B2C5FF</color>
|
||||
|
||||
<color name="seed">#0060F4</color>
|
||||
<color name="error">#BA1B1B</color>
|
||||
<color name="Custom0">#625FCD</color>
|
||||
|
||||
|
||||
<color name="overlay_light_primary">#9C4146</color>
|
||||
<color name="overlay_light_onPrimary">#FFFFFF</color>
|
||||
<color name= "overlay_light_primaryContainer">#FFDADB</color>
|
||||
<color name="overlay_light_onPrimaryContainer">#400008</color>
|
||||
|
||||
<color name="SJDialog_oldBackground">#E5E5E5</color>
|
||||
<color name="SJDialog_oldBackground2">#D5D5D5</color>
|
||||
<color name="SJDialog_oldButton">#0060f4</color>
|
||||
<color name="SJDialog_red">#BA1B1B</color>
|
||||
<color name="SJDialog_OldThemeErrorDialog">#930006</color>
|
||||
|
||||
<color name="SJDialog_OldThemeTextColor">#333333</color>
|
||||
<color name="SJDialog_ErrorTextColor">#410001</color>
|
||||
</resources>
|
||||
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- "@android:style/Widget.Button"/-->
|
||||
<style name="SJDialog.ButtonStyle" parent="@android:style/Widget.Button">
|
||||
<item name="android:background">@drawable/ripple_button</item>
|
||||
<item name="android:textSize">12dp</item>
|
||||
<item name="android:paddingStart">15dp</item>
|
||||
<item name="android:paddingEnd">15dp</item>
|
||||
<!-- <item name="android:padding">14dp</item>-->
|
||||
<item name="android:focusable">true</item>
|
||||
<item name="android:clickable">true</item>
|
||||
<item name="textAllCaps">true</item>
|
||||
<item name="android:textAppearance">?android:attr/textAppearanceSmallInverse</item>
|
||||
<item name="android:textColor">?colorOnPrimary</item>
|
||||
<item name="android:gravity">center_vertical|center_horizontal</item>
|
||||
</style>
|
||||
|
||||
<style name="SJDialog.ButtonStyle.Red" parent="@style/SJDialog.ButtonStyle">
|
||||
<item name="backgroundTint">@color/md_theme_error</item>
|
||||
<item name="android:textColor">@color/md_theme_onError</item>
|
||||
</style>
|
||||
|
||||
<style name="SJDialogAnimation">
|
||||
<item name="android:windowEnterAnimation">@anim/slide_in</item>
|
||||
<item name="android:windowExitAnimation">@anim/slide_out</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,34 @@
|
||||
<resources>
|
||||
|
||||
<style name="Theme.SJDialog" parent="Theme.Material3.DynamicColors.DayNight">
|
||||
<item name="colorPrimary">@color/md_theme_primary</item>
|
||||
<item name="colorOnPrimary">@color/md_theme_onPrimary</item>
|
||||
<item name="colorPrimaryContainer">@color/md_theme_primaryContainer</item>
|
||||
<item name="colorOnPrimaryContainer">@color/md_theme_onPrimaryContainer</item>
|
||||
<item name="colorSecondary">@color/md_theme_secondary</item>
|
||||
<item name="colorOnSecondary">@color/md_theme_onSecondary</item>
|
||||
<item name="colorSecondaryContainer">@color/md_theme_secondaryContainer</item>
|
||||
<item name="colorOnSecondaryContainer">@color/md_theme_onSecondaryContainer</item>
|
||||
<item name="colorTertiary">@color/md_theme_tertiary</item>
|
||||
<item name="colorOnTertiary">@color/md_theme_onTertiary</item>
|
||||
<item name="colorTertiaryContainer">@color/md_theme_tertiaryContainer</item>
|
||||
<item name="colorOnTertiaryContainer">@color/md_theme_onTertiaryContainer</item>
|
||||
<item name="colorError">@color/md_theme_error</item>
|
||||
<item name="colorErrorContainer">@color/md_theme_errorContainer</item>
|
||||
<item name="colorOnError">@color/md_theme_onError</item>
|
||||
<item name="colorOnErrorContainer">@color/md_theme_onErrorContainer</item>
|
||||
<item name="android:colorBackground">@color/md_theme_background</item>
|
||||
<item name="colorOnBackground">@color/md_theme_onBackground</item>
|
||||
<item name="colorSurface">@color/md_theme_surface</item>
|
||||
<item name="colorOnSurface">@color/md_theme_onSurface</item>
|
||||
<item name="colorSurfaceVariant">@color/md_theme_surfaceVariant</item>
|
||||
<item name="colorOnSurfaceVariant">@color/md_theme_onSurfaceVariant</item>
|
||||
<item name="colorOutline">@color/md_theme_outline</item>
|
||||
<item name="colorOnSurfaceInverse">@color/md_theme_inverseOnSurface</item>
|
||||
<item name="colorSurfaceInverse">@color/md_theme_inverseSurface</item>
|
||||
<item name="colorPrimaryInverse">@color/md_theme_primaryInverse</item>
|
||||
|
||||
<item name="materialButtonStyle">@style/SJDialog.ButtonStyle</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.sjapps.library;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Example local unit test, which will execute on the development machine (host).
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
public class ExampleUnitTest {
|
||||
@Test
|
||||
public void addition_isCorrect() {
|
||||
assertEquals(4, 2 + 2);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user