Added FetchOnFirstLogin and removed OnFirstLoginJob.

MAILAND-1001
This commit is contained in:
Tomasz Giszczak 2020-10-19 09:33:27 +02:00
parent cbc3fb11af
commit 417a77e8ae
9 changed files with 76 additions and 87 deletions

View File

@ -77,6 +77,7 @@ import ch.protonmail.android.events.Status;
import ch.protonmail.android.jobs.organizations.GetOrganizationJob;
import ch.protonmail.android.jobs.payments.GetPaymentMethodsJob;
import ch.protonmail.android.settings.pin.ValidatePinActivity;
import ch.protonmail.android.usecase.fetch.FetchOnFirstLogin;
import ch.protonmail.android.utils.AppUtil;
import ch.protonmail.android.utils.CustomLocale;
import ch.protonmail.android.utils.INetworkConfiguratorCallback;
@ -128,6 +129,8 @@ public abstract class BaseActivity extends AppCompatActivity implements INetwork
protected FetchUserInfoWorker.Enqueuer fetchUserInfoWorkerEnqueuer;
@Inject
protected FetchMailSettingsWorker.Enqueuer fetchMailSettingsWorkerEnqueuer;
@Inject
protected FetchOnFirstLogin fetchOnFirstLogin;
@Nullable
@BindView(R.id.toolbar)
@ -269,7 +272,7 @@ public abstract class BaseActivity extends AppCompatActivity implements INetwork
protected void loadMailSettings() {
mUserManager.setMailSettings(MailSettings.Companion.load(mUserManager.getUsername()));
if (mUserManager.getMailSettings() == null) {
fetchMailSettingsWorkerEnqueuer.invoke();
fetchMailSettingsWorkerEnqueuer.enqueue();
}
}

View File

@ -96,7 +96,7 @@ public class SplashActivity extends BaseActivity {
private void checkUserDetailsAndGoHome() {
if (mUserManager.accessTokenExists() && !mUserManager.getUser().getAddresses().isEmpty()) {
mUserManager.setLoggedIn(true);
fetchMailSettingsWorkerEnqueuer.invoke();
fetchMailSettingsWorkerEnqueuer.enqueue();
goHome();
finish();
} else {

View File

@ -72,7 +72,6 @@ import ch.protonmail.android.events.general.AvailableDomainsEvent;
import ch.protonmail.android.jobs.CheckUsernameAvailableJob;
import ch.protonmail.android.jobs.GetCurrenciesPlansJob;
import ch.protonmail.android.jobs.GetDirectEnabledJob;
import ch.protonmail.android.jobs.OnFirstLoginJob;
import ch.protonmail.android.jobs.SendVerificationCodeJob;
import ch.protonmail.android.jobs.general.GetAvailableDomainsJob;
import ch.protonmail.android.jobs.payments.CreateSubscriptionJob;
@ -544,7 +543,7 @@ public class CreateAccountActivity extends BaseConnectivityActivity implements
if (mUserManager.isFirstLogin()) {
LoginService.fetchUserDetails();
mJobManager.start();
mJobManager.addJobInBackground(new OnFirstLoginJob(true));
fetchOnFirstLogin.invoke(true, false);
mUserManager.firstLoginDone();
}
}

View File

@ -74,7 +74,6 @@ import ch.protonmail.android.events.AttachmentFailedEvent
import ch.protonmail.android.events.FetchLabelsEvent
import ch.protonmail.android.events.user.MailSettingsEvent
import ch.protonmail.android.jobs.FetchByLocationJob
import ch.protonmail.android.jobs.OnFirstLoginJob
import ch.protonmail.android.servers.notification.CHANNEL_ID_EMAIL
import ch.protonmail.android.settings.pin.PinSettingsActivity
import ch.protonmail.android.uiModel.SettingsItemUiModel
@ -398,7 +397,7 @@ abstract class BaseSettingsActivity : BaseConnectivityActivity() {
pendingActionsDatabase,
true
)
mJobManager.addJobInBackground(OnFirstLoginJob(true))
fetchOnFirstLogin()
mJobManager.addJobInBackground(FetchByLocationJob(mMailboxLocation, mLabelId, true, null, false))
}
}

View File

@ -57,7 +57,7 @@ import ch.protonmail.android.events.RefreshDrawerEvent
import ch.protonmail.android.events.Status
import ch.protonmail.android.events.user.MailSettingsEvent
import ch.protonmail.android.events.user.UserSettingsEvent
import ch.protonmail.android.jobs.OnFirstLoginJob
import ch.protonmail.android.usecase.fetch.FetchOnFirstLogin
import ch.protonmail.android.utils.AppUtil
import ch.protonmail.android.utils.Logger
import ch.protonmail.android.utils.MessageUtils
@ -67,7 +67,6 @@ import ch.protonmail.android.utils.extensions.removeFirst
import ch.protonmail.android.utils.extensions.replaceFirst
import ch.protonmail.android.worker.FetchContactsDataWorker
import ch.protonmail.android.worker.FetchContactsEmailsWorker
import com.birbit.android.jobqueue.JobManager
import com.google.gson.JsonSyntaxException
import com.squareup.inject.assisted.Assisted
import com.squareup.inject.assisted.AssistedInject
@ -102,10 +101,10 @@ class EventHandler @AssistedInject constructor(
private val protonMailApiManager: ProtonMailApiManager,
private val databaseProvider: DatabaseProvider,
private val userManager: UserManager,
private val jobManager: JobManager,
private val messageDetailsRepository: MessageDetailsRepository,
private val fetchContactEmails: FetchContactsEmailsWorker.Enqueuer,
private val fetchContactsData: FetchContactsDataWorker.Enqueuer,
private val fetchOnFirstLogin: FetchOnFirstLogin,
@Assisted val username: String
) {
@ -149,7 +148,10 @@ class EventHandler @AssistedInject constructor(
countersDao.clearTotalLocationsTable()
countersDao.clearTotalLabelsTable()
// todo make this done sequentially, don't fire and forget.
jobManager.addJobInBackground(OnFirstLoginJob(false, false))
fetchOnFirstLogin(
shallRefreshDetails = false,
shallRefreshContacts = false
)
}
private lateinit var response: EventResponse

View File

@ -89,7 +89,7 @@ import ch.protonmail.android.events.LoginEvent;
import ch.protonmail.android.events.LoginInfoEvent;
import ch.protonmail.android.events.MailboxLoginEvent;
import ch.protonmail.android.events.user.UserSettingsEvent;
import ch.protonmail.android.jobs.OnFirstLoginJob;
import ch.protonmail.android.usecase.fetch.FetchOnFirstLogin;
import ch.protonmail.android.utils.AppUtil;
import ch.protonmail.android.utils.ConstantTime;
import ch.protonmail.android.utils.Logger;
@ -160,6 +160,8 @@ public class LoginService extends ProtonJobIntentService {
JobManager jobManager;
@Inject
QueueNetworkUtil networkUtils;
@Inject
FetchOnFirstLogin fetchOnFirstLogin;
private TokenManager tokenManager;
@ -554,7 +556,7 @@ public class LoginService extends ProtonJobIntentService {
}
if (userManager.isFirstLogin()) {
jobManager.start();
jobManager.addJob(new OnFirstLoginJob(true));
fetchOnFirstLogin.invoke(true, false);
userManager.firstLoginDone();
}
}
@ -653,7 +655,7 @@ public class LoginService extends ProtonJobIntentService {
AddressKeyActivationWorker.Companion.activateAddressKeysIfNeeded(getApplicationContext(), addresses.getAddresses(), username);
AppUtil.postEventOnUi(new ConnectAccountMailboxLoginEvent(AuthStatus.SUCCESS));
jobManager.start();
jobManager.addJob(new OnFirstLoginJob(true));
fetchOnFirstLogin.invoke(true, false);
userManager.firstLoginDone();
}
}

View File

@ -1,72 +0,0 @@
/*
* Copyright (c) 2020 Proton Technologies AG
*
* This file is part of ProtonMail.
*
* ProtonMail is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ProtonMail is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ProtonMail. If not, see https://www.gnu.org/licenses/.
*/
package ch.protonmail.android.jobs;
import com.birbit.android.jobqueue.JobManager;
import com.birbit.android.jobqueue.Params;
import ch.protonmail.android.api.services.MessagesService;
import ch.protonmail.android.core.Constants;
import ch.protonmail.android.worker.FetchContactsDataWorker;
import ch.protonmail.android.worker.FetchContactsEmailsWorker;
/**
* Persistent job to process certain jobs after first login and which requires network
*/
public class OnFirstLoginJob extends ProtonMailBaseJob {
private static final long FETCH_CONTACT_DELAY_MS = 2000;
private final boolean refreshDetails;
private final boolean refreshContacts;
public OnFirstLoginJob(boolean refreshDetails, boolean refreshContacts) {
super(new Params(Priority.MEDIUM).requireNetwork().persist());
this.refreshDetails = refreshDetails;
this.refreshContacts = refreshContacts;
}
public OnFirstLoginJob(boolean refreshDetails) {
super(new Params(Priority.MEDIUM).requireNetwork().persist());
this.refreshDetails = refreshDetails;
this.refreshContacts = true;
}
@Override
public void onRun() throws Throwable {
fetchAllMailbox();
JobManager jobManager = getEntryPoint().jobManager();
// delay initial contact fetch
if (refreshContacts) {
FetchContactsEmailsWorker.Enqueuer fetchContactsEmailsWorkerEnqueuer =
getEntryPoint().fetchContactsEmailsWorkerEnqueuer();
fetchContactsEmailsWorkerEnqueuer.enqueue(FETCH_CONTACT_DELAY_MS);
FetchContactsDataWorker.Enqueuer fetchContactsDataWorkerEnqueuer =
getEntryPoint().fetchContactsDataWorkerEnqueuer();
fetchContactsDataWorkerEnqueuer.enqueue();
}
getEntryPoint().fetchMailSettingsWorkerEnqueuer().invoke();
}
private void fetchAllMailbox() {
MessagesService.Companion.startFetchLabels();
MessagesService.Companion.startFetchFirstPage(Constants.MessageLocationType.INBOX, refreshDetails, null, false);
}
}

View File

@ -0,0 +1,55 @@
/*
* Copyright (c) 2020 Proton Technologies AG
*
* This file is part of ProtonMail.
*
* ProtonMail is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ProtonMail is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ProtonMail. If not, see https://www.gnu.org/licenses/.
*/
package ch.protonmail.android.usecase.fetch
import ch.protonmail.android.api.services.MessagesService
import ch.protonmail.android.core.Constants
import ch.protonmail.android.worker.FetchContactsDataWorker
import ch.protonmail.android.worker.FetchContactsEmailsWorker
import ch.protonmail.android.worker.FetchMailSettingsWorker
import timber.log.Timber
import javax.inject.Inject
private const val FETCH_CONTACT_DELAY_MS: Long = 2000
/**
* Launches actions which should be executed on the first user login.
*/
class FetchOnFirstLogin @Inject constructor(
private val fetchContactsDataWorker: FetchContactsDataWorker.Enqueuer,
private val fetchContactsEmailsWorker: FetchContactsEmailsWorker.Enqueuer,
private val fetchMailSettingsWorker: FetchMailSettingsWorker.Enqueuer
) {
operator fun invoke(
shallRefreshDetails: Boolean = true,
shallRefreshContacts: Boolean = false
) {
Timber.v("FetchOnFirstLogin started")
MessagesService.startFetchLabels()
MessagesService.startFetchFirstPage(Constants.MessageLocationType.INBOX, shallRefreshDetails, null, false)
fetchMailSettingsWorker.enqueue()
if (shallRefreshContacts) {
fetchContactsDataWorker.enqueue()
fetchContactsEmailsWorker.enqueue(FETCH_CONTACT_DELAY_MS)
}
}
}

View File

@ -32,6 +32,7 @@ import ch.protonmail.android.api.ProtonMailApiManager
import ch.protonmail.android.core.UserManager
import kotlinx.coroutines.withContext
import me.proton.core.util.kotlin.DispatcherProvider
import timber.log.Timber
import javax.inject.Inject
/**
@ -66,7 +67,7 @@ class FetchMailSettingsWorker @WorkerInject constructor(
class Enqueuer @Inject constructor(private val workManager: WorkManager) {
operator fun invoke() {
fun enqueue() {
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
@ -74,7 +75,7 @@ class FetchMailSettingsWorker @WorkerInject constructor(
val request = OneTimeWorkRequestBuilder<FetchMailSettingsWorker>()
.setConstraints(constraints)
.build()
Timber.v("Scheduling Fetch Mail Settings Worker")
workManager.enqueue(request)
}
}