From b3b05a42b6ea91e1bee2f30e4f02b7d062260cc1 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Mon, 9 Dec 2019 13:50:26 +0100 Subject: [PATCH] Refactoring in app module --- app/src/main/AndroidManifest.xml | 2 +- .../messenger/MercuryImApplication.java | 8 ++- .../messenger/di/component/AppComponent.java | 5 +- ...ice.java => MercuryConnectionService.java} | 50 ++++++------------- .../messenger/ui/chat/ChatInputFragment.java | 7 +-- .../ui/chatlist/ChatListFragment.java | 10 ++-- .../messenger/ui/login/AccountsFragment.java | 1 - .../ui/login/AccountsRecyclerViewAdapter.java | 3 +- .../messenger/ui/login/LoginViewModel.java | 1 - .../repository/XmppAccountRepository.java | 2 +- .../repository/XmppDirectChatRepository.java | 4 +- .../repository/XmppGroupChatRepository.java | 2 +- .../data/repository/XmppPeerRepository.java | 2 +- .../org/mercury_im/messenger/Messenger.java | 10 ++++ .../data/repository/AccountRepository.java | 2 +- .../data/repository/DirectChatRepository.java | 3 +- .../data/repository/GroupChatRepository.java | 3 +- .../data/repository/PeerRepository.java | 2 +- .../messenger/{data => }/util/Optional.java | 2 +- 19 files changed, 50 insertions(+), 69 deletions(-) rename app/src/main/java/org/mercury_im/messenger/service/{XmppConnectionService.java => MercuryConnectionService.java} (65%) rename domain/src/main/java/org/mercury_im/messenger/{data => }/util/Optional.java (89%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 37827cb..f39d433 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,7 +35,7 @@ - + \ No newline at end of file diff --git a/app/src/main/java/org/mercury_im/messenger/MercuryImApplication.java b/app/src/main/java/org/mercury_im/messenger/MercuryImApplication.java index a2270f6..82c5af4 100644 --- a/app/src/main/java/org/mercury_im/messenger/MercuryImApplication.java +++ b/app/src/main/java/org/mercury_im/messenger/MercuryImApplication.java @@ -12,7 +12,7 @@ import android.os.Build; import org.mercury_im.messenger.di.component.AppComponent; import org.mercury_im.messenger.di.component.DaggerAppComponent; import org.mercury_im.messenger.di.module.AppModule; -import org.mercury_im.messenger.service.XmppConnectionService; +import org.mercury_im.messenger.service.MercuryConnectionService; import org.mercury_im.messenger.util.AbstractActivityLifecycleCallbacks; import java.util.concurrent.atomic.AtomicBoolean; @@ -21,8 +21,6 @@ import java.util.concurrent.atomic.AtomicInteger; public class MercuryImApplication extends Application { - public static final String TAG = "Mercury-IM"; - static { // Initialize Smack etc. // new MercuryConfiguration(); @@ -54,9 +52,9 @@ public class MercuryImApplication extends Application { initializeNotificationChannels(this); - Intent serviceIntent = new Intent(getApplicationContext(), XmppConnectionService.class); + Intent serviceIntent = new Intent(getApplicationContext(), MercuryConnectionService.class); - serviceIntent.setAction(XmppConnectionService.ACTION_START); + serviceIntent.setAction(MercuryConnectionService.ACTION_START); if (Build.VERSION.SDK_INT < 26) { startService(serviceIntent); } else { diff --git a/app/src/main/java/org/mercury_im/messenger/di/component/AppComponent.java b/app/src/main/java/org/mercury_im/messenger/di/component/AppComponent.java index 84ff078..8c8f752 100644 --- a/app/src/main/java/org/mercury_im/messenger/di/component/AppComponent.java +++ b/app/src/main/java/org/mercury_im/messenger/di/component/AppComponent.java @@ -1,11 +1,10 @@ package org.mercury_im.messenger.di.component; import org.mercury_im.messenger.MercuryImApplication; -import org.mercury_im.messenger.data.di.MappingModule; import org.mercury_im.messenger.data.di.RepositoryModule; import org.mercury_im.messenger.di.module.AndroidPersistenceModule; import org.mercury_im.messenger.di.module.AppModule; -import org.mercury_im.messenger.service.XmppConnectionService; +import org.mercury_im.messenger.service.MercuryConnectionService; import org.mercury_im.messenger.ui.MainActivity; import org.mercury_im.messenger.ui.chat.ChatActivity; import org.mercury_im.messenger.ui.chat.ChatInputFragment; @@ -67,6 +66,6 @@ public interface AppComponent { // Services - void inject(XmppConnectionService service); + void inject(MercuryConnectionService service); } diff --git a/app/src/main/java/org/mercury_im/messenger/service/XmppConnectionService.java b/app/src/main/java/org/mercury_im/messenger/service/MercuryConnectionService.java similarity index 65% rename from app/src/main/java/org/mercury_im/messenger/service/XmppConnectionService.java rename to app/src/main/java/org/mercury_im/messenger/service/MercuryConnectionService.java index 8f5ce85..981bd31 100644 --- a/app/src/main/java/org/mercury_im/messenger/service/XmppConnectionService.java +++ b/app/src/main/java/org/mercury_im/messenger/service/MercuryConnectionService.java @@ -6,7 +6,6 @@ import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.IBinder; -import android.util.Log; import androidx.annotation.NonNull; import androidx.core.app.NotificationCompat; @@ -22,36 +21,16 @@ import org.mercury_im.messenger.ui.MainActivity; * Started, Bound Service, which is responsible for managing {@link XMPPConnection XMPPConnections} * affiliated with registered accounts. */ -public class XmppConnectionService extends Service { - - private static final String TAG = MercuryImApplication.TAG; +public class MercuryConnectionService extends Service { private static final String APP = "org.mercury-im.messenger"; - private static final String SERVICE = APP + ".XmppConnectionService"; + private static final String SERVICE = APP + ".MercuryConnectionService"; private static final String ACTION = SERVICE + ".ACTION"; - private static final String EVENT = SERVICE + ".EVENT"; - private static final String EXTRA = SERVICE + ".EXTRA"; - private static final String STATUS = SERVICE + ".STATUS"; // ACTIONS public static final String ACTION_START = ACTION + ".START"; public static final String ACTION_STOP = ACTION + ".STOP"; - public static final String ACTION_CONNECT = ACTION + ".CONNECT"; - public static final String ACTION_DISCONNECT = ACTION + ".DISCONNECT"; - public static final String ACTION_PING = ACTION + ".PING"; - - // EVENTS - public static final String EVENT_INCOMING_MESSAGE = EVENT + ".INCOMING_MESSAGE"; - public static final String EVENT_OUTGOING_MESSAGE = EVENT + ".OUTGOING_MESSAGE"; - - // EXTRAS - public static final String EXTRA_CONFIGURATION = EXTRA + ".CONFIGURATION"; - public static final String EXTRA_ACCOUNT_ID = EXTRA + ".ACCOUNT_ID"; - - // STATUSES - public static final String STATUS_SUCCESS = STATUS + ".SUCCESS"; - public static final String STATUS_FAILURE = STATUS + ".FAILURE"; @NonNull @@ -63,27 +42,31 @@ public class XmppConnectionService extends Service { @Override public void onCreate() { super.onCreate(); - Log.d(TAG, "onCreate()"); MercuryImApplication.getApplication().getAppComponent().inject(this); + beginLifecycleOfPingManager(); + } - // Begin life cycle of Ping Manager. - // The Manager will automatically detect newly created connections and ping the server - // every half hour if necessary. + /** + * PingManager will ensure the XMPP connection is kept alive. + * TODO: Move out of this service/module + */ + private void beginLifecycleOfPingManager() { ServerPingWithAlarmManager.onCreate(this); } @Override public void onDestroy() { super.onDestroy(); - Log.d(TAG, "onDestroy()"); - // End life cycle of Ping Manager. + endLifecycleOfPingManager(); + } + + private void endLifecycleOfPingManager() { ServerPingWithAlarmManager.onDestroy(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { - Log.d(TAG, "onStartCommand(" + intent + ")"); if (intent == null) { startAndDisplayForegroundNotification(); } else { @@ -107,7 +90,6 @@ public class XmppConnectionService extends Service { } public void startAndDisplayForegroundNotification() { - Log.d(TAG, "startAndDisplayForegroundNotification()"); Notification notification = getForegroundNotification(getApplicationContext()); startForeground(Notifications.FOREGROUND_SERVICE_ID, notification); @@ -126,13 +108,13 @@ public class XmppConnectionService extends Service { public class Binder extends android.os.Binder { - private final XmppConnectionService service; + private final MercuryConnectionService service; - public Binder(XmppConnectionService service) { + public Binder(MercuryConnectionService service) { this.service = service; } - public XmppConnectionService getService() { + public MercuryConnectionService getService() { return service; } } diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputFragment.java b/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputFragment.java index 9a02bff..1de0c9f 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputFragment.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputFragment.java @@ -1,6 +1,5 @@ package org.mercury_im.messenger.ui.chat; -import static org.mercury_im.messenger.MercuryImApplication.TAG; import android.content.Context; import android.os.Bundle; @@ -14,7 +13,7 @@ import android.widget.ImageButton; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import butterknife.BindView; import butterknife.ButterKnife; @@ -48,7 +47,6 @@ public class ChatInputFragment extends Fragment implements View.OnClickListener @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - Log.d(TAG, "onCreateView"); View view = inflater.inflate(R.layout.view_compose, container, false); ButterKnife.bind(this, view); return view; @@ -57,7 +55,7 @@ public class ChatInputFragment extends Fragment implements View.OnClickListener @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - mViewModel = ViewModelProviders.of(this).get(ChatInputViewModel.class); + mViewModel = new ViewModelProvider(this).get(ChatInputViewModel.class); observeViewModel(mViewModel); } @@ -97,7 +95,6 @@ public class ChatInputFragment extends Fragment implements View.OnClickListener @Override @OnClick({R.id.btn_send, R.id.btn_media, R.id.btn_emoji}) public void onClick(View view) { - Log.d(TAG, "onClick!"); switch (view.getId()) { // Add media case R.id.btn_media: diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListFragment.java b/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListFragment.java index 468c041..fa4aca3 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListFragment.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListFragment.java @@ -1,6 +1,5 @@ package org.mercury_im.messenger.ui.chatlist; -import static org.mercury_im.messenger.MercuryImApplication.TAG; import android.content.Context; import android.os.Bundle; @@ -13,7 +12,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton; @@ -21,6 +20,7 @@ import com.google.android.material.floatingactionbutton.ExtendedFloatingActionBu import butterknife.BindView; import butterknife.ButterKnife; +import org.mercury_im.messenger.Messenger; import org.mercury_im.messenger.R; public class ChatListFragment extends Fragment { @@ -61,13 +61,13 @@ public class ChatListFragment extends Fragment { @Override public void onAttach(Context context) { super.onAttach(context); - viewModel = ViewModelProviders.of(getActivity()).get(ChatListViewModel.class); + viewModel = new ViewModelProvider(getActivity()).get(ChatListViewModel.class); viewModel.getChats().observe(this, chatModels -> { if (chatModels == null) { - Log.d(TAG, "Displaying null chats"); + Log.d(Messenger.TAG, "Displaying null chats"); return; } - Log.d(TAG, "Displaying " + chatModels.size() + " chats"); + Log.d(Messenger.TAG, "Displaying " + chatModels.size() + " chats"); recyclerViewAdapter.setModels(chatModels); }); } diff --git a/app/src/main/java/org/mercury_im/messenger/ui/login/AccountsFragment.java b/app/src/main/java/org/mercury_im/messenger/ui/login/AccountsFragment.java index 094bae9..07ac534 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/login/AccountsFragment.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/login/AccountsFragment.java @@ -63,7 +63,6 @@ public class AccountsFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - Log.d(MercuryImApplication.TAG, "AccountsFragment.onCreateView"); View view = inflater.inflate(R.layout.fragment_account_list, container, false); ButterKnife.bind(this, view); viewModel = new ViewModelProvider(this).get(AccountsViewModel.class); diff --git a/app/src/main/java/org/mercury_im/messenger/ui/login/AccountsRecyclerViewAdapter.java b/app/src/main/java/org/mercury_im/messenger/ui/login/AccountsRecyclerViewAdapter.java index 564494e..aba0233 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/login/AccountsRecyclerViewAdapter.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/login/AccountsRecyclerViewAdapter.java @@ -12,6 +12,7 @@ import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.RecyclerView; import org.mercury_im.messenger.MercuryImApplication; +import org.mercury_im.messenger.Messenger; import org.mercury_im.messenger.R; import org.mercury_im.messenger.entity.Account; import org.mercury_im.messenger.ui.login.AccountsFragment.OnAccountListItemClickListener; @@ -74,7 +75,7 @@ public class AccountsRecyclerViewAdapter extends RecyclerView.Adapter() { @Override public void onSuccess(Account inserted) { - Log.d(MercuryImApplication.TAG, "LoginActivity.loginDetailsEntered: Account " + inserted.getId() + " inserted."); // connectionCenter.createConnection(account); signinSuccessful.setValue(true); } diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppAccountRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppAccountRepository.java index 57f159b..aae3f4b 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppAccountRepository.java +++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppAccountRepository.java @@ -3,7 +3,7 @@ package org.mercury_im.messenger.data.repository; import org.mercury_im.messenger.data.mapping.AccountMapping; import org.mercury_im.messenger.data.model.AccountModel; import org.mercury_im.messenger.data.repository.dao.AccountDao; -import org.mercury_im.messenger.data.util.Optional; +import org.mercury_im.messenger.util.Optional; import org.mercury_im.messenger.entity.Account; import org.mercury_im.messenger.util.ThreadUtils; diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppDirectChatRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppDirectChatRepository.java index ea3604c..ce37e84 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppDirectChatRepository.java +++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppDirectChatRepository.java @@ -1,11 +1,9 @@ package org.mercury_im.messenger.data.repository; -import org.mercury_im.messenger.data.mapping.AccountMapping; import org.mercury_im.messenger.data.mapping.DirectChatMapping; -import org.mercury_im.messenger.data.mapping.PeerMapping; import org.mercury_im.messenger.data.model.DirectChatModel; import org.mercury_im.messenger.data.repository.dao.DirectChatDao; -import org.mercury_im.messenger.data.util.Optional; +import org.mercury_im.messenger.util.Optional; import org.mercury_im.messenger.entity.chat.DirectChat; import org.mercury_im.messenger.entity.chat.IDirectChat; import org.mercury_im.messenger.entity.contact.Peer; diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppGroupChatRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppGroupChatRepository.java index 99a5b69..fec5567 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppGroupChatRepository.java +++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppGroupChatRepository.java @@ -3,7 +3,7 @@ package org.mercury_im.messenger.data.repository; import org.mercury_im.messenger.data.mapping.GroupChatMapping; import org.mercury_im.messenger.data.model.GroupChatModel; import org.mercury_im.messenger.data.repository.dao.GroupChatDao; -import org.mercury_im.messenger.data.util.Optional; +import org.mercury_im.messenger.util.Optional; import org.mercury_im.messenger.entity.Account; import org.mercury_im.messenger.entity.chat.GroupChat; import org.mercury_im.messenger.entity.chat.IGroupChat; diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppPeerRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppPeerRepository.java index 2d18c3a..bb7d894 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppPeerRepository.java +++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppPeerRepository.java @@ -2,7 +2,7 @@ package org.mercury_im.messenger.data.repository; import org.mercury_im.messenger.data.mapping.PeerMapping; import org.mercury_im.messenger.data.model.PeerModel; -import org.mercury_im.messenger.data.util.Optional; +import org.mercury_im.messenger.util.Optional; import org.mercury_im.messenger.entity.Account; import org.mercury_im.messenger.entity.contact.IPeer; import org.mercury_im.messenger.entity.contact.Peer; diff --git a/domain/src/main/java/org/mercury_im/messenger/Messenger.java b/domain/src/main/java/org/mercury_im/messenger/Messenger.java index a3cb79d..75fab40 100644 --- a/domain/src/main/java/org/mercury_im/messenger/Messenger.java +++ b/domain/src/main/java/org/mercury_im/messenger/Messenger.java @@ -13,6 +13,8 @@ import javax.inject.Inject; public class Messenger { + public static final String TAG = "MercuryIM"; + private final Map connections = new HashMap<>(); @Inject @@ -33,4 +35,12 @@ public class Messenger { public ConnectionMethod getConnection(Account account) { return connections.get(account.getId()); } + + public void appInUse() { + + } + + public void appInBackground() { + + } } diff --git a/domain/src/main/java/org/mercury_im/messenger/data/repository/AccountRepository.java b/domain/src/main/java/org/mercury_im/messenger/data/repository/AccountRepository.java index f24af5c..7138482 100644 --- a/domain/src/main/java/org/mercury_im/messenger/data/repository/AccountRepository.java +++ b/domain/src/main/java/org/mercury_im/messenger/data/repository/AccountRepository.java @@ -1,7 +1,7 @@ package org.mercury_im.messenger.data.repository; import org.mercury_im.messenger.entity.Account; -import org.mercury_im.messenger.data.util.Optional; +import org.mercury_im.messenger.util.Optional; import java.util.List; diff --git a/domain/src/main/java/org/mercury_im/messenger/data/repository/DirectChatRepository.java b/domain/src/main/java/org/mercury_im/messenger/data/repository/DirectChatRepository.java index 1970954..ed592d0 100644 --- a/domain/src/main/java/org/mercury_im/messenger/data/repository/DirectChatRepository.java +++ b/domain/src/main/java/org/mercury_im/messenger/data/repository/DirectChatRepository.java @@ -1,9 +1,8 @@ package org.mercury_im.messenger.data.repository; -import org.mercury_im.messenger.data.util.Optional; +import org.mercury_im.messenger.util.Optional; import org.mercury_im.messenger.entity.chat.DirectChat; import org.mercury_im.messenger.entity.contact.Peer; -import org.mercury_im.messenger.entity.message.Message; import java.util.List; diff --git a/domain/src/main/java/org/mercury_im/messenger/data/repository/GroupChatRepository.java b/domain/src/main/java/org/mercury_im/messenger/data/repository/GroupChatRepository.java index a5d6ebb..a86abad 100644 --- a/domain/src/main/java/org/mercury_im/messenger/data/repository/GroupChatRepository.java +++ b/domain/src/main/java/org/mercury_im/messenger/data/repository/GroupChatRepository.java @@ -2,8 +2,7 @@ package org.mercury_im.messenger.data.repository; import org.mercury_im.messenger.entity.Account; import org.mercury_im.messenger.entity.chat.GroupChat; -import org.mercury_im.messenger.entity.message.Message; -import org.mercury_im.messenger.data.util.Optional; +import org.mercury_im.messenger.util.Optional; import java.util.List; diff --git a/domain/src/main/java/org/mercury_im/messenger/data/repository/PeerRepository.java b/domain/src/main/java/org/mercury_im/messenger/data/repository/PeerRepository.java index 8e081e0..cb4a64d 100644 --- a/domain/src/main/java/org/mercury_im/messenger/data/repository/PeerRepository.java +++ b/domain/src/main/java/org/mercury_im/messenger/data/repository/PeerRepository.java @@ -1,6 +1,6 @@ package org.mercury_im.messenger.data.repository; -import org.mercury_im.messenger.data.util.Optional; +import org.mercury_im.messenger.util.Optional; import org.mercury_im.messenger.entity.Account; import org.mercury_im.messenger.entity.contact.Peer; diff --git a/domain/src/main/java/org/mercury_im/messenger/data/util/Optional.java b/domain/src/main/java/org/mercury_im/messenger/util/Optional.java similarity index 89% rename from domain/src/main/java/org/mercury_im/messenger/data/util/Optional.java rename to domain/src/main/java/org/mercury_im/messenger/util/Optional.java index c334483..ced8945 100644 --- a/domain/src/main/java/org/mercury_im/messenger/data/util/Optional.java +++ b/domain/src/main/java/org/mercury_im/messenger/util/Optional.java @@ -1,4 +1,4 @@ -package org.mercury_im.messenger.data.util; +package org.mercury_im.messenger.util; /** * Since j.u.Optional is only available on Android since API lvl 24, we need this utility class.