Skip to content

Commit f176f9a

Browse files
committed
feat(datePicker): Pre finalising DatePickerSDialog.
1 parent d0f890a commit f176f9a

File tree

9 files changed

+386
-292
lines changed

9 files changed

+386
-292
lines changed

.idea/deploymentTargetDropDown.xml

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

SDialogs/src/main/java/smith/lib/alerts/dialog/DatePickerSDialog.java

Lines changed: 59 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,12 @@
2424
import android.graphics.Bitmap;
2525
import android.graphics.drawable.Drawable;
2626
import android.view.View;
27+
import androidx.annotation.*;
28+
import androidx.recyclerview.widget.LinearLayoutManager;
2729

28-
import androidx.annotation.DrawableRes;
29-
import androidx.annotation.StringRes;
30-
31-
import smith.lib.alerts.dialog.callbacks.OnClickCallBack;
32-
import smith.lib.alerts.dialog.callbacks.OnDatePickedCallBack;
33-
import smith.lib.alerts.dialog.utils.SDateFormat;
30+
import smith.lib.alerts.dialog.adapters.SPickerAdapter;
31+
import smith.lib.alerts.dialog.callbacks.*;
32+
import smith.lib.alerts.dialog.utils.*;
3433

3534
/**
3635
* The beautiful class of SDialog lib.
@@ -41,6 +40,8 @@
4140
public class DatePickerSDialog extends SDialog {
4241

4342
private OnDatePickedCallBack callBack;
43+
private SDateFormat.DAYS daysFormat;
44+
private SDateFormat.MONTHS monthsFormat;
4445

4546
@SuppressLint("InflateParams")
4647
public DatePickerSDialog(Context context) {
@@ -103,10 +104,11 @@ public void setTitle(@StringRes int resTitle) {
103104
* @param text String represent the text of positive button (e.g. "Pick")
104105
* @param callback OnPositiveButtonClick callback using {@link OnClickCallBack}
105106
*/
106-
public void setPositiveButton(String text, OnClickCallBack callback) {
107+
public void setPositiveButton(String text, OnDatePickedCallBack callback) {
107108
b.positive.setText(text);
108109
b.positive.setOnClickListener(v -> {
109-
callback.onClick();
110+
// todo : implement callback
111+
// callback.onDatePicked(Calendar.);
110112
dismiss();
111113
});
112114
}
@@ -125,11 +127,12 @@ public void setPickerTitles(String forDays, String forMonths, String forYears) {
125127

126128
/**
127129
*
128-
* @param daysFormat
129-
* @param monthsFormat
130+
* @param daysFormat a
131+
* @param monthsFormat a
130132
*/
131-
public void setDaysAndMonthsFormat(SDateFormat.DAYS daysFormat, SDateFormat.MONTHS monthsFormat) {
132-
133+
public void setDaysAndMonthsFormat(@NonNull SDateFormat.DAYS daysFormat, SDateFormat.MONTHS monthsFormat) {
134+
this.daysFormat = daysFormat;
135+
this.monthsFormat = monthsFormat;
133136
}
134137

135138
public void setOnDatePickedCallBack(OnDatePickedCallBack callBack) {
@@ -157,5 +160,49 @@ public int getBackgroundColor() {
157160
return backgroundColor;
158161
}
159162

163+
@Override
164+
public void show() {
165+
update();
166+
super.show();
167+
}
168+
169+
@Override
170+
public void show(long duration) {
171+
update();
172+
super.show(duration);
173+
}
160174

175+
private void update() {
176+
updateTheme();
177+
utils.backgroundColor(b.main, backgroundColor);
178+
b.icon.setColorFilter(iconColor);
179+
b.title.setTextColor(titleColor);
180+
b.dayTitle.setTextColor(accentColor);
181+
b.monthTitle.setTextColor(accentColor);
182+
b.yearTitle.setTextColor(accentColor);
183+
b.positive.setTextColor(accentColor);
184+
185+
b.dayRV.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
186+
b.monthRV.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
187+
b.yearRV.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
188+
189+
if (daysFormat == SDateFormat.DAYS.D) {
190+
b.dayRV.setAdapter(new SPickerAdapter(SDialogUtils.getDays1Chars(), textColor));
191+
} else {
192+
b.dayRV.setAdapter(new SPickerAdapter(SDialogUtils.getDays2Chars(), textColor));
193+
}
194+
195+
switch (monthsFormat) {
196+
case M -> b.monthRV.setAdapter(new SPickerAdapter(SDialogUtils.getMonths1Chars(), textColor));
197+
case MM -> b.monthRV.setAdapter(new SPickerAdapter(SDialogUtils.getMonths2Chars(), textColor));
198+
case MMM -> b.monthRV.setAdapter(new SPickerAdapter(SDialogUtils.getMonths3Chars(), textColor));
199+
default -> b.monthRV.setAdapter(new SPickerAdapter(SDialogUtils.getMonthsFullChars(), textColor));
200+
}
201+
202+
b.yearRV.setAdapter(new SPickerAdapter(SDialogUtils.getYears(), textColor));
203+
204+
SDialogUtils.SwipeSpinner.bindRecyclerView(b.dayRV);
205+
SDialogUtils.SwipeSpinner.bindRecyclerView(b.monthRV);
206+
SDialogUtils.SwipeSpinner.bindRecyclerView(b.yearRV);
207+
}
161208
}

SDialogs/src/main/java/smith/lib/alerts/dialog/MultiSelectSDialog.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.*;
3131
import smith.lib.alerts.dialog.adapters.SMultiSelectAdapter;
3232
import smith.lib.alerts.dialog.callbacks.OnMultiSelectCallBack;
33+
import smith.lib.alerts.dialog.utils.SDialogUtils;
3334

3435
/**
3536
* The beautiful and most functional class of SDialog lib.
@@ -133,9 +134,9 @@ public void setPositiveButton(String text, OnMultiSelectCallBack callback) {
133134
*/
134135
public void addItem(int id, String text, boolean checked) {
135136
item = new HashMap<>();
136-
item.put(KEY_ITEM_ID, id);
137-
item.put(KEY_ITEM_TEXT, text);
138-
item.put(KEY_ITEM_CHECKED, checked);
137+
item.put(SDialogUtils.KEY_ITEM_ID, id);
138+
item.put(SDialogUtils.KEY_ITEM_TEXT, text);
139+
item.put(SDialogUtils.KEY_ITEM_CHECKED, checked);
139140
data.add(item);
140141
update();
141142
}
@@ -146,11 +147,11 @@ public void addItem(int id, String text, boolean checked) {
146147
*/
147148
public void setCheckedItem(int id) {
148149
for (int i = 0; i < data.size(); i++) {
149-
int ids = (int) data.get(i).get(KEY_ITEM_ID);
150+
int ids = (int) data.get(i).get(SDialogUtils.KEY_ITEM_ID);
150151
if (ids == id) {
151152
item = data.get(i);
152153
data.remove(i);
153-
item.put(KEY_ITEM_CHECKED, true);
154+
item.put(SDialogUtils.KEY_ITEM_CHECKED, true);
154155
data.add(i, item);
155156
break;
156157
}

SDialogs/src/main/java/smith/lib/alerts/dialog/SingleSelectSDialog.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.util.*;
3232
import smith.lib.alerts.dialog.adapters.SSingleSelectAdapter;
3333
import smith.lib.alerts.dialog.callbacks.OnSingleSelectCallBack;
34+
import smith.lib.alerts.dialog.utils.SDialogUtils;
3435

3536
/**
3637
* The beautiful and stunning class of SDialog lib.
@@ -129,9 +130,9 @@ public void setOnSingleSelectCallBack(OnSingleSelectCallBack callback) {
129130
*/
130131
public void addItem(int id, String text) {
131132
item = new HashMap<>();
132-
item.put(KEY_ITEM_ID, id);
133-
item.put(KEY_ITEM_TEXT, text);
134-
item.put(KEY_ITEM_CHECKED, false);
133+
item.put(SDialogUtils.KEY_ITEM_ID, id);
134+
item.put(SDialogUtils.KEY_ITEM_TEXT, text);
135+
item.put(SDialogUtils.KEY_ITEM_CHECKED, false);
135136
data.add(item);
136137
update();
137138
}
@@ -142,15 +143,15 @@ public void addItem(int id, String text) {
142143
*/
143144
public void setCheckedItem(int id) {
144145
for (int i = 0; i < data.size(); i++) {
145-
if (Objects.equals(data.get(i).get(KEY_ITEM_ID), id)) {
146+
if (Objects.equals(data.get(i).get(SDialogUtils.KEY_ITEM_ID), id)) {
146147
item = data.get(i);
147148
data.remove(item);
148-
item.put(KEY_ITEM_CHECKED, true);
149+
item.put(SDialogUtils.KEY_ITEM_CHECKED, true);
149150
data.add(i, item);
150151
} else {
151152
item = data.get(i);
152153
data.remove(item);
153-
item.put(KEY_ITEM_CHECKED, false);
154+
item.put(SDialogUtils.KEY_ITEM_CHECKED, false);
154155
data.add(i, item);
155156
}
156157
}

SDialogs/src/main/java/smith/lib/alerts/dialog/adapters/SMultiSelectAdapter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,13 @@ public SMultiSelectAdapter(List<Map<String, Object>> data, MultiSelectSDialog sd
7171

7272
if (!contains(checkedList, data.get(p)) && checked) checkedList.add(data.get(p));
7373
if (contains(checkedList, data.get(p)) && !checked) checkedList.remove(data.get(p));
74+
7475
holder.choice.setOnCheckedChangeListener((button, isChecked) -> {
7576
if (!contains(checkedList, data.get(p)) && isChecked) checkedList.add(data.get(p));
7677
if (contains(checkedList, data.get(p)) && !isChecked) checkedList.remove(data.get(p));
7778
});
7879
}
7980

80-
81-
8281
@Override public int getItemCount() {
8382
return data.size();
8483
}

SDialogs/src/main/java/smith/lib/alerts/dialog/adapters/SPickerAdapter.java

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,55 @@
1818

1919
package smith.lib.alerts.dialog.adapters;
2020

21-
public class SPickerAdapter {
21+
import android.annotation.SuppressLint;
22+
import android.view.*;
23+
import android.widget.*;
24+
import androidx.annotation.*;
25+
import androidx.recyclerview.widget.RecyclerView;
26+
import smith.lib.alerts.dialog.R;
27+
28+
@SuppressWarnings({"unused"})
29+
@RestrictTo(RestrictTo.Scope.LIBRARY)
30+
public class SPickerAdapter extends RecyclerView.Adapter<SPickerAdapter.ViewHolder> {
31+
32+
private final String[] data;
33+
private final int textColor;
34+
35+
public SPickerAdapter(String[] data, int textColor) {
36+
this.data = data;
37+
this.textColor = textColor;
38+
}
39+
40+
@NonNull
41+
@SuppressLint("InflateParams")
42+
@Override
43+
public SPickerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
44+
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sitem_picker, null);
45+
view.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.WRAP_CONTENT,
46+
RecyclerView.LayoutParams.WRAP_CONTENT));
47+
return new SPickerAdapter.ViewHolder(view);
48+
}
49+
50+
@Override
51+
public void onBindViewHolder(@NonNull SPickerAdapter.ViewHolder holder, int position) {
52+
holder.text.setText(data[position]);
53+
holder.text.setTextColor(textColor);
54+
}
55+
56+
@Override
57+
public int getItemCount() {
58+
return data.length;
59+
}
60+
61+
static class ViewHolder extends RecyclerView.ViewHolder {
62+
63+
TextView text;
64+
LinearLayout main;
65+
66+
public ViewHolder(View view) {
67+
super(view);
68+
text = view.findViewById(R.id.sdialog_text);
69+
main = view.findViewById(R.id.sdialog_main);
70+
}
71+
}
2272
}

0 commit comments

Comments
 (0)