Refactoring in app module

This commit is contained in:
Paul Schaub 2019-12-09 13:50:26 +01:00
parent 9882d159be
commit b3b05a42b6
Signed by: vanitasvitae
GPG Key ID: 62BEE9264BF17311
19 changed files with 50 additions and 69 deletions

View File

@ -35,7 +35,7 @@
<activity <activity
android:name=".ui.login.LoginActivity" android:name=".ui.login.LoginActivity"
android:label="@string/title_activity_login" /> android:label="@string/title_activity_login" />
<service android:name=".service.XmppConnectionService" /> <service android:name=".service.MercuryConnectionService" />
</application> </application>
</manifest> </manifest>

View File

@ -12,7 +12,7 @@ import android.os.Build;
import org.mercury_im.messenger.di.component.AppComponent; import org.mercury_im.messenger.di.component.AppComponent;
import org.mercury_im.messenger.di.component.DaggerAppComponent; import org.mercury_im.messenger.di.component.DaggerAppComponent;
import org.mercury_im.messenger.di.module.AppModule; 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 org.mercury_im.messenger.util.AbstractActivityLifecycleCallbacks;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
@ -21,8 +21,6 @@ import java.util.concurrent.atomic.AtomicInteger;
public class MercuryImApplication extends Application { public class MercuryImApplication extends Application {
public static final String TAG = "Mercury-IM";
static { static {
// Initialize Smack etc. // Initialize Smack etc.
// new MercuryConfiguration(); // new MercuryConfiguration();
@ -54,9 +52,9 @@ public class MercuryImApplication extends Application {
initializeNotificationChannels(this); 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) { if (Build.VERSION.SDK_INT < 26) {
startService(serviceIntent); startService(serviceIntent);
} else { } else {

View File

@ -1,11 +1,10 @@
package org.mercury_im.messenger.di.component; package org.mercury_im.messenger.di.component;
import org.mercury_im.messenger.MercuryImApplication; 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.data.di.RepositoryModule;
import org.mercury_im.messenger.di.module.AndroidPersistenceModule; import org.mercury_im.messenger.di.module.AndroidPersistenceModule;
import org.mercury_im.messenger.di.module.AppModule; 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.MainActivity;
import org.mercury_im.messenger.ui.chat.ChatActivity; import org.mercury_im.messenger.ui.chat.ChatActivity;
import org.mercury_im.messenger.ui.chat.ChatInputFragment; import org.mercury_im.messenger.ui.chat.ChatInputFragment;
@ -67,6 +66,6 @@ public interface AppComponent {
// Services // Services
void inject(XmppConnectionService service); void inject(MercuryConnectionService service);
} }

View File

@ -6,7 +6,6 @@ import android.app.Service;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.IBinder; import android.os.IBinder;
import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat; 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} * Started, Bound Service, which is responsible for managing {@link XMPPConnection XMPPConnections}
* affiliated with registered accounts. * affiliated with registered accounts.
*/ */
public class XmppConnectionService extends Service { public class MercuryConnectionService extends Service {
private static final String TAG = MercuryImApplication.TAG;
private static final String APP = "org.mercury-im.messenger"; 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 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 // ACTIONS
public static final String ACTION_START = ACTION + ".START"; public static final String ACTION_START = ACTION + ".START";
public static final String ACTION_STOP = ACTION + ".STOP"; 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 @NonNull
@ -63,27 +42,31 @@ public class XmppConnectionService extends Service {
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
Log.d(TAG, "onCreate()");
MercuryImApplication.getApplication().getAppComponent().inject(this); MercuryImApplication.getApplication().getAppComponent().inject(this);
beginLifecycleOfPingManager();
}
// Begin life cycle of Ping Manager. /**
// The Manager will automatically detect newly created connections and ping the server * PingManager will ensure the XMPP connection is kept alive.
// every half hour if necessary. * TODO: Move out of this service/module
*/
private void beginLifecycleOfPingManager() {
ServerPingWithAlarmManager.onCreate(this); ServerPingWithAlarmManager.onCreate(this);
} }
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
Log.d(TAG, "onDestroy()");
// End life cycle of Ping Manager. endLifecycleOfPingManager();
}
private void endLifecycleOfPingManager() {
ServerPingWithAlarmManager.onDestroy(); ServerPingWithAlarmManager.onDestroy();
} }
@Override @Override
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand(" + intent + ")");
if (intent == null) { if (intent == null) {
startAndDisplayForegroundNotification(); startAndDisplayForegroundNotification();
} else { } else {
@ -107,7 +90,6 @@ public class XmppConnectionService extends Service {
} }
public void startAndDisplayForegroundNotification() { public void startAndDisplayForegroundNotification() {
Log.d(TAG, "startAndDisplayForegroundNotification()");
Notification notification = getForegroundNotification(getApplicationContext()); Notification notification = getForegroundNotification(getApplicationContext());
startForeground(Notifications.FOREGROUND_SERVICE_ID, notification); startForeground(Notifications.FOREGROUND_SERVICE_ID, notification);
@ -126,13 +108,13 @@ public class XmppConnectionService extends Service {
public class Binder extends android.os.Binder { 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; this.service = service;
} }
public XmppConnectionService getService() { public MercuryConnectionService getService() {
return service; return service;
} }
} }

View File

@ -1,6 +1,5 @@
package org.mercury_im.messenger.ui.chat; package org.mercury_im.messenger.ui.chat;
import static org.mercury_im.messenger.MercuryImApplication.TAG;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
@ -14,7 +13,7 @@ import android.widget.ImageButton;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProvider;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
@ -48,7 +47,6 @@ public class ChatInputFragment extends Fragment implements View.OnClickListener
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) { @Nullable Bundle savedInstanceState) {
Log.d(TAG, "onCreateView");
View view = inflater.inflate(R.layout.view_compose, container, false); View view = inflater.inflate(R.layout.view_compose, container, false);
ButterKnife.bind(this, view); ButterKnife.bind(this, view);
return view; return view;
@ -57,7 +55,7 @@ public class ChatInputFragment extends Fragment implements View.OnClickListener
@Override @Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) { public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
mViewModel = ViewModelProviders.of(this).get(ChatInputViewModel.class); mViewModel = new ViewModelProvider(this).get(ChatInputViewModel.class);
observeViewModel(mViewModel); observeViewModel(mViewModel);
} }
@ -97,7 +95,6 @@ public class ChatInputFragment extends Fragment implements View.OnClickListener
@Override @Override
@OnClick({R.id.btn_send, R.id.btn_media, R.id.btn_emoji}) @OnClick({R.id.btn_send, R.id.btn_media, R.id.btn_emoji})
public void onClick(View view) { public void onClick(View view) {
Log.d(TAG, "onClick!");
switch (view.getId()) { switch (view.getId()) {
// Add media // Add media
case R.id.btn_media: case R.id.btn_media:

View File

@ -1,6 +1,5 @@
package org.mercury_im.messenger.ui.chatlist; package org.mercury_im.messenger.ui.chatlist;
import static org.mercury_im.messenger.MercuryImApplication.TAG;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
@ -13,7 +12,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton; import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
@ -21,6 +20,7 @@ import com.google.android.material.floatingactionbutton.ExtendedFloatingActionBu
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import org.mercury_im.messenger.Messenger;
import org.mercury_im.messenger.R; import org.mercury_im.messenger.R;
public class ChatListFragment extends Fragment { public class ChatListFragment extends Fragment {
@ -61,13 +61,13 @@ public class ChatListFragment extends Fragment {
@Override @Override
public void onAttach(Context context) { public void onAttach(Context context) {
super.onAttach(context); super.onAttach(context);
viewModel = ViewModelProviders.of(getActivity()).get(ChatListViewModel.class); viewModel = new ViewModelProvider(getActivity()).get(ChatListViewModel.class);
viewModel.getChats().observe(this, chatModels -> { viewModel.getChats().observe(this, chatModels -> {
if (chatModels == null) { if (chatModels == null) {
Log.d(TAG, "Displaying null chats"); Log.d(Messenger.TAG, "Displaying null chats");
return; return;
} }
Log.d(TAG, "Displaying " + chatModels.size() + " chats"); Log.d(Messenger.TAG, "Displaying " + chatModels.size() + " chats");
recyclerViewAdapter.setModels(chatModels); recyclerViewAdapter.setModels(chatModels);
}); });
} }

View File

@ -63,7 +63,6 @@ public class AccountsFragment extends Fragment {
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
Log.d(MercuryImApplication.TAG, "AccountsFragment.onCreateView");
View view = inflater.inflate(R.layout.fragment_account_list, container, false); View view = inflater.inflate(R.layout.fragment_account_list, container, false);
ButterKnife.bind(this, view); ButterKnife.bind(this, view);
viewModel = new ViewModelProvider(this).get(AccountsViewModel.class); viewModel = new ViewModelProvider(this).get(AccountsViewModel.class);

View File

@ -12,6 +12,7 @@ import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import org.mercury_im.messenger.MercuryImApplication; import org.mercury_im.messenger.MercuryImApplication;
import org.mercury_im.messenger.Messenger;
import org.mercury_im.messenger.R; import org.mercury_im.messenger.R;
import org.mercury_im.messenger.entity.Account; import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.ui.login.AccountsFragment.OnAccountListItemClickListener; import org.mercury_im.messenger.ui.login.AccountsFragment.OnAccountListItemClickListener;
@ -74,7 +75,7 @@ public class AccountsRecyclerViewAdapter extends RecyclerView.Adapter<AccountsRe
@Override @Override
public int getItemCount() { public int getItemCount() {
Log.d(MercuryImApplication.TAG, "Accounts Item Count: " + mValues.size()); Log.d(Messenger.TAG, "Accounts Item Count: " + mValues.size());
return mValues.size(); return mValues.size();
} }

View File

@ -136,7 +136,6 @@ public class LoginViewModel extends ViewModel {
insert.subscribe(new DisposableSingleObserver<Account>() { insert.subscribe(new DisposableSingleObserver<Account>() {
@Override @Override
public void onSuccess(Account inserted) { public void onSuccess(Account inserted) {
Log.d(MercuryImApplication.TAG, "LoginActivity.loginDetailsEntered: Account " + inserted.getId() + " inserted.");
// connectionCenter.createConnection(account); // connectionCenter.createConnection(account);
signinSuccessful.setValue(true); signinSuccessful.setValue(true);
} }

View File

@ -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.mapping.AccountMapping;
import org.mercury_im.messenger.data.model.AccountModel; import org.mercury_im.messenger.data.model.AccountModel;
import org.mercury_im.messenger.data.repository.dao.AccountDao; 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.entity.Account;
import org.mercury_im.messenger.util.ThreadUtils; import org.mercury_im.messenger.util.ThreadUtils;

View File

@ -1,11 +1,9 @@
package org.mercury_im.messenger.data.repository; 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.DirectChatMapping;
import org.mercury_im.messenger.data.mapping.PeerMapping;
import org.mercury_im.messenger.data.model.DirectChatModel; import org.mercury_im.messenger.data.model.DirectChatModel;
import org.mercury_im.messenger.data.repository.dao.DirectChatDao; 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.DirectChat;
import org.mercury_im.messenger.entity.chat.IDirectChat; import org.mercury_im.messenger.entity.chat.IDirectChat;
import org.mercury_im.messenger.entity.contact.Peer; import org.mercury_im.messenger.entity.contact.Peer;

View File

@ -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.mapping.GroupChatMapping;
import org.mercury_im.messenger.data.model.GroupChatModel; import org.mercury_im.messenger.data.model.GroupChatModel;
import org.mercury_im.messenger.data.repository.dao.GroupChatDao; 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.Account;
import org.mercury_im.messenger.entity.chat.GroupChat; import org.mercury_im.messenger.entity.chat.GroupChat;
import org.mercury_im.messenger.entity.chat.IGroupChat; import org.mercury_im.messenger.entity.chat.IGroupChat;

View File

@ -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.mapping.PeerMapping;
import org.mercury_im.messenger.data.model.PeerModel; 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.Account;
import org.mercury_im.messenger.entity.contact.IPeer; import org.mercury_im.messenger.entity.contact.IPeer;
import org.mercury_im.messenger.entity.contact.Peer; import org.mercury_im.messenger.entity.contact.Peer;

View File

@ -13,6 +13,8 @@ import javax.inject.Inject;
public class Messenger { public class Messenger {
public static final String TAG = "MercuryIM";
private final Map<Long, ConnectionMethod> connections = new HashMap<>(); private final Map<Long, ConnectionMethod> connections = new HashMap<>();
@Inject @Inject
@ -33,4 +35,12 @@ public class Messenger {
public ConnectionMethod getConnection(Account account) { public ConnectionMethod getConnection(Account account) {
return connections.get(account.getId()); return connections.get(account.getId());
} }
public void appInUse() {
}
public void appInBackground() {
}
} }

View File

@ -1,7 +1,7 @@
package org.mercury_im.messenger.data.repository; package org.mercury_im.messenger.data.repository;
import org.mercury_im.messenger.entity.Account; 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; import java.util.List;

View File

@ -1,9 +1,8 @@
package org.mercury_im.messenger.data.repository; 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.chat.DirectChat;
import org.mercury_im.messenger.entity.contact.Peer; import org.mercury_im.messenger.entity.contact.Peer;
import org.mercury_im.messenger.entity.message.Message;
import java.util.List; import java.util.List;

View File

@ -2,8 +2,7 @@ package org.mercury_im.messenger.data.repository;
import org.mercury_im.messenger.entity.Account; import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.entity.chat.GroupChat; import org.mercury_im.messenger.entity.chat.GroupChat;
import org.mercury_im.messenger.entity.message.Message; import org.mercury_im.messenger.util.Optional;
import org.mercury_im.messenger.data.util.Optional;
import java.util.List; import java.util.List;

View File

@ -1,6 +1,6 @@
package org.mercury_im.messenger.data.repository; 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.Account;
import org.mercury_im.messenger.entity.contact.Peer; import org.mercury_im.messenger.entity.contact.Peer;

View File

@ -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. * Since j.u.Optional is only available on Android since API lvl 24, we need this utility class.