Added FetchOnFirstLogin and removed OnFirstLoginJob.
MAILAND-1001
This commit is contained in:
parent
cbc3fb11af
commit
417a77e8ae
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue