/*
* Copyright (C) 2015 Actor LLC. <https://actor.im>
*/
package im.actor.core.viewmodel;
import com.google.j2objc.annotations.Property;
import im.actor.core.modules.ModuleContext;
import im.actor.core.events.AppVisibleChanged;
import im.actor.core.events.ConnectingStateChanged;
import im.actor.core.viewmodel.generics.BooleanValueModel;
import im.actor.core.viewmodel.generics.IntValueModel;
import im.actor.runtime.eventbus.BusSubscriber;
import im.actor.runtime.eventbus.Event;
/**
* Application initialization View Model
*/
public class AppStateVM {
@Property("nonatomic, readonly")
private ModuleContext context;
@Property("nonatomic, readonly")
private BooleanValueModel isDialogsEmpty;
@Property("nonatomic, readonly")
private BooleanValueModel isContactsEmpty;
@Property("nonatomic, readonly")
private BooleanValueModel isAppEmpty;
@Property("nonatomic, readonly")
private BooleanValueModel isAppLoaded;
private boolean isBookImported;
private boolean isDialogsLoaded;
private boolean isContactsLoaded;
private boolean isSettingsLoaded;
/**
* Constructor of View Model
*
* @param context Messenger im.actor.android.modules
*/
public AppStateVM(ModuleContext context) {
this.context = context;
this.isDialogsEmpty = new BooleanValueModel("app.dialogs.empty", context.getPreferences().getBool("app.dialogs.empty", true));
this.isContactsEmpty = new BooleanValueModel("app.contacts.empty", context.getPreferences().getBool("app.contacts.empty", true));
this.isAppEmpty = new BooleanValueModel("app.empty", context.getPreferences().getBool("app.empty", true));
this.isBookImported = context.getPreferences().getBool("app.contacts.imported", false);
this.isDialogsLoaded = context.getPreferences().getBool("app.dialogs.loaded", false);
this.isContactsLoaded = context.getPreferences().getBool("app.contacts.loaded", false);
this.isSettingsLoaded = context.getPreferences().getBool("app.settings.loaded", false);
this.isAppLoaded = new BooleanValueModel("app.loaded", isBookImported && isDialogsLoaded && isContactsLoaded);
}
private void updateLoaded() {
boolean val = isBookImported && isDialogsLoaded && isContactsLoaded && isSettingsLoaded;
if (isAppLoaded.get() != val) {
this.isAppLoaded.change(val);
}
}
/**
* Notify from Modules about dialogs state changed
*
* @param isEmpty is dialogs empty
*/
public synchronized void onDialogsChanged(boolean isEmpty) {
if (isDialogsEmpty.get() != isEmpty) {
context.getPreferences().putBool("app.dialogs.empty", isEmpty);
isDialogsEmpty.change(isEmpty);
}
if (!isEmpty) {
if (isAppEmpty.get()) {
context.getPreferences().putBool("app.empty", false);
isAppEmpty.change(false);
}
}
}
/**
* Notify from Modules about contacts state changed
*
* @param isEmpty is contacts empty
*/
public synchronized void onContactsChanged(boolean isEmpty) {
if (isContactsEmpty.get() != isEmpty) {
context.getPreferences().putBool("app.contacts.empty", isEmpty);
isContactsEmpty.change(isEmpty);
}
if (!isEmpty) {
if (isAppEmpty.get()) {
context.getPreferences().putBool("app.empty", false);
isAppEmpty.change(false);
}
}
}
/**
* Notify from Modules about phone import completed
*/
public synchronized void onPhoneImported() {
if (!isBookImported) {
isBookImported = true;
context.getPreferences().putBool("app.contacts.imported", true);
updateLoaded();
}
}
/**
* Notify from Modules about dialog load completed
*/
public synchronized void onDialogsLoaded() {
if (!isDialogsLoaded) {
isDialogsLoaded = true;
context.getPreferences().putBool("app.dialogs.loaded", true);
updateLoaded();
}
}
/**
* Notify from Modules about contacts load completed
*/
public synchronized void onContactsLoaded() {
if (!isContactsLoaded) {
isContactsLoaded = true;
context.getPreferences().putBool("app.contacts.loaded", true);
updateLoaded();
}
}
/**
* Notify from Modules about contacts load completed
*/
public synchronized void onSettingsLoaded() {
if (!isSettingsLoaded) {
isSettingsLoaded = true;
context.getPreferences().putBool("app.settings.loaded", true);
updateLoaded();
}
}
/**
* Dialogs empty View Model
*
* @return Value Model of Boolean
*/
public BooleanValueModel getIsDialogsEmpty() {
return isDialogsEmpty;
}
/**
* Contacts empty View Model
*
* @return Value Model of Boolean
*/
public BooleanValueModel getIsContactsEmpty() {
return isContactsEmpty;
}
/**
* App loaded View Model
*
* @return Value Model of Boolean
*/
public BooleanValueModel getIsAppLoaded() {
return isAppLoaded;
}
/**
* App empty View Model
*
* @return View Model of Boolean
*/
public BooleanValueModel getIsAppEmpty() {
return isAppEmpty;
}
/**
* Is Phone Book imported
*
* @return is phone book imported state
*/
public boolean isBookImported() {
return isBookImported;
}
/**
* Is dialogs loaded
*
* @return is dialogs loaded state
*/
public boolean isDialogsLoaded() {
return isDialogsLoaded;
}
/**
* Is contacts loaded
*
* @return is contacts loaded state
*/
public boolean isContactsLoaded() {
return isContactsLoaded;
}
/**
* Is settings loaded
*
* @return is contacts loaded state
*/
public boolean isSettingsLoaded() {
return isSettingsLoaded;
}
}