/* * This program is part of the OpenLMIS logistics management information * system platform software. * * Copyright © 2015 ThoughtWorks, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. This program 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 Affero General Public License for more details. You should * have received a copy of the GNU Affero General Public License along with * this program. If not, see http://www.gnu.org/licenses. For additional * information contact info@OpenLMIS.org */ package org.openlmis.core.manager; import android.content.Context; import android.content.SharedPreferences; import com.google.inject.Inject; import com.google.inject.Singleton; import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import org.openlmis.core.LMISApp; import org.openlmis.core.model.repository.RnrFormRepository; import org.openlmis.core.model.repository.StockRepository; import java.util.HashSet; import java.util.Set; import roboguice.RoboGuice; @Singleton public class SharedPreferenceMgr { private static SharedPreferenceMgr self; public static final String MY_PREFERENCE = "LMISPreference"; SharedPreferences sharedPreferences; private static final String KEY_LAST_SYNCED_TIME_RNR_FORM = "lastSyncedDate"; private static final String KEY_LAST_SYNCED_TIME_STOCKCARD = "lastSyncedDateStockCard"; public static final String KEY_LAST_LOGIN_USER = "last_user"; public static final String KEY_USER_FACILITY = "user_facility"; private static final String KEY_NEEDS_INVENTORY = "init_inventory"; private static final String KEY_HAS_SYNCED_LATEST_MONTH_STOCKMOVEMENTS = "has_get_month_stock_cards_synced"; private static final String KEY_SHOULD_SYNC_LAST_YEAR = "should_sync_last_year"; private static final String KEY_IS_REQUISITION_DATA_SYNCED = "is_requisition_data_synced"; public static final String KEY_STOCK_SYNC_END_TIME = "sync_stock_end_time"; public static final String KEY_STOCK_SYNC_CURRENT_INDEX = "sync_stock_current_index"; public static final String KEY_LAST_SYNC_PRODUCT_TIME = "last_sync_product_time"; public static final String KEY_SHOW_PRODUCT_UPDATE_BANNER = "show_product_update_banner"; public static final String KEY_PRODUCT_UPDATE_BANNER_TEXT = "product_update_banner_text"; public static final String LATEST_PHYSICAL_INVENTORY_TIME = "latest_physical_inventory_time"; public static final String LAST_MOVEMENT_HANDSHAKE_DATE = "last_movement_handshake_date"; public static final String KEY_ENABLE_QA_DEBUG = "enable_qa_debug"; public static final String LATEST_UPDATE_LOW_STOCK_AVG_TIME = "latest_update_low_stock_avg_time"; public static final String KEY_HAS_LOT_INFO = "has_lot_info"; public static final String KEY_HAS_DELETED_OLD_STOCK_MOVEMENT = "has_deleted_old_stock_movement"; public static final String KEY_HAS_DELETED_OLD_RNR = "has_deleted_old_rnr"; public static final String KEY_HAS_SYNCED_DOWN_RAPID_TESTS = "syncedRapidTests"; public static final String MONTH_OFFSET_DEFINED_OLD_DATA = "month_offset_that_defined_old_data"; final int MONTH_OFFSET = 13; protected StockRepository stockRepository; @Inject public SharedPreferenceMgr(Context context) { sharedPreferences = context.getSharedPreferences(MY_PREFERENCE, Context.MODE_PRIVATE); stockRepository = RoboGuice.getInjector(context).getInstance(StockRepository.class); self = this; } public static SharedPreferenceMgr getInstance() { return self; } public SharedPreferences getPreference() { return sharedPreferences; } public boolean hasSyncedVersion() { return sharedPreferences.getBoolean(UserInfoMgr.getInstance().getVersion(), false); } public void setSyncedVersion(boolean hasUpdated) { sharedPreferences.edit().putBoolean(UserInfoMgr.getInstance().getVersion(), hasUpdated).apply(); } public boolean isLastMonthStockDataSynced() { return sharedPreferences.getBoolean(SharedPreferenceMgr.KEY_HAS_SYNCED_LATEST_MONTH_STOCKMOVEMENTS, stockRepository.hasStockData()); } public void setLastMonthStockCardDataSynced(boolean isStockCardSynced) { sharedPreferences.edit().putBoolean(SharedPreferenceMgr.KEY_HAS_SYNCED_LATEST_MONTH_STOCKMOVEMENTS, isStockCardSynced).apply(); } public boolean shouldSyncLastYearStockData() { return sharedPreferences.getBoolean(SharedPreferenceMgr.KEY_SHOULD_SYNC_LAST_YEAR, false); } public void setShouldSyncLastYearStockCardData(boolean shouldSyncLastYearStockCardData) { sharedPreferences.edit().putBoolean(SharedPreferenceMgr.KEY_SHOULD_SYNC_LAST_YEAR, shouldSyncLastYearStockCardData).apply(); } public boolean isRequisitionDataSynced() { RnrFormRepository rnrFormRepository = RoboGuice.getInjector(LMISApp.getContext()).getInstance(RnrFormRepository.class); return sharedPreferences.getBoolean(SharedPreferenceMgr.KEY_IS_REQUISITION_DATA_SYNCED, rnrFormRepository.hasRequisitionData()); } public boolean hasDeletedOldStockMovement() { return sharedPreferences.getBoolean(SharedPreferenceMgr.KEY_HAS_DELETED_OLD_STOCK_MOVEMENT, false); } public boolean hasDeletedOldRnr() { return sharedPreferences.getBoolean(SharedPreferenceMgr.KEY_HAS_DELETED_OLD_RNR, false); } public void setRequisitionDataSynced(boolean requisitionDataSynced) { sharedPreferences.edit().putBoolean(SharedPreferenceMgr.KEY_IS_REQUISITION_DATA_SYNCED, requisitionDataSynced).apply(); } public boolean isNeedsInventory() { return sharedPreferences.getBoolean(SharedPreferenceMgr.KEY_NEEDS_INVENTORY, true); } public String getLastLoginUser() { return sharedPreferences.getString(SharedPreferenceMgr.KEY_LAST_LOGIN_USER, StringUtils.EMPTY); } public void setLastLoginUser(String lastLoginUser) { sharedPreferences.edit().putString(SharedPreferenceMgr.KEY_LAST_LOGIN_USER, lastLoginUser).apply(); } public String getCurrentUserFacility() { return sharedPreferences.getString(SharedPreferenceMgr.KEY_USER_FACILITY, StringUtils.EMPTY); } public void setCurrentUserFacility(String userFacility) { sharedPreferences.edit().putString(SharedPreferenceMgr.KEY_USER_FACILITY, userFacility).apply(); } public void setIsNeedsInventory(boolean isNeedsInventory) { sharedPreferences.edit().putBoolean(SharedPreferenceMgr.KEY_NEEDS_INVENTORY, isNeedsInventory).apply(); } public String getLastSyncProductTime() { return sharedPreferences.getString(KEY_LAST_SYNC_PRODUCT_TIME, null); } public void setLastSyncProductTime(String lastSyncProductTime) { sharedPreferences.edit().putString(KEY_LAST_SYNC_PRODUCT_TIME, lastSyncProductTime).apply(); } public boolean isNeedShowProductsUpdateBanner() { return sharedPreferences.getBoolean(KEY_SHOW_PRODUCT_UPDATE_BANNER, false); } public void setIsNeedShowProductsUpdateBanner(boolean isNeedShowUpdateBanner, String primaryName) { sharedPreferences.edit().putBoolean(KEY_SHOW_PRODUCT_UPDATE_BANNER, isNeedShowUpdateBanner).apply(); if (isNeedShowUpdateBanner) { addShowUpdateBannerText(primaryName); } else { sharedPreferences.edit().remove(KEY_PRODUCT_UPDATE_BANNER_TEXT).apply(); } } public void removeShowUpdateBannerTextWhenReactiveProduct(String primaryName) { Set<String> stringSet = sharedPreferences.getStringSet(KEY_PRODUCT_UPDATE_BANNER_TEXT, new HashSet<String>()); stringSet.remove(primaryName); if (stringSet.size() == 0) { sharedPreferences.edit().putBoolean(KEY_SHOW_PRODUCT_UPDATE_BANNER, false).apply(); } } public Set<String> getShowUpdateBannerTexts() { return sharedPreferences.getStringSet(KEY_PRODUCT_UPDATE_BANNER_TEXT, new HashSet<String>()); } public void addShowUpdateBannerText(String productName) { Set<String> stringSet = sharedPreferences.getStringSet(KEY_PRODUCT_UPDATE_BANNER_TEXT, new HashSet<String>()); stringSet.add(productName); sharedPreferences.edit().putStringSet(KEY_PRODUCT_UPDATE_BANNER_TEXT, stringSet).apply(); } public String getLatestPhysicInventoryTime() { return sharedPreferences.getString(LATEST_PHYSICAL_INVENTORY_TIME, "1970-01-01 08:00:00"); } public void setLatestPhysicInventoryTime(String latestPhysicInventoryTime) { sharedPreferences.edit().putString(LATEST_PHYSICAL_INVENTORY_TIME, latestPhysicInventoryTime).apply(); } public long getRnrLastSyncTime() { return sharedPreferences.getLong(KEY_LAST_SYNCED_TIME_RNR_FORM, 0); } public void setRnrLastSyncTime() { sharedPreferences.edit().putLong(KEY_LAST_SYNCED_TIME_RNR_FORM, LMISApp.getInstance().getCurrentTimeMillis()).apply(); } public long getStockLastSyncTime() { return sharedPreferences.getLong(KEY_LAST_SYNCED_TIME_STOCKCARD, 0); } public int getMonthOffsetThatDefinedOldData() { return sharedPreferences.getInt(MONTH_OFFSET_DEFINED_OLD_DATA, MONTH_OFFSET); } public void setStockLastSyncTime() { sharedPreferences.edit().putLong(KEY_LAST_SYNCED_TIME_STOCKCARD, LMISApp.getInstance().getCurrentTimeMillis()).apply(); } public boolean hasSyncedUpLatestMovementLastDay() { DateTime lastSyncTriggerDate = new DateTime(sharedPreferences.getLong(LAST_MOVEMENT_HANDSHAKE_DATE, 0)); DateTime currentDate = new DateTime(LMISApp.getInstance().getCurrentTimeMillis()); return currentDate.minusDays(1).isBefore(lastSyncTriggerDate); } public void setLastMovementHandShakeDateToToday() { sharedPreferences.edit().putLong(LAST_MOVEMENT_HANDSHAKE_DATE, LMISApp.getInstance().getCurrentTimeMillis()).apply(); } public void setEnableQaDebug(boolean enabled) { sharedPreferences.edit().putBoolean(KEY_ENABLE_QA_DEBUG, enabled).apply(); } public boolean isQaDebugEnabled() { return sharedPreferences.getBoolean(KEY_ENABLE_QA_DEBUG, false); } public DateTime getLatestUpdateLowStockAvgTime() { return new DateTime(sharedPreferences.getLong(LATEST_UPDATE_LOW_STOCK_AVG_TIME, 0)); } public void updateLatestLowStockAvgTime() { sharedPreferences.edit().putLong(LATEST_UPDATE_LOW_STOCK_AVG_TIME, LMISApp.getInstance().getCurrentTimeMillis()).apply(); } public void setHasDeletedOldStockMovement(boolean hasDeletedOldStockMovement) { sharedPreferences.edit().putBoolean(SharedPreferenceMgr.KEY_HAS_DELETED_OLD_STOCK_MOVEMENT, hasDeletedOldStockMovement).apply(); } public void setHasDeletedOldRnr(boolean hasDeletedOldRnr) { sharedPreferences.edit().putBoolean(SharedPreferenceMgr.KEY_HAS_DELETED_OLD_RNR, hasDeletedOldRnr).apply(); } public boolean isRapidTestDataSynced() { return sharedPreferences.getBoolean(SharedPreferenceMgr.KEY_HAS_SYNCED_DOWN_RAPID_TESTS, false); } public void setRapidTestsDataSynced(boolean hasRapidTestsDataSynced) { sharedPreferences.edit().putBoolean(SharedPreferenceMgr.KEY_HAS_SYNCED_DOWN_RAPID_TESTS, hasRapidTestsDataSynced).apply(); } }