From eb609323282429c37bce993b0d73d122fbc42631 Mon Sep 17 00:00:00 2001 From: Georgy Lebedik Date: Mon, 30 Jun 2025 17:51:53 +0300 Subject: [PATCH 01/16] Event statuses notification. --- AndroidClient/src/main/AndroidManifest.xml | 2 +- .../dto/{EntityBase.java => BaseEntity.java} | 3 +- .../meeter/context/network/dto/EventDTO.java | 88 +++-------- .../context/network/dto/ServerEntity.java | 12 ++ .../context/network/dto/ServerEntityBase.java | 73 +++++++++ .../meeter/context/network/dto/UserDTO.java | 59 ++++---- .../network/service/SocketIOService.java | 32 ++-- .../context/network/utils/SocketIOCodes.java | 2 - .../network/utils/SocketIOEventCode.java | 41 +++++ .../notification/NotificationHelper.java | 141 +++++++++++++++--- .../profile/fragment/CreateEventFragment.java | 3 +- .../profile/subscriber/Subscriber.java | 4 +- .../infrastructure/common/CommonHelper.java | 7 + .../components/adapter/BaseAdapter.java | 6 +- .../eventbus/events/IncomeEvents.java | 2 +- .../res/drawable-hdpi/meeter_new_logo.png | Bin 0 -> 809856 bytes .../drawable-hdpi/meeter_new_logo_512x512.png | Bin 0 -> 28028 bytes .../drawable-hdpi/meeter_new_logo_64x64.png | Bin 0 -> 1673 bytes .../src/main/res/layout/launcher.xml | 2 +- .../src/main/res/values-en/strings.xml | 21 +++ .../src/main/res/values-ru-rRU/strings.xml | 21 +++ AndroidClient/src/main/res/values/strings.xml | 21 +++ .../src/main/res/xml/authenticator.xml | 4 +- 23 files changed, 404 insertions(+), 140 deletions(-) rename AndroidClient/src/main/java/com/tom/meeter/context/network/dto/{EntityBase.java => BaseEntity.java} (54%) create mode 100644 AndroidClient/src/main/java/com/tom/meeter/context/network/dto/ServerEntity.java create mode 100644 AndroidClient/src/main/java/com/tom/meeter/context/network/dto/ServerEntityBase.java create mode 100644 AndroidClient/src/main/java/com/tom/meeter/context/network/utils/SocketIOEventCode.java create mode 100644 AndroidClient/src/main/res/drawable-hdpi/meeter_new_logo.png create mode 100644 AndroidClient/src/main/res/drawable-hdpi/meeter_new_logo_512x512.png create mode 100644 AndroidClient/src/main/res/drawable-hdpi/meeter_new_logo_64x64.png diff --git a/AndroidClient/src/main/AndroidManifest.xml b/AndroidClient/src/main/AndroidManifest.xml index 4bb5deb..8cf3474 100644 --- a/AndroidClient/src/main/AndroidManifest.xml +++ b/AndroidClient/src/main/AndroidManifest.xml @@ -31,7 +31,7 @@ mapping = new HashMap<>(); + + static { + for (SocketIOEventCode ec : values()) { + mapping.put(ec.code, ec); + } + } + + public static SocketIOEventCode fromCode(int code) { + return mapping.get(code); + } +} diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/notification/NotificationHelper.java b/AndroidClient/src/main/java/com/tom/meeter/context/notification/NotificationHelper.java index e983066..3927a3f 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/notification/NotificationHelper.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/notification/NotificationHelper.java @@ -1,5 +1,7 @@ package com.tom.meeter.context.notification; +import static com.tom.meeter.infrastructure.common.CommonHelper.getSmallAppLogo; + import android.Manifest; import android.app.Notification; import android.app.NotificationChannel; @@ -10,6 +12,7 @@ import android.content.pm.PackageManager; import android.os.Build; +import androidx.annotation.NonNull; import androidx.annotation.RequiresPermission; import androidx.core.app.ActivityCompat; import androidx.core.app.NotificationCompat; @@ -19,8 +22,11 @@ import com.tom.meeter.context.event.activity.EventDispatcherActivity; import com.tom.meeter.context.network.dto.EventDTO; import com.tom.meeter.context.network.dto.UserDTO; +import com.tom.meeter.context.network.utils.SocketIOEventCode; import com.tom.meeter.context.user.activity.UserActivity; +import java.util.function.Supplier; + public class NotificationHelper { private static final String EVENTS_NOTIFY = "events_notify"; @@ -42,9 +48,11 @@ public static void createNotificationChannel(Context ctx) { } } - public static void sendNotificationEventCreated( - Context ctx, UserDTO user, EventDTO event) { - if (ActivityCompat.checkSelfPermission(ctx, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) { + public static void sendEventNotification( + Context ctx, UserDTO user, + SocketIOEventCode eventCode, EventDTO event) { + if (ActivityCompat.checkSelfPermission(ctx, Manifest.permission.POST_NOTIFICATIONS) + != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding @@ -55,10 +63,33 @@ public static void sendNotificationEventCreated( return; } NotificationManagerCompat mgr = NotificationManagerCompat.from(ctx); - mgr.notify(event.getId().hashCode(), getNotificationEventCreated(ctx, user, event)); + mgr.notify(event.getId().hashCode(), getNotification(ctx, user, event, eventCode)); notifySummary(ctx, mgr); } + public static void sendEventDeletedNotification( + Context ctx, UserDTO user, String eventId) { + // As nothing to notify... + +/* if (ActivityCompat.checkSelfPermission(ctx, Manifest.permission.POST_NOTIFICATIONS) + != PackageManager.PERMISSION_GRANTED) { + // TODO: Consider calling + // ActivityCompat#requestPermissions + // here to request the missing permissions, and then overriding + // public void onRequestPermissionsResult(int requestCode, String[] permissions, + // int[] grantResults) + // to handle the case where the user grants the permission. See the documentation + // for ActivityCompat#requestPermissions for more details. + return; + } + NotificationManagerCompat mgr = NotificationManagerCompat.from(ctx); + mgr.notify( + eventId.hashCode(), + getEventNotification( + ctx, contentTitle, contentText, bigStyleText, eventId)); + notifySummary(ctx, mgr);*/ + } + @RequiresPermission(Manifest.permission.POST_NOTIFICATIONS) private static void notifySummary(Context ctx, NotificationManagerCompat mgr) { mgr.notify(SUMMARY_ID, getSummaryNotification(ctx)); @@ -80,27 +111,90 @@ public static void sendNotificationNewSubscriber(Context ctx, UserDTO user) { notifySummary(ctx, mgr); } - private static Notification getNotificationEventCreated( - Context ctx, UserDTO user, EventDTO event) { + private static Notification getNotification( + Context ctx, UserDTO user, EventDTO event, SocketIOEventCode eventCode) { + Supplier contentTitleS = null; + Supplier contentTextS = null; + Supplier bigStyleTextS = event::getDescription; + if (eventCode == SocketIOEventCode.CREATED) { + contentTitleS = () -> getContentTitle(ctx, event.getName(), R.string.notification_new_event); + contentTextS = () -> user.getName() + " " + user.getSurname() + " " + ctx.getString(R.string.created_event); + } else if (eventCode == SocketIOEventCode.UPDATED) { + contentTitleS = () -> getContentTitle(ctx, event.getName(), R.string.event_updated); + contentTextS = () -> getContentText(ctx, user, R.string.is_updated); + } else if (eventCode == SocketIOEventCode.PUBLISHED) { + contentTitleS = () -> getContentTitle(ctx, event.getName(), R.string.event_published); + contentTextS = () -> getContentText(ctx, user, R.string.is_published); + } else if (eventCode == SocketIOEventCode.UNPUBLISHED) { + contentTitleS = () -> getContentTitle(ctx, event.getName(), R.string.event_unpublished); + contentTextS = () -> getContentText(ctx, user, R.string.is_unpublished); + } else if (eventCode == SocketIOEventCode.SCHEDULED) { + contentTitleS = () -> getContentTitle(ctx, event.getName(), R.string.event_scheduled); + contentTextS = () -> getContentText(ctx, user, R.string.is_scheduled); + } else if (eventCode == SocketIOEventCode.STARTED) { + contentTitleS = () -> getContentTitle(ctx, event.getName(), R.string.event_started); + contentTextS = () -> getContentText(ctx, user, R.string.event_is_started); + } else if (eventCode == SocketIOEventCode.PAUSED) { + contentTitleS = () -> getContentTitle(ctx, event.getName(), R.string.event_paused); + contentTextS = () -> getContentText(ctx, user, R.string.event_is_paused); + } else if (eventCode == SocketIOEventCode.RESUMED) { + contentTitleS = () -> getContentTitle(ctx, event.getName(), R.string.event_resumed); + contentTextS = () -> getContentText(ctx, user, R.string.event_is_resumed); + } else if (eventCode == SocketIOEventCode.FINISHED) { + contentTitleS = () -> getContentTitle(ctx, event.getName(), R.string.event_finished); + contentTextS = () -> getContentText(ctx, user, R.string.event_is_finished); + } else if (eventCode == SocketIOEventCode.CANCELLED) { + contentTitleS = () -> getContentTitle(ctx, event.getName(), R.string.event_cancelled); + contentTextS = () -> getContentText(ctx, user, R.string.event_is_cancelled); + } else if (eventCode == SocketIOEventCode.ARCHIVED) { + contentTitleS = () -> getContentTitle(ctx, event.getName(), R.string.event_archived); + contentTextS = () -> getContentText(ctx, user, R.string.event_is_archived); + } + + if (contentTitleS == null) { + throw new IllegalStateException("Unrecognized event notification:" + eventCode); + } + return getEventNotification(ctx, contentTitleS, contentTextS, bigStyleTextS, event.getId()); + } + + @NonNull + private static String getContentText(Context ctx, UserDTO user, int newStatusResId) { + return ctx.getString(R.string.created_by_user) + " " + user.getName() + " " + user.getSurname() + + " " + ctx.getString(newStatusResId); + } + + @NonNull + private static String getContentTitle(Context ctx, String eventName, int resId) { + return ctx.getString(resId) + ": " + eventName + " !"; + } + + private static Notification getEventNotification( + Context ctx, String title, String text, + String bigStyleText, String eventId) { return new NotificationCompat.Builder(ctx, EVENTS_NOTIFY) - .setSmallIcon(R.drawable.ic_meeter_lr) - .setContentTitle( - ctx.getString(R.string.notification_new_event) + ": " + event.getName() + " !") - .setContentText( - user.getName() + " " + user.getSurname() + " " - + ctx.getString(R.string.created_event)) - .setStyle(getBigStyle(event.getDescription())) - .setContentIntent(createEventPendingIntent(ctx, event)) + .setSmallIcon(getSmallAppLogo()) + .setContentTitle(title) + .setContentText(text) + .setStyle(getBigStyle(bigStyleText)) + .setContentIntent(createEventPendingIntent(ctx, eventId)) .setGroup(ALL_EVENTS_GROUP) .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setAutoCancel(true) .build(); } + private static Notification getEventNotification( + Context ctx, Supplier titleS, Supplier textS, + Supplier bigStyleTextS, String eventId) { + return getEventNotification( + ctx, titleS.get(), textS.get(), + bigStyleTextS.get(), eventId); + } + private static Notification getNotificationNewSubscriber( Context ctx, UserDTO user) { return new NotificationCompat.Builder(ctx, EVENTS_NOTIFY) - .setSmallIcon(R.drawable.ic_meeter_lr) + .setSmallIcon(getSmallAppLogo()) .setContentTitle(ctx.getString(R.string.new_subscriber)) .setContentText( user.getName() + " " + user.getSurname() + " " @@ -118,7 +212,7 @@ private static Notification getNotificationNewSubscriber( private static Notification getSummaryNotification(Context ctx) { return new NotificationCompat.Builder(ctx, EVENTS_NOTIFY) - .setSmallIcon(R.drawable.ic_meeter_lr) + .setSmallIcon(getSmallAppLogo()) .setGroup(ALL_EVENTS_GROUP) .setGroupSummary(true) .build(); @@ -128,13 +222,18 @@ private static NotificationCompat.BigTextStyle getBigStyle(String descr) { return new NotificationCompat.BigTextStyle().bigText(descr); } - private static PendingIntent createEventPendingIntent(Context ctx, EventDTO event) { - Intent intent = EventDispatcherActivity.createEventActivityIntent(ctx, event.getId()); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + private static PendingIntent createEventPendingIntent( + Context ctx, String eventId) { + Intent intent = EventDispatcherActivity.createEventActivityIntent( + ctx, eventId); + intent.setFlags( + Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_CLEAR_TASK); return PendingIntent.getActivity( - ctx, event.getId().hashCode(), intent, - PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); + ctx, eventId.hashCode(), intent, + PendingIntent.FLAG_IMMUTABLE + | PendingIntent.FLAG_UPDATE_CURRENT); } private static PendingIntent createUserPendingIntent(Context ctx, UserDTO user) { diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/CreateEventFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/CreateEventFragment.java index 83edaaa..486b4c5 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/CreateEventFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/CreateEventFragment.java @@ -8,6 +8,7 @@ import static com.tom.meeter.context.image.activity.BaseUploadActivity.PHOTO_PATH_RESULT; import static com.tom.meeter.context.profile.activity.NewEventOnMapActivity.createNewEventOnMapActivityIntent; import static com.tom.meeter.context.profile.utils.Utils.createEventRequest; +import static com.tom.meeter.infrastructure.common.CommonHelper.getAppLogo; import static com.tom.meeter.infrastructure.common.CommonHelper.isEmpty; import static com.tom.meeter.infrastructure.common.DateHelper.isDateValid; import static com.tom.meeter.infrastructure.common.DateHelper.setCurrentDate; @@ -235,7 +236,7 @@ private boolean allSet() { private void showEventDialog(EventDTO event) { new AlertDialog.Builder(requireContext()) - .setIcon(R.drawable.ic_meeter_lr) + .setIcon(getAppLogo()) .setTitle(R.string.event_created) .setMessage( getString(R.string.event_is_created, event.getName())) diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/subscriber/Subscriber.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/subscriber/Subscriber.java index 7da101a..5146c4e 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/subscriber/Subscriber.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/subscriber/Subscriber.java @@ -1,9 +1,9 @@ package com.tom.meeter.context.profile.subscriber; -import com.tom.meeter.context.network.dto.EntityBase; +import com.tom.meeter.context.network.dto.BaseEntity; import com.tom.meeter.context.network.dto.UserDTO; -public class Subscriber implements EntityBase { +public class Subscriber implements BaseEntity { private UserDTO user; private boolean amISubscribedTo; diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/CommonHelper.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/CommonHelper.java index 4427dd0..229c0fb 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/CommonHelper.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/CommonHelper.java @@ -114,4 +114,11 @@ public static OffsetDateTime getOffsetDateTimeOrNull( OffsetDateTime.now().getOffset()); } + public static int getAppLogo() { + return R.drawable.meeter_new_logo_512x512; + } + + public static int getSmallAppLogo() { + return R.drawable.meeter_new_logo_64x64; + } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/BaseAdapter.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/BaseAdapter.java index bac68cb..612e592 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/BaseAdapter.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/BaseAdapter.java @@ -4,13 +4,13 @@ import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.RecyclerView; -import com.tom.meeter.context.network.dto.EntityBase; +import com.tom.meeter.context.network.dto.BaseEntity; import com.tom.meeter.infrastructure.components.binder.BaseViewHolderBinder; import java.util.ArrayList; import java.util.List; -public abstract class BaseAdapter +public abstract class BaseAdapter extends RecyclerView.Adapter { protected final BaseViewHolderBinder binder; @@ -38,7 +38,7 @@ public int getItemCount() { return targets.size(); } - public static class EntityBaseDiffCallback + public static class EntityBaseDiffCallback extends DiffUtil.Callback { private final List oldTargets, newTargets; diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/eventbus/events/IncomeEvents.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/eventbus/events/IncomeEvents.java index 3046db8..a4c5eab 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/eventbus/events/IncomeEvents.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/eventbus/events/IncomeEvents.java @@ -17,7 +17,7 @@ public record IncomeEvents(List events) { public static IncomeEvents fromJsonArray(JSONArray msg) { List events = new ArrayList<>(); for (int i = 0; i < msg.length(); i++) { - events.add(EventDTO.encode((JSONObject) msg.opt(i))); + events.add(new EventDTO((JSONObject) msg.opt(i))); } return new IncomeEvents(events); } diff --git a/AndroidClient/src/main/res/drawable-hdpi/meeter_new_logo.png b/AndroidClient/src/main/res/drawable-hdpi/meeter_new_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ad73e21f068120ac6d3e63cf3f2e3da262bc3d9a GIT binary patch literal 809856 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

>Y9WH# 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

$#1^zB~$@aIlcg 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 literal 0 HcmV?d00001 diff --git a/AndroidClient/src/main/res/drawable-hdpi/meeter_new_logo_512x512.png b/AndroidClient/src/main/res/drawable-hdpi/meeter_new_logo_512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..db293ea46c3de582a7c0a639c6f3ce26ac30fb9d GIT binary patch literal 28028 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 literal 0 HcmV?d00001 diff --git a/AndroidClient/src/main/res/drawable-hdpi/meeter_new_logo_64x64.png b/AndroidClient/src/main/res/drawable-hdpi/meeter_new_logo_64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..60b5d800e5971dafefa58b5a76f6aa402d777740 GIT binary patch literal 1673 zcmV;426p+0P)K@boNO)**#t)_rc zBN~DDC}JW+6QdRdQV~NHMMaE=TGR*{El8sEk)TL?L_?bxu|7)F_zV*M5V6suU^HMA zUs1qPfudsX-93J%vun4vd*9o8Z`*s4FHpKOXXdxFGiS~W0|rD`&0B3pM*dsg@|L%} zE%D5ug>mMSxm5e=D35XagL>$La9A`huTeAB5mvI0(PM*RU{9$ChQE z0LyJlworMCL^E4<@FwbER*?Rwxd5g*BX3(&|DE7&Z4paap+yb}_KBUfHGb#X;90A2**7&RlKs}@2g%td!CxFxWE8tmZ z>W=~ph8mxWbso@JzQsY;UcXf#Z2_p`Xc!0UJoTzCU5VPntOnX1JCg$Z2pVlIaCi>( z1T6sN2f}Qq6%+KhwwL)}193(zY$EV#7XM{2bpa?`1gA>Z$*&!LhX$D9d3Kg`4T)WQ zT1@Ovm`WRn^EI4(Ji@=m02>L&7KcLCoN(Bx=I`%`hQa|0FcaQ@9i9rc^G}M|1QjPB zfQF-Wyrq;zf|xnTD}Z)hN8V+0`V0gpMF93C_Wfc);y?vh=2M{#wb?$;MiW3yV~0Be z65xBN@Of@##Ea^^0ub<&=b`}m?R_I=GPC(K8u2$6~LDH(2M|WNeD0rR>5ZJ9*`tE2@Z$jocdhTjL*$6{0Aohg%*kV z=B*?I7%C=SUn1QzMac?K43l{YYqKT5?IK;?eoO)QTu%0sy$SZFBLE$r3QtgGORo?h zqHIb6@W!w7)Ui-Za@9Kmvnqhb0GegJA%U`f0%-XUU@4rPKppxC9&pO)4o{OHRWLC| zne+t^v-2AccY6h3IPQmSaBZye{Jt=X0Iq2!XI=vSbsjnBl+jTTH?bO&0F$8_HaTz2 zZ9qMpn+K;QP)9lfsQ*XcQ!(p)#s#=e%ux55CK{@es3RQ#=EBbrW%2^_B>^;Jr2F=< zFv3%&!1=d(;Wy9of53LQv9AcA5uzTdXoB@zPZ|C8SBr`Dz2}Uti%H0i?M(t)1slZ- zcfTa1+7DvhcA0}Nam_x@JsMemxZRqO(*h6`j)Mxi{;EVjJJf8hrph)u=-&?|B0!9` z=Y{}QyIlY$BESks?g-6mnsL_Pr?NK+FbH&Gbf0v_63NT}S7qLrJW{y3}ls z(wI~QP*HVhYfPf!no-i@uWMjf5CSj)8g0v74bw6$zz`S#k0l|1uKRlTM=xUx3`77k z3Uy>J>Jb5~uzhBnhE*rfag71=_^m=xJVJ{hfSNA5i+eVh&llkE|XR;6gEpkXUF&Ijzf;aRksld?F^RJSnoECNk%UIrRx#fJ|8&0bJ9K zR%K*Cy>+4Ks@DE0Ks@V90_b*JH(q*Qq0}wdp9Ij!P_NkOVe5LgU|$hn8oVuLBbCr5 z%q`eg1kj_jDWC@`ephAswg9e)Ia2q#td$oangDOYXJSrb4zqb^1-%g2;QX#0eA7_5 zXkzAqm&IJAcaPR|huh@z=YQM+dJXOt*vZzhgi{&e6i)Da3Jz#cX?TVV+tmBoIfZS?0Z={#MEy&1||-tv~W{%HRJqJw6` T%5V;*00000NkvXXu0mjf+;8>X literal 0 HcmV?d00001 diff --git a/AndroidClient/src/main/res/layout/launcher.xml b/AndroidClient/src/main/res/layout/launcher.xml index 27cd65a..ac728cb 100644 --- a/AndroidClient/src/main/res/layout/launcher.xml +++ b/AndroidClient/src/main/res/layout/launcher.xml @@ -24,6 +24,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:src="@drawable/meeter_logo_612" /> + android:src="@drawable/meeter_new_logo_512x512" /> \ No newline at end of file diff --git a/AndroidClient/src/main/res/values-en/strings.xml b/AndroidClient/src/main/res/values-en/strings.xml index 39d1b38..093a5b4 100644 --- a/AndroidClient/src/main/res/values-en/strings.xml +++ b/AndroidClient/src/main/res/values-en/strings.xml @@ -220,6 +220,27 @@ New events Information about newly created events Press to open the application + event is published! + Event published + Event unpublished + event is unpublished! + Event scheduled + event is scheduled! + Event started + event is started! + Created by user + Event paused + event is paused! + Event resumed + event is resumed! + Event finished + event is finished! + Event cancelled + event is cancelled! + Event archived + event is archived! + Event updated + event is updated! 360p diff --git a/AndroidClient/src/main/res/values-ru-rRU/strings.xml b/AndroidClient/src/main/res/values-ru-rRU/strings.xml index f23dd28..4bf1b13 100644 --- a/AndroidClient/src/main/res/values-ru-rRU/strings.xml +++ b/AndroidClient/src/main/res/values-ru-rRU/strings.xml @@ -218,6 +218,27 @@ Канал новых событий Информация о только что созданных событиях Нажмите, чтобы открыть приложение + событие опубликовано! + Событие опубликовано + Событие снято с публикации + событие снято с публикации! + Событие запланировано + cобытие запланировано! + Событие началось + событие началось! + Созданное пользователем + Событие приостановлено + событие приостановлено! + Событие возобновлено + событие возобновлено! + Событие завершилось + событие завершилось! + Событие отменено + событие отменено! + Событие архивировано + событие архивировано! + Событие обновлено + событие обновлено! 360p diff --git a/AndroidClient/src/main/res/values/strings.xml b/AndroidClient/src/main/res/values/strings.xml index 26a2956..180c37e 100644 --- a/AndroidClient/src/main/res/values/strings.xml +++ b/AndroidClient/src/main/res/values/strings.xml @@ -218,6 +218,27 @@ New events Information about newly created events Press to open the application + event is published! + Event published + Event unpublished + event is unpublished! + Event scheduled + event is scheduled! + Event started + event is started! + Created by user + Event paused + event is paused! + Event resumed + event is resumed! + Event finished + event is finished! + Event cancelled + event is cancelled! + Event archived + event is archived! + Event updated + event is updated! 360p diff --git a/AndroidClient/src/main/res/xml/authenticator.xml b/AndroidClient/src/main/res/xml/authenticator.xml index 9104b69..34f2e11 100644 --- a/AndroidClient/src/main/res/xml/authenticator.xml +++ b/AndroidClient/src/main/res/xml/authenticator.xml @@ -1,6 +1,6 @@ + android:smallIcon="@drawable/meeter_new_logo_64x64" /> From e289c8a9a95a7bbcd2a91557bf0ecae078753538 Mon Sep 17 00:00:00 2001 From: Georgy Lebedik Date: Mon, 30 Jun 2025 17:54:46 +0300 Subject: [PATCH 02/16] Event statuses notification. --- .../tom/meeter/context/notification/NotificationHelper.java | 4 ++-- AndroidClient/src/main/res/values-en/strings.xml | 4 ++-- AndroidClient/src/main/res/values-ru-rRU/strings.xml | 4 ++-- AndroidClient/src/main/res/values/strings.xml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/notification/NotificationHelper.java b/AndroidClient/src/main/java/com/tom/meeter/context/notification/NotificationHelper.java index 3927a3f..b18d123 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/notification/NotificationHelper.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/notification/NotificationHelper.java @@ -37,10 +37,10 @@ public static void createNotificationChannel(Context ctx) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel( EVENTS_NOTIFY, - ctx.getString(R.string.new_events_channel), + ctx.getString(R.string.events_channel), NotificationManager.IMPORTANCE_DEFAULT); channel.setDescription( - ctx.getString(R.string.information_about_newly_created_events)); + ctx.getString(R.string.information_about_events)); NotificationManager notificationManager = ctx.getSystemService( NotificationManager.class); diff --git a/AndroidClient/src/main/res/values-en/strings.xml b/AndroidClient/src/main/res/values-en/strings.xml index 093a5b4..5be5fc3 100644 --- a/AndroidClient/src/main/res/values-en/strings.xml +++ b/AndroidClient/src/main/res/values-en/strings.xml @@ -217,8 +217,8 @@ Failed to create event. * Network Channel - New events - Information about newly created events + Events + Information about events and their statuses Press to open the application event is published! Event published diff --git a/AndroidClient/src/main/res/values-ru-rRU/strings.xml b/AndroidClient/src/main/res/values-ru-rRU/strings.xml index 4bf1b13..cd1046d 100644 --- a/AndroidClient/src/main/res/values-ru-rRU/strings.xml +++ b/AndroidClient/src/main/res/values-ru-rRU/strings.xml @@ -215,8 +215,8 @@ Создать событие не получилось. * Сетевой канал - Канал новых событий - Информация о только что созданных событиях + Канал о событиях + Информация о событиях и их статусах Нажмите, чтобы открыть приложение событие опубликовано! Событие опубликовано diff --git a/AndroidClient/src/main/res/values/strings.xml b/AndroidClient/src/main/res/values/strings.xml index 180c37e..2dfeb7f 100644 --- a/AndroidClient/src/main/res/values/strings.xml +++ b/AndroidClient/src/main/res/values/strings.xml @@ -215,8 +215,8 @@ Failed to create event. * Network Channel - New events - Information about newly created events + Events + Information about events and their statuses Press to open the application event is published! Event published From d7ff54a597dac676397ce4bfa28597f19a6178d0 Mon Sep 17 00:00:00 2001 From: Georgy Lebedik Date: Mon, 30 Jun 2025 23:43:59 +0300 Subject: [PATCH 03/16] Event statuses notification. --- .../meeter/context/network/dto/EventDTO.java | 70 ++++++++++++++++++- .../infrastructure/common/CommonHelper.java | 59 ++++++++++++++++ .../components/binder/EventBinderImpl.java | 14 ++-- .../viewholder/EventViewHolder.java | 10 ++- .../src/main/res/layout/event_view.xml | 39 +++++++++-- .../src/main/res/values-en/strings.xml | 10 +++ .../src/main/res/values-ru-rRU/strings.xml | 10 +++ AndroidClient/src/main/res/values/colors.xml | 11 +++ AndroidClient/src/main/res/values/strings.xml | 10 +++ 9 files changed, 218 insertions(+), 15 deletions(-) diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/network/dto/EventDTO.java b/AndroidClient/src/main/java/com/tom/meeter/context/network/dto/EventDTO.java index b4e858e..73c801d 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/network/dto/EventDTO.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/network/dto/EventDTO.java @@ -27,6 +27,7 @@ public class EventDTO extends ServerEntityBase { private static final String STARTING_KEY = "starting"; private static final String ENDING_KEY = "ending"; private static final String CITY_KEY = "city"; + private static final String STATUS_KEY = "status"; //Non nullable, cannot be changed @JsonProperty(value = CREATOR_ID_KEY) @@ -40,6 +41,7 @@ public class EventDTO extends ServerEntityBase { private OffsetDateTime starting; private OffsetDateTime ending; private String city; + private EventStatus status; public EventDTO() { //retrofit... @@ -59,6 +61,7 @@ public EventDTO(JSONObject json) { starting = getOffsetDateTimeOrNull(STARTING_KEY, json); ending = getOffsetDateTimeOrNull(ENDING_KEY, json); city = getStringOrNull(CITY_KEY, json); + status = EventStatus.fromString(json.getString(STATUS_KEY)); } catch (JSONException e) { throw new RuntimeException("Unable to encode EventDTO from jsonObject: ", e); } @@ -88,6 +91,9 @@ public void setCity(String city) { this.city = city; } + public void setStatus(EventStatus eventStatus) { + this.status = eventStatus; + } public String getDescription() { return description; @@ -121,6 +127,10 @@ public String getCity() { return city; } + public EventStatus getStatus() { + return status; + } + @Override public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; @@ -133,7 +143,8 @@ public boolean equals(Object o) { && Objects.equals(longitude, eventDTO.longitude) && Objects.equals(starting, eventDTO.starting) && Objects.equals(ending, eventDTO.ending) - && Objects.equals(city, eventDTO.city); + && Objects.equals(city, eventDTO.city) + && Objects.equals(status, eventDTO.status); } @Override @@ -141,6 +152,61 @@ public int hashCode() { return Objects.hash( super.hashCode(), creatorId, created, description, latitude, longitude, - starting, ending, city); + starting, ending, city, status); + } + + + private static final String CREATED_VALUE = "CREATED"; + private static final String PUBLISHED_VALUE = "PUBLISHED"; + private static final String UNPUBLISHED_VALUE = "UNPUBLISHED"; + private static final String SCHEDULED_VALUE = "SCHEDULED"; + private static final String STARTED_VALUE = "STARTED"; + private static final String PAUSED_VALUE = "PAUSED"; + private static final String RESUMED_VALUE = "RESUMED"; + private static final String FINISHED_VALUE = "FINISHED"; + private static final String CANCELLED_VALUE = "CANCELLED"; + private static final String ARCHIVED_VALUE = "ARCHIVED"; + + public enum EventStatus { + + @JsonProperty(CREATED_VALUE) + CREATED(CREATED_VALUE), + @JsonProperty(PUBLISHED_VALUE) + PUBLISHED(PUBLISHED_VALUE), + @JsonProperty(UNPUBLISHED_VALUE) + UNPUBLISHED(UNPUBLISHED_VALUE), + @JsonProperty(SCHEDULED_VALUE) + SCHEDULED(SCHEDULED_VALUE), + @JsonProperty(STARTED_VALUE) + STARTED(STARTED_VALUE), + @JsonProperty(PAUSED_VALUE) + PAUSED(PAUSED_VALUE), + @JsonProperty(RESUMED_VALUE) + RESUMED(RESUMED_VALUE), + @JsonProperty(FINISHED_VALUE) + FINISHED(FINISHED_VALUE), + @JsonProperty(CANCELLED_VALUE) + CANCELLED(CANCELLED_VALUE), + @JsonProperty(ARCHIVED_VALUE) + ARCHIVED(ARCHIVED_VALUE); + + private final String value; + + EventStatus(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public static EventStatus fromString(String text) { + for (EventStatus val : EventStatus.values()) { + if (val.value.equalsIgnoreCase(text)) { + return val; + } + } + throw new IllegalArgumentException("No enum constant with string value " + text); + } } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/CommonHelper.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/CommonHelper.java index 229c0fb..001ec33 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/CommonHelper.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/CommonHelper.java @@ -1,11 +1,16 @@ package com.tom.meeter.infrastructure.common; import android.content.Context; +import android.graphics.drawable.GradientDrawable; +import android.os.Build; import android.util.Log; +import android.util.TypedValue; +import android.widget.TextView; import androidx.annotation.Nullable; import com.tom.meeter.R; +import com.tom.meeter.context.network.dto.EventDTO; import com.tom.meeter.context.network.dto.UserDTO; import java.time.LocalDate; @@ -41,6 +46,60 @@ public static String genderResolver(Context ctx, UserDTO.UserGender gender) { }; } + public static String eventStatusResolver(Context ctx, EventDTO.EventStatus status) { + return switch (status) { + case CREATED -> ctx.getString(R.string.created_status); + case PUBLISHED -> ctx.getString(R.string.published_status); + case UNPUBLISHED -> ctx.getString(R.string.unpublished_status); + case SCHEDULED -> ctx.getString(R.string.scheduled_status); + case STARTED -> ctx.getString(R.string.started_status); + case PAUSED -> ctx.getString(R.string.paused_status); + case RESUMED -> ctx.getString(R.string.resumed_status); + case FINISHED -> ctx.getString(R.string.finished_status); + case CANCELLED -> ctx.getString(R.string.cancelled_status); + case ARCHIVED -> ctx.getString(R.string.archived_status); + default -> throw new IllegalArgumentException("#args " + status); + }; + } + + public static void setStatusColor(TextView statusView, int colorRes) { + statusView.setBackgroundResource(colorRes); + } + + public static int getStatusColor(Context ctx, EventDTO.EventStatus status) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + throw new IllegalArgumentException("#Unable to get status color " + status); + } + return switch (status) { + case CREATED -> ctx.getColor(R.color.created_status); + case PUBLISHED -> ctx.getColor(R.color.published_status); + case UNPUBLISHED -> ctx.getColor(R.color.unpublished_status); + case SCHEDULED -> ctx.getColor(R.color.scheduled_status); + case STARTED -> ctx.getColor(R.color.started_status); + case PAUSED -> ctx.getColor(R.color.paused_status); + case RESUMED -> ctx.getColor(R.color.resumed_status); + case FINISHED -> ctx.getColor(R.color.finished_status); + case CANCELLED -> ctx.getColor(R.color.cancelled_status); + case ARCHIVED -> ctx.getColor(R.color.archived_status); + default -> throw new IllegalArgumentException("#args " + status); + }; + } + + + public static void setRoundedBackground( + TextView view, int backgroundColor, float cornerRadiusDp) { + GradientDrawable drawable = new GradientDrawable(); + drawable.setShape(GradientDrawable.RECTANGLE); + drawable.setColor(backgroundColor); + float radiusPx = TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, + cornerRadiusDp, + view.getResources().getDisplayMetrics() + ); + drawable.setCornerRadius(radiusPx); + view.setBackground(drawable); + } + @Nullable public static CharSequence dateOrNull(OffsetDateTime date) { return date == null ? null : UI_DATE_TIME_FORMAT.format(date); diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java index 1bac6b0..e5c2afa 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java @@ -1,5 +1,8 @@ package com.tom.meeter.infrastructure.components.binder; +import static com.tom.meeter.infrastructure.common.CommonHelper.eventStatusResolver; +import static com.tom.meeter.infrastructure.common.CommonHelper.getStatusColor; + import android.content.Context; import android.graphics.Bitmap; @@ -29,13 +32,16 @@ public EventBinderImpl( public void bind(EventViewHolder holder, EventDTO event) { String photoPath = event.getPhotoPath(); - Bitmap cached = photoPath != null ? cache.get(photoPath) : null; + Bitmap cachedPhoto = photoPath != null ? cache.get(photoPath) : null; + EventDTO.EventStatus eventStatus = event.getStatus(); holder.bind( - event.getName(), event.getDescription(), cached, - v -> listener.onClick(event)); + event.getName(), event.getDescription(), + eventStatusResolver(ctx, eventStatus), + getStatusColor(ctx, eventStatus), + cachedPhoto, v -> listener.onClick(event)); - if (photoPath != null && cached == null) { + if (photoPath != null && cachedPhoto == null) { loadPhoto(photoPath, holder::updatePhoto); } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java index 7c09313..3dda18c 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java @@ -1,5 +1,7 @@ package com.tom.meeter.infrastructure.components.viewholder; +import static com.tom.meeter.infrastructure.common.CommonHelper.setRoundedBackground; + import android.graphics.Bitmap; import android.view.View; @@ -17,11 +19,15 @@ public EventViewHolder(EventViewBinding binding) { } public void bind( - String name, String description, Bitmap photo, - View.OnClickListener clickListener) { + String name, String description, String status, int colorRes, + Bitmap photo, View.OnClickListener clickListener) { binding.eventNameCardView.setText(name); binding.eventDescriptionCardView.setText(description); binding.eventPhotoCardView.setImageBitmap(photo); + binding.eventStatusCardView.setText(status); + setRoundedBackground(binding.eventStatusCardView, colorRes, 6f); + //binding.eventStatusCardView.setBackgroundColor(colorRes); + //binding.eventStatusCardView.setBackgroundResource(colorRes); binding.eventCardView.setOnClickListener(clickListener); } diff --git a/AndroidClient/src/main/res/layout/event_view.xml b/AndroidClient/src/main/res/layout/event_view.xml index 346ff62..4c4e91a 100644 --- a/AndroidClient/src/main/res/layout/event_view.xml +++ b/AndroidClient/src/main/res/layout/event_view.xml @@ -1,5 +1,6 @@ @@ -7,27 +8,51 @@ + android:layout_height="wrap_content" + app:cardCornerRadius="8dp" + app:cardElevation="4dp"> - + android:layout_marginEnd="16dp" + android:gravity="center_horizontal" + android:orientation="vertical"> + + + + + + @@ -36,7 +61,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/event_name_card_view" - android:layout_toRightOf="@+id/event_photo_card_view" /> + android:layout_toEndOf="@id/event_image_container" /> diff --git a/AndroidClient/src/main/res/values-en/strings.xml b/AndroidClient/src/main/res/values-en/strings.xml index 5be5fc3..4c99281 100644 --- a/AndroidClient/src/main/res/values-en/strings.xml +++ b/AndroidClient/src/main/res/values-en/strings.xml @@ -241,6 +241,16 @@ event is archived! Event updated event is updated! + CREATED + PUBLISHED + UNPUBLISHED + SCHEDULED + STARTED + PAUSED + RESUMED + FINISHED + CANCELLED + ARCHIVED 360p diff --git a/AndroidClient/src/main/res/values-ru-rRU/strings.xml b/AndroidClient/src/main/res/values-ru-rRU/strings.xml index cd1046d..6cea3f0 100644 --- a/AndroidClient/src/main/res/values-ru-rRU/strings.xml +++ b/AndroidClient/src/main/res/values-ru-rRU/strings.xml @@ -239,6 +239,16 @@ событие архивировано! Событие обновлено событие обновлено! + СОЗДАНО + ОПУБЛИКОВАНО + СНЯТО + ЗАПЛАНИРОВАНО + НАЧАЛОСЬ + ОСТАНОВЛЕНО + ПРОДОЛЖЕНО + ЗАВЕРШЕНО + ОТМЕНЕНО + АРХИВ 360p diff --git a/AndroidClient/src/main/res/values/colors.xml b/AndroidClient/src/main/res/values/colors.xml index deadada..9dd7d44 100644 --- a/AndroidClient/src/main/res/values/colors.xml +++ b/AndroidClient/src/main/res/values/colors.xml @@ -9,4 +9,15 @@ #c8e8ff #b1c0ca #C0DEEF + + #BBDEFB + #64B5F6 + #2196F3 + #EF9C1B + #11ED18 + #FFE60F + #11ED18 + #FB450D + #BC0606 + #90A4AE diff --git a/AndroidClient/src/main/res/values/strings.xml b/AndroidClient/src/main/res/values/strings.xml index 2dfeb7f..ad28635 100644 --- a/AndroidClient/src/main/res/values/strings.xml +++ b/AndroidClient/src/main/res/values/strings.xml @@ -239,6 +239,16 @@ event is archived! Event updated event is updated! + CREATED + PUBLISHED + UNPUBLISHED + SCHEDULED + STARTED + PAUSED + RESUMED + FINISHED + CANCELLED + ARCHIVED 360p From 013d3530995ffca03cc67fe6f8163df1c5698621 Mon Sep 17 00:00:00 2001 From: Georgy Lebedik Date: Tue, 1 Jul 2025 00:08:24 +0300 Subject: [PATCH 04/16] Event status. --- .../event/activity/ProfileEventActivity.java | 2 + .../event/activity/UserEventActivity.java | 2 + .../infrastructure/common/CommonHelper.java | 5 ++ .../components/binder/EventBinderImpl.java | 9 ++-- .../viewholder/EventViewHolder.java | 12 ++--- .../res/layout/activity_event_editable.xml | 23 ++++++++ .../res/layout/activity_event_readable.xml | 54 +++++++++---------- 7 files changed, 65 insertions(+), 42 deletions(-) diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/event/activity/ProfileEventActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/event/activity/ProfileEventActivity.java index 17b0f62..eadf532 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/event/activity/ProfileEventActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/event/activity/ProfileEventActivity.java @@ -12,6 +12,7 @@ import static com.tom.meeter.context.image.activity.BaseUploadActivity.PHOTO_PATH_RESULT; import static com.tom.meeter.infrastructure.common.CommonHelper.UI_DATE_TIME_FORMAT; import static com.tom.meeter.infrastructure.common.CommonHelper.dateOrNull; +import static com.tom.meeter.infrastructure.common.CommonHelper.handleEventStatus; import static com.tom.meeter.infrastructure.common.CommonHelper.textOrNull; import static com.tom.meeter.infrastructure.common.DateHelper.showDateTimePicker; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; @@ -258,6 +259,7 @@ public void onResponse(Call call, Response resp) { private void updateLayout() { binding.photoPath.setText(eventCache.getPhotoPath()); + handleEventStatus(this, binding.status, eventCache.getStatus()); binding.name.setText(eventCache.getName()); binding.eventCreated.setText(UI_DATE_TIME_FORMAT.format(eventCache.getCreated())); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/event/activity/UserEventActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/event/activity/UserEventActivity.java index e3c1158..0efff9d 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/event/activity/UserEventActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/event/activity/UserEventActivity.java @@ -7,6 +7,7 @@ import static com.tom.meeter.context.user.activity.UserActivity.dispatchToUserActivity; import static com.tom.meeter.infrastructure.common.CommonHelper.UI_DATE_TIME_FORMAT; import static com.tom.meeter.infrastructure.common.CommonHelper.dateOrNull; +import static com.tom.meeter.infrastructure.common.CommonHelper.handleEventStatus; import static com.tom.meeter.infrastructure.common.CommonHelper.textOrNull; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; @@ -108,6 +109,7 @@ private void initLayout(EventDTO event) { binding.locationMapButton.setOnClickListener( v -> dispatchToEventOnMapActivity(this, event.getId())); + handleEventStatus(this, binding.status, event.getStatus()); binding.name.setText(event.getName()); binding.eventCreated.setText(UI_DATE_TIME_FORMAT.format(event.getCreated())); binding.description.setText(event.getDescription()); diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/CommonHelper.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/CommonHelper.java index 001ec33..9d71258 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/CommonHelper.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/CommonHelper.java @@ -85,6 +85,11 @@ public static int getStatusColor(Context ctx, EventDTO.EventStatus status) { }; } + public static void handleEventStatus( + Context ctx, TextView view, EventDTO.EventStatus status) { + view.setText(eventStatusResolver(ctx, status)); + setRoundedBackground(view, getStatusColor(ctx, status), 6f); + } public static void setRoundedBackground( TextView view, int backgroundColor, float cornerRadiusDp) { diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java index e5c2afa..7577c58 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java @@ -1,7 +1,6 @@ package com.tom.meeter.infrastructure.components.binder; -import static com.tom.meeter.infrastructure.common.CommonHelper.eventStatusResolver; -import static com.tom.meeter.infrastructure.common.CommonHelper.getStatusColor; +import static com.tom.meeter.infrastructure.common.CommonHelper.handleEventStatus; import android.content.Context; import android.graphics.Bitmap; @@ -33,13 +32,11 @@ public void bind(EventViewHolder holder, EventDTO event) { String photoPath = event.getPhotoPath(); Bitmap cachedPhoto = photoPath != null ? cache.get(photoPath) : null; - EventDTO.EventStatus eventStatus = event.getStatus(); holder.bind( event.getName(), event.getDescription(), - eventStatusResolver(ctx, eventStatus), - getStatusColor(ctx, eventStatus), - cachedPhoto, v -> listener.onClick(event)); + cachedPhoto, v -> listener.onClick(event), + v -> handleEventStatus(ctx, v, event.getStatus())); if (photoPath != null && cachedPhoto == null) { loadPhoto(photoPath, holder::updatePhoto); diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java index 3dda18c..4edf5bd 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java @@ -1,14 +1,15 @@ package com.tom.meeter.infrastructure.components.viewholder; -import static com.tom.meeter.infrastructure.common.CommonHelper.setRoundedBackground; - import android.graphics.Bitmap; import android.view.View; +import android.widget.TextView; import androidx.recyclerview.widget.RecyclerView; import com.tom.meeter.databinding.EventViewBinding; +import java.util.function.Consumer; + public class EventViewHolder extends RecyclerView.ViewHolder { private final EventViewBinding binding; @@ -19,13 +20,12 @@ public EventViewHolder(EventViewBinding binding) { } public void bind( - String name, String description, String status, int colorRes, - Bitmap photo, View.OnClickListener clickListener) { + String name, String description, Bitmap photo, + View.OnClickListener clickListener, Consumer statusC) { binding.eventNameCardView.setText(name); binding.eventDescriptionCardView.setText(description); binding.eventPhotoCardView.setImageBitmap(photo); - binding.eventStatusCardView.setText(status); - setRoundedBackground(binding.eventStatusCardView, colorRes, 6f); + statusC.accept(binding.eventStatusCardView); //binding.eventStatusCardView.setBackgroundColor(colorRes); //binding.eventStatusCardView.setBackgroundResource(colorRes); binding.eventCardView.setOnClickListener(clickListener); diff --git a/AndroidClient/src/main/res/layout/activity_event_editable.xml b/AndroidClient/src/main/res/layout/activity_event_editable.xml index 82f6bbe..0645dff 100644 --- a/AndroidClient/src/main/res/layout/activity_event_editable.xml +++ b/AndroidClient/src/main/res/layout/activity_event_editable.xml @@ -13,6 +13,7 @@ @@ -41,6 +42,28 @@ android:text="@string/select_photo" android:textAllCaps="false" /> + + + + + + @@ -32,6 +33,28 @@ android:text="@string/creator" android:textAllCaps="false" /> + + + + + + @@ -95,35 +117,7 @@ - - - - - - - + android:orientation="vertical"> Date: Tue, 1 Jul 2025 12:49:25 +0300 Subject: [PATCH 05/16] Customization. --- .../fragment/ActiveEventsFragment.java | 8 ++- .../fragment/ProfileEventsFragment.java | 8 ++- .../components/EventImageDownloader.java | 26 +++++++ .../components/PhotoWithCacheDownloader.java | 19 ++++-- .../components/UserImageDownloader.java | 2 +- .../components/UserWithCacheDownloader.java | 68 +++++++++++++++++++ .../components/binder/EventBinderImpl.java | 58 ++++++++++------ .../binder/SubscriberBinderImpl.java | 12 ++-- .../components/binder/UserBinderImpl.java | 11 +-- .../viewholder/EventViewHolder.java | 11 +-- .../src/main/res/layout/event_view.xml | 16 +++-- 11 files changed, 191 insertions(+), 48 deletions(-) create mode 100644 AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/EventImageDownloader.java create mode 100644 AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserWithCacheDownloader.java diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java index ff9f51f..cbd8469 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java @@ -3,6 +3,7 @@ import static com.tom.meeter.context.event.activity.EventDispatcherActivity.dispatchToEventActivity; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; +import android.accounts.AccountManager; import android.content.Context; import android.os.Bundle; import android.util.Log; @@ -16,8 +17,10 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.tom.meeter.App; +import com.tom.meeter.context.auth.infrastructure.AuthHelper; import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.profile.adapter.EventsAdapter; +import com.tom.meeter.context.user.service.UserService; import com.tom.meeter.databinding.SubFragmentActiveEventsBinding; import com.tom.meeter.infrastructure.common.InfrastructureHelper; import com.tom.meeter.infrastructure.components.binder.EventBinderImpl; @@ -38,6 +41,8 @@ public class ActiveEventsFragment extends Fragment { @Inject ImageDownloader imageDownloader; + @Inject + UserService service; private SubFragmentActiveEventsBinding binding; private EventsAdapter adapter; @@ -58,7 +63,8 @@ public void onCreate(Bundle savedInstanceState) { Context ctx = requireContext(); adapter = new EventsAdapter( new EventBinderImpl( - ctx, imageDownloader, + ctx, AuthHelper.getAuthHeader(AccountManager.get(ctx)), + imageDownloader, service, (e) -> dispatchToEventActivity(ctx, e.getId()), () -> InfrastructureHelper.restartActivityFromFragment(this))); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java index 343e8e1..f18d39f 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java @@ -3,6 +3,7 @@ import static com.tom.meeter.context.event.activity.EventDispatcherActivity.dispatchToEventActivity; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; +import android.accounts.AccountManager; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; @@ -16,10 +17,12 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.tom.meeter.App; +import com.tom.meeter.context.auth.infrastructure.AuthHelper; import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.profile.adapter.EventsAdapter; import com.tom.meeter.context.profile.factory.ProfileEventsAssistedFactory; import com.tom.meeter.context.profile.viewmodel.ProfileEventsViewModel; +import com.tom.meeter.context.user.service.UserService; import com.tom.meeter.databinding.SubFragmentUserEventsBinding; import com.tom.meeter.infrastructure.common.InfrastructureHelper; import com.tom.meeter.infrastructure.components.binder.EventBinderImpl; @@ -38,6 +41,8 @@ public class ProfileEventsFragment extends Fragment { ProfileEventsAssistedFactory assistedFactory; @Inject ImageDownloader imageDownloader; + @Inject + UserService service; private ProfileEventsViewModel viewModel; @@ -56,7 +61,8 @@ public void onCreate(Bundle savedInstanceState) { adapter = new EventsAdapter( new EventBinderImpl( - ctx, imageDownloader, + ctx, AuthHelper.getAuthHeader(AccountManager.get(ctx)), + imageDownloader, service, (e) -> dispatchToEventActivity(ctx, e.getId()), () -> InfrastructureHelper.restartActivityFromFragment(this))); /* diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/EventImageDownloader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/EventImageDownloader.java new file mode 100644 index 0000000..73d522b --- /dev/null +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/EventImageDownloader.java @@ -0,0 +1,26 @@ +package com.tom.meeter.infrastructure.components; + +import android.content.Context; +import android.graphics.Bitmap; + +import com.tom.meeter.context.image.ImageDownloader; +import com.tom.meeter.infrastructure.common.ImagesHelper; + +import java.util.function.Consumer; + +public class EventImageDownloader extends PhotoWithCacheDownloader { + + public EventImageDownloader( + Context ctx, ImageDownloader imgDownloader, Runnable onAuthFail) { + super(ctx, imgDownloader, onAuthFail); + } + + @Override + protected void downloadImage( + String photoPath, Consumer onDownloaded) { + imgDownloader.downloadEventImage( + photoPath, ctx, + ImagesHelper::circleImage, + onDownloaded, onAuthFail); + } +} diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/PhotoWithCacheDownloader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/PhotoWithCacheDownloader.java index 69d225d..b58db77 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/PhotoWithCacheDownloader.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/PhotoWithCacheDownloader.java @@ -19,6 +19,10 @@ public abstract class PhotoWithCacheDownloader { protected final Runnable onAuthFail; protected final Map cache = new ConcurrentHashMap<>(); + public Bitmap getCachedPhoto(String photoPath) { + return cache.get(photoPath); + } + protected PhotoWithCacheDownloader( Context ctx, ImageDownloader imgDownloader, Runnable onAuthFail) { this.ctx = ctx; @@ -26,19 +30,20 @@ protected PhotoWithCacheDownloader( this.onAuthFail = onAuthFail; } - protected void loadPhoto(String photoPath, Consumer onImageReady) { + public void loadPhoto(String photoPath, Consumer onImageReady) { Bitmap cached = cache.get(photoPath); if (cached != null) { onImageReady.accept(cached); return; } - downloadImage(photoPath, photo -> { - cache.put(photoPath, photo); - onImageReady.accept(photo); - Log.d(TAG, getClass().getSimpleName() + - ": image downloaded for [" + photoPath + "], cache updated."); - }); + downloadImage( + photoPath, photo -> { + cache.put(photoPath, photo); + onImageReady.accept(photo); + Log.d(TAG, getClass().getSimpleName() + + ": image downloaded for [" + photoPath + "], cache updated."); + }); } protected abstract void downloadImage(String photoPath, Consumer onDownloaded); diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserImageDownloader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserImageDownloader.java index 157e60d..cabc6a3 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserImageDownloader.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserImageDownloader.java @@ -10,7 +10,7 @@ public class UserImageDownloader extends PhotoWithCacheDownloader { - protected UserImageDownloader( + public UserImageDownloader( Context ctx, ImageDownloader imgDownloader, Runnable onAuthFail) { super(ctx, imgDownloader, onAuthFail); } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserWithCacheDownloader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserWithCacheDownloader.java new file mode 100644 index 0000000..2deb1a2 --- /dev/null +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserWithCacheDownloader.java @@ -0,0 +1,68 @@ +package com.tom.meeter.infrastructure.components; + +import android.content.Context; +import android.util.Log; + +import com.tom.meeter.context.network.dto.UserDTO; +import com.tom.meeter.context.user.service.UserService; +import com.tom.meeter.infrastructure.http.BaseOnNotAuthenticatedCallback; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Consumer; + +import retrofit2.Call; +import retrofit2.Response; + +public class UserWithCacheDownloader { + + private static final String TAG = PhotoWithCacheDownloader.class.getCanonicalName(); + + private final Context ctx; + private final UserService service; + private final Runnable onAuthFail; + protected final Map cache = new ConcurrentHashMap<>(); + + public UserDTO getUserCache(String userId) { + return cache.get(userId); + } + + public UserWithCacheDownloader( + Context ctx, UserService service, Runnable onAuthFail) { + this.ctx = ctx; + this.service = service; + this.onAuthFail = onAuthFail; + } + + public void loadUser( + String auth, String userId, Consumer onUserReady) { + UserDTO cached = cache.get(userId); + if (cached != null) { + onUserReady.accept(cached); + return; + } + + fetchUser( + auth, userId, + user -> { + cache.put(user.getId(), user); + onUserReady.accept(user); + Log.d(TAG, getClass().getSimpleName() + + ": user downloaded for [" + user.getId() + "], cache updated."); + }); + } + + private void fetchUser( + String auth, String userId, Consumer onDownloaded) { + service.getUser(auth, userId).enqueue(new BaseOnNotAuthenticatedCallback<>(ctx, onAuthFail) { + @Override + public void onResponse(Call call, Response resp) { + super.onResponse(call, resp); + if (!resp.isSuccessful() || resp.body() == null) { + return; + } + onDownloaded.accept(resp.body()); + } + }); + } +} diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java index 7577c58..bdd45cf 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java @@ -4,51 +4,71 @@ import android.content.Context; import android.graphics.Bitmap; +import android.util.Log; import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.network.dto.EventDTO; -import com.tom.meeter.infrastructure.common.ImagesHelper; -import com.tom.meeter.infrastructure.components.PhotoWithCacheDownloader; +import com.tom.meeter.context.network.dto.UserDTO; +import com.tom.meeter.context.user.service.UserService; +import com.tom.meeter.infrastructure.components.EventImageDownloader; +import com.tom.meeter.infrastructure.components.UserWithCacheDownloader; import com.tom.meeter.infrastructure.components.adapter.OnEventClickListener; import com.tom.meeter.infrastructure.components.viewholder.EventViewHolder; -import java.util.function.Consumer; +public class EventBinderImpl implements EventBinder { -public class EventBinderImpl - extends PhotoWithCacheDownloader - implements EventBinder { + private static final String TAG = EventBinderImpl.class.getCanonicalName(); + private final Context ctx; + private final String auth; + private final EventImageDownloader eventImageDownloader; + private final UserWithCacheDownloader userDownloader; private final OnEventClickListener listener; public EventBinderImpl( - Context ctx, ImageDownloader imgDownloader, - OnEventClickListener listener, Runnable onAuthFail) { - super(ctx, imgDownloader, onAuthFail); + Context ctx, String auth, ImageDownloader imgDownloader, + UserService service, OnEventClickListener listener, + Runnable onAuthFail) { + this.ctx = ctx; + this.auth = auth; this.listener = listener; + this.eventImageDownloader = new EventImageDownloader( + ctx, imgDownloader, onAuthFail); + this.userDownloader = new UserWithCacheDownloader( + ctx, service, onAuthFail); } @Override public void bind(EventViewHolder holder, EventDTO event) { + Log.d(TAG, "Current thread: " + Thread.currentThread().getName()); String photoPath = event.getPhotoPath(); - Bitmap cachedPhoto = photoPath != null ? cache.get(photoPath) : null; + Bitmap cachedPhoto = photoPath != null + ? eventImageDownloader.getCachedPhoto(event.getPhotoPath()) : null; + + UserDTO userCache = userDownloader.getUserCache(event.getCreatorId()); + Log.d(TAG, "User by id " + event.getCreatorId() + " is " + userCache); holder.bind( event.getName(), event.getDescription(), - cachedPhoto, v -> listener.onClick(event), + cachedPhoto, getCreator(userCache), + v -> listener.onClick(event), v -> handleEventStatus(ctx, v, event.getStatus())); + if (userCache == null) { + userDownloader.loadUser( + auth, event.getCreatorId(), + u -> { + Log.d(TAG, "Downloaded user by id " + event.getCreatorId() + " is " + u); + holder.updateCreator(getCreator(u)); + }); + } if (photoPath != null && cachedPhoto == null) { - loadPhoto(photoPath, holder::updatePhoto); + eventImageDownloader.loadPhoto(photoPath, holder::updatePhoto); } } - @Override - protected void downloadImage(String photoPath, Consumer onDownloaded) { - imgDownloader.downloadEventImage( - photoPath, ctx, - ImagesHelper::circleImage, - onDownloaded, - onAuthFail); + private static String getCreator(UserDTO user) { + return user == null ? null : user.getName() + " " + user.getSurname(); } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java index 48b55f1..8da4dff 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java @@ -11,15 +11,16 @@ import com.tom.meeter.infrastructure.components.adapter.OnUserClickListener; import com.tom.meeter.infrastructure.components.viewholder.SubscriberViewHolder; -public class SubscriberBinderImpl extends UserImageDownloader - implements SubscriberBinder { +public class SubscriberBinderImpl implements SubscriberBinder { + private final UserImageDownloader userImageDownloader; private OnUserClickListener userClickListener; private OnSubscribeUnsubscribeClickListener subUnSubClickListener; public SubscriberBinderImpl( Context ctx, ImageDownloader imgDownloader, Runnable onAuthFail) { - super(ctx, imgDownloader, onAuthFail); + this.userImageDownloader = new UserImageDownloader( + ctx, imgDownloader, onAuthFail); } @Override @@ -35,7 +36,8 @@ public void bind(SubscriberViewHolder holder, Subscriber target) { UserDTO user = target.getUser(); String photoPath = user.getPhotoPath(); - Bitmap cached = photoPath != null ? cache.get(photoPath) : null; + Bitmap cached = photoPath != null + ? userImageDownloader.getCachedPhoto(photoPath) : null; holder.bind( target.isAmISubscribedTo(), @@ -45,7 +47,7 @@ public void bind(SubscriberViewHolder holder, Subscriber target) { ); if (photoPath != null && cached == null) { - loadPhoto(photoPath, holder::updatePhoto); + userImageDownloader.loadPhoto(photoPath, holder::updatePhoto); } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinderImpl.java index 59dca5c..56e9c05 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinderImpl.java @@ -9,28 +9,29 @@ import com.tom.meeter.infrastructure.components.adapter.OnUserClickListener; import com.tom.meeter.infrastructure.components.viewholder.UserViewHolder; -public class UserBinderImpl extends UserImageDownloader - implements UserBinder { +public class UserBinderImpl implements UserBinder { + private UserImageDownloader userImageDownloader; private OnUserClickListener userClickListener; public UserBinderImpl( Context ctx, ImageDownloader imgDownloader, Runnable onAuthFail) { - super(ctx, imgDownloader, onAuthFail); + this.userImageDownloader = new UserImageDownloader(ctx, imgDownloader, onAuthFail); } @Override public void bind(UserViewHolder holder, UserDTO user) { String photoPath = user.getPhotoPath(); - Bitmap cached = photoPath != null ? cache.get(photoPath) : null; + Bitmap cached = photoPath != null + ? userImageDownloader.getCachedPhoto(photoPath) : null; holder.bind( user.getName(), user.getSurname(), cached, v -> userClickListener.onClick(user)); if (photoPath != null && cached == null) { - loadPhoto(photoPath, holder::updatePhoto); + userImageDownloader.loadPhoto(photoPath, holder::updatePhoto); } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java index 4edf5bd..3827566 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java @@ -20,18 +20,21 @@ public EventViewHolder(EventViewBinding binding) { } public void bind( - String name, String description, Bitmap photo, + String name, String description, Bitmap photo, String creator, View.OnClickListener clickListener, Consumer statusC) { binding.eventNameCardView.setText(name); binding.eventDescriptionCardView.setText(description); + binding.eventCreatorCardView.setText(creator); binding.eventPhotoCardView.setImageBitmap(photo); - statusC.accept(binding.eventStatusCardView); - //binding.eventStatusCardView.setBackgroundColor(colorRes); - //binding.eventStatusCardView.setBackgroundResource(colorRes); binding.eventCardView.setOnClickListener(clickListener); + statusC.accept(binding.eventStatusCardView); } public void updatePhoto(Bitmap photo) { binding.eventPhotoCardView.setImageBitmap(photo); } + + public void updateCreator(String creator) { + binding.eventCreatorCardView.setText(creator); + } } diff --git a/AndroidClient/src/main/res/layout/event_view.xml b/AndroidClient/src/main/res/layout/event_view.xml index 4c4e91a..182228b 100644 --- a/AndroidClient/src/main/res/layout/event_view.xml +++ b/AndroidClient/src/main/res/layout/event_view.xml @@ -44,24 +44,30 @@ android:text="STATUS" android:textAllCaps="true" android:textSize="12sp" /> - + + - + android:textSize="18sp" /> + android:layout_toEndOf="@id/event_image_container" + android:maxLines="3" + android:textSize="14sp" /> From a6fe25d698385d78b7b7a6132e4ee480ce15db7b Mon Sep 17 00:00:00 2001 From: Georgy Lebedik Date: Tue, 1 Jul 2025 14:35:47 +0300 Subject: [PATCH 06/16] Associate internal components with dagger. --- .../java/com/tom/meeter/AppComponent.java | 1 - .../profile/activity/SubscribersActivity.java | 11 ++---- .../activity/SubscriptionsActivity.java | 8 ++--- .../profile/adapter/EventsAdapter.java | 17 ++++++++- .../profile/adapter/SubscribersAdapter.java | 27 +++++++++----- .../fragment/ActiveEventsFragment.java | 14 ++++---- .../fragment/ProfileEventsFragment.java | 18 ++++------ .../profile/fragment/ProfileFragment.java | 12 +++---- .../context/user/activity/UserActivity.java | 17 ++++----- .../activity/UserSubscribersActivity.java | 7 ++-- .../activity/UserSubscriptionsActivity.java | 9 +++-- .../context/user/adapter/UsersAdapter.java | 16 +++++++-- .../components/EventImageDownloader.java | 9 ++--- .../components/PhotoWithCacheDownloader.java | 20 ++++++----- .../components/UserImageDownloader.java | 9 ++--- .../components/UserWithCacheDownloader.java | 22 +++++++++--- .../components/adapter/EventsCardAdapter.java | 16 ++++++++- .../components/binder/EventBinder.java | 4 +++ .../components/binder/EventBinderImpl.java | 35 +++++++++++-------- .../binder/SimpleEventBinderImpl.java | 24 ++++++++----- .../components/binder/SubscriberBinder.java | 3 ++ .../binder/SubscriberBinderImpl.java | 14 +++++--- .../components/binder/UserBinder.java | 4 ++- .../components/binder/UserBinderImpl.java | 28 +++++++++------ 24 files changed, 218 insertions(+), 127 deletions(-) diff --git a/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java b/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java index 0698f58..701f903 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java +++ b/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java @@ -42,7 +42,6 @@ public interface AppComponent { EventService provideEventService(); - @Component.Builder interface Builder { diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java index a1b0035..ce54fb6 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java @@ -1,7 +1,6 @@ package com.tom.meeter.context.profile.activity; import static com.tom.meeter.context.auth.infrastructure.AuthHelper.checkToken; -import static com.tom.meeter.context.auth.infrastructure.AuthHelper.getAuthHeader; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; import android.accounts.AccountManager; @@ -20,7 +19,6 @@ import com.tom.meeter.context.token.service.TokenService; import com.tom.meeter.context.user.service.UserService; import com.tom.meeter.databinding.ActivityProfileSubscribersBinding; -import com.tom.meeter.infrastructure.components.binder.SubscriberBinderImpl; import javax.inject.Inject; @@ -36,11 +34,12 @@ public class SubscribersActivity extends AppCompatActivity { ImageDownloader imgDownloader; @Inject UserService service; + @Inject + SubscribersAdapter adapter; private final Runnable onAuthFail = this::recreate; private AccountManager accountManager; private ActivityProfileSubscribersBinding binding; - private SubscribersAdapter adapter; private ProfileSubscribersViewModel viewModel; @Override @@ -64,11 +63,7 @@ private void onInit(String token) { View view = binding.getRoot(); setContentView(view); - String auth = getAuthHeader(accountManager); - adapter = new SubscribersAdapter( - service, onAuthFail, this, - new SubscriberBinderImpl( - this, imgDownloader, onAuthFail)); + adapter.setupAdapter(this, onAuthFail); binding.recyclerSubscribers.setLayoutManager(new LinearLayoutManager(this)); binding.recyclerSubscribers.setAdapter(adapter); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java index 5e7e94d..5587dbc 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java @@ -19,7 +19,6 @@ import com.tom.meeter.context.token.service.TokenService; import com.tom.meeter.context.user.service.UserService; import com.tom.meeter.databinding.ActivityProfileSubscriptionsBinding; -import com.tom.meeter.infrastructure.components.binder.SubscriberBinderImpl; import javax.inject.Inject; @@ -35,11 +34,12 @@ public class SubscriptionsActivity extends AppCompatActivity { ImageDownloader imgDownloader; @Inject UserService userService; + @Inject + SubscribersAdapter adapter; private final Runnable onAuthFail = this::recreate; private ActivityProfileSubscriptionsBinding binding; private AccountManager accountManager; - private SubscribersAdapter adapter; private ProfileSubscriptionsViewModel viewModel; @Override @@ -63,9 +63,7 @@ private void onInit() { View view = binding.getRoot(); setContentView(view); - adapter = new SubscribersAdapter( - userService, onAuthFail, this, - new SubscriberBinderImpl(this, imgDownloader, onAuthFail)); + adapter.setupAdapter(this, onAuthFail); binding.recyclerSubscriptions.setLayoutManager(new LinearLayoutManager(this)); binding.recyclerSubscriptions.setAdapter(adapter); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/EventsAdapter.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/EventsAdapter.java index 20d7108..19ee2c2 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/EventsAdapter.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/EventsAdapter.java @@ -2,6 +2,7 @@ import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; +import android.content.Context; import android.view.LayoutInflater; import android.view.ViewGroup; @@ -9,9 +10,13 @@ import com.tom.meeter.databinding.EventViewBinding; import com.tom.meeter.infrastructure.components.adapter.BaseEventAdapter; +import com.tom.meeter.infrastructure.components.adapter.OnEventClickListener; import com.tom.meeter.infrastructure.components.binder.EventBinder; +import com.tom.meeter.infrastructure.components.binder.EventBinderImpl; import com.tom.meeter.infrastructure.components.viewholder.EventViewHolder; +import javax.inject.Inject; + /** * created by Tom on 10.02.2017. */ @@ -19,11 +24,21 @@ public class EventsAdapter extends BaseEventAdapter { private static final String TAG = EventsAdapter.class.getCanonicalName(); - public EventsAdapter(EventBinder binder) { + private final EventBinder binder; + + @Inject + public EventsAdapter(EventBinderImpl binder) { super(binder); + this.binder = binder; logMethod(TAG, this); } + public void setupBinder( + Context ctx, Runnable onAuthFail, + OnEventClickListener listener) { + binder.setup(ctx, onAuthFail, listener); + } + @Override public EventViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { logMethod(TAG, this); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/SubscribersAdapter.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/SubscribersAdapter.java index 951ab03..8e69a9f 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/SubscribersAdapter.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/SubscribersAdapter.java @@ -16,10 +16,13 @@ import com.tom.meeter.databinding.ActivityProfileSubscriberItemBinding; import com.tom.meeter.infrastructure.components.adapter.BaseAdapter; import com.tom.meeter.infrastructure.components.binder.SubscriberBinder; +import com.tom.meeter.infrastructure.components.binder.SubscriberBinderImpl; import com.tom.meeter.infrastructure.components.viewholder.SubscriberViewHolder; import com.tom.meeter.infrastructure.http.BaseOnNotAuthenticatedCallback; import com.tom.meeter.infrastructure.http.HttpCodes; +import javax.inject.Inject; + import retrofit2.Call; import retrofit2.Response; @@ -29,20 +32,28 @@ public class SubscribersAdapter private static final String TAG = SubscribersAdapter.class.getCanonicalName(); private final UserService service; - private final Runnable onAuthFail; - private final Context ctx; + private final SubscriberBinder binder; + + private Context ctx; + private Runnable onAuthFail; + @Inject public SubscribersAdapter( - UserService service, Runnable onAuthFail, Context ctx, - SubscriberBinder binder) { + UserService service, SubscriberBinderImpl binder) { super(binder); + this.binder = binder; + this.service = service; logMethod(TAG, this); - binder.setup( + } + + public void setupAdapter(Context ctx, Runnable onAuthFail) { + this.ctx = ctx; + this.onAuthFail = onAuthFail; + + this.binder.setup( + ctx, onAuthFail, this::onSubUnSubClick, user -> dispatchToUserActivity(ctx, user.getId())); - this.service = service; - this.onAuthFail = onAuthFail; - this.ctx = ctx; } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java index cbd8469..81fc6bb 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java @@ -43,9 +43,12 @@ public class ActiveEventsFragment extends Fragment { ImageDownloader imageDownloader; @Inject UserService service; + @Inject + EventsAdapter adapter; private SubFragmentActiveEventsBinding binding; - private EventsAdapter adapter; + private final Runnable onAuthFail = + () -> InfrastructureHelper.restartActivityFromFragment(this); public ActiveEventsFragment() { logMethod(TAG, this); @@ -61,12 +64,9 @@ public void onCreate(Bundle savedInstanceState) { EventBus.getDefault().register(this); Context ctx = requireContext(); - adapter = new EventsAdapter( - new EventBinderImpl( - ctx, AuthHelper.getAuthHeader(AccountManager.get(ctx)), - imageDownloader, service, - (e) -> dispatchToEventActivity(ctx, e.getId()), - () -> InfrastructureHelper.restartActivityFromFragment(this))); + adapter.setupBinder( + ctx, onAuthFail, + (e) -> dispatchToEventActivity(ctx, e.getId())); Log.d(TAG, "ActiveEventsFragment Registering eventBus"); } diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java index f18d39f..c18a3c6 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java @@ -3,7 +3,6 @@ import static com.tom.meeter.context.event.activity.EventDispatcherActivity.dispatchToEventActivity; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; -import android.accounts.AccountManager; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; @@ -17,7 +16,6 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.tom.meeter.App; -import com.tom.meeter.context.auth.infrastructure.AuthHelper; import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.profile.adapter.EventsAdapter; import com.tom.meeter.context.profile.factory.ProfileEventsAssistedFactory; @@ -25,7 +23,6 @@ import com.tom.meeter.context.user.service.UserService; import com.tom.meeter.databinding.SubFragmentUserEventsBinding; import com.tom.meeter.infrastructure.common.InfrastructureHelper; -import com.tom.meeter.infrastructure.components.binder.EventBinderImpl; import javax.inject.Inject; @@ -35,8 +32,8 @@ public class ProfileEventsFragment extends Fragment { SubFragmentUserEventsBinding binding; - private EventsAdapter adapter; - + @Inject + EventsAdapter adapter; @Inject ProfileEventsAssistedFactory assistedFactory; @Inject @@ -44,6 +41,8 @@ public class ProfileEventsFragment extends Fragment { @Inject UserService service; + private final Runnable onAuthFail = + () -> InfrastructureHelper.restartActivityFromFragment(this); private ProfileEventsViewModel viewModel; public ProfileEventsFragment() { @@ -59,12 +58,9 @@ public void onCreate(Bundle savedInstanceState) { Context ctx = requireContext(); - adapter = new EventsAdapter( - new EventBinderImpl( - ctx, AuthHelper.getAuthHeader(AccountManager.get(ctx)), - imageDownloader, service, - (e) -> dispatchToEventActivity(ctx, e.getId()), - () -> InfrastructureHelper.restartActivityFromFragment(this))); + adapter.setupBinder( + ctx, onAuthFail, + (e) -> dispatchToEventActivity(ctx, e.getId())); /* btnDelete.setOnClickListener(v -> { if (onDeleteButtonClickListener != null) diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java index cdbfc03..87692bd 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java @@ -44,7 +44,6 @@ import com.tom.meeter.infrastructure.common.ImagesHelper; import com.tom.meeter.infrastructure.common.InfrastructureHelper; import com.tom.meeter.infrastructure.components.adapter.EventsCardAdapter; -import com.tom.meeter.infrastructure.components.binder.SimpleEventBinderImpl; import com.tom.meeter.infrastructure.http.BaseOnNotAuthenticatedCallback; import com.tom.meeter.infrastructure.http.HttpCodes; @@ -69,11 +68,12 @@ public class ProfileFragment extends Fragment { ImageDownloader imageDownloader; @Inject ProfileService profileService; + @Inject + EventsCardAdapter adapter; private final Runnable onAuthFail = () -> InfrastructureHelper.restartActivityFromFragment(this); private AccountManager accountManager; - private EventsCardAdapter adapter; private FragmentProfileBinding binding; private ProfileViewModel viewModel; private boolean isEditableModeEnabled = false; @@ -103,11 +103,9 @@ public void onCreate(Bundle savedInstanceState) { Context ctx = requireContext(); accountManager = AccountManager.get(ctx); - - adapter = new EventsCardAdapter( - new SimpleEventBinderImpl(ctx, imageDownloader, - event -> dispatchToEventActivity(ctx, event.getId()), - onAuthFail)); + adapter.setupBinder( + ctx, onAuthFail, + event -> dispatchToEventActivity(ctx, event.getId())); } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java index dc77abd..530058c 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java @@ -60,13 +60,15 @@ public class UserActivity extends AppCompatActivity { UserAssistedFactory assistedFactory; @Inject ImageDownloader imgDownloader; + @Inject + EventsCardAdapter adapter; private ActivityUserBinding binding; private UserViewModel viewModel; private String userId; private AccountManager accountManager; - private EventsCardAdapter adapter; private Boolean amISubscriber; + private final Runnable onAuthFail = this::recreate; @Override protected void onCreate(Bundle savedInstanceState) { @@ -80,10 +82,9 @@ protected void onCreate(Bundle savedInstanceState) { ((App) getApplication()).getUserComponent().inject(this); - adapter = new EventsCardAdapter( - new SimpleEventBinderImpl( - this, imgDownloader, - event -> dispatchToEventActivity(this, event.getId()), this::recreate)); + adapter.setupBinder( + this, onAuthFail, + event -> dispatchToEventActivity(this, event.getId())); //setToken(accountManager, Launcher.EXPIRED); checkToken(this::onInit, this::finish, accountManager, this, tokenService); @@ -123,7 +124,7 @@ private void onInit(String token) { } if (amISubscriber) { userService.unsubscribe(Globals.getAuthHeader(token), userId).enqueue( - new BaseOnNotAuthenticatedCallback<>(this, this::recreate) { + new BaseOnNotAuthenticatedCallback<>(this, onAuthFail) { @Override public void onResponse(Call call, Response resp) { super.onResponse(call, resp); @@ -136,7 +137,7 @@ public void onResponse(Call call, Response resp) { }); } else { userService.subscribe(Globals.getAuthHeader(token), userId).enqueue( - new BaseOnNotAuthenticatedCallback<>(this, this::recreate) { + new BaseOnNotAuthenticatedCallback<>(this, onAuthFail) { @Override public void onResponse(Call call, Response resp) { super.onResponse(call, resp); @@ -153,7 +154,7 @@ public void onResponse(Call call, Response resp) { viewModel = new ViewModelProvider( this, assistedFactory.factory( - assistedFactory, userId, this, this::recreate)) + assistedFactory, userId, this, onAuthFail)) .get(UserViewModel.class); binding.events.setLayoutManager(new GridLayoutManager(this, 2)); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscribersActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscribersActivity.java index 2e62cfc..cd21e43 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscribersActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscribersActivity.java @@ -38,12 +38,13 @@ public class UserSubscribersActivity extends AppCompatActivity { UserSubscribersAssistedFactory assistedFactory; @Inject ImageDownloader imgDownloader; + @Inject + UsersAdapter adapter; private final Runnable onAuthFail = this::recreate; private AccountManager accountManager; private ActivityProfileSubscribersBinding binding; private UserSubscribersViewModel viewModel; - private UsersAdapter adapter; private String userId; @Override @@ -68,9 +69,7 @@ protected void onCreate(Bundle savedInstanceState) { ((App) getApplication()).getUserComponent().inject(this); accountManager = AccountManager.get(this); - adapter = new UsersAdapter( - this, - new UserBinderImpl(this, imgDownloader, onAuthFail)); + adapter.setupBinder(this, onAuthFail); //setToken(accountManager, Launcher.EXPIRED); checkToken(this::onInit, this::finish, accountManager, this, tokenService); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscriptionsActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscriptionsActivity.java index 4f52e43..aaa955e 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscriptionsActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscriptionsActivity.java @@ -24,7 +24,6 @@ import com.tom.meeter.context.user.factory.UserSubscriptionsAssistedFactory; import com.tom.meeter.context.user.viewmodel.UserSubscriptionsViewModel; import com.tom.meeter.databinding.ActivityProfileSubscriptionsBinding; -import com.tom.meeter.infrastructure.components.binder.UserBinderImpl; import javax.inject.Inject; @@ -38,10 +37,12 @@ public class UserSubscriptionsActivity extends AppCompatActivity { UserSubscriptionsAssistedFactory assistedFactory; @Inject ImageDownloader imgDownloader; + @Inject + UsersAdapter adapter; + private final Runnable onAuthFail = this::recreate; private ActivityProfileSubscriptionsBinding binding; private UserSubscriptionsViewModel viewModel; - private UsersAdapter adapter; private AccountManager accountManager; private String userId; @@ -67,9 +68,7 @@ protected void onCreate(Bundle savedInstanceState) { ((App) getApplication()).getUserComponent().inject(this); accountManager = AccountManager.get(this); - adapter = new UsersAdapter( - this, - new UserBinderImpl(this, imgDownloader, this::recreate)); + adapter.setupBinder(this, onAuthFail); //setToken(accountManager, Launcher.EXPIRED); checkToken(this::onInit, this::finish, accountManager, this, tokenService); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/adapter/UsersAdapter.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/adapter/UsersAdapter.java index 1571901..e4bb48d 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/adapter/UsersAdapter.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/adapter/UsersAdapter.java @@ -13,16 +13,28 @@ import com.tom.meeter.databinding.ActivityUserSubscriberItemBinding; import com.tom.meeter.infrastructure.components.adapter.BaseAdapter; import com.tom.meeter.infrastructure.components.binder.UserBinder; +import com.tom.meeter.infrastructure.components.binder.UserBinderImpl; import com.tom.meeter.infrastructure.components.viewholder.UserViewHolder; +import javax.inject.Inject; + public class UsersAdapter extends BaseAdapter { private static final String TAG = UsersAdapter.class.getCanonicalName(); - public UsersAdapter(Context ctx, UserBinder binder) { + private final UserBinder binder; + + @Inject + public UsersAdapter(UserBinderImpl binder) { super(binder); + this.binder = binder; logMethod(TAG, this); - binder.setup(user -> dispatchToUserActivity(ctx, user.getId())); + } + + public void setupBinder(Context ctx, Runnable onAuthFail) { + binder.setup( + ctx, onAuthFail, + user -> dispatchToUserActivity(ctx, user.getId())); } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/EventImageDownloader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/EventImageDownloader.java index 73d522b..e479089 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/EventImageDownloader.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/EventImageDownloader.java @@ -1,6 +1,5 @@ package com.tom.meeter.infrastructure.components; -import android.content.Context; import android.graphics.Bitmap; import com.tom.meeter.context.image.ImageDownloader; @@ -8,11 +7,13 @@ import java.util.function.Consumer; +import javax.inject.Inject; + public class EventImageDownloader extends PhotoWithCacheDownloader { - public EventImageDownloader( - Context ctx, ImageDownloader imgDownloader, Runnable onAuthFail) { - super(ctx, imgDownloader, onAuthFail); + @Inject + public EventImageDownloader(ImageDownloader imgDownloader) { + super(imgDownloader); } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/PhotoWithCacheDownloader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/PhotoWithCacheDownloader.java index b58db77..09e7519 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/PhotoWithCacheDownloader.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/PhotoWithCacheDownloader.java @@ -14,22 +14,26 @@ public abstract class PhotoWithCacheDownloader { private static final String TAG = PhotoWithCacheDownloader.class.getCanonicalName(); - protected final Context ctx; - protected final ImageDownloader imgDownloader; - protected final Runnable onAuthFail; + protected ImageDownloader imgDownloader; + + protected Context ctx; + protected Runnable onAuthFail; + protected final Map cache = new ConcurrentHashMap<>(); - public Bitmap getCachedPhoto(String photoPath) { - return cache.get(photoPath); + protected PhotoWithCacheDownloader(ImageDownloader imgDownloader) { + this.imgDownloader = imgDownloader; } - protected PhotoWithCacheDownloader( - Context ctx, ImageDownloader imgDownloader, Runnable onAuthFail) { + public void setup(Context ctx, Runnable onAuthFail) { this.ctx = ctx; - this.imgDownloader = imgDownloader; this.onAuthFail = onAuthFail; } + public Bitmap getCachedPhoto(String photoPath) { + return cache.get(photoPath); + } + public void loadPhoto(String photoPath, Consumer onImageReady) { Bitmap cached = cache.get(photoPath); if (cached != null) { diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserImageDownloader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserImageDownloader.java index cabc6a3..8c81e5a 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserImageDownloader.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserImageDownloader.java @@ -1,6 +1,5 @@ package com.tom.meeter.infrastructure.components; -import android.content.Context; import android.graphics.Bitmap; import com.tom.meeter.context.image.ImageDownloader; @@ -8,11 +7,13 @@ import java.util.function.Consumer; +import javax.inject.Inject; + public class UserImageDownloader extends PhotoWithCacheDownloader { - public UserImageDownloader( - Context ctx, ImageDownloader imgDownloader, Runnable onAuthFail) { - super(ctx, imgDownloader, onAuthFail); + @Inject + public UserImageDownloader(ImageDownloader imgDownloader) { + super(imgDownloader); } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserWithCacheDownloader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserWithCacheDownloader.java index 2deb1a2..df2aa48 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserWithCacheDownloader.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserWithCacheDownloader.java @@ -11,6 +11,8 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; +import javax.inject.Inject; + import retrofit2.Call; import retrofit2.Response; @@ -18,21 +20,33 @@ public class UserWithCacheDownloader { private static final String TAG = PhotoWithCacheDownloader.class.getCanonicalName(); - private final Context ctx; private final UserService service; - private final Runnable onAuthFail; + + private Context ctx; + private Runnable onAuthFail; + protected final Map cache = new ConcurrentHashMap<>(); + @Inject + public UserWithCacheDownloader(UserService service) { + this.service = service; + } + + public void setup(Context ctx, Runnable onAuthFail) { + this.ctx = ctx; + this.onAuthFail = onAuthFail; + } + public UserDTO getUserCache(String userId) { return cache.get(userId); } - public UserWithCacheDownloader( +/* public UserWithCacheDownloader( Context ctx, UserService service, Runnable onAuthFail) { this.ctx = ctx; this.service = service; this.onAuthFail = onAuthFail; - } + }*/ public void loadUser( String auth, String userId, Consumer onUserReady) { diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/EventsCardAdapter.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/EventsCardAdapter.java index 9190f10..6acc8d5 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/EventsCardAdapter.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/EventsCardAdapter.java @@ -1,5 +1,6 @@ package com.tom.meeter.infrastructure.components.adapter; +import android.content.Context; import android.view.LayoutInflater; import android.view.ViewGroup; @@ -7,14 +8,27 @@ import com.tom.meeter.databinding.CardItemBinding; import com.tom.meeter.infrastructure.components.binder.EventBinder; +import com.tom.meeter.infrastructure.components.binder.SimpleEventBinderImpl; import com.tom.meeter.infrastructure.components.viewholder.CardItemHolder; +import javax.inject.Inject; + public class EventsCardAdapter extends BaseEventAdapter { private static final String TAG = EventsCardAdapter.class.getCanonicalName(); - public EventsCardAdapter(EventBinder binder) { + private final EventBinder binder; + + @Inject + public EventsCardAdapter(SimpleEventBinderImpl binder) { super(binder); + this.binder = binder; + } + + public void setupBinder( + Context ctx, Runnable onAuthFail, + OnEventClickListener listener) { + binder.setup(ctx, onAuthFail, listener); } @NonNull diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinder.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinder.java index 6dcef1a..d52accf 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinder.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinder.java @@ -1,10 +1,14 @@ package com.tom.meeter.infrastructure.components.binder; +import android.content.Context; + import androidx.recyclerview.widget.RecyclerView; import com.tom.meeter.context.network.dto.EventDTO; +import com.tom.meeter.infrastructure.components.adapter.OnEventClickListener; public interface EventBinder extends BaseViewHolderBinder { void bind(T holder, EventDTO event); + void setup(Context ctx, Runnable onAuthFail, OnEventClickListener listener); } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java index bdd45cf..9205238 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java @@ -2,40 +2,46 @@ import static com.tom.meeter.infrastructure.common.CommonHelper.handleEventStatus; +import android.accounts.AccountManager; import android.content.Context; import android.graphics.Bitmap; import android.util.Log; -import com.tom.meeter.context.image.ImageDownloader; +import com.tom.meeter.context.auth.infrastructure.AuthHelper; import com.tom.meeter.context.network.dto.EventDTO; import com.tom.meeter.context.network.dto.UserDTO; -import com.tom.meeter.context.user.service.UserService; import com.tom.meeter.infrastructure.components.EventImageDownloader; import com.tom.meeter.infrastructure.components.UserWithCacheDownloader; import com.tom.meeter.infrastructure.components.adapter.OnEventClickListener; import com.tom.meeter.infrastructure.components.viewholder.EventViewHolder; +import javax.inject.Inject; + public class EventBinderImpl implements EventBinder { private static final String TAG = EventBinderImpl.class.getCanonicalName(); - private final Context ctx; - private final String auth; private final EventImageDownloader eventImageDownloader; private final UserWithCacheDownloader userDownloader; - private final OnEventClickListener listener; + private Context ctx; + private OnEventClickListener listener; + + @Inject public EventBinderImpl( - Context ctx, String auth, ImageDownloader imgDownloader, - UserService service, OnEventClickListener listener, - Runnable onAuthFail) { + EventImageDownloader eventImageDownloader, UserWithCacheDownloader userDownloader) { + this.eventImageDownloader = eventImageDownloader; + this.userDownloader = userDownloader; + } + + @Override + public void setup( + Context ctx, Runnable onAuthFail, + OnEventClickListener listener) { this.ctx = ctx; - this.auth = auth; this.listener = listener; - this.eventImageDownloader = new EventImageDownloader( - ctx, imgDownloader, onAuthFail); - this.userDownloader = new UserWithCacheDownloader( - ctx, service, onAuthFail); + eventImageDownloader.setup(this.ctx, onAuthFail); + userDownloader.setup(this.ctx, onAuthFail); } @Override @@ -57,7 +63,8 @@ cachedPhoto, getCreator(userCache), if (userCache == null) { userDownloader.loadUser( - auth, event.getCreatorId(), + AuthHelper.getAuthHeader(AccountManager.get(ctx)), + event.getCreatorId(), u -> { Log.d(TAG, "Downloaded user by id " + event.getCreatorId() + " is " + u); holder.updateCreator(getCreator(u)); diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SimpleEventBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SimpleEventBinderImpl.java index 310af3d..373ee4b 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SimpleEventBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SimpleEventBinderImpl.java @@ -8,22 +8,30 @@ import com.tom.meeter.infrastructure.components.adapter.OnEventClickListener; import com.tom.meeter.infrastructure.components.viewholder.CardItemHolder; +import javax.inject.Inject; + public class SimpleEventBinderImpl implements EventBinder { private static final String TAG = SimpleEventBinderImpl.class.getCanonicalName(); - private final Context ctx; private final ImageDownloader imageDownloader; - private final OnEventClickListener listener; - private final Runnable onAuthFail; - public SimpleEventBinderImpl( - Context ctx, ImageDownloader imageDownloader, - OnEventClickListener listener, Runnable onAuthFail) { - this.ctx = ctx; + private Context ctx; + private OnEventClickListener listener; + private Runnable onAuthFail; + + @Inject + public SimpleEventBinderImpl(ImageDownloader imageDownloader) { this.imageDownloader = imageDownloader; - this.listener = listener; + } + + @Override + public void setup( + Context ctx, Runnable onAuthFail, + OnEventClickListener listener) { + this.ctx = ctx; this.onAuthFail = onAuthFail; + this.listener = listener; } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinder.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinder.java index eec7566..b26c069 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinder.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinder.java @@ -1,5 +1,7 @@ package com.tom.meeter.infrastructure.components.binder; +import android.content.Context; + import androidx.recyclerview.widget.RecyclerView; import com.tom.meeter.infrastructure.components.adapter.OnSubscribeUnsubscribeClickListener; @@ -8,6 +10,7 @@ public interface SubscriberBinder extends BaseSubscriberBinder { void setup( + Context ctx, Runnable onAuthFail, OnSubscribeUnsubscribeClickListener subUnSubClickListener, OnUserClickListener userClickListener); } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java index 8da4dff..2ea70a9 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java @@ -3,7 +3,6 @@ import android.content.Context; import android.graphics.Bitmap; -import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.network.dto.UserDTO; import com.tom.meeter.context.profile.subscriber.Subscriber; import com.tom.meeter.infrastructure.components.UserImageDownloader; @@ -11,24 +10,29 @@ import com.tom.meeter.infrastructure.components.adapter.OnUserClickListener; import com.tom.meeter.infrastructure.components.viewholder.SubscriberViewHolder; +import javax.inject.Inject; + public class SubscriberBinderImpl implements SubscriberBinder { private final UserImageDownloader userImageDownloader; - private OnUserClickListener userClickListener; + private OnSubscribeUnsubscribeClickListener subUnSubClickListener; + private OnUserClickListener userClickListener; + @Inject public SubscriberBinderImpl( - Context ctx, ImageDownloader imgDownloader, Runnable onAuthFail) { - this.userImageDownloader = new UserImageDownloader( - ctx, imgDownloader, onAuthFail); + UserImageDownloader userImageDownloader) { + this.userImageDownloader = userImageDownloader; } @Override public void setup( + Context ctx, Runnable onAuthFail, OnSubscribeUnsubscribeClickListener subUnSubClickListener, OnUserClickListener userClickListener) { this.subUnSubClickListener = subUnSubClickListener; this.userClickListener = userClickListener; + userImageDownloader.setup(ctx, onAuthFail); } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinder.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinder.java index 402ad6e..b246dc3 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinder.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinder.java @@ -1,10 +1,12 @@ package com.tom.meeter.infrastructure.components.binder; +import android.content.Context; + import androidx.recyclerview.widget.RecyclerView; import com.tom.meeter.infrastructure.components.adapter.OnUserClickListener; public interface UserBinder extends BaseUserBinder { - void setup(OnUserClickListener userClickListener); + void setup(Context ctx, Runnable onAuthFail, OnUserClickListener listener); } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinderImpl.java index 56e9c05..5e67f7d 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinderImpl.java @@ -3,20 +3,31 @@ import android.content.Context; import android.graphics.Bitmap; -import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.network.dto.UserDTO; import com.tom.meeter.infrastructure.components.UserImageDownloader; import com.tom.meeter.infrastructure.components.adapter.OnUserClickListener; import com.tom.meeter.infrastructure.components.viewholder.UserViewHolder; +import javax.inject.Inject; + public class UserBinderImpl implements UserBinder { - private UserImageDownloader userImageDownloader; - private OnUserClickListener userClickListener; + private final UserImageDownloader userImageDownloader; + + private OnUserClickListener listener; + @Inject public UserBinderImpl( - Context ctx, ImageDownloader imgDownloader, Runnable onAuthFail) { - this.userImageDownloader = new UserImageDownloader(ctx, imgDownloader, onAuthFail); + UserImageDownloader userImageDownloader) { + this.userImageDownloader = userImageDownloader; + } + + @Override + public void setup( + Context ctx, Runnable onAuthFail, + OnUserClickListener listener) { + this.listener = listener; + userImageDownloader.setup(ctx, onAuthFail); } @Override @@ -28,15 +39,10 @@ public void bind(UserViewHolder holder, UserDTO user) { holder.bind( user.getName(), user.getSurname(), cached, - v -> userClickListener.onClick(user)); + v -> listener.onClick(user)); if (photoPath != null && cached == null) { userImageDownloader.loadPhoto(photoPath, holder::updatePhoto); } } - - @Override - public void setup(OnUserClickListener userClickListener) { - this.userClickListener = userClickListener; - } } From dc0c08491698a4883ce0b5e6c478f1dc4e052748 Mon Sep 17 00:00:00 2001 From: Georgy Lebedik Date: Tue, 1 Jul 2025 15:21:58 +0300 Subject: [PATCH 07/16] Associate internal components with dagger. --- .../profile/activity/SubscribersActivity.java | 2 +- .../activity/SubscriptionsActivity.java | 2 +- .../profile/adapter/EventsAdapter.java | 6 +++-- .../profile/adapter/SubscribersAdapter.java | 10 +++---- .../fragment/ActiveEventsFragment.java | 13 +++------ .../fragment/ProfileEventsFragment.java | 2 +- .../profile/fragment/ProfileFragment.java | 2 +- .../context/user/activity/UserActivity.java | 3 +-- .../activity/UserSubscribersActivity.java | 5 ++-- .../activity/UserSubscriptionsActivity.java | 4 +-- .../{ => components}/adapter/GridAdapter.java | 2 +- .../adapter/GridViewAdapter.java | 2 +- .../adapter/UsersAdapter.java | 14 +++++----- .../components/binder/BaseUserBinder.java | 3 ++- .../user/components/binder/UserBinder.java | 13 +++++++++ .../components/binder/UserBinderImpl.java | 19 ++++++++----- .../infrastructure/components/SetContext.java | 7 +++++ .../components/SetOnAuthFailAction.java | 5 ++++ .../components/adapter/EventsCardAdapter.java | 6 +++-- .../components/binder/EventBinder.java | 10 ++++--- .../components/binder/EventBinderImpl.java | 24 +++++++++++------ .../binder/SimpleEventBinderImpl.java | 14 +++++++--- .../components/binder/SubscriberBinder.java | 16 ++++++----- .../binder/SubscriberBinderImpl.java | 27 ++++++++++++++----- .../components/binder/UserBinder.java | 12 --------- .../EventImageDownloader.java | 2 +- .../PhotoWithCacheDownloader.java | 14 +++++++--- .../{ => downloader}/UserImageDownloader.java | 2 +- .../UserWithCacheDownloader.java | 2 +- 29 files changed, 150 insertions(+), 93 deletions(-) rename AndroidClient/src/main/java/com/tom/meeter/context/user/{ => components}/adapter/GridAdapter.java (96%) rename AndroidClient/src/main/java/com/tom/meeter/context/user/{ => components}/adapter/GridViewAdapter.java (97%) rename AndroidClient/src/main/java/com/tom/meeter/context/user/{ => components}/adapter/UsersAdapter.java (79%) rename AndroidClient/src/main/java/com/tom/meeter/{infrastructure => context/user}/components/binder/BaseUserBinder.java (66%) create mode 100644 AndroidClient/src/main/java/com/tom/meeter/context/user/components/binder/UserBinder.java rename AndroidClient/src/main/java/com/tom/meeter/{infrastructure => context/user}/components/binder/UserBinderImpl.java (72%) create mode 100644 AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/SetContext.java create mode 100644 AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/SetOnAuthFailAction.java delete mode 100644 AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinder.java rename AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/{ => downloader}/EventImageDownloader.java (91%) rename AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/{ => downloader}/PhotoWithCacheDownloader.java (77%) rename AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/{ => downloader}/UserImageDownloader.java (91%) rename AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/{ => downloader}/UserWithCacheDownloader.java (97%) diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java index ce54fb6..9a56405 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java @@ -63,7 +63,7 @@ private void onInit(String token) { View view = binding.getRoot(); setContentView(view); - adapter.setupAdapter(this, onAuthFail); + adapter.initialize(this, onAuthFail); binding.recyclerSubscribers.setLayoutManager(new LinearLayoutManager(this)); binding.recyclerSubscribers.setAdapter(adapter); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java index 5587dbc..a4db4a2 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java @@ -63,7 +63,7 @@ private void onInit() { View view = binding.getRoot(); setContentView(view); - adapter.setupAdapter(this, onAuthFail); + adapter.initialize(this, onAuthFail); binding.recyclerSubscriptions.setLayoutManager(new LinearLayoutManager(this)); binding.recyclerSubscriptions.setAdapter(adapter); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/EventsAdapter.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/EventsAdapter.java index 19ee2c2..e2a5ab5 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/EventsAdapter.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/EventsAdapter.java @@ -33,10 +33,12 @@ public EventsAdapter(EventBinderImpl binder) { logMethod(TAG, this); } - public void setupBinder( + public void initialize( Context ctx, Runnable onAuthFail, OnEventClickListener listener) { - binder.setup(ctx, onAuthFail, listener); + binder.setContext(ctx); + binder.setOnAuthFailAction(onAuthFail); + binder.setupOnEventClickListener(listener); } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/SubscribersAdapter.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/SubscribersAdapter.java index 8e69a9f..8dc9f7a 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/SubscribersAdapter.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/SubscribersAdapter.java @@ -46,14 +46,14 @@ public SubscribersAdapter( logMethod(TAG, this); } - public void setupAdapter(Context ctx, Runnable onAuthFail) { + public void initialize(Context ctx, Runnable onAuthFail) { this.ctx = ctx; this.onAuthFail = onAuthFail; - this.binder.setup( - ctx, onAuthFail, - this::onSubUnSubClick, - user -> dispatchToUserActivity(ctx, user.getId())); + binder.setContext(ctx); + binder.setOnAuthFailAction(onAuthFail); + binder.setOnSubscribeUnsubscribeClickListener(this::onSubUnSubClick); + binder.setOnUserClickListener(user -> dispatchToUserActivity(ctx, user.getId())); } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java index 81fc6bb..79a736d 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java @@ -3,10 +3,8 @@ import static com.tom.meeter.context.event.activity.EventDispatcherActivity.dispatchToEventActivity; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; -import android.accounts.AccountManager; import android.content.Context; import android.os.Bundle; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -17,13 +15,11 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.tom.meeter.App; -import com.tom.meeter.context.auth.infrastructure.AuthHelper; import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.profile.adapter.EventsAdapter; import com.tom.meeter.context.user.service.UserService; import com.tom.meeter.databinding.SubFragmentActiveEventsBinding; import com.tom.meeter.infrastructure.common.InfrastructureHelper; -import com.tom.meeter.infrastructure.components.binder.EventBinderImpl; import com.tom.meeter.infrastructure.eventbus.events.IncomeEvents; import org.greenrobot.eventbus.EventBus; @@ -57,18 +53,16 @@ public ActiveEventsFragment() { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - logMethod(TAG, this); + logMethod(TAG, this, "Registering eventBus"); ((App) getActivity().getApplication()).getComponent().inject(this); EventBus.getDefault().register(this); Context ctx = requireContext(); - adapter.setupBinder( + adapter.initialize( ctx, onAuthFail, (e) -> dispatchToEventActivity(ctx, e.getId())); - - Log.d(TAG, "ActiveEventsFragment Registering eventBus"); } @Override @@ -99,8 +93,7 @@ public void onMessageEvent(IncomeEvents eventsSearch) { @Override public void onDestroy() { super.onDestroy(); - logMethod(TAG, this); EventBus.getDefault().unregister(this); - Log.d(TAG, "ActiveEventsFragment Unregistered event bus"); + logMethod(TAG, this, "Unregistered event bus"); } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java index c18a3c6..fabc481 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java @@ -58,7 +58,7 @@ public void onCreate(Bundle savedInstanceState) { Context ctx = requireContext(); - adapter.setupBinder( + adapter.initialize( ctx, onAuthFail, (e) -> dispatchToEventActivity(ctx, e.getId())); /* diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java index 87692bd..34e5540 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java @@ -103,7 +103,7 @@ public void onCreate(Bundle savedInstanceState) { Context ctx = requireContext(); accountManager = AccountManager.get(ctx); - adapter.setupBinder( + adapter.initialize( ctx, onAuthFail, event -> dispatchToEventActivity(ctx, event.getId())); } diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java index 530058c..b994a40 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java @@ -36,7 +36,6 @@ import com.tom.meeter.databinding.ActivityUserBinding; import com.tom.meeter.infrastructure.common.Globals; import com.tom.meeter.infrastructure.components.adapter.EventsCardAdapter; -import com.tom.meeter.infrastructure.components.binder.SimpleEventBinderImpl; import com.tom.meeter.infrastructure.http.BaseOnNotAuthenticatedCallback; import com.tom.meeter.infrastructure.http.HttpCodes; @@ -82,7 +81,7 @@ protected void onCreate(Bundle savedInstanceState) { ((App) getApplication()).getUserComponent().inject(this); - adapter.setupBinder( + adapter.initialize( this, onAuthFail, event -> dispatchToEventActivity(this, event.getId())); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscribersActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscribersActivity.java index cd21e43..53e5a25 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscribersActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscribersActivity.java @@ -20,11 +20,10 @@ import com.tom.meeter.App; import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.token.service.TokenService; -import com.tom.meeter.context.user.adapter.UsersAdapter; +import com.tom.meeter.context.user.components.adapter.UsersAdapter; import com.tom.meeter.context.user.factory.UserSubscribersAssistedFactory; import com.tom.meeter.context.user.viewmodel.UserSubscribersViewModel; import com.tom.meeter.databinding.ActivityProfileSubscribersBinding; -import com.tom.meeter.infrastructure.components.binder.UserBinderImpl; import javax.inject.Inject; @@ -69,7 +68,7 @@ protected void onCreate(Bundle savedInstanceState) { ((App) getApplication()).getUserComponent().inject(this); accountManager = AccountManager.get(this); - adapter.setupBinder(this, onAuthFail); + adapter.initialize(this, onAuthFail); //setToken(accountManager, Launcher.EXPIRED); checkToken(this::onInit, this::finish, accountManager, this, tokenService); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscriptionsActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscriptionsActivity.java index aaa955e..5fc8ccf 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscriptionsActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscriptionsActivity.java @@ -20,7 +20,7 @@ import com.tom.meeter.App; import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.token.service.TokenService; -import com.tom.meeter.context.user.adapter.UsersAdapter; +import com.tom.meeter.context.user.components.adapter.UsersAdapter; import com.tom.meeter.context.user.factory.UserSubscriptionsAssistedFactory; import com.tom.meeter.context.user.viewmodel.UserSubscriptionsViewModel; import com.tom.meeter.databinding.ActivityProfileSubscriptionsBinding; @@ -68,7 +68,7 @@ protected void onCreate(Bundle savedInstanceState) { ((App) getApplication()).getUserComponent().inject(this); accountManager = AccountManager.get(this); - adapter.setupBinder(this, onAuthFail); + adapter.initialize(this, onAuthFail); //setToken(accountManager, Launcher.EXPIRED); checkToken(this::onInit, this::finish, accountManager, this, tokenService); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/adapter/GridAdapter.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/components/adapter/GridAdapter.java similarity index 96% rename from AndroidClient/src/main/java/com/tom/meeter/context/user/adapter/GridAdapter.java rename to AndroidClient/src/main/java/com/tom/meeter/context/user/components/adapter/GridAdapter.java index 105a2fe..cb59a38 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/adapter/GridAdapter.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/components/adapter/GridAdapter.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.user.adapter; +package com.tom.meeter.context.user.components.adapter; import android.content.Context; import android.view.View; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/adapter/GridViewAdapter.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/components/adapter/GridViewAdapter.java similarity index 97% rename from AndroidClient/src/main/java/com/tom/meeter/context/user/adapter/GridViewAdapter.java rename to AndroidClient/src/main/java/com/tom/meeter/context/user/components/adapter/GridViewAdapter.java index 657f567..13dbd39 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/adapter/GridViewAdapter.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/components/adapter/GridViewAdapter.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.user.adapter; +package com.tom.meeter.context.user.components.adapter; import static com.tom.meeter.infrastructure.common.ImagesHelper.circleImage; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/adapter/UsersAdapter.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/components/adapter/UsersAdapter.java similarity index 79% rename from AndroidClient/src/main/java/com/tom/meeter/context/user/adapter/UsersAdapter.java rename to AndroidClient/src/main/java/com/tom/meeter/context/user/components/adapter/UsersAdapter.java index e4bb48d..d7d9755 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/adapter/UsersAdapter.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/components/adapter/UsersAdapter.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.user.adapter; +package com.tom.meeter.context.user.components.adapter; import static com.tom.meeter.context.user.activity.UserActivity.dispatchToUserActivity; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; @@ -10,10 +10,10 @@ import androidx.recyclerview.widget.RecyclerView; import com.tom.meeter.context.network.dto.UserDTO; +import com.tom.meeter.context.user.components.binder.UserBinder; +import com.tom.meeter.context.user.components.binder.UserBinderImpl; import com.tom.meeter.databinding.ActivityUserSubscriberItemBinding; import com.tom.meeter.infrastructure.components.adapter.BaseAdapter; -import com.tom.meeter.infrastructure.components.binder.UserBinder; -import com.tom.meeter.infrastructure.components.binder.UserBinderImpl; import com.tom.meeter.infrastructure.components.viewholder.UserViewHolder; import javax.inject.Inject; @@ -31,10 +31,12 @@ public UsersAdapter(UserBinderImpl binder) { logMethod(TAG, this); } - public void setupBinder(Context ctx, Runnable onAuthFail) { - binder.setup( - ctx, onAuthFail, + public void initialize( + Context ctx, Runnable onAuthFail) { + binder.setContext(ctx); + binder.setOnUserClickListener( user -> dispatchToUserActivity(ctx, user.getId())); + binder.setOnAuthFailAction(onAuthFail); } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/BaseUserBinder.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/components/binder/BaseUserBinder.java similarity index 66% rename from AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/BaseUserBinder.java rename to AndroidClient/src/main/java/com/tom/meeter/context/user/components/binder/BaseUserBinder.java index f0d7e12..eee1544 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/BaseUserBinder.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/components/binder/BaseUserBinder.java @@ -1,8 +1,9 @@ -package com.tom.meeter.infrastructure.components.binder; +package com.tom.meeter.context.user.components.binder; import androidx.recyclerview.widget.RecyclerView; import com.tom.meeter.context.network.dto.UserDTO; +import com.tom.meeter.infrastructure.components.binder.BaseViewHolderBinder; public interface BaseUserBinder extends BaseViewHolderBinder { diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/components/binder/UserBinder.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/components/binder/UserBinder.java new file mode 100644 index 0000000..1c986f9 --- /dev/null +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/components/binder/UserBinder.java @@ -0,0 +1,13 @@ +package com.tom.meeter.context.user.components.binder; + +import androidx.recyclerview.widget.RecyclerView; + +import com.tom.meeter.infrastructure.components.SetContext; +import com.tom.meeter.infrastructure.components.SetOnAuthFailAction; +import com.tom.meeter.infrastructure.components.adapter.OnUserClickListener; + +public interface UserBinder + extends SetContext, SetOnAuthFailAction, + BaseUserBinder { + void setOnUserClickListener(OnUserClickListener listener); +} diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/components/binder/UserBinderImpl.java similarity index 72% rename from AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinderImpl.java rename to AndroidClient/src/main/java/com/tom/meeter/context/user/components/binder/UserBinderImpl.java index 5e67f7d..9ad8d48 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/components/binder/UserBinderImpl.java @@ -1,11 +1,11 @@ -package com.tom.meeter.infrastructure.components.binder; +package com.tom.meeter.context.user.components.binder; import android.content.Context; import android.graphics.Bitmap; import com.tom.meeter.context.network.dto.UserDTO; -import com.tom.meeter.infrastructure.components.UserImageDownloader; import com.tom.meeter.infrastructure.components.adapter.OnUserClickListener; +import com.tom.meeter.infrastructure.components.downloader.UserImageDownloader; import com.tom.meeter.infrastructure.components.viewholder.UserViewHolder; import javax.inject.Inject; @@ -23,11 +23,18 @@ public UserBinderImpl( } @Override - public void setup( - Context ctx, Runnable onAuthFail, - OnUserClickListener listener) { + public void setOnUserClickListener(OnUserClickListener listener) { this.listener = listener; - userImageDownloader.setup(ctx, onAuthFail); + } + + @Override + public void setContext(Context ctx) { + userImageDownloader.setContext(ctx); + } + + @Override + public void setOnAuthFailAction(Runnable onAuthFail) { + userImageDownloader.setOnAuthFailAction(onAuthFail); } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/SetContext.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/SetContext.java new file mode 100644 index 0000000..82b245e --- /dev/null +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/SetContext.java @@ -0,0 +1,7 @@ +package com.tom.meeter.infrastructure.components; + +import android.content.Context; + +public interface SetContext { + void setContext(Context ctx); +} diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/SetOnAuthFailAction.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/SetOnAuthFailAction.java new file mode 100644 index 0000000..f284d38 --- /dev/null +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/SetOnAuthFailAction.java @@ -0,0 +1,5 @@ +package com.tom.meeter.infrastructure.components; + +public interface SetOnAuthFailAction { + void setOnAuthFailAction(Runnable onAuthFail); +} diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/EventsCardAdapter.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/EventsCardAdapter.java index 6acc8d5..d16d3d3 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/EventsCardAdapter.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/EventsCardAdapter.java @@ -25,10 +25,12 @@ public EventsCardAdapter(SimpleEventBinderImpl binder) { this.binder = binder; } - public void setupBinder( + public void initialize( Context ctx, Runnable onAuthFail, OnEventClickListener listener) { - binder.setup(ctx, onAuthFail, listener); + binder.setContext(ctx); + binder.setOnAuthFailAction(onAuthFail); + binder.setupOnEventClickListener(listener); } @NonNull diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinder.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinder.java index d52accf..bacf586 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinder.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinder.java @@ -1,14 +1,16 @@ package com.tom.meeter.infrastructure.components.binder; -import android.content.Context; - import androidx.recyclerview.widget.RecyclerView; import com.tom.meeter.context.network.dto.EventDTO; +import com.tom.meeter.infrastructure.components.SetContext; +import com.tom.meeter.infrastructure.components.SetOnAuthFailAction; import com.tom.meeter.infrastructure.components.adapter.OnEventClickListener; public interface EventBinder - extends BaseViewHolderBinder { + extends SetContext, SetOnAuthFailAction, + BaseViewHolderBinder { void bind(T holder, EventDTO event); - void setup(Context ctx, Runnable onAuthFail, OnEventClickListener listener); + + void setupOnEventClickListener(OnEventClickListener listener); } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java index 9205238..7ba205b 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java @@ -10,9 +10,9 @@ import com.tom.meeter.context.auth.infrastructure.AuthHelper; import com.tom.meeter.context.network.dto.EventDTO; import com.tom.meeter.context.network.dto.UserDTO; -import com.tom.meeter.infrastructure.components.EventImageDownloader; -import com.tom.meeter.infrastructure.components.UserWithCacheDownloader; import com.tom.meeter.infrastructure.components.adapter.OnEventClickListener; +import com.tom.meeter.infrastructure.components.downloader.EventImageDownloader; +import com.tom.meeter.infrastructure.components.downloader.UserWithCacheDownloader; import com.tom.meeter.infrastructure.components.viewholder.EventViewHolder; import javax.inject.Inject; @@ -29,19 +29,27 @@ public class EventBinderImpl implements EventBinder { @Inject public EventBinderImpl( - EventImageDownloader eventImageDownloader, UserWithCacheDownloader userDownloader) { + EventImageDownloader eventImageDownloader, + UserWithCacheDownloader userDownloader) { this.eventImageDownloader = eventImageDownloader; this.userDownloader = userDownloader; } @Override - public void setup( - Context ctx, Runnable onAuthFail, + public void setupOnEventClickListener( OnEventClickListener listener) { - this.ctx = ctx; this.listener = listener; - eventImageDownloader.setup(this.ctx, onAuthFail); - userDownloader.setup(this.ctx, onAuthFail); + } + + @Override + public void setContext(Context ctx) { + this.ctx = ctx; + eventImageDownloader.setContext(ctx); + } + + @Override + public void setOnAuthFailAction(Runnable onAuthFail) { + eventImageDownloader.setOnAuthFailAction(onAuthFail); } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SimpleEventBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SimpleEventBinderImpl.java index 373ee4b..2bdc64d 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SimpleEventBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SimpleEventBinderImpl.java @@ -26,12 +26,18 @@ public SimpleEventBinderImpl(ImageDownloader imageDownloader) { } @Override - public void setup( - Context ctx, Runnable onAuthFail, - OnEventClickListener listener) { + public void setupOnEventClickListener(OnEventClickListener listener) { + this.listener = listener; + } + + @Override + public void setContext(Context ctx) { this.ctx = ctx; + } + + @Override + public void setOnAuthFailAction(Runnable onAuthFail) { this.onAuthFail = onAuthFail; - this.listener = listener; } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinder.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinder.java index b26c069..07a80f8 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinder.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinder.java @@ -1,16 +1,18 @@ package com.tom.meeter.infrastructure.components.binder; -import android.content.Context; - import androidx.recyclerview.widget.RecyclerView; +import com.tom.meeter.infrastructure.components.SetContext; +import com.tom.meeter.infrastructure.components.SetOnAuthFailAction; import com.tom.meeter.infrastructure.components.adapter.OnSubscribeUnsubscribeClickListener; import com.tom.meeter.infrastructure.components.adapter.OnUserClickListener; public interface SubscriberBinder - extends BaseSubscriberBinder { - void setup( - Context ctx, Runnable onAuthFail, - OnSubscribeUnsubscribeClickListener subUnSubClickListener, - OnUserClickListener userClickListener); + extends SetContext, SetOnAuthFailAction, + BaseSubscriberBinder { + + void setOnSubscribeUnsubscribeClickListener( + OnSubscribeUnsubscribeClickListener subUnSubClickListener); + + void setOnUserClickListener(OnUserClickListener userClickListener); } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java index 2ea70a9..bd5a540 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java @@ -5,14 +5,15 @@ import com.tom.meeter.context.network.dto.UserDTO; import com.tom.meeter.context.profile.subscriber.Subscriber; -import com.tom.meeter.infrastructure.components.UserImageDownloader; import com.tom.meeter.infrastructure.components.adapter.OnSubscribeUnsubscribeClickListener; import com.tom.meeter.infrastructure.components.adapter.OnUserClickListener; +import com.tom.meeter.infrastructure.components.downloader.UserImageDownloader; import com.tom.meeter.infrastructure.components.viewholder.SubscriberViewHolder; import javax.inject.Inject; -public class SubscriberBinderImpl implements SubscriberBinder { +public class SubscriberBinderImpl + implements SubscriberBinder { private final UserImageDownloader userImageDownloader; @@ -26,13 +27,25 @@ public SubscriberBinderImpl( } @Override - public void setup( - Context ctx, Runnable onAuthFail, - OnSubscribeUnsubscribeClickListener subUnSubClickListener, - OnUserClickListener userClickListener) { + public void setOnSubscribeUnsubscribeClickListener( + OnSubscribeUnsubscribeClickListener subUnSubClickListener) { this.subUnSubClickListener = subUnSubClickListener; + } + + @Override + public void setOnUserClickListener( + OnUserClickListener userClickListener) { this.userClickListener = userClickListener; - userImageDownloader.setup(ctx, onAuthFail); + } + + @Override + public void setContext(Context ctx) { + userImageDownloader.setContext(ctx); + } + + @Override + public void setOnAuthFailAction(Runnable onAuthFail) { + userImageDownloader.setOnAuthFailAction(onAuthFail); } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinder.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinder.java deleted file mode 100644 index b246dc3..0000000 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/UserBinder.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tom.meeter.infrastructure.components.binder; - -import android.content.Context; - -import androidx.recyclerview.widget.RecyclerView; - -import com.tom.meeter.infrastructure.components.adapter.OnUserClickListener; - -public interface UserBinder - extends BaseUserBinder { - void setup(Context ctx, Runnable onAuthFail, OnUserClickListener listener); -} diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/EventImageDownloader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/EventImageDownloader.java similarity index 91% rename from AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/EventImageDownloader.java rename to AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/EventImageDownloader.java index e479089..325dacc 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/EventImageDownloader.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/EventImageDownloader.java @@ -1,4 +1,4 @@ -package com.tom.meeter.infrastructure.components; +package com.tom.meeter.infrastructure.components.downloader; import android.graphics.Bitmap; diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/PhotoWithCacheDownloader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/PhotoWithCacheDownloader.java similarity index 77% rename from AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/PhotoWithCacheDownloader.java rename to AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/PhotoWithCacheDownloader.java index 09e7519..f49e851 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/PhotoWithCacheDownloader.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/PhotoWithCacheDownloader.java @@ -1,16 +1,19 @@ -package com.tom.meeter.infrastructure.components; +package com.tom.meeter.infrastructure.components.downloader; import android.content.Context; import android.graphics.Bitmap; import android.util.Log; import com.tom.meeter.context.image.ImageDownloader; +import com.tom.meeter.infrastructure.components.SetContext; +import com.tom.meeter.infrastructure.components.SetOnAuthFailAction; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; -public abstract class PhotoWithCacheDownloader { +public abstract class PhotoWithCacheDownloader + implements SetContext, SetOnAuthFailAction { private static final String TAG = PhotoWithCacheDownloader.class.getCanonicalName(); @@ -25,8 +28,13 @@ protected PhotoWithCacheDownloader(ImageDownloader imgDownloader) { this.imgDownloader = imgDownloader; } - public void setup(Context ctx, Runnable onAuthFail) { + @Override + public void setContext(Context ctx) { this.ctx = ctx; + } + + @Override + public void setOnAuthFailAction(Runnable onAuthFail) { this.onAuthFail = onAuthFail; } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserImageDownloader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/UserImageDownloader.java similarity index 91% rename from AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserImageDownloader.java rename to AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/UserImageDownloader.java index 8c81e5a..90112e9 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserImageDownloader.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/UserImageDownloader.java @@ -1,4 +1,4 @@ -package com.tom.meeter.infrastructure.components; +package com.tom.meeter.infrastructure.components.downloader; import android.graphics.Bitmap; diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserWithCacheDownloader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/UserWithCacheDownloader.java similarity index 97% rename from AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserWithCacheDownloader.java rename to AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/UserWithCacheDownloader.java index df2aa48..492aa82 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserWithCacheDownloader.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/UserWithCacheDownloader.java @@ -1,4 +1,4 @@ -package com.tom.meeter.infrastructure.components; +package com.tom.meeter.infrastructure.components.downloader; import android.content.Context; import android.util.Log; From 0bc8b37cb74c3a8a6887439be667fef2d1443782 Mon Sep 17 00:00:00 2001 From: Georgy Lebedik Date: Tue, 1 Jul 2025 15:31:40 +0300 Subject: [PATCH 08/16] Event module. --- .../java/com/tom/meeter/AppComponent.java | 7 +- .../main/java/com/tom/meeter/AppModule.java | 90 --------------- .../java/com/tom/meeter/ProfileModule.java | 108 ++++++++++++++++++ .../meeter/context/event/EventComponent.java | 5 +- .../{ => context/event}/EventModule.java | 6 +- 5 files changed, 116 insertions(+), 100 deletions(-) create mode 100644 AndroidClient/src/main/java/com/tom/meeter/ProfileModule.java rename AndroidClient/src/main/java/com/tom/meeter/{ => context/event}/EventModule.java (96%) diff --git a/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java b/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java index 701f903..939091b 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java +++ b/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java @@ -2,7 +2,6 @@ import android.app.Application; -import com.tom.meeter.context.event.service.EventService; import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.image.activity.BaseUploadActivity; import com.tom.meeter.context.launcher.Launcher; @@ -26,10 +25,10 @@ @Component( modules = { AppModule.class, + ProfileModule.class, TokenModule.class, ImageModule.class, - UserModule.class, - EventModule.class + UserModule.class }) @Singleton public interface AppComponent { @@ -40,8 +39,6 @@ public interface AppComponent { UserService provideUserService(); - EventService provideEventService(); - @Component.Builder interface Builder { diff --git a/AndroidClient/src/main/java/com/tom/meeter/AppModule.java b/AndroidClient/src/main/java/com/tom/meeter/AppModule.java index 80b3f01..2334f68 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/AppModule.java +++ b/AndroidClient/src/main/java/com/tom/meeter/AppModule.java @@ -6,33 +6,13 @@ import android.util.Log; import androidx.annotation.NonNull; -import androidx.room.Room; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.json.JsonMapper; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.tom.meeter.context.profile.repository.event.database.EventDao; -import com.tom.meeter.context.profile.repository.event.database.EventDatabase; -import com.tom.meeter.context.profile.repository.user.database.UserDao; -import com.tom.meeter.context.profile.repository.user.database.UserDatabase; -import com.tom.meeter.context.profile.service.ProfileService; -import com.tom.meeter.context.profile.settings.service.SettingsService; import com.tom.meeter.infrastructure.http.HttpClient; -import java.util.TimeZone; -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.Executor; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - import javax.inject.Singleton; import dagger.Module; import dagger.Provides; -import retrofit2.Retrofit; -import retrofit2.converter.jackson.JacksonConverterFactory; @Module public class AppModule { @@ -43,76 +23,6 @@ public AppModule() { Log.d(TAG, "Configuring AppModule..."); } - @Singleton - @NonNull - @Provides - public ProfileService provideProfileService(Application app) { - return new Retrofit.Builder() - .baseUrl(getServerPath(app)) - .addConverterFactory(JacksonConverterFactory.create( - JsonMapper.builder() - .addModule(new JavaTimeModule()) - .addModule(new Jdk8Module()) - .serializationInclusion(JsonInclude.Include.NON_NULL) - .build() - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .setTimeZone(TimeZone.getDefault()))) - .build() - .create(ProfileService.class); - } - - @Singleton - @NonNull - @Provides - public UserDatabase provideUserDb(Application app) { - return Room.databaseBuilder(app, UserDatabase.class, "user.db") - .fallbackToDestructiveMigration() - .build(); - } - - @Singleton - @NonNull - @Provides - public UserDao provideUserDao(UserDatabase userDatabase) { - return userDatabase.userDao(); - } - - @Singleton - @NonNull - @Provides - public Executor provideExecutor() { - return new ThreadPoolExecutor(4, 8, 1000, TimeUnit.SECONDS, - new ArrayBlockingQueue<>(15, false)); - } - - @Singleton - @NonNull - @Provides - public EventDatabase provideEventDb(Application app) { - return Room.databaseBuilder(app, EventDatabase.class, "event.db") - .fallbackToDestructiveMigration() - .build(); - } - - @Singleton - @NonNull - @Provides - public EventDao provideEventDao(EventDatabase eventDatabase) { - return eventDatabase.eventDao(); - } - - @Singleton - @NonNull - @Provides - public SettingsService provideSettingsService(Application app) { - return new Retrofit.Builder() - .baseUrl(getServerPath(app)) - .addConverterFactory(JacksonConverterFactory.create()) - //.addConverterFactory(GsonConverterFactory.create()) - .build() - .create(SettingsService.class); - } - @Singleton @NonNull @Provides diff --git a/AndroidClient/src/main/java/com/tom/meeter/ProfileModule.java b/AndroidClient/src/main/java/com/tom/meeter/ProfileModule.java new file mode 100644 index 0000000..3bea118 --- /dev/null +++ b/AndroidClient/src/main/java/com/tom/meeter/ProfileModule.java @@ -0,0 +1,108 @@ +package com.tom.meeter; + +import static com.tom.meeter.infrastructure.common.Globals.getServerPath; + +import android.app.Application; + +import androidx.annotation.NonNull; +import androidx.room.Room; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.tom.meeter.context.profile.repository.event.database.EventDao; +import com.tom.meeter.context.profile.repository.event.database.EventDatabase; +import com.tom.meeter.context.profile.repository.user.database.UserDao; +import com.tom.meeter.context.profile.repository.user.database.UserDatabase; +import com.tom.meeter.context.profile.service.ProfileService; +import com.tom.meeter.context.profile.settings.service.SettingsService; + +import java.util.TimeZone; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + +@Module +public class ProfileModule { + + @Singleton + @NonNull + @Provides + public SettingsService provideSettingsService(Application app) { + return new Retrofit.Builder() + .baseUrl(getServerPath(app)) + .addConverterFactory(JacksonConverterFactory.create()) + //.addConverterFactory(GsonConverterFactory.create()) + .build() + .create(SettingsService.class); + } + + @Singleton + @NonNull + @Provides + public ProfileService provideProfileService(Application app) { + return new Retrofit.Builder() + .baseUrl(getServerPath(app)) + .addConverterFactory(JacksonConverterFactory.create( + JsonMapper.builder() + .addModule(new JavaTimeModule()) + .addModule(new Jdk8Module()) + .serializationInclusion(JsonInclude.Include.NON_NULL) + .build() + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .setTimeZone(TimeZone.getDefault()))) + .build() + .create(ProfileService.class); + } + + + @Singleton + @NonNull + @Provides + public EventDatabase provideEventDb(Application app) { + return Room.databaseBuilder(app, EventDatabase.class, "event.db") + .fallbackToDestructiveMigration() + .build(); + } + + @Singleton + @NonNull + @Provides + public EventDao provideEventDao(EventDatabase eventDatabase) { + return eventDatabase.eventDao(); + } + + @Singleton + @NonNull + @Provides + public UserDatabase provideUserDb(Application app) { + return Room.databaseBuilder(app, UserDatabase.class, "user.db") + .fallbackToDestructiveMigration() + .build(); + } + + @Singleton + @NonNull + @Provides + public UserDao provideUserDao(UserDatabase userDatabase) { + return userDatabase.userDao(); + } + + @Singleton + @NonNull + @Provides + public Executor provideExecutor() { + return new ThreadPoolExecutor(4, 8, 1000, TimeUnit.SECONDS, + new ArrayBlockingQueue<>(15, false)); + } +} diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/event/EventComponent.java b/AndroidClient/src/main/java/com/tom/meeter/context/event/EventComponent.java index bbd65e3..0c24cf6 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/event/EventComponent.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/event/EventComponent.java @@ -13,7 +13,10 @@ import dagger.Component; @EventScope -@Component(dependencies = {AppComponent.class}) +@Component( + modules = {EventModule.class}, + dependencies = {AppComponent.class} +) public interface EventComponent { @Component.Builder diff --git a/AndroidClient/src/main/java/com/tom/meeter/EventModule.java b/AndroidClient/src/main/java/com/tom/meeter/context/event/EventModule.java similarity index 96% rename from AndroidClient/src/main/java/com/tom/meeter/EventModule.java rename to AndroidClient/src/main/java/com/tom/meeter/context/event/EventModule.java index 2708b1f..5bb0b9c 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/EventModule.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/event/EventModule.java @@ -1,4 +1,4 @@ -package com.tom.meeter; +package com.tom.meeter.context.event; import static com.tom.meeter.infrastructure.common.Globals.getServerPath; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; @@ -16,8 +16,6 @@ import java.util.TimeZone; -import javax.inject.Singleton; - import dagger.Module; import dagger.Provides; import retrofit2.Retrofit; @@ -32,7 +30,7 @@ public EventModule() { logMethod(TAG, this); } - @Singleton + @EventScope @NonNull @Provides public EventService provideEventService(Application app) { From 14f27ff05d7f2a7197b7c773533830db85022be3 Mon Sep 17 00:00:00 2001 From: Georgy Lebedik Date: Tue, 1 Jul 2025 15:44:06 +0300 Subject: [PATCH 09/16] Extract profile component. --- .../src/main/java/com/tom/meeter/App.java | 15 ++++++ .../java/com/tom/meeter/AppComponent.java | 28 ---------- .../context/profile/ProfileComponent.java | 54 +++++++++++++++++++ .../{ => context/profile}/ProfileModule.java | 18 +++---- .../meeter/context/profile/ProfileScope.java | 11 ++++ .../profile/activity/ProfileActivity.java | 5 +- .../profile/activity/SettingsActivity.java | 2 +- .../profile/activity/SubscribersActivity.java | 2 +- .../activity/SubscriptionsActivity.java | 2 +- .../fragment/ActiveEventsFragment.java | 2 +- .../profile/fragment/CreateEventFragment.java | 2 +- .../profile/fragment/GoogleMapsFragment.java | 3 +- .../fragment/ProfileEventsFragment.java | 2 +- .../profile/fragment/ProfileFragment.java | 2 +- 14 files changed, 97 insertions(+), 51 deletions(-) create mode 100644 AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileComponent.java rename AndroidClient/src/main/java/com/tom/meeter/{ => context/profile}/ProfileModule.java (95%) create mode 100644 AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileScope.java diff --git a/AndroidClient/src/main/java/com/tom/meeter/App.java b/AndroidClient/src/main/java/com/tom/meeter/App.java index 8fc5149..212a8e8 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/App.java +++ b/AndroidClient/src/main/java/com/tom/meeter/App.java @@ -9,6 +9,8 @@ import com.tom.meeter.context.auth.DaggerAuthComponent; import com.tom.meeter.context.event.DaggerEventComponent; import com.tom.meeter.context.event.EventComponent; +import com.tom.meeter.context.profile.DaggerProfileComponent; +import com.tom.meeter.context.profile.ProfileComponent; import com.tom.meeter.context.user.DaggerUserComponent; import com.tom.meeter.context.user.UserComponent; @@ -19,6 +21,7 @@ public class App extends Application { private AuthComponent authComponent; private EventComponent eventComponent; private UserComponent userComponent; + private ProfileComponent profileComponent; @Override public void onCreate() { @@ -32,6 +35,7 @@ public void onCreate() { /* Dependent */ eventComponent = buildEventComponent(); + profileComponent = buildProfileComponent(); userComponent = buildUserComponent(); @@ -71,6 +75,13 @@ protected UserComponent buildUserComponent() { .build(); } + protected ProfileComponent buildProfileComponent() { + return DaggerProfileComponent.builder() + .application(this) + .appComponent(component) + .build(); + } + public AppComponent getComponent() { return component; } @@ -86,4 +97,8 @@ public EventComponent getEventComponent() { public UserComponent getUserComponent() { return userComponent; } + + public ProfileComponent getProfileComponent() { + return profileComponent; + } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java b/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java index 939091b..e5e1064 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java +++ b/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java @@ -5,15 +5,6 @@ import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.image.activity.BaseUploadActivity; import com.tom.meeter.context.launcher.Launcher; -import com.tom.meeter.context.profile.activity.ProfileActivity; -import com.tom.meeter.context.profile.activity.SettingsActivity; -import com.tom.meeter.context.profile.activity.SubscribersActivity; -import com.tom.meeter.context.profile.activity.SubscriptionsActivity; -import com.tom.meeter.context.profile.fragment.ActiveEventsFragment; -import com.tom.meeter.context.profile.fragment.CreateEventFragment; -import com.tom.meeter.context.profile.fragment.GoogleMapsFragment; -import com.tom.meeter.context.profile.fragment.ProfileEventsFragment; -import com.tom.meeter.context.profile.fragment.ProfileFragment; import com.tom.meeter.context.token.service.TokenService; import com.tom.meeter.context.user.service.UserService; @@ -25,7 +16,6 @@ @Component( modules = { AppModule.class, - ProfileModule.class, TokenModule.class, ImageModule.class, UserModule.class @@ -50,24 +40,6 @@ interface Builder { void inject(Launcher launcher); - void inject(ProfileActivity profileActivity); - - void inject(SettingsActivity settingsActivity); - - void inject(ProfileFragment profileFragment); - - void inject(GoogleMapsFragment googleMapsFragment); - - void inject(ActiveEventsFragment activeEventsFragment); - - void inject(ProfileEventsFragment profileEventsFragment); - - void inject(SubscribersActivity subscribersActivity); - - void inject(SubscriptionsActivity subscriptionsActivity); - void inject(BaseUploadActivity baseUploadActivity); - void inject(CreateEventFragment createEventFragment); - } diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileComponent.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileComponent.java new file mode 100644 index 0000000..d988975 --- /dev/null +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileComponent.java @@ -0,0 +1,54 @@ +package com.tom.meeter.context.profile; + +import android.app.Application; + +import com.tom.meeter.AppComponent; +import com.tom.meeter.context.profile.activity.ProfileActivity; +import com.tom.meeter.context.profile.activity.SettingsActivity; +import com.tom.meeter.context.profile.activity.SubscribersActivity; +import com.tom.meeter.context.profile.activity.SubscriptionsActivity; +import com.tom.meeter.context.profile.fragment.ActiveEventsFragment; +import com.tom.meeter.context.profile.fragment.CreateEventFragment; +import com.tom.meeter.context.profile.fragment.GoogleMapsFragment; +import com.tom.meeter.context.profile.fragment.ProfileEventsFragment; +import com.tom.meeter.context.profile.fragment.ProfileFragment; + +import dagger.BindsInstance; +import dagger.Component; + +@ProfileScope +@Component( + modules = {ProfileModule.class}, + dependencies = {AppComponent.class} +) +public interface ProfileComponent { + + @Component.Builder + interface Builder { + @BindsInstance + Builder application(Application application); + + Builder appComponent(AppComponent appComponent); + + ProfileComponent build(); + } + + void inject(ProfileActivity profileActivity); + + void inject(SettingsActivity settingsActivity); + + void inject(ProfileFragment profileFragment); + + void inject(GoogleMapsFragment googleMapsFragment); + + void inject(ActiveEventsFragment activeEventsFragment); + + void inject(ProfileEventsFragment profileEventsFragment); + + void inject(SubscribersActivity subscribersActivity); + + void inject(SubscriptionsActivity subscriptionsActivity); + + void inject(CreateEventFragment createEventFragment); + +} diff --git a/AndroidClient/src/main/java/com/tom/meeter/ProfileModule.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileModule.java similarity index 95% rename from AndroidClient/src/main/java/com/tom/meeter/ProfileModule.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileModule.java index 3bea118..e3d3c1e 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/ProfileModule.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileModule.java @@ -1,4 +1,4 @@ -package com.tom.meeter; +package com.tom.meeter.context.profile; import static com.tom.meeter.infrastructure.common.Globals.getServerPath; @@ -25,8 +25,6 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import javax.inject.Singleton; - import dagger.Module; import dagger.Provides; import retrofit2.Retrofit; @@ -35,7 +33,7 @@ @Module public class ProfileModule { - @Singleton + @ProfileScope @NonNull @Provides public SettingsService provideSettingsService(Application app) { @@ -47,7 +45,7 @@ public SettingsService provideSettingsService(Application app) { .create(SettingsService.class); } - @Singleton + @ProfileScope @NonNull @Provides public ProfileService provideProfileService(Application app) { @@ -66,7 +64,7 @@ public ProfileService provideProfileService(Application app) { } - @Singleton + @ProfileScope @NonNull @Provides public EventDatabase provideEventDb(Application app) { @@ -75,14 +73,14 @@ public EventDatabase provideEventDb(Application app) { .build(); } - @Singleton + @ProfileScope @NonNull @Provides public EventDao provideEventDao(EventDatabase eventDatabase) { return eventDatabase.eventDao(); } - @Singleton + @ProfileScope @NonNull @Provides public UserDatabase provideUserDb(Application app) { @@ -91,14 +89,14 @@ public UserDatabase provideUserDb(Application app) { .build(); } - @Singleton + @ProfileScope @NonNull @Provides public UserDao provideUserDao(UserDatabase userDatabase) { return userDatabase.userDao(); } - @Singleton + @ProfileScope @NonNull @Provides public Executor provideExecutor() { diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileScope.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileScope.java new file mode 100644 index 0000000..dde115a --- /dev/null +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileScope.java @@ -0,0 +1,11 @@ +package com.tom.meeter.context.profile; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import javax.inject.Scope; + +@Scope +@Retention(RetentionPolicy.RUNTIME) +public @interface ProfileScope { +} diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/ProfileActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/ProfileActivity.java index a899391..671a057 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/ProfileActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/ProfileActivity.java @@ -10,13 +10,10 @@ import android.accounts.Account; import android.accounts.AccountManager; import android.app.Activity; -import android.content.ComponentName; import android.content.Intent; -import android.content.ServiceConnection; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; -import android.os.IBinder; import android.util.Log; import android.view.View; import android.view.inputmethod.InputMethodManager; @@ -166,7 +163,7 @@ protected void onCreate(Bundle savedInstanceState) { View view = binding.getRoot(); setContentView(view); - ((App) getApplication()).getComponent().inject(this); + ((App) getApplication()).getProfileComponent().inject(this); accountManager = AccountManager.get(this); //setToken(accountManager, Launcher.EXPIRED); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SettingsActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SettingsActivity.java index 9066c2f..c85667c 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SettingsActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SettingsActivity.java @@ -54,7 +54,7 @@ protected void onCreate(Bundle savedInstanceState) { logMethod(TAG, this); - ((App) getApplication()).getComponent().inject(this); + ((App) getApplication()).getProfileComponent().inject(this); accountManager = AccountManager.get(this); binding = SettingsActivityBinding.inflate(getLayoutInflater()); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java index 9a56405..09f749e 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java @@ -48,7 +48,7 @@ protected void onCreate(Bundle savedInstanceState) { logMethod(TAG, this); - ((App) getApplication()).getComponent().inject(this); + ((App) getApplication()).getProfileComponent().inject(this); accountManager = AccountManager.get(this); checkToken( diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java index a4db4a2..2676bbf 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java @@ -48,7 +48,7 @@ protected void onCreate(Bundle savedInstanceState) { logMethod(TAG, this); - ((App) getApplication()).getComponent().inject(this); + ((App) getApplication()).getProfileComponent().inject(this); accountManager = AccountManager.get(this); checkToken( diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java index 79a736d..5de5f00 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java @@ -55,7 +55,7 @@ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); logMethod(TAG, this, "Registering eventBus"); - ((App) getActivity().getApplication()).getComponent().inject(this); + ((App) getActivity().getApplication()).getProfileComponent().inject(this); EventBus.getDefault().register(this); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/CreateEventFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/CreateEventFragment.java index 486b4c5..8f7512d 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/CreateEventFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/CreateEventFragment.java @@ -106,7 +106,7 @@ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); logMethod(TAG, this); - ((App) getActivity().getApplication()).getComponent().inject(this); + ((App) getActivity().getApplication()).getProfileComponent().inject(this); Context ctx = requireContext(); accountManager = AccountManager.get(ctx); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/GoogleMapsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/GoogleMapsFragment.java index 8c8eaa5..ea9b0e4 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/GoogleMapsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/GoogleMapsFragment.java @@ -2,7 +2,6 @@ import static android.content.Context.BIND_AUTO_CREATE; import static com.tom.meeter.context.event.activity.EventDispatcherActivity.dispatchToEventActivity; -import static com.tom.meeter.infrastructure.common.ImagesHelper.circleImage; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; import android.content.ComponentName; @@ -111,7 +110,7 @@ public void onCreate(Bundle savedInstanceState) { logMethod(TAG, this); readPreferences(); - ((App) getActivity().getApplication()).getComponent().inject(this); + ((App) getActivity().getApplication()).getProfileComponent().inject(this); MapsInitializer.initialize(getContext()); userIcon = BitmapDescriptorFactory.fromBitmap( diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java index fabc481..9e81386 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java @@ -54,7 +54,7 @@ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); logMethod(TAG, this); - ((App) getActivity().getApplication()).getComponent().inject(this); + ((App) getActivity().getApplication()).getProfileComponent().inject(this); Context ctx = requireContext(); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java index 34e5540..29b3a16 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java @@ -99,7 +99,7 @@ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); logMethod(TAG, this); - ((App) getActivity().getApplication()).getComponent().inject(this); + ((App) getActivity().getApplication()).getProfileComponent().inject(this); Context ctx = requireContext(); accountManager = AccountManager.get(ctx); From 43940140f85f010b1477a4156c97d3e371437c64 Mon Sep 17 00:00:00 2001 From: Georgy Lebedik Date: Tue, 1 Jul 2025 16:18:12 +0300 Subject: [PATCH 10/16] Extract profile component. --- .../java/com/tom/meeter/AppComponent.java | 7 +++--- .../main/java/com/tom/meeter/AppModule.java | 24 ++++++++++++++++++ .../profile/activity/SubscribersActivity.java | 14 +++-------- .../activity/SubscriptionsActivity.java | 14 +++-------- .../profile/adapter/SubscribersAdapter.java | 6 ++--- .../fragment/ActiveEventsFragment.java | 6 ----- .../fragment/ProfileEventsFragment.java | 12 +++------ .../profile/fragment/ProfileFragment.java | 4 +-- .../user/repository/UserRepository.java | 11 ++++---- .../profile/service/ProfileService.java | 11 ++++++++ .../meeter/context/user/UserComponent.java | 4 ++- .../meeter/{ => context/user}/UserModule.java | 6 ++--- .../infrastructure/components/UserLoader.java | 15 +++++++++++ .../components/binder/EventBinderImpl.java | 2 ++ .../downloader/UserWithCacheDownloader.java | 25 ++++++++++--------- 15 files changed, 95 insertions(+), 66 deletions(-) rename AndroidClient/src/main/java/com/tom/meeter/{ => context/user}/UserModule.java (95%) create mode 100644 AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserLoader.java diff --git a/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java b/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java index e5e1064..bd30325 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java +++ b/AndroidClient/src/main/java/com/tom/meeter/AppComponent.java @@ -6,7 +6,7 @@ import com.tom.meeter.context.image.activity.BaseUploadActivity; import com.tom.meeter.context.launcher.Launcher; import com.tom.meeter.context.token.service.TokenService; -import com.tom.meeter.context.user.service.UserService; +import com.tom.meeter.infrastructure.components.UserLoader; import javax.inject.Singleton; @@ -17,8 +17,7 @@ modules = { AppModule.class, TokenModule.class, - ImageModule.class, - UserModule.class + ImageModule.class }) @Singleton public interface AppComponent { @@ -27,7 +26,7 @@ public interface AppComponent { ImageDownloader provideImageDownloader(); - UserService provideUserService(); + UserLoader provideUserLoader(); @Component.Builder interface Builder { diff --git a/AndroidClient/src/main/java/com/tom/meeter/AppModule.java b/AndroidClient/src/main/java/com/tom/meeter/AppModule.java index 2334f68..9be9042 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/AppModule.java +++ b/AndroidClient/src/main/java/com/tom/meeter/AppModule.java @@ -7,12 +7,20 @@ import androidx.annotation.NonNull; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.tom.meeter.infrastructure.components.UserLoader; import com.tom.meeter.infrastructure.http.HttpClient; +import java.util.TimeZone; + import javax.inject.Singleton; import dagger.Module; import dagger.Provides; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; @Module public class AppModule { @@ -29,4 +37,20 @@ public AppModule() { public HttpClient provideHttpClient(Application app) { return new HttpClient(getServerPath(app)); } + + @Singleton + @NonNull + @Provides + public UserLoader provideUserLoader(Application app) { + return new Retrofit.Builder() + .baseUrl(getServerPath(app)) + .addConverterFactory(JacksonConverterFactory.create( + JsonMapper.builder() + .addModule(new JavaTimeModule()) + .build() + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .setTimeZone(TimeZone.getDefault()))) + .build() + .create(UserLoader.class); + } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java index 09f749e..532a0e1 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscribersActivity.java @@ -12,12 +12,10 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.tom.meeter.App; -import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.profile.adapter.SubscribersAdapter; import com.tom.meeter.context.profile.factory.ProfileSubscribersAssistedFactory; import com.tom.meeter.context.profile.viewmodel.ProfileSubscribersViewModel; import com.tom.meeter.context.token.service.TokenService; -import com.tom.meeter.context.user.service.UserService; import com.tom.meeter.databinding.ActivityProfileSubscribersBinding; import javax.inject.Inject; @@ -31,10 +29,6 @@ public class SubscribersActivity extends AppCompatActivity { @Inject ProfileSubscribersAssistedFactory assistedFactory; @Inject - ImageDownloader imgDownloader; - @Inject - UserService service; - @Inject SubscribersAdapter adapter; private final Runnable onAuthFail = this::recreate; @@ -48,6 +42,10 @@ protected void onCreate(Bundle savedInstanceState) { logMethod(TAG, this); + binding = ActivityProfileSubscribersBinding.inflate(getLayoutInflater()); + View view = binding.getRoot(); + setContentView(view); + ((App) getApplication()).getProfileComponent().inject(this); accountManager = AccountManager.get(this); @@ -59,10 +57,6 @@ protected void onCreate(Bundle savedInstanceState) { private void onInit(String token) { logMethod(TAG, this); - binding = ActivityProfileSubscribersBinding.inflate(getLayoutInflater()); - View view = binding.getRoot(); - setContentView(view); - adapter.initialize(this, onAuthFail); binding.recyclerSubscribers.setLayoutManager(new LinearLayoutManager(this)); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java index 2676bbf..198cf46 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/activity/SubscriptionsActivity.java @@ -12,12 +12,10 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.tom.meeter.App; -import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.profile.adapter.SubscribersAdapter; import com.tom.meeter.context.profile.factory.ProfileSubscriptionsAssistedFactory; import com.tom.meeter.context.profile.viewmodel.ProfileSubscriptionsViewModel; import com.tom.meeter.context.token.service.TokenService; -import com.tom.meeter.context.user.service.UserService; import com.tom.meeter.databinding.ActivityProfileSubscriptionsBinding; import javax.inject.Inject; @@ -31,10 +29,6 @@ public class SubscriptionsActivity extends AppCompatActivity { @Inject ProfileSubscriptionsAssistedFactory assistedFactory; @Inject - ImageDownloader imgDownloader; - @Inject - UserService userService; - @Inject SubscribersAdapter adapter; private final Runnable onAuthFail = this::recreate; @@ -48,6 +42,10 @@ protected void onCreate(Bundle savedInstanceState) { logMethod(TAG, this); + binding = ActivityProfileSubscriptionsBinding.inflate(getLayoutInflater()); + View view = binding.getRoot(); + setContentView(view); + ((App) getApplication()).getProfileComponent().inject(this); accountManager = AccountManager.get(this); @@ -59,10 +57,6 @@ protected void onCreate(Bundle savedInstanceState) { private void onInit() { logMethod(TAG, this); - binding = ActivityProfileSubscriptionsBinding.inflate(getLayoutInflater()); - View view = binding.getRoot(); - setContentView(view); - adapter.initialize(this, onAuthFail); binding.recyclerSubscriptions.setLayoutManager(new LinearLayoutManager(this)); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/SubscribersAdapter.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/SubscribersAdapter.java index 8dc9f7a..ce46c1d 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/SubscribersAdapter.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/adapter/SubscribersAdapter.java @@ -11,8 +11,8 @@ import androidx.recyclerview.widget.RecyclerView; +import com.tom.meeter.context.profile.service.ProfileService; import com.tom.meeter.context.profile.subscriber.Subscriber; -import com.tom.meeter.context.user.service.UserService; import com.tom.meeter.databinding.ActivityProfileSubscriberItemBinding; import com.tom.meeter.infrastructure.components.adapter.BaseAdapter; import com.tom.meeter.infrastructure.components.binder.SubscriberBinder; @@ -31,7 +31,7 @@ public class SubscribersAdapter private static final String TAG = SubscribersAdapter.class.getCanonicalName(); - private final UserService service; + private final ProfileService service; private final SubscriberBinder binder; private Context ctx; @@ -39,7 +39,7 @@ public class SubscribersAdapter @Inject public SubscribersAdapter( - UserService service, SubscriberBinderImpl binder) { + ProfileService service, SubscriberBinderImpl binder) { super(binder); this.binder = binder; this.service = service; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java index 5de5f00..1458fea 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java @@ -15,9 +15,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.tom.meeter.App; -import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.profile.adapter.EventsAdapter; -import com.tom.meeter.context.user.service.UserService; import com.tom.meeter.databinding.SubFragmentActiveEventsBinding; import com.tom.meeter.infrastructure.common.InfrastructureHelper; import com.tom.meeter.infrastructure.eventbus.events.IncomeEvents; @@ -35,10 +33,6 @@ public class ActiveEventsFragment extends Fragment { private static final String TAG = ActiveEventsFragment.class.getCanonicalName(); - @Inject - ImageDownloader imageDownloader; - @Inject - UserService service; @Inject EventsAdapter adapter; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java index 9e81386..b5f3aeb 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java @@ -16,11 +16,9 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.tom.meeter.App; -import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.profile.adapter.EventsAdapter; import com.tom.meeter.context.profile.factory.ProfileEventsAssistedFactory; import com.tom.meeter.context.profile.viewmodel.ProfileEventsViewModel; -import com.tom.meeter.context.user.service.UserService; import com.tom.meeter.databinding.SubFragmentUserEventsBinding; import com.tom.meeter.infrastructure.common.InfrastructureHelper; @@ -30,16 +28,12 @@ public class ProfileEventsFragment extends Fragment { private static final String TAG = ProfileEventsFragment.class.getCanonicalName(); - SubFragmentUserEventsBinding binding; - - @Inject - EventsAdapter adapter; @Inject ProfileEventsAssistedFactory assistedFactory; @Inject - ImageDownloader imageDownloader; - @Inject - UserService service; + EventsAdapter adapter; + + private SubFragmentUserEventsBinding binding; private final Runnable onAuthFail = () -> InfrastructureHelper.restartActivityFromFragment(this); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java index 29b3a16..db83843 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java @@ -67,7 +67,7 @@ public class ProfileFragment extends Fragment { @Inject ImageDownloader imageDownloader; @Inject - ProfileService profileService; + ProfileService service; @Inject EventsCardAdapter adapter; @@ -152,7 +152,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat switchEditMode(); return; } - profileService.updateProfile(getAuthHeader(accountManager), req) + service.updateProfile(getAuthHeader(accountManager), req) .enqueue(new BaseOnNotAuthenticatedCallback<>(ctx, onAuthFail) { @Override public void onResponse( diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/repository/user/repository/UserRepository.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/repository/user/repository/UserRepository.java index 1be57a4..8ebc374 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/repository/user/repository/UserRepository.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/repository/user/repository/UserRepository.java @@ -7,7 +7,7 @@ import com.tom.meeter.context.network.dto.UserDTO; import com.tom.meeter.context.profile.repository.user.database.UserDao; import com.tom.meeter.context.profile.repository.user.domain.User; -import com.tom.meeter.context.user.service.UserService; +import com.tom.meeter.context.profile.service.ProfileService; import java.time.LocalDate; import java.util.concurrent.Executor; @@ -23,13 +23,14 @@ public class UserRepository { private static final String TAG = UserRepository.class.getCanonicalName(); private static final Object MARKER = new Object(); - private final UserService userService; + private final ProfileService service; private final UserDao userDao; private final Executor executor; //@Inject - public UserRepository(UserService userService, UserDao userDao, Executor executor) { - this.userService = userService; + public UserRepository( + ProfileService service, UserDao userDao, Executor executor) { + this.service = service; this.userDao = userDao; this.executor = executor; } @@ -45,7 +46,7 @@ private void refreshUser(String id) { .flatMapCompletable(ign -> Completable.fromAction(() -> { //TODO null String header = null; - Response response = userService.getUser(header, id).execute(); + Response response = service.getUser(header, id).execute(); if (response.isSuccessful()) { UserDTO body = response.body(); LocalDate birthday = body.getBirthday(); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/service/ProfileService.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/service/ProfileService.java index bd05010..736e15e 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/service/ProfileService.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/service/ProfileService.java @@ -15,8 +15,10 @@ import retrofit2.http.Header; import retrofit2.http.PATCH; import retrofit2.http.POST; +import retrofit2.http.Path; public interface ProfileService { + @GET("/profile") Call getProfile(@Header(AUTH_HEADER) String authHeader); @@ -33,10 +35,19 @@ Call updateProfile( @GET("/profile/subscriptions") Call> getMySubscriptions(@Header(AUTH_HEADER) String authHeader); + @GET("/user/{id}/subscribe") + Call subscribe(@Header(AUTH_HEADER) String authHeader, @Path("id") String userId); + + @GET("/user/{id}/unsubscribe") + Call unsubscribe(@Header(AUTH_HEADER) String authHeader, @Path("id") String userId); + @POST("/event") Call createEvent(@Header(AUTH_HEADER) String authHeader, @Body CreateEventRequest req); + @Deprecated + @GET("/user/{id}") + Call getUser(@Header(AUTH_HEADER) String authHeader, @Path("id") String userId); /* soon... @GET("/publish") Call publishEvent( diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/UserComponent.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/UserComponent.java index 0c402f4..553d598 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/UserComponent.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/UserComponent.java @@ -12,7 +12,9 @@ @UserScope @Component( - dependencies = {AppComponent.class}) + modules = {UserModule.class}, + dependencies = {AppComponent.class} +) public interface UserComponent { @Component.Builder diff --git a/AndroidClient/src/main/java/com/tom/meeter/UserModule.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/UserModule.java similarity index 95% rename from AndroidClient/src/main/java/com/tom/meeter/UserModule.java rename to AndroidClient/src/main/java/com/tom/meeter/context/user/UserModule.java index 544d78b..ebfa342 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/UserModule.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/UserModule.java @@ -1,4 +1,4 @@ -package com.tom.meeter; +package com.tom.meeter.context.user; import static com.tom.meeter.infrastructure.common.Globals.getServerPath; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; @@ -14,8 +14,6 @@ import java.util.TimeZone; -import javax.inject.Singleton; - import dagger.Module; import dagger.Provides; import retrofit2.Retrofit; @@ -30,7 +28,7 @@ public UserModule() { logMethod(TAG, this); } - @Singleton + @UserScope @NonNull @Provides public UserService provideUserService(Application app) { diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserLoader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserLoader.java new file mode 100644 index 0000000..e8b6a8d --- /dev/null +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/UserLoader.java @@ -0,0 +1,15 @@ +package com.tom.meeter.infrastructure.components; + +import static com.tom.meeter.infrastructure.common.Globals.AUTH_HEADER; + +import com.tom.meeter.context.network.dto.UserDTO; + +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Header; +import retrofit2.http.Path; + +public interface UserLoader { + @GET("/user/{id}") + Call getUser(@Header(AUTH_HEADER) String authHeader, @Path("id") String userId); +} diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java index 7ba205b..dbde1ad 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java @@ -45,11 +45,13 @@ public void setupOnEventClickListener( public void setContext(Context ctx) { this.ctx = ctx; eventImageDownloader.setContext(ctx); + userDownloader.setContext(ctx); } @Override public void setOnAuthFailAction(Runnable onAuthFail) { eventImageDownloader.setOnAuthFailAction(onAuthFail); + userDownloader.setOnAuthFailAction(onAuthFail); } @Override diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/UserWithCacheDownloader.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/UserWithCacheDownloader.java index 492aa82..10b7896 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/UserWithCacheDownloader.java +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/downloader/UserWithCacheDownloader.java @@ -4,7 +4,9 @@ import android.util.Log; import com.tom.meeter.context.network.dto.UserDTO; -import com.tom.meeter.context.user.service.UserService; +import com.tom.meeter.infrastructure.components.SetContext; +import com.tom.meeter.infrastructure.components.SetOnAuthFailAction; +import com.tom.meeter.infrastructure.components.UserLoader; import com.tom.meeter.infrastructure.http.BaseOnNotAuthenticatedCallback; import java.util.Map; @@ -16,11 +18,12 @@ import retrofit2.Call; import retrofit2.Response; -public class UserWithCacheDownloader { +public class UserWithCacheDownloader + implements SetContext, SetOnAuthFailAction { private static final String TAG = PhotoWithCacheDownloader.class.getCanonicalName(); - private final UserService service; + private final UserLoader service; private Context ctx; private Runnable onAuthFail; @@ -28,12 +31,17 @@ public class UserWithCacheDownloader { protected final Map cache = new ConcurrentHashMap<>(); @Inject - public UserWithCacheDownloader(UserService service) { + public UserWithCacheDownloader(UserLoader service) { this.service = service; } - public void setup(Context ctx, Runnable onAuthFail) { + @Override + public void setContext(Context ctx) { this.ctx = ctx; + } + + @Override + public void setOnAuthFailAction(Runnable onAuthFail) { this.onAuthFail = onAuthFail; } @@ -41,13 +49,6 @@ public UserDTO getUserCache(String userId) { return cache.get(userId); } -/* public UserWithCacheDownloader( - Context ctx, UserService service, Runnable onAuthFail) { - this.ctx = ctx; - this.service = service; - this.onAuthFail = onAuthFail; - }*/ - public void loadUser( String auth, String userId, Consumer onUserReady) { UserDTO cached = cache.get(userId); From 4a0ce957fa54e30a8b6f5135a269f76cb12423a2 Mon Sep 17 00:00:00 2001 From: Georgy Lebedik Date: Tue, 1 Jul 2025 16:36:44 +0300 Subject: [PATCH 11/16] Retrofit builder. --- .../main/java/com/tom/meeter/AppModule.java | 19 +------ .../main/java/com/tom/meeter/TokenModule.java | 1 - .../tom/meeter/context/auth/AuthModule.java | 1 - .../tom/meeter/context/event/EventModule.java | 25 +-------- .../meeter/context/profile/ProfileModule.java | 21 +------- .../tom/meeter/context/user/UserModule.java | 20 +------ .../common/RetrofitBuilder.java | 53 +++++++++++++++++++ 7 files changed, 61 insertions(+), 79 deletions(-) create mode 100644 AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/RetrofitBuilder.java diff --git a/AndroidClient/src/main/java/com/tom/meeter/AppModule.java b/AndroidClient/src/main/java/com/tom/meeter/AppModule.java index 9be9042..2b1a7c2 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/AppModule.java +++ b/AndroidClient/src/main/java/com/tom/meeter/AppModule.java @@ -1,26 +1,20 @@ package com.tom.meeter; import static com.tom.meeter.infrastructure.common.Globals.getServerPath; +import static com.tom.meeter.infrastructure.common.RetrofitBuilder.createDefaultBuilder; import android.app.Application; import android.util.Log; import androidx.annotation.NonNull; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.json.JsonMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.tom.meeter.infrastructure.components.UserLoader; import com.tom.meeter.infrastructure.http.HttpClient; -import java.util.TimeZone; - import javax.inject.Singleton; import dagger.Module; import dagger.Provides; -import retrofit2.Retrofit; -import retrofit2.converter.jackson.JacksonConverterFactory; @Module public class AppModule { @@ -42,15 +36,6 @@ public HttpClient provideHttpClient(Application app) { @NonNull @Provides public UserLoader provideUserLoader(Application app) { - return new Retrofit.Builder() - .baseUrl(getServerPath(app)) - .addConverterFactory(JacksonConverterFactory.create( - JsonMapper.builder() - .addModule(new JavaTimeModule()) - .build() - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .setTimeZone(TimeZone.getDefault()))) - .build() - .create(UserLoader.class); + return createDefaultBuilder(app).create(UserLoader.class); } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/TokenModule.java b/AndroidClient/src/main/java/com/tom/meeter/TokenModule.java index 0cc023f..9ca8c30 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/TokenModule.java +++ b/AndroidClient/src/main/java/com/tom/meeter/TokenModule.java @@ -33,7 +33,6 @@ public TokenService providesTokenService(Application app) { return new Retrofit.Builder() .baseUrl(getServerPath(app)) .addConverterFactory(JacksonConverterFactory.create()) - //.addConverterFactory(GsonConverterFactory.create()) .build() .create(TokenService.class); } diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/auth/AuthModule.java b/AndroidClient/src/main/java/com/tom/meeter/context/auth/AuthModule.java index 9878e94..dca1d12 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/auth/AuthModule.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/auth/AuthModule.java @@ -32,7 +32,6 @@ public AuthService provideAuthService(Application app) { return new Retrofit.Builder() .baseUrl(getServerPath(app)) .addConverterFactory(JacksonConverterFactory.create()) - //.addConverterFactory(GsonConverterFactory.create()) .build() .create(AuthService.class); } diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/event/EventModule.java b/AndroidClient/src/main/java/com/tom/meeter/context/event/EventModule.java index 5bb0b9c..7583d8f 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/event/EventModule.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/event/EventModule.java @@ -1,25 +1,16 @@ package com.tom.meeter.context.event; -import static com.tom.meeter.infrastructure.common.Globals.getServerPath; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; +import static com.tom.meeter.infrastructure.common.RetrofitBuilder.createBuilder; import android.app.Application; import androidx.annotation.NonNull; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.json.JsonMapper; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.tom.meeter.context.event.service.EventService; -import java.util.TimeZone; - import dagger.Module; import dagger.Provides; -import retrofit2.Retrofit; -import retrofit2.converter.jackson.JacksonConverterFactory; @Module public class EventModule { @@ -34,18 +25,6 @@ public EventModule() { @NonNull @Provides public EventService provideEventService(Application app) { - return new Retrofit.Builder() - .baseUrl(getServerPath(app)) - .addConverterFactory(JacksonConverterFactory.create( - JsonMapper.builder() - .addModule(new JavaTimeModule()) - //.addModule(new Jdk8Module().configureReadAbsentAsNull(false)) - .addModule(new Jdk8Module()) - .serializationInclusion(JsonInclude.Include.NON_NULL) - .build() - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .setTimeZone(TimeZone.getDefault()))) - .build() - .create(EventService.class); + return createBuilder(app).create(EventService.class); } } \ No newline at end of file diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileModule.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileModule.java index e3d3c1e..d8d41ac 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileModule.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileModule.java @@ -1,17 +1,13 @@ package com.tom.meeter.context.profile; import static com.tom.meeter.infrastructure.common.Globals.getServerPath; +import static com.tom.meeter.infrastructure.common.RetrofitBuilder.createBuilder; import android.app.Application; import androidx.annotation.NonNull; import androidx.room.Room; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.json.JsonMapper; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.tom.meeter.context.profile.repository.event.database.EventDao; import com.tom.meeter.context.profile.repository.event.database.EventDatabase; import com.tom.meeter.context.profile.repository.user.database.UserDao; @@ -19,7 +15,6 @@ import com.tom.meeter.context.profile.service.ProfileService; import com.tom.meeter.context.profile.settings.service.SettingsService; -import java.util.TimeZone; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor; @@ -40,7 +35,6 @@ public SettingsService provideSettingsService(Application app) { return new Retrofit.Builder() .baseUrl(getServerPath(app)) .addConverterFactory(JacksonConverterFactory.create()) - //.addConverterFactory(GsonConverterFactory.create()) .build() .create(SettingsService.class); } @@ -49,18 +43,7 @@ public SettingsService provideSettingsService(Application app) { @NonNull @Provides public ProfileService provideProfileService(Application app) { - return new Retrofit.Builder() - .baseUrl(getServerPath(app)) - .addConverterFactory(JacksonConverterFactory.create( - JsonMapper.builder() - .addModule(new JavaTimeModule()) - .addModule(new Jdk8Module()) - .serializationInclusion(JsonInclude.Include.NON_NULL) - .build() - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .setTimeZone(TimeZone.getDefault()))) - .build() - .create(ProfileService.class); + return createBuilder(app).create(ProfileService.class); } diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/UserModule.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/UserModule.java index ebfa342..f97be7b 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/UserModule.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/UserModule.java @@ -1,23 +1,16 @@ package com.tom.meeter.context.user; -import static com.tom.meeter.infrastructure.common.Globals.getServerPath; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; +import static com.tom.meeter.infrastructure.common.RetrofitBuilder.createDefaultBuilder; import android.app.Application; import androidx.annotation.NonNull; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.json.JsonMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.tom.meeter.context.user.service.UserService; -import java.util.TimeZone; - import dagger.Module; import dagger.Provides; -import retrofit2.Retrofit; -import retrofit2.converter.jackson.JacksonConverterFactory; @Module public class UserModule { @@ -32,15 +25,6 @@ public UserModule() { @NonNull @Provides public UserService provideUserService(Application app) { - return new Retrofit.Builder() - .baseUrl(getServerPath(app)) - .addConverterFactory(JacksonConverterFactory.create( - JsonMapper.builder() - .addModule(new JavaTimeModule()) - .build() - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .setTimeZone(TimeZone.getDefault()))) - .build() - .create(UserService.class); + return createDefaultBuilder(app).create(UserService.class); } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/RetrofitBuilder.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/RetrofitBuilder.java new file mode 100644 index 0000000..b7ab768 --- /dev/null +++ b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/common/RetrofitBuilder.java @@ -0,0 +1,53 @@ +package com.tom.meeter.infrastructure.common; + +import static com.tom.meeter.infrastructure.common.Globals.getServerPath; + +import android.app.Application; + +import com.fasterxml.jackson.databind.Module; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.TimeZone; + +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + +public class RetrofitBuilder { + + private static final JavaTimeModule jtm = new JavaTimeModule(); + + private static final Jdk8Module jdk8m = new Jdk8Module(); + //.addModule(new Jdk8Module().configureReadAbsentAsNull(false)) + + private RetrofitBuilder() { + } + + public static Retrofit createDefaultBuilder(Application app) { + return createBuilder(app, Collections.singletonList(jtm)); + } + + public static Retrofit createBuilder( + Application app, List modules) { + JsonMapper.Builder builder = JsonMapper.builder(); + for (Module m : modules) { + builder.addModule(m); + } + return new Retrofit.Builder() + .baseUrl(getServerPath(app)) + .addConverterFactory(JacksonConverterFactory.create( + builder.build() + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .setTimeZone(TimeZone.getDefault()))) + .build(); + } + + public static Retrofit createBuilder(Application app) { + return createBuilder(app, Arrays.asList(jtm, jdk8m)); + } +} From 12d2b618475c63f4a7c88510c99d55d5fbe43a6b Mon Sep 17 00:00:00 2001 From: Georgy Lebedik Date: Tue, 1 Jul 2025 17:03:42 +0300 Subject: [PATCH 12/16] Refac. --- AndroidClient/src/main/AndroidManifest.xml | 12 ++++++------ .../main/java/com/tom/meeter/TokenModule.java | 1 - .../activity/EventLocationMapActivity.java | 2 +- .../event/activity/EventOnMapActivity.java | 2 +- .../event/activity/ProfileEventActivity.java | 2 +- .../tom/meeter/context/launcher/Launcher.java | 2 +- .../context/launcher/StartActivityTemp.java | 2 +- .../context/profile/ProfileComponent.java | 18 +++++++++--------- .../activity/NewEventOnMapActivity.java | 4 ++-- .../activity/ProfileActivity.java | 10 +++++----- .../activity/SettingsActivity.java | 4 ++-- .../activity/SubscribersActivity.java | 6 +++--- .../activity/SubscriptionsActivity.java | 6 +++--- .../adapter/ActiveEventsAdapter.java | 4 ++-- .../{ => component}/adapter/EventsAdapter.java | 6 +++--- .../adapter/SubscribersAdapter.java | 10 +++++----- .../binder/BaseSubscriberBinder.java | 5 +++-- .../component}/binder/EventBinderImpl.java | 5 +++-- .../OnSubscribeUnsubscribeClickListener.java | 7 +++++++ .../component}/binder/SubscriberBinder.java | 3 +-- .../binder/SubscriberBinderImpl.java | 7 +++---- .../fragment/ActiveEventsFragment.java | 4 ++-- .../fragment/CreateEventFragment.java | 4 ++-- .../fragment/EventsFragment.java | 2 +- .../fragment/GoogleMapsFragment.java | 2 +- .../fragment/ProfileEventsFragment.java | 6 +++--- .../fragment/ProfileFragment.java | 8 ++++---- .../fragment/SettingsFragment.java | 2 +- .../fragment/SettingsFragmentOld.java | 2 +- .../component}/viewholder/EventViewHolder.java | 2 +- .../viewholder/SubscriberViewHolder.java | 6 +++--- .../viewmodel/ProfileEventsViewModel.java | 2 +- .../viewmodel/ProfileSubscribersViewModel.java | 4 ++-- .../ProfileSubscriptionsViewModel.java | 4 ++-- .../viewmodel/ProfileViewModel.java | 2 +- .../viewmodel/UserEventsViewModel.java | 2 +- .../viewmodel/UserProfileViewModel.java | 2 +- .../{subscriber => domain}/Subscriber.java | 2 +- .../factory/ProfileAssistedFactory.java | 2 +- .../factory/ProfileEventsAssistedFactory.java | 2 +- .../ProfileSubscribersAssistedFactory.java | 2 +- .../ProfileSubscriptionsAssistedFactory.java | 2 +- .../context/user/activity/UserActivity.java | 2 +- .../OnSubscribeUnsubscribeClickListener.java | 7 ------- .../src/main/res/layout/fragment_profile.xml | 2 +- .../main/res/layout/fragment_profile_old.xml | 2 +- .../src/main/res/layout/settings_activity.xml | 2 +- 47 files changed, 98 insertions(+), 99 deletions(-) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/activity/NewEventOnMapActivity.java (97%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/activity/ProfileActivity.java (98%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/activity/SettingsActivity.java (98%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/activity/SubscribersActivity.java (92%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/activity/SubscriptionsActivity.java (92%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/adapter/ActiveEventsAdapter.java (89%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/adapter/EventsAdapter.java (90%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/adapter/SubscribersAdapter.java (92%) rename AndroidClient/src/main/java/com/tom/meeter/{infrastructure/components => context/profile/component}/binder/BaseSubscriberBinder.java (54%) rename AndroidClient/src/main/java/com/tom/meeter/{infrastructure/components => context/profile/component}/binder/EventBinderImpl.java (94%) create mode 100644 AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/OnSubscribeUnsubscribeClickListener.java rename AndroidClient/src/main/java/com/tom/meeter/{infrastructure/components => context/profile/component}/binder/SubscriberBinder.java (80%) rename AndroidClient/src/main/java/com/tom/meeter/{infrastructure/components => context/profile/component}/binder/SubscriberBinderImpl.java (89%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/fragment/ActiveEventsFragment.java (95%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/fragment/CreateEventFragment.java (98%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/fragment/EventsFragment.java (98%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/fragment/GoogleMapsFragment.java (99%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/fragment/ProfileEventsFragment.java (94%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/fragment/ProfileFragment.java (96%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/fragment/SettingsFragment.java (97%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/fragment/SettingsFragmentOld.java (90%) rename AndroidClient/src/main/java/com/tom/meeter/{infrastructure/components => context/profile/component}/viewholder/EventViewHolder.java (95%) rename AndroidClient/src/main/java/com/tom/meeter/{infrastructure/components => context/profile/component}/viewholder/SubscriberViewHolder.java (85%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/viewmodel/ProfileEventsViewModel.java (97%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/viewmodel/ProfileSubscribersViewModel.java (96%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/viewmodel/ProfileSubscriptionsViewModel.java (95%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/viewmodel/ProfileViewModel.java (98%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/viewmodel/UserEventsViewModel.java (93%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{ => component}/viewmodel/UserProfileViewModel.java (95%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{subscriber => domain}/Subscriber.java (93%) delete mode 100644 AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/OnSubscribeUnsubscribeClickListener.java diff --git a/AndroidClient/src/main/AndroidManifest.xml b/AndroidClient/src/main/AndroidManifest.xml index 8cf3474..bc53dd3 100644 --- a/AndroidClient/src/main/AndroidManifest.xml +++ b/AndroidClient/src/main/AndroidManifest.xml @@ -57,7 +57,7 @@ android:value=".context.launcher.Launcher" /> + android:parentActivityName=".context.profile.component.activity.ProfileActivity" /> - - + + - + extends BaseViewHolderBinder { diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/EventBinderImpl.java similarity index 94% rename from AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/EventBinderImpl.java index dbde1ad..260df64 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/EventBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/EventBinderImpl.java @@ -1,4 +1,4 @@ -package com.tom.meeter.infrastructure.components.binder; +package com.tom.meeter.context.profile.component.binder; import static com.tom.meeter.infrastructure.common.CommonHelper.handleEventStatus; @@ -10,10 +10,11 @@ import com.tom.meeter.context.auth.infrastructure.AuthHelper; import com.tom.meeter.context.network.dto.EventDTO; import com.tom.meeter.context.network.dto.UserDTO; +import com.tom.meeter.context.profile.component.viewholder.EventViewHolder; import com.tom.meeter.infrastructure.components.adapter.OnEventClickListener; +import com.tom.meeter.infrastructure.components.binder.EventBinder; import com.tom.meeter.infrastructure.components.downloader.EventImageDownloader; import com.tom.meeter.infrastructure.components.downloader.UserWithCacheDownloader; -import com.tom.meeter.infrastructure.components.viewholder.EventViewHolder; import javax.inject.Inject; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/OnSubscribeUnsubscribeClickListener.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/OnSubscribeUnsubscribeClickListener.java new file mode 100644 index 0000000..59e9cf7 --- /dev/null +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/OnSubscribeUnsubscribeClickListener.java @@ -0,0 +1,7 @@ +package com.tom.meeter.context.profile.component.binder; + +import com.tom.meeter.context.profile.domain.Subscriber; + +public interface OnSubscribeUnsubscribeClickListener { + void onSubUnSub(Subscriber sub, int position); +} diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinder.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/SubscriberBinder.java similarity index 80% rename from AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinder.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/SubscriberBinder.java index 07a80f8..f7b2370 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinder.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/SubscriberBinder.java @@ -1,10 +1,9 @@ -package com.tom.meeter.infrastructure.components.binder; +package com.tom.meeter.context.profile.component.binder; import androidx.recyclerview.widget.RecyclerView; import com.tom.meeter.infrastructure.components.SetContext; import com.tom.meeter.infrastructure.components.SetOnAuthFailAction; -import com.tom.meeter.infrastructure.components.adapter.OnSubscribeUnsubscribeClickListener; import com.tom.meeter.infrastructure.components.adapter.OnUserClickListener; public interface SubscriberBinder diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/SubscriberBinderImpl.java similarity index 89% rename from AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/SubscriberBinderImpl.java index bd5a540..fc638c3 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/binder/SubscriberBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/SubscriberBinderImpl.java @@ -1,14 +1,13 @@ -package com.tom.meeter.infrastructure.components.binder; +package com.tom.meeter.context.profile.component.binder; import android.content.Context; import android.graphics.Bitmap; import com.tom.meeter.context.network.dto.UserDTO; -import com.tom.meeter.context.profile.subscriber.Subscriber; -import com.tom.meeter.infrastructure.components.adapter.OnSubscribeUnsubscribeClickListener; +import com.tom.meeter.context.profile.component.viewholder.SubscriberViewHolder; +import com.tom.meeter.context.profile.domain.Subscriber; import com.tom.meeter.infrastructure.components.adapter.OnUserClickListener; import com.tom.meeter.infrastructure.components.downloader.UserImageDownloader; -import com.tom.meeter.infrastructure.components.viewholder.SubscriberViewHolder; import javax.inject.Inject; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/ActiveEventsFragment.java similarity index 95% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/ActiveEventsFragment.java index 1458fea..016fff0 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ActiveEventsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/ActiveEventsFragment.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.fragment; +package com.tom.meeter.context.profile.component.fragment; import static com.tom.meeter.context.event.activity.EventDispatcherActivity.dispatchToEventActivity; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; @@ -15,7 +15,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.tom.meeter.App; -import com.tom.meeter.context.profile.adapter.EventsAdapter; +import com.tom.meeter.context.profile.component.adapter.EventsAdapter; import com.tom.meeter.databinding.SubFragmentActiveEventsBinding; import com.tom.meeter.infrastructure.common.InfrastructureHelper; import com.tom.meeter.infrastructure.eventbus.events.IncomeEvents; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/CreateEventFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/CreateEventFragment.java similarity index 98% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/CreateEventFragment.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/CreateEventFragment.java index 8f7512d..4891fb0 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/CreateEventFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/CreateEventFragment.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.fragment; +package com.tom.meeter.context.profile.component.fragment; import static android.app.Activity.RESULT_OK; import static android.content.Context.BIND_AUTO_CREATE; @@ -6,7 +6,7 @@ import static com.tom.meeter.context.event.activity.EventLocationMapActivity.EXTRA_LNG; import static com.tom.meeter.context.event.activity.ProfileEventActivity.dispatchToProfileEventActivity; import static com.tom.meeter.context.image.activity.BaseUploadActivity.PHOTO_PATH_RESULT; -import static com.tom.meeter.context.profile.activity.NewEventOnMapActivity.createNewEventOnMapActivityIntent; +import static com.tom.meeter.context.profile.component.activity.NewEventOnMapActivity.createNewEventOnMapActivityIntent; import static com.tom.meeter.context.profile.utils.Utils.createEventRequest; import static com.tom.meeter.infrastructure.common.CommonHelper.getAppLogo; import static com.tom.meeter.infrastructure.common.CommonHelper.isEmpty; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/EventsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/EventsFragment.java similarity index 98% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/EventsFragment.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/EventsFragment.java index d5704a4..268c3dc 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/EventsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/EventsFragment.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.fragment; +package com.tom.meeter.context.profile.component.fragment; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/GoogleMapsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/GoogleMapsFragment.java similarity index 99% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/GoogleMapsFragment.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/GoogleMapsFragment.java index ea9b0e4..4f51d8a 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/GoogleMapsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/GoogleMapsFragment.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.fragment; +package com.tom.meeter.context.profile.component.fragment; import static android.content.Context.BIND_AUTO_CREATE; import static com.tom.meeter.context.event.activity.EventDispatcherActivity.dispatchToEventActivity; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/ProfileEventsFragment.java similarity index 94% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/ProfileEventsFragment.java index b5f3aeb..02ca837 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileEventsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/ProfileEventsFragment.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.fragment; +package com.tom.meeter.context.profile.component.fragment; import static com.tom.meeter.context.event.activity.EventDispatcherActivity.dispatchToEventActivity; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; @@ -16,9 +16,9 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.tom.meeter.App; -import com.tom.meeter.context.profile.adapter.EventsAdapter; +import com.tom.meeter.context.profile.component.adapter.EventsAdapter; +import com.tom.meeter.context.profile.component.viewmodel.ProfileEventsViewModel; import com.tom.meeter.context.profile.factory.ProfileEventsAssistedFactory; -import com.tom.meeter.context.profile.viewmodel.ProfileEventsViewModel; import com.tom.meeter.databinding.SubFragmentUserEventsBinding; import com.tom.meeter.infrastructure.common.InfrastructureHelper; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/ProfileFragment.java similarity index 96% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/ProfileFragment.java index db83843..fb580f6 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/ProfileFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/ProfileFragment.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.fragment; +package com.tom.meeter.context.profile.component.fragment; import static com.tom.meeter.context.auth.infrastructure.AuthHelper.getAuthHeader; import static com.tom.meeter.context.event.activity.EventDispatcherActivity.dispatchToEventActivity; @@ -34,12 +34,12 @@ import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.image.activity.UploadUserImageActivity; import com.tom.meeter.context.network.dto.UserDTO; -import com.tom.meeter.context.profile.activity.SubscribersActivity; -import com.tom.meeter.context.profile.activity.SubscriptionsActivity; +import com.tom.meeter.context.profile.component.activity.SubscribersActivity; +import com.tom.meeter.context.profile.component.activity.SubscriptionsActivity; +import com.tom.meeter.context.profile.component.viewmodel.ProfileViewModel; import com.tom.meeter.context.profile.factory.ProfileAssistedFactory; import com.tom.meeter.context.profile.message.UpdateProfileRequest; import com.tom.meeter.context.profile.service.ProfileService; -import com.tom.meeter.context.profile.viewmodel.ProfileViewModel; import com.tom.meeter.databinding.FragmentProfileBinding; import com.tom.meeter.infrastructure.common.ImagesHelper; import com.tom.meeter.infrastructure.common.InfrastructureHelper; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/SettingsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/SettingsFragment.java similarity index 97% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/SettingsFragment.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/SettingsFragment.java index 0f54f40..78e9510 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/SettingsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/SettingsFragment.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.fragment; +package com.tom.meeter.context.profile.component.fragment; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/SettingsFragmentOld.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/SettingsFragmentOld.java similarity index 90% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/SettingsFragmentOld.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/SettingsFragmentOld.java index 51a767b..8e69173 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/fragment/SettingsFragmentOld.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/SettingsFragmentOld.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.fragment; +package com.tom.meeter.context.profile.component.fragment; import android.os.Bundle; import android.preference.PreferenceFragment; diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewholder/EventViewHolder.java similarity index 95% rename from AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewholder/EventViewHolder.java index 3827566..6c1e37f 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/EventViewHolder.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewholder/EventViewHolder.java @@ -1,4 +1,4 @@ -package com.tom.meeter.infrastructure.components.viewholder; +package com.tom.meeter.context.profile.component.viewholder; import android.graphics.Bitmap; import android.view.View; diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/SubscriberViewHolder.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewholder/SubscriberViewHolder.java similarity index 85% rename from AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/SubscriberViewHolder.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewholder/SubscriberViewHolder.java index 8684d3e..bbed795 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/viewholder/SubscriberViewHolder.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewholder/SubscriberViewHolder.java @@ -1,4 +1,4 @@ -package com.tom.meeter.infrastructure.components.viewholder; +package com.tom.meeter.context.profile.component.viewholder; import android.graphics.Bitmap; import android.view.View; @@ -20,13 +20,13 @@ public SubscriberViewHolder(ActivityProfileSubscriberItemBinding binding) { public void bind( boolean isAmSubscribedTo, String name, String surname, Bitmap photo, View.OnClickListener cardClickListener, - View.OnClickListener subUnsubClickListener) { + View.OnClickListener subUnSubClickListener) { binding.subscriberName.setText(name + " " + surname); if (photo != null) { binding.photo.setImageBitmap(photo); } - binding.subUnsubBtn.setOnClickListener(subUnsubClickListener); + binding.subUnsubBtn.setOnClickListener(subUnSubClickListener); binding.subCard.setOnClickListener(cardClickListener); binding.subUnsubBtn.setText(isAmSubscribedTo ? R.string.unsubscribe : R.string.subscribe); } diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/ProfileEventsViewModel.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/ProfileEventsViewModel.java similarity index 97% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/ProfileEventsViewModel.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/ProfileEventsViewModel.java index f5160a5..0f5b0db 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/ProfileEventsViewModel.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/ProfileEventsViewModel.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.viewmodel; +package com.tom.meeter.context.profile.component.viewmodel; import static com.tom.meeter.context.auth.infrastructure.AuthHelper.getAuthHeader; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/ProfileSubscribersViewModel.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/ProfileSubscribersViewModel.java similarity index 96% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/ProfileSubscribersViewModel.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/ProfileSubscribersViewModel.java index e5bb19b..dfce7d8 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/ProfileSubscribersViewModel.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/ProfileSubscribersViewModel.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.viewmodel; +package com.tom.meeter.context.profile.component.viewmodel; import static com.tom.meeter.context.auth.infrastructure.AuthHelper.getAuthHeader; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; @@ -11,8 +11,8 @@ import androidx.lifecycle.ViewModel; import com.tom.meeter.context.network.dto.UserDTO; +import com.tom.meeter.context.profile.domain.Subscriber; import com.tom.meeter.context.profile.service.ProfileService; -import com.tom.meeter.context.profile.subscriber.Subscriber; import com.tom.meeter.infrastructure.http.BaseOnNotAuthenticatedCallback; import com.tom.meeter.infrastructure.http.HttpCodes; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/ProfileSubscriptionsViewModel.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/ProfileSubscriptionsViewModel.java similarity index 95% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/ProfileSubscriptionsViewModel.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/ProfileSubscriptionsViewModel.java index 53be0a8..75dedc0 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/ProfileSubscriptionsViewModel.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/ProfileSubscriptionsViewModel.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.viewmodel; +package com.tom.meeter.context.profile.component.viewmodel; import static com.tom.meeter.context.auth.infrastructure.AuthHelper.getAuthHeader; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; @@ -11,8 +11,8 @@ import androidx.lifecycle.ViewModel; import com.tom.meeter.context.network.dto.UserDTO; +import com.tom.meeter.context.profile.domain.Subscriber; import com.tom.meeter.context.profile.service.ProfileService; -import com.tom.meeter.context.profile.subscriber.Subscriber; import com.tom.meeter.infrastructure.http.BaseOnNotAuthenticatedCallback; import com.tom.meeter.infrastructure.http.HttpCodes; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/ProfileViewModel.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/ProfileViewModel.java similarity index 98% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/ProfileViewModel.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/ProfileViewModel.java index 0b079d3..120b97a 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/ProfileViewModel.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/ProfileViewModel.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.viewmodel; +package com.tom.meeter.context.profile.component.viewmodel; import static com.tom.meeter.context.auth.infrastructure.AuthHelper.getAuthHeader; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/UserEventsViewModel.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/UserEventsViewModel.java similarity index 93% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/UserEventsViewModel.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/UserEventsViewModel.java index b97fc21..ae7e695 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/UserEventsViewModel.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/UserEventsViewModel.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.viewmodel; +package com.tom.meeter.context.profile.component.viewmodel; import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModel; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/UserProfileViewModel.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/UserProfileViewModel.java similarity index 95% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/UserProfileViewModel.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/UserProfileViewModel.java index a0fbbfc..2be194e 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/viewmodel/UserProfileViewModel.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/viewmodel/UserProfileViewModel.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.viewmodel; +package com.tom.meeter.context.profile.component.viewmodel; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/subscriber/Subscriber.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/domain/Subscriber.java similarity index 93% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/subscriber/Subscriber.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/domain/Subscriber.java index 5146c4e..da1ff93 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/subscriber/Subscriber.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/domain/Subscriber.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.subscriber; +package com.tom.meeter.context.profile.domain; import com.tom.meeter.context.network.dto.BaseEntity; import com.tom.meeter.context.network.dto.UserDTO; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileAssistedFactory.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileAssistedFactory.java index 606bca3..5260af2 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileAssistedFactory.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileAssistedFactory.java @@ -1,6 +1,6 @@ package com.tom.meeter.context.profile.factory; -import com.tom.meeter.context.profile.viewmodel.ProfileViewModel; +import com.tom.meeter.context.profile.component.viewmodel.ProfileViewModel; import dagger.assisted.AssistedFactory; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileEventsAssistedFactory.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileEventsAssistedFactory.java index 1c9eb78..0062a85 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileEventsAssistedFactory.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileEventsAssistedFactory.java @@ -1,6 +1,6 @@ package com.tom.meeter.context.profile.factory; -import com.tom.meeter.context.profile.viewmodel.ProfileEventsViewModel; +import com.tom.meeter.context.profile.component.viewmodel.ProfileEventsViewModel; import dagger.assisted.AssistedFactory; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileSubscribersAssistedFactory.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileSubscribersAssistedFactory.java index 3f94bd1..c4bca79 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileSubscribersAssistedFactory.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileSubscribersAssistedFactory.java @@ -1,6 +1,6 @@ package com.tom.meeter.context.profile.factory; -import com.tom.meeter.context.profile.viewmodel.ProfileSubscribersViewModel; +import com.tom.meeter.context.profile.component.viewmodel.ProfileSubscribersViewModel; import dagger.assisted.AssistedFactory; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileSubscriptionsAssistedFactory.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileSubscriptionsAssistedFactory.java index 039e368..7201150 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileSubscriptionsAssistedFactory.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/factory/ProfileSubscriptionsAssistedFactory.java @@ -1,6 +1,6 @@ package com.tom.meeter.context.profile.factory; -import com.tom.meeter.context.profile.viewmodel.ProfileSubscriptionsViewModel; +import com.tom.meeter.context.profile.component.viewmodel.ProfileSubscriptionsViewModel; import dagger.assisted.AssistedFactory; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java index b994a40..cb582c1 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java @@ -28,7 +28,7 @@ import com.tom.meeter.R; import com.tom.meeter.context.auth.infrastructure.AuthHelper; import com.tom.meeter.context.image.ImageDownloader; -import com.tom.meeter.context.profile.activity.ProfileActivity; +import com.tom.meeter.context.profile.component.activity.ProfileActivity; import com.tom.meeter.context.token.service.TokenService; import com.tom.meeter.context.user.factory.UserAssistedFactory; import com.tom.meeter.context.user.service.UserService; diff --git a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/OnSubscribeUnsubscribeClickListener.java b/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/OnSubscribeUnsubscribeClickListener.java deleted file mode 100644 index 57bcc0b..0000000 --- a/AndroidClient/src/main/java/com/tom/meeter/infrastructure/components/adapter/OnSubscribeUnsubscribeClickListener.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.tom.meeter.infrastructure.components.adapter; - -import com.tom.meeter.context.profile.subscriber.Subscriber; - -public interface OnSubscribeUnsubscribeClickListener { - void onSubUnSub(Subscriber sub, int position); -} diff --git a/AndroidClient/src/main/res/layout/fragment_profile.xml b/AndroidClient/src/main/res/layout/fragment_profile.xml index 19dbf3c..5549a9f 100644 --- a/AndroidClient/src/main/res/layout/fragment_profile.xml +++ b/AndroidClient/src/main/res/layout/fragment_profile.xml @@ -14,7 +14,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - tools:context=".context.profile.fragment.ProfileFragment"> + tools:context=".context.profile.component.fragment.ProfileFragment"> + tools:context=".context.profile.component.fragment.ProfileFragment"> + tools:context=".context.profile.component.activity.SettingsActivity"> Date: Tue, 1 Jul 2025 17:32:00 +0300 Subject: [PATCH 13/16] Refac. --- .../meeter/context/user/activity/UserActivity.java | 3 --- .../user/activity/UserSubscribersActivity.java | 3 --- .../user/activity/UserSubscriptionsActivity.java | 14 ++++++-------- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java index cb582c1..f4d8d93 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserActivity.java @@ -27,7 +27,6 @@ import com.tom.meeter.App; import com.tom.meeter.R; import com.tom.meeter.context.auth.infrastructure.AuthHelper; -import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.profile.component.activity.ProfileActivity; import com.tom.meeter.context.token.service.TokenService; import com.tom.meeter.context.user.factory.UserAssistedFactory; @@ -58,8 +57,6 @@ public class UserActivity extends AppCompatActivity { @Inject UserAssistedFactory assistedFactory; @Inject - ImageDownloader imgDownloader; - @Inject EventsCardAdapter adapter; private ActivityUserBinding binding; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscribersActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscribersActivity.java index 53e5a25..d0b5c7f 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscribersActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscribersActivity.java @@ -18,7 +18,6 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.tom.meeter.App; -import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.token.service.TokenService; import com.tom.meeter.context.user.components.adapter.UsersAdapter; import com.tom.meeter.context.user.factory.UserSubscribersAssistedFactory; @@ -36,8 +35,6 @@ public class UserSubscribersActivity extends AppCompatActivity { @Inject UserSubscribersAssistedFactory assistedFactory; @Inject - ImageDownloader imgDownloader; - @Inject UsersAdapter adapter; private final Runnable onAuthFail = this::recreate; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscriptionsActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscriptionsActivity.java index 5fc8ccf..cee895c 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscriptionsActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/user/activity/UserSubscriptionsActivity.java @@ -18,7 +18,6 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.tom.meeter.App; -import com.tom.meeter.context.image.ImageDownloader; import com.tom.meeter.context.token.service.TokenService; import com.tom.meeter.context.user.components.adapter.UsersAdapter; import com.tom.meeter.context.user.factory.UserSubscriptionsAssistedFactory; @@ -36,15 +35,13 @@ public class UserSubscriptionsActivity extends AppCompatActivity { @Inject UserSubscriptionsAssistedFactory assistedFactory; @Inject - ImageDownloader imgDownloader; - @Inject UsersAdapter adapter; - private final Runnable onAuthFail = this::recreate; private ActivityProfileSubscriptionsBinding binding; private UserSubscriptionsViewModel viewModel; private AccountManager accountManager; private String userId; + private final Runnable onAuthFail = this::recreate; @Override protected void onCreate(Bundle savedInstanceState) { @@ -65,6 +62,10 @@ protected void onCreate(Bundle savedInstanceState) { return; } + binding = ActivityProfileSubscriptionsBinding.inflate(getLayoutInflater()); + View view = binding.getRoot(); + setContentView(view); + ((App) getApplication()).getUserComponent().inject(this); accountManager = AccountManager.get(this); @@ -76,14 +77,11 @@ protected void onCreate(Bundle savedInstanceState) { private void onInit(String token) { logMethod(TAG, this); - binding = ActivityProfileSubscriptionsBinding.inflate(getLayoutInflater()); - View view = binding.getRoot(); - setContentView(view); viewModel = new ViewModelProvider( this, assistedFactory.factory( - assistedFactory, userId, this, this::recreate)) + assistedFactory, userId, this, onAuthFail)) .get(UserSubscriptionsViewModel.class); binding.recyclerSubscriptions.setLayoutManager(new LinearLayoutManager(this)); From f8f18747d64c76c179d339edb019dbada2d12335 Mon Sep 17 00:00:00 2001 From: Georgy Lebedik Date: Tue, 1 Jul 2025 17:35:13 +0300 Subject: [PATCH 14/16] Refac. --- .../java/com/tom/meeter/context/profile/ProfileModule.java | 2 +- .../context/profile/component/activity/ProfileActivity.java | 4 ++-- .../profile/component/activity/SettingsActivity.java | 6 +++--- .../{settings => }/message/SettingsCreateOrUpdate.java | 2 +- .../profile/{settings => }/message/SettingsResponse.java | 2 +- .../profile/{settings => }/service/SettingsService.java | 6 +++--- 6 files changed, 11 insertions(+), 11 deletions(-) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{settings => }/message/SettingsCreateOrUpdate.java (90%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{settings => }/message/SettingsResponse.java (94%) rename AndroidClient/src/main/java/com/tom/meeter/context/profile/{settings => }/service/SettingsService.java (70%) diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileModule.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileModule.java index d8d41ac..847dd8a 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileModule.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/ProfileModule.java @@ -13,7 +13,7 @@ import com.tom.meeter.context.profile.repository.user.database.UserDao; import com.tom.meeter.context.profile.repository.user.database.UserDatabase; import com.tom.meeter.context.profile.service.ProfileService; -import com.tom.meeter.context.profile.settings.service.SettingsService; +import com.tom.meeter.context.profile.service.SettingsService; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executor; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/ProfileActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/ProfileActivity.java index 60a66ac..6510b00 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/ProfileActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/ProfileActivity.java @@ -54,9 +54,9 @@ import com.tom.meeter.context.profile.component.fragment.EventsFragment; import com.tom.meeter.context.profile.component.fragment.ProfileEventsFragment; import com.tom.meeter.context.profile.component.fragment.ProfileFragment; +import com.tom.meeter.context.profile.message.SettingsResponse; import com.tom.meeter.context.profile.service.ProfileService; -import com.tom.meeter.context.profile.settings.message.SettingsResponse; -import com.tom.meeter.context.profile.settings.service.SettingsService; +import com.tom.meeter.context.profile.service.SettingsService; import com.tom.meeter.context.token.service.TokenService; import com.tom.meeter.databinding.ProfileActivityBinding; import com.tom.meeter.infrastructure.common.Globals; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/SettingsActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/SettingsActivity.java index 39b4e34..8626e95 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/SettingsActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/SettingsActivity.java @@ -20,9 +20,9 @@ import com.tom.meeter.context.auth.infrastructure.AuthHelper; import com.tom.meeter.context.launcher.Launcher; import com.tom.meeter.context.profile.component.fragment.SettingsFragment; -import com.tom.meeter.context.profile.settings.message.SettingsCreateOrUpdate; -import com.tom.meeter.context.profile.settings.message.SettingsResponse; -import com.tom.meeter.context.profile.settings.service.SettingsService; +import com.tom.meeter.context.profile.message.SettingsCreateOrUpdate; +import com.tom.meeter.context.profile.message.SettingsResponse; +import com.tom.meeter.context.profile.service.SettingsService; import com.tom.meeter.databinding.SettingsActivityBinding; import com.tom.meeter.infrastructure.common.Globals; import com.tom.meeter.infrastructure.common.PreferencesHelper; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/settings/message/SettingsCreateOrUpdate.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsCreateOrUpdate.java similarity index 90% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/settings/message/SettingsCreateOrUpdate.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsCreateOrUpdate.java index 69977cc..296cdb3 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/settings/message/SettingsCreateOrUpdate.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsCreateOrUpdate.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.settings.message; +package com.tom.meeter.context.profile.message; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/settings/message/SettingsResponse.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsResponse.java similarity index 94% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/settings/message/SettingsResponse.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsResponse.java index 238fe94..8f66147 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/settings/message/SettingsResponse.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsResponse.java @@ -1,4 +1,4 @@ -package com.tom.meeter.context.profile.settings.message; +package com.tom.meeter.context.profile.message; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/settings/service/SettingsService.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/service/SettingsService.java similarity index 70% rename from AndroidClient/src/main/java/com/tom/meeter/context/profile/settings/service/SettingsService.java rename to AndroidClient/src/main/java/com/tom/meeter/context/profile/service/SettingsService.java index a4ea675..0fb6eaa 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/settings/service/SettingsService.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/service/SettingsService.java @@ -1,9 +1,9 @@ -package com.tom.meeter.context.profile.settings.service; +package com.tom.meeter.context.profile.service; import static com.tom.meeter.infrastructure.common.Globals.AUTH_HEADER; -import com.tom.meeter.context.profile.settings.message.SettingsCreateOrUpdate; -import com.tom.meeter.context.profile.settings.message.SettingsResponse; +import com.tom.meeter.context.profile.message.SettingsCreateOrUpdate; +import com.tom.meeter.context.profile.message.SettingsResponse; import retrofit2.Call; import retrofit2.http.Body; From f60738f5d828dadbb013bd215bf00becdaeab331 Mon Sep 17 00:00:00 2001 From: Georgy Lebedik Date: Wed, 2 Jul 2025 14:43:55 +0300 Subject: [PATCH 15/16] Start implementation for statuses filters. --- .../gps/service/LocationTrackerService.java | 2 +- .../component/FilterBottomSheetDialog.java | 66 ++++++ .../component/activity/DrawerUtils.java | 156 +++++++++++++ .../component/activity/ProfileActivity.java | 221 ++++++------------ .../component/activity/SettingsActivity.java | 2 +- .../component/adapter/EventsAdapter.java | 1 - .../component/binder/EventBinderImpl.java | 2 +- .../fragment/GoogleMapsFragment.java | 114 +++++---- .../message/SettingsCreateOrUpdate.java | 25 +- .../profile/message/SettingsResponse.java | 43 ++-- .../res/layout/dialog_filter_bottom_sheet.xml | 28 +++ .../src/main/res/menu/events_menu.xml | 8 + .../src/main/res/values-en/arrays.xml | 12 + .../src/main/res/values-en/strings.xml | 2 + .../src/main/res/values-ru-rRU/arrays.xml | 12 + .../src/main/res/values-ru-rRU/strings.xml | 2 + AndroidClient/src/main/res/values/arrays.xml | 12 + AndroidClient/src/main/res/values/strings.xml | 2 + 18 files changed, 495 insertions(+), 215 deletions(-) create mode 100644 AndroidClient/src/main/java/com/tom/meeter/context/profile/component/FilterBottomSheetDialog.java create mode 100644 AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/DrawerUtils.java create mode 100644 AndroidClient/src/main/res/layout/dialog_filter_bottom_sheet.xml create mode 100644 AndroidClient/src/main/res/menu/events_menu.xml diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/gps/service/LocationTrackerService.java b/AndroidClient/src/main/java/com/tom/meeter/context/gps/service/LocationTrackerService.java index 9b03466..d10cdba 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/gps/service/LocationTrackerService.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/gps/service/LocationTrackerService.java @@ -201,7 +201,7 @@ public void removeLocationTrackerListener(LocationTrackerListener me) { } private void dumpCurrentListeners() { - logMethod(TAG, this); + logMethod(TAG, this, "listeners size: " + listeners.size()); for (LocationTrackerListener l : listeners) { Log.d(TAG, l.toString()); } diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/FilterBottomSheetDialog.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/FilterBottomSheetDialog.java new file mode 100644 index 0000000..d88be8c --- /dev/null +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/FilterBottomSheetDialog.java @@ -0,0 +1,66 @@ +package com.tom.meeter.context.profile.component; + +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.android.material.bottomsheet.BottomSheetDialogFragment; +import com.tom.meeter.R; +import com.tom.meeter.databinding.DialogFilterBottomSheetBinding; + +import java.util.HashSet; +import java.util.Set; + +public class FilterBottomSheetDialog extends BottomSheetDialogFragment { + + private DialogFilterBottomSheetBinding binding; + private final Set selectedStatuses = new HashSet<>(); + + @Nullable + @Override + public View onCreateView( + @NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + + binding = DialogFilterBottomSheetBinding.inflate(inflater, container, false); + + Context ctx = requireContext(); + + String[] statuses = ctx.getResources().getStringArray(R.array.statuses); + + for (String status : statuses) { + CheckBox checkBox = new CheckBox(ctx); + checkBox.setText(status); + checkBox.setOnCheckedChangeListener( + (buttonView, isChecked) -> { + if (isChecked) { + selectedStatuses.add(status); + } else { + selectedStatuses.remove(status); + } + }); + binding.statusCheckboxContainer.addView(checkBox); + } + + binding.applyButton.setOnClickListener(v -> { + Toast.makeText(getContext(), + "Выбрано: " + selectedStatuses.toString(), Toast.LENGTH_SHORT).show(); + dismiss(); + }); + + return binding.getRoot(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/DrawerUtils.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/DrawerUtils.java new file mode 100644 index 0000000..1cdcefc --- /dev/null +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/DrawerUtils.java @@ -0,0 +1,156 @@ +package com.tom.meeter.context.profile.component.activity; + +import static com.tom.meeter.context.profile.component.activity.ProfileActivity.DRAWER_CONTACT_ID; +import static com.tom.meeter.context.profile.component.activity.ProfileActivity.DRAWER_EVENTS_ID; +import static com.tom.meeter.context.profile.component.activity.ProfileActivity.DRAWER_HELP_ID; +import static com.tom.meeter.context.profile.component.activity.ProfileActivity.DRAWER_LOGOUT_ID; +import static com.tom.meeter.context.profile.component.activity.ProfileActivity.DRAWER_NEW_EVENT_ID; +import static com.tom.meeter.context.profile.component.activity.ProfileActivity.DRAWER_NOTIFICATION_ID; +import static com.tom.meeter.context.profile.component.activity.ProfileActivity.DRAWER_OPEN_SOURCE_ID; +import static com.tom.meeter.context.profile.component.activity.ProfileActivity.DRAWER_PROFILE_ID; +import static com.tom.meeter.context.profile.component.activity.ProfileActivity.DRAWER_SETTINGS_ID; + +import android.util.Log; + +import androidx.recyclerview.widget.RecyclerView; + +import com.mikepenz.fastadapter.FastAdapter; +import com.mikepenz.fastadapter.IItem; +import com.mikepenz.fastadapter.listeners.OnBindViewHolderListenerImpl; +import com.mikepenz.fontawesome_typeface_library.FontAwesome; +import com.mikepenz.google_material_typeface_library.GoogleMaterial; +import com.mikepenz.iconics.typeface.IIcon; +import com.mikepenz.materialdrawer.Drawer; +import com.mikepenz.materialdrawer.holder.ImageHolder; +import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; + +import java.util.function.Function; + +public class DrawerUtils { + private DrawerUtils() { + } + + private static final String TAG = DrawerUtils.class.getCanonicalName(); + + static Function getIconProvider( + ProfileActivity.IconPackEnum iconPack) { + return switch (iconPack) { + case FONT_AWESOME -> DrawerUtils::fontAwesomeIconPack; + case GOOGLE_MATERIALS -> DrawerUtils::googleMaterialIconPack; + default -> DrawerUtils::fontAwesomeIconPack; + }; + } + + static IIcon googleMaterialIconPack(Long id) { + if (id == DRAWER_PROFILE_ID) { + //return GoogleMaterial.Icon.gmd_account_box; + return GoogleMaterial.Icon.gmd_person; + } + if (id == DRAWER_EVENTS_ID) { + return GoogleMaterial.Icon.gmd_public; + } + if (id == DRAWER_NEW_EVENT_ID) { + return GoogleMaterial.Icon.gmd_event; + //return GoogleMaterial.Icon.gmd_perm_contact_calendar; + } + if (id == DRAWER_NOTIFICATION_ID) { + //return GoogleMaterial.Icon.gmd_visibility; + //return GoogleMaterial.Icon.gmd_notifications; + return GoogleMaterial.Icon.gmd_notifications_active; + } + if (id == DRAWER_SETTINGS_ID) { + return GoogleMaterial.Icon.gmd_memory; + } + if (id == DRAWER_HELP_ID) { + return GoogleMaterial.Icon.gmd_help; + } + if (id == DRAWER_OPEN_SOURCE_ID) { + return GoogleMaterial.Icon.gmd_live_help; + } + if (id == DRAWER_CONTACT_ID) { + return GoogleMaterial.Icon.gmd_email; + } + if (id == DRAWER_LOGOUT_ID) { + return GoogleMaterial.Icon.gmd_settings_power; + //return GoogleMaterial.Icon.gmd_close; + } + return GoogleMaterial.Icon.gmd_help; + } + + static IIcon fontAwesomeIconPack(Long id) { + if (id == DRAWER_PROFILE_ID) { + return FontAwesome.Icon.faw_user; + } + if (id == DRAWER_EVENTS_ID) { + return FontAwesome.Icon.faw_globe; + } + if (id == DRAWER_NEW_EVENT_ID) { + return FontAwesome.Icon.faw_calendar; + } + if (id == DRAWER_NOTIFICATION_ID) { + return FontAwesome.Icon.faw_eye; + } + if (id == DRAWER_SETTINGS_ID) { + return FontAwesome.Icon.faw_cog; + } + if (id == DRAWER_HELP_ID) { + return FontAwesome.Icon.faw_question_circle; + } + if (id == DRAWER_OPEN_SOURCE_ID) { + return FontAwesome.Icon.faw_question; + } + if (id == DRAWER_CONTACT_ID) { + return FontAwesome.Icon.faw_github; + } + if (id == DRAWER_LOGOUT_ID) { + return FontAwesome.Icon.faw_power_off; + } + return FontAwesome.Icon.faw_coffee; + } + + public static void updateIconFor( + Drawer drawer, Function iconProvider, long itemId) { + IDrawerItem iDrawerItem = drawer.getDrawerItem(itemId); + if (iDrawerItem == null) { + Log.d(TAG, "Drawer item is not exist " + itemId); + return; + } + drawer.updateIcon(itemId, new ImageHolder(iconProvider.apply(itemId))); + } + + /** + * Workaround for https://github.com/mikepenz/MaterialDrawer/issues/2789 + * For base implementation look at the {@link OnBindViewHolderListenerImpl} + */ + public static class OnBindViewHolderListenerImplBase extends OnBindViewHolderListenerImpl { + + // Values was received from revers engineered variables for current library. + private final int fastadapter_item_adapter = 2131296379; + private final int fastadapter_item = 2131296378; + private final int unknown_item_id = 2131296441; + + @Override + public void unBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { + //logMethod(TAG, this); + //IItem item = FastAdapter.getHolderAdapterItemTag(viewHolder); + var item = (IItem) viewHolder.itemView.getTag(fastadapter_item); + if (item != null) { + item.unbindView(viewHolder); + if (viewHolder instanceof FastAdapter.ViewHolder) { + ((FastAdapter.ViewHolder) viewHolder).unbindView(item); + } + //remove set tag's + viewHolder.itemView.setTag(fastadapter_item, null); + viewHolder.itemView.setTag(fastadapter_item_adapter, null); + } + //super.unBindViewHolder(viewHolder, position); + } + + //@Override + public void unBindViewHolderWithoutUnbind(RecyclerView.ViewHolder viewHolder, int position) { + if (FastAdapter.getHolderAdapterItemTag(viewHolder) != null) { + super.unBindViewHolder(viewHolder, position); + } + } + } +} diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/ProfileActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/ProfileActivity.java index 6510b00..c6a5860 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/ProfileActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/ProfileActivity.java @@ -4,6 +4,8 @@ import static com.tom.meeter.context.auth.infrastructure.AuthHelper.checkToken; import static com.tom.meeter.context.auth.infrastructure.AuthHelper.getSingleAccount; import static com.tom.meeter.context.auth.infrastructure.AuthHelper.invalidateToken; +import static com.tom.meeter.context.profile.component.activity.DrawerUtils.getIconProvider; +import static com.tom.meeter.context.profile.component.activity.DrawerUtils.updateIconFor; import static com.tom.meeter.infrastructure.common.InfrastructureHelper.logMethod; import static com.tom.meeter.infrastructure.utils.Utils.requireNonNull; @@ -15,6 +17,8 @@ import android.os.Build; import android.os.Bundle; import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.ImageView; @@ -28,18 +32,11 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; -import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.mikepenz.fastadapter.FastAdapter; -import com.mikepenz.fastadapter.IItem; -import com.mikepenz.fastadapter.listeners.OnBindViewHolderListenerImpl; -import com.mikepenz.fontawesome_typeface_library.FontAwesome; -import com.mikepenz.google_material_typeface_library.GoogleMaterial; import com.mikepenz.iconics.typeface.IIcon; import com.mikepenz.materialdrawer.Drawer; import com.mikepenz.materialdrawer.DrawerBuilder; -import com.mikepenz.materialdrawer.holder.ImageHolder; import com.mikepenz.materialdrawer.model.DividerDrawerItem; import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; import com.mikepenz.materialdrawer.model.SecondaryDrawerItem; @@ -49,7 +46,9 @@ import com.tom.meeter.R; import com.tom.meeter.context.auth.activity.LoginActivity; import com.tom.meeter.context.auth.infrastructure.AuthHelper; +import com.tom.meeter.context.network.dto.EventDTO; import com.tom.meeter.context.network.service.SocketIOService; +import com.tom.meeter.context.profile.component.FilterBottomSheetDialog; import com.tom.meeter.context.profile.component.fragment.CreateEventFragment; import com.tom.meeter.context.profile.component.fragment.EventsFragment; import com.tom.meeter.context.profile.component.fragment.ProfileEventsFragment; @@ -66,6 +65,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.Function; import javax.inject.Inject; @@ -78,24 +78,24 @@ public class ProfileActivity extends AppCompatActivity { private static final String TAG = ProfileActivity.class.getCanonicalName(); - private static final long DRAWER_PROFILE_ID = 0; - private static final String PROFILE_FRAGMENT_TAG = "profile_fragment_tag"; + static final long DRAWER_PROFILE_ID = 0; + static final String PROFILE_FRAGMENT_TAG = "profile_fragment_tag"; - private static final long DRAWER_EVENTS_ID = 1; - private static final String EVENTS_FRAGMENT_TAG = "events_fragment_tag"; + static final long DRAWER_EVENTS_ID = 1; + static final String EVENTS_FRAGMENT_TAG = "events_fragment_tag"; - private static final long DRAWER_NEW_EVENT_ID = 2; - private static final String NEW_EVENT_FRAGMENT_TAG = "new_event_fragment_tag"; + static final long DRAWER_NEW_EVENT_ID = 2; + static final String NEW_EVENT_FRAGMENT_TAG = "new_event_fragment_tag"; - private static final long DRAWER_NOTIFICATION_ID = 3; - private static final String NOTIFICATIONS_FRAGMENT_TAG = "notifications_fragment_tag"; + static final long DRAWER_NOTIFICATION_ID = 3; + static final String NOTIFICATIONS_FRAGMENT_TAG = "notifications_fragment_tag"; - private static final long DRAWER_SETTINGS_ID = 10; // -> no need a tag. + static final long DRAWER_SETTINGS_ID = 10; // -> no need a tag. - private static final long DRAWER_HELP_ID = 11; - private static final long DRAWER_OPEN_SOURCE_ID = 12; - private static final long DRAWER_CONTACT_ID = 13; - private static final long DRAWER_LOGOUT_ID = 99; + static final long DRAWER_HELP_ID = 11; + static final long DRAWER_OPEN_SOURCE_ID = 12; + static final long DRAWER_CONTACT_ID = 13; + static final long DRAWER_LOGOUT_ID = 99; private static final Map DRAWER_FRAGMENT_TAGS = new HashMap<>(); @@ -116,7 +116,10 @@ public class ProfileActivity extends AppCompatActivity { */ } - private enum IconPackEnum { + private Toolbar toolbar; + private boolean showMenu = false; + + enum IconPackEnum { FONT_AWESOME, GOOGLE_MATERIALS } @@ -153,6 +156,35 @@ public ProfileActivity() { logMethod(TAG, this); } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + logMethod(TAG, this); + if (showMenu) { + getMenuInflater().inflate(R.menu.events_menu, menu); + return true; + } + return false; + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + logMethod(TAG, this, item.getItemId()); + if (item.getItemId() == R.id.action_filter) { + new FilterBottomSheetDialog() + .show(getSupportFragmentManager(), "FilterDialog"); + return true; + } + return super.onOptionsItemSelected(item); + } + + private void hideToolbar() { + toolbar.setVisibility(View.GONE); + } + + private void showToolbar() { + toolbar.setVisibility(View.VISIBLE); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -179,7 +211,7 @@ private void onInit(Bundle savedInstanceState) { this, new Intent(this, SocketIOService.class)); setupPreferences(); - Toolbar toolbar = binding.profileActivityToolbar; + toolbar = binding.profileActivityToolbar; setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -189,7 +221,7 @@ private void onInit(Bundle savedInstanceState) { setupDrawer(toolbar, icons); drawer.getAdapter() - .withOnBindViewHolderListener(new OnBindViewHolderListenerImplBase()); + .withOnBindViewHolderListener(new DrawerUtils.OnBindViewHolderListenerImplBase()); if (savedInstanceState == null) { lastNavItemId = DRAWER_PROFILE_ID; @@ -217,7 +249,7 @@ public void onResponse( return; } // As settings exist on the server... - updatePreferences(res.body()); + updateLocalPreferences(res.body()); } }); } @@ -237,7 +269,7 @@ public void onResponse( return; } // As settings exist on the server... - updatePreferences(res.body()); + updateLocalPreferences(res.body()); } }); } @@ -268,7 +300,7 @@ public void onBackPressed() { super.onBackPressed(); } - private void updatePreferences(SettingsResponse res) { + private void updateLocalPreferences(SettingsResponse res) { SharedPreferences.Editor edit = getDefaultSharedPreferences(this).edit(); Integer searchArea = res.getSearchArea(); if (searchArea != null) { @@ -278,7 +310,12 @@ private void updatePreferences(SettingsResponse res) { if (needTrackUser != null) { edit.putBoolean(getString(R.string.prefs_need_track_user), needTrackUser); } - if (searchArea != null || needTrackUser != null) { + Set statuses = res.getVisibleEventStatuses(); + if (needTrackUser != null) { + edit.putBoolean(getString(R.string.prefs_visible_event_statuses), needTrackUser); + } + + if (searchArea != null || needTrackUser != null || statuses != null) { edit.apply(); } } @@ -327,6 +364,7 @@ private boolean onDrawerItemClickListener( DRAWER_OPEN_SOURCE_ID = 12; DRAWER_CONTACT_ID = 13; */ + showMenu = lastNavItemId == DRAWER_EVENTS_ID; renderSelectedFragment(); return true; } @@ -366,8 +404,11 @@ private void renderSelectedFragment() { private void restoreSettings() { logMethod(TAG, this); - Long fragmentId = getFragmentIdByTag( - getCurrentFragmentTag(getSupportFragmentManager())); + String tag = getCurrentFragmentTag(getSupportFragmentManager()); + if (EVENTS_FRAGMENT_TAG.equals(tag)) { + showMenu = true; + } + Long fragmentId = getFragmentIdByTag(tag); drawer.setSelection(fragmentId, false); setupActionBarTitle(fragmentId); drawer.closeDrawer(); @@ -565,126 +606,4 @@ private void updateDrawerIcons(IconPackEnum iconPack) { updateIconFor(drawer, iconProvider, DRAWER_LOGOUT_ID); icons = iconPack; } - - private static Function getIconProvider( - IconPackEnum iconPack) { - return switch (iconPack) { - case FONT_AWESOME -> ProfileActivity::fontAwesomeIconPack; - case GOOGLE_MATERIALS -> ProfileActivity::googleMaterialIconPack; - default -> ProfileActivity::fontAwesomeIconPack; - }; - } - - private static IIcon googleMaterialIconPack(Long id) { - if (id == DRAWER_PROFILE_ID) { - //return GoogleMaterial.Icon.gmd_account_box; - return GoogleMaterial.Icon.gmd_person; - } - if (id == DRAWER_EVENTS_ID) { - return GoogleMaterial.Icon.gmd_public; - } - if (id == DRAWER_NEW_EVENT_ID) { - return GoogleMaterial.Icon.gmd_event; - //return GoogleMaterial.Icon.gmd_perm_contact_calendar; - } - if (id == DRAWER_NOTIFICATION_ID) { - //return GoogleMaterial.Icon.gmd_visibility; - //return GoogleMaterial.Icon.gmd_notifications; - return GoogleMaterial.Icon.gmd_notifications_active; - } - if (id == DRAWER_SETTINGS_ID) { - return GoogleMaterial.Icon.gmd_memory; - } - if (id == DRAWER_HELP_ID) { - return GoogleMaterial.Icon.gmd_help; - } - if (id == DRAWER_OPEN_SOURCE_ID) { - return GoogleMaterial.Icon.gmd_live_help; - } - if (id == DRAWER_CONTACT_ID) { - return GoogleMaterial.Icon.gmd_email; - } - if (id == DRAWER_LOGOUT_ID) { - return GoogleMaterial.Icon.gmd_settings_power; - //return GoogleMaterial.Icon.gmd_close; - } - return GoogleMaterial.Icon.gmd_help; - } - - private static IIcon fontAwesomeIconPack(Long id) { - if (id == DRAWER_PROFILE_ID) { - return FontAwesome.Icon.faw_user; - } - if (id == DRAWER_EVENTS_ID) { - return FontAwesome.Icon.faw_globe; - } - if (id == DRAWER_NEW_EVENT_ID) { - return FontAwesome.Icon.faw_calendar; - } - if (id == DRAWER_NOTIFICATION_ID) { - return FontAwesome.Icon.faw_eye; - } - if (id == DRAWER_SETTINGS_ID) { - return FontAwesome.Icon.faw_cog; - } - if (id == DRAWER_HELP_ID) { - return FontAwesome.Icon.faw_question_circle; - } - if (id == DRAWER_OPEN_SOURCE_ID) { - return FontAwesome.Icon.faw_question; - } - if (id == DRAWER_CONTACT_ID) { - return FontAwesome.Icon.faw_github; - } - if (id == DRAWER_LOGOUT_ID) { - return FontAwesome.Icon.faw_power_off; - } - return FontAwesome.Icon.faw_coffee; - } - - private static void updateIconFor( - Drawer drawer, Function iconProvider, long itemId) { - IDrawerItem iDrawerItem = drawer.getDrawerItem(itemId); - if (iDrawerItem == null) { - Log.d(TAG, "Drawer item is not exist " + itemId); - return; - } - drawer.updateIcon(itemId, new ImageHolder(iconProvider.apply(itemId))); - } - - /** - * Workaround for https://github.com/mikepenz/MaterialDrawer/issues/2789 - * For base implementation look at the {@link OnBindViewHolderListenerImpl} - */ - public static class OnBindViewHolderListenerImplBase extends OnBindViewHolderListenerImpl { - - // Values was received from revers engineered variables for current library. - private final int fastadapter_item_adapter = 2131296379; - private final int fastadapter_item = 2131296378; - private final int unknown_item_id = 2131296441; - - @Override - public void unBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { - //logMethod(TAG, this); - //IItem item = FastAdapter.getHolderAdapterItemTag(viewHolder); - var item = (IItem) viewHolder.itemView.getTag(fastadapter_item); - if (item != null) { - item.unbindView(viewHolder); - if (viewHolder instanceof FastAdapter.ViewHolder) { - ((FastAdapter.ViewHolder) viewHolder).unbindView(item); - } - //remove set tag's - viewHolder.itemView.setTag(fastadapter_item, null); - viewHolder.itemView.setTag(fastadapter_item_adapter, null); - } - //super.unBindViewHolder(viewHolder, position); - } - - //@Override - public void unBindViewHolderWithoutUnbind(RecyclerView.ViewHolder viewHolder, int position) { - if (FastAdapter.getHolderAdapterItemTag(viewHolder) != null) { - super.unBindViewHolder(viewHolder, position); - } - } - } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/SettingsActivity.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/SettingsActivity.java index 8626e95..6c3da13 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/SettingsActivity.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/activity/SettingsActivity.java @@ -41,7 +41,7 @@ public class SettingsActivity extends AppCompatActivity { @Inject SettingsService settingsService; - SettingsActivityBinding binding; + private SettingsActivityBinding binding; private AccountManager accountManager; diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/adapter/EventsAdapter.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/adapter/EventsAdapter.java index 5024ebf..0809f34 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/adapter/EventsAdapter.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/adapter/EventsAdapter.java @@ -43,7 +43,6 @@ public void initialize( @Override public EventViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - logMethod(TAG, this); return new EventViewHolder( EventViewBinding.inflate( LayoutInflater.from(parent.getContext()), parent, false)); diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/EventBinderImpl.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/EventBinderImpl.java index 260df64..b0d318e 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/EventBinderImpl.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/binder/EventBinderImpl.java @@ -57,7 +57,7 @@ public void setOnAuthFailAction(Runnable onAuthFail) { @Override public void bind(EventViewHolder holder, EventDTO event) { - Log.d(TAG, "Current thread: " + Thread.currentThread().getName()); + //Log.d(TAG, "Current thread: " + Thread.currentThread().getName()); String photoPath = event.getPhotoPath(); Bitmap cachedPhoto = photoPath != null diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/GoogleMapsFragment.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/GoogleMapsFragment.java index 4f51d8a..7943c38 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/GoogleMapsFragment.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/component/fragment/GoogleMapsFragment.java @@ -21,7 +21,6 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; @@ -73,26 +72,25 @@ public class GoogleMapsFragment extends Fragment private static final String TAG = GoogleMapsFragment.class.getCanonicalName(); private static final LatLng DEFAULT = new LatLng(0.0, 0.0); + @Inject + ImageDownloader imageDownloader; private ServiceConnection locationServiceConnection; private LocationTrackerService locationService; private String meString; + private BitmapDescriptor userIcon; private boolean trackUser; private int searchArea; private boolean firstOpening = true; + private boolean needLocationUpdates = true; private Marker userMarker = null; private Circle searchCircle = null; private GoogleMap gmap = null; private CameraPosition camPosition = null; private final Map events = new HashMap<>(); - private BitmapDescriptor userIcon; - private GMapEvent lastClickedEvent; - @Inject - ImageDownloader imageDownloader; - public GoogleMapsFragment() { logMethod(TAG, this); } @@ -107,12 +105,13 @@ public void onAttach(Context context) { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - logMethod(TAG, this); + logMethod(TAG, this, "Registering event bus"); readPreferences(); ((App) getActivity().getApplication()).getProfileComponent().inject(this); - MapsInitializer.initialize(getContext()); + Context ctx = requireContext(); + MapsInitializer.initialize(ctx); userIcon = BitmapDescriptorFactory.fromBitmap( Bitmap.createScaledBitmap( BitmapFactory.decodeResource( @@ -121,8 +120,6 @@ public void onCreate(Bundle savedInstanceState) { EventBus.getDefault().register(this); - Log.d(TAG, "GoogleMapsFragment registered event bus"); - locationServiceConnection = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder binder) { logMethod(TAG, this); @@ -133,14 +130,12 @@ public void onServiceConnected(ComponentName name, IBinder binder) { public void onServiceDisconnected(ComponentName name) { logMethod(TAG, this); locationService = null; + locationServiceConnection = null; } }; - Context ctx = getContext(); - if (ctx == null) { - throw new IllegalStateException("Context is null"); - } - Intent service = new Intent(ctx, LocationTrackerService.class); - ctx.bindService(service, locationServiceConnection, BIND_AUTO_CREATE); + ctx.bindService( + new Intent(ctx, LocationTrackerService.class), + locationServiceConnection, BIND_AUTO_CREATE); } @Override @@ -151,12 +146,10 @@ public View onCreateView( opts.zoomControlsEnabled(true); SupportMapFragment sMapFragment = SupportMapFragment.newInstance(opts); sMapFragment.getMapAsync(this); - FragmentManager fm = getFragmentManager(); - if (fm != null) { - fm.beginTransaction() - .replace(R.id.event_fragment_sub_fragment_gmap, sMapFragment) - .commit(); - } + getParentFragmentManager() + .beginTransaction() + .replace(R.id.event_fragment_sub_fragment_gmap, sMapFragment) + .commit(); return inflater.inflate(R.layout.sub_fragment_gmaps, container, false); } @@ -168,19 +161,17 @@ public void onMapReady(GoogleMap googleMap) { putExistingMarkersOnMap(); if (locationService == null) { - Log.w(TAG, "Location service is not ready..."); + Log.d(TAG, "Location service is not ready yet or already uninstalled."); } LatLng lastKnownUserLocation = null; if (locationService != null && locationService.canGetLocation()) { Location lkl = locationService.getLastKnownLocation(); if (lkl != null) { + needLocationUpdates = false; lastKnownUserLocation = mapToLatTng(lkl); } else { Log.w(TAG, "Can get location, but service returns null."); } - } else { - Toast.makeText(getContext(), R.string.location_is_disabled, Toast.LENGTH_SHORT).show(); - Log.w(TAG, "Unable to get last known user location."); } moveCamera(lastKnownUserLocation, gmap, firstOpening, camPosition); @@ -204,32 +195,54 @@ public void onMapReady(GoogleMap googleMap) { @Override public void onLocationChanged(Location location) { - logMethod(TAG, this); - if (trackUser) { - Toast.makeText(getContext(), R.string.location_changed, Toast.LENGTH_SHORT).show(); + logMethod(TAG, this, + "trackUser? " + trackUser + + ", needLocationUpdates? " + needLocationUpdates); + if (trackUser || needLocationUpdates) { if (gmap == null) { - Log.w(TAG, "Gmap is not ready..."); + Toast.makeText( + requireContext(), + "Skip location update since google map is not ready", + Toast.LENGTH_SHORT) + .show(); + + Log.w(TAG, "Skip location update since google map is not ready."); if (userMarker != null) { userMarker.setPosition(mapToLatTng(location)); } } else { - if (userMarker == null) { - userMarker = gmap.addMarker(createUserMarkerOptions(mapToLatTng(location))); - } else { - userMarker.setPosition(mapToLatTng(location)); - } + needLocationUpdates = false; + moveUserMarker(location); searchCircle.setCenter(userMarker.getPosition()); - if (camPosition != null) { - gmap.animateCamera(CameraUpdateFactory.newLatLngZoom(userMarker.getPosition(), camPosition.zoom), 1200, null); + gmap.animateCamera( + CameraUpdateFactory.newLatLngZoom( + mapToLatTng(location), ZOOM_VALUE), 6000, null); + if (!trackUser) { + uninstallLocationService(); } } + } else { + uninstallLocationService(); + } + } + + private void moveUserMarker(Location location) { + LatLng latLng = mapToLatTng(location); + if (userMarker == null) { + userMarker = gmap.addMarker(createUserMarkerOptions(latLng)); + } else { + userMarker.setPosition(latLng); } } private void idleListener() { + assert searchCircle != null; if (camPosition == null || camPosition.target.latitude != gmap.getCameraPosition().target.latitude || camPosition.target.longitude != gmap.getCameraPosition().target.longitude) { + if (needLocationUpdates) { + return; + } camPosition = gmap.getCameraPosition(); LatLng position = camPosition.target; Log.d(TAG, "onCameraIdleListener() target:" + position + " zoom:" + camPosition.zoom); @@ -250,7 +263,7 @@ private boolean markerClickListener(Marker marker) { } if (target.equals(lastClickedEvent)) { Log.d(TAG, "Double Click on: " + target.getName()); - dispatchToEventActivity(getContext(), target.getId()); + dispatchToEventActivity(requireContext(), target.getId()); return false; } lastClickedEvent = target; @@ -294,13 +307,22 @@ private Marker addMarkerWithPhoto(EventDTO event) { @Override public void onDestroy() { super.onDestroy(); + logMethod(TAG, this); + uninstallLocationService(); + EventBus.getDefault().unregister(this); + Log.d(TAG, "GoogleMapsFragment Unregistered event bus"); + } + + private void uninstallLocationService() { logMethod(TAG, this); if (locationService != null) { locationService.removeLocationTrackerListener(this); } - getContext().unbindService(locationServiceConnection); - EventBus.getDefault().unregister(this); - Log.d(TAG, "GoogleMapsFragment Unregistered event bus"); + if (locationServiceConnection != null) { + requireContext().unbindService(locationServiceConnection); + } + locationServiceConnection = null; + locationService = null; } @Subscribe(threadMode = ThreadMode.MAIN) @@ -355,13 +377,17 @@ private void readPreferences() { } public static void moveCamera( - LatLng lastKnownUserLocation, GoogleMap gmap, boolean firstOpening, CameraPosition camPosition) { + LatLng lastKnownUserLocation, GoogleMap gmap, boolean firstOpening, + CameraPosition camPosition) { if (firstOpening) { if (lastKnownUserLocation != null) { - gmap.animateCamera(CameraUpdateFactory.newLatLngZoom(lastKnownUserLocation, ZOOM_VALUE), 6000, null); + gmap.animateCamera( + CameraUpdateFactory.newLatLngZoom( + lastKnownUserLocation, ZOOM_VALUE), 6000, null); } } else if (camPosition != null) { - gmap.moveCamera(CameraUpdateFactory.newCameraPosition(camPosition)); + gmap.moveCamera( + CameraUpdateFactory.newCameraPosition(camPosition)); } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsCreateOrUpdate.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsCreateOrUpdate.java index 296cdb3..6431f25 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsCreateOrUpdate.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsCreateOrUpdate.java @@ -1,19 +1,34 @@ package com.tom.meeter.context.profile.message; +import static com.tom.meeter.context.profile.message.SettingsResponse.NEED_TRACK_USER_KEY; +import static com.tom.meeter.context.profile.message.SettingsResponse.SEARCH_AREA_KEY; +import static com.tom.meeter.context.profile.message.SettingsResponse.VISIBLE_EVENT_STATUSES_KEY; + import com.fasterxml.jackson.annotation.JsonProperty; +import com.tom.meeter.context.network.dto.EventDTO; + +import java.util.Set; public class SettingsCreateOrUpdate { - @JsonProperty(value = "search_area") + @JsonProperty(value = SEARCH_AREA_KEY) private Integer searchArea; - @JsonProperty(value = "need_track_user") + @JsonProperty(value = NEED_TRACK_USER_KEY) private Boolean needTrackUser; + @JsonProperty(value = VISIBLE_EVENT_STATUSES_KEY) + private Set visibleEventStatuses; - public SettingsCreateOrUpdate(Integer searchArea, Boolean needTrackUser) { + public SettingsCreateOrUpdate( + Integer searchArea, Boolean needTrackUser) { this.searchArea = searchArea; this.needTrackUser = needTrackUser; } + public SettingsCreateOrUpdate( + Set visibleEventStatuses) { + this.visibleEventStatuses = visibleEventStatuses; + } + public Integer getSearchArea() { return searchArea; } @@ -21,4 +36,8 @@ public Integer getSearchArea() { public Boolean getNeedTrackUser() { return needTrackUser; } + + public Set getVisibleEventStatuses() { + return visibleEventStatuses; + } } diff --git a/AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsResponse.java b/AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsResponse.java index 8f66147..a767a75 100644 --- a/AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsResponse.java +++ b/AndroidClient/src/main/java/com/tom/meeter/context/profile/message/SettingsResponse.java @@ -1,26 +1,39 @@ package com.tom.meeter.context.profile.message; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import com.tom.meeter.context.network.dto.EventDTO; -public class SettingsResponse { - - private String id; - @JsonProperty(value = "user_id") - private String userId; - @JsonProperty(value = "search_area") - private Integer searchArea; - @JsonProperty(value = "need_track_user") - private Boolean needTrackUser; +import java.util.Set; - public SettingsResponse() { - //Jackson requires empty c-tor - } +@JsonIgnoreProperties(ignoreUnknown = true) +public class SettingsResponse { - public SettingsResponse(String id, String userId, Integer searchArea, Boolean needTrackUser) { + public static final String ID_KEY = "id"; + public static final String USER_ID_KEY = "user_id"; + public static final String SEARCH_AREA_KEY = "search_area"; + public static final String NEED_TRACK_USER_KEY = "need_track_user"; + public static final String VISIBLE_EVENT_STATUSES_KEY = "visible_event_statuses"; + + private final String id; + private final String userId; + private final Integer searchArea; + private final Boolean needTrackUser; + private final Set visibleEventStatuses; + + @JsonCreator + public SettingsResponse( + @JsonProperty(ID_KEY) String id, + @JsonProperty(USER_ID_KEY) String userId, + @JsonProperty(SEARCH_AREA_KEY) Integer searchArea, + @JsonProperty(NEED_TRACK_USER_KEY) Boolean needTrackUser, + @JsonProperty(VISIBLE_EVENT_STATUSES_KEY) Set visibleEventStatuses) { this.id = id; this.userId = userId; this.searchArea = searchArea; this.needTrackUser = needTrackUser; + this.visibleEventStatuses = visibleEventStatuses; } public String getId() { @@ -39,4 +52,8 @@ public Integer getSearchArea() { public Boolean getNeedTrackUser() { return needTrackUser; } + + public Set getVisibleEventStatuses() { + return visibleEventStatuses; + } } diff --git a/AndroidClient/src/main/res/layout/dialog_filter_bottom_sheet.xml b/AndroidClient/src/main/res/layout/dialog_filter_bottom_sheet.xml new file mode 100644 index 0000000..a4490a8 --- /dev/null +++ b/AndroidClient/src/main/res/layout/dialog_filter_bottom_sheet.xml @@ -0,0 +1,28 @@ + + + + + + + +