Android Open Source - android-sdk Logger Storage






From Project

Back to project page android-sdk.

License

The source code is released under:

MIT License

If you think the Android project android-sdk listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package io.relayr.log;
/*from w  w w .j a v  a2s  .  co m*/
import android.content.Context;
import android.content.SharedPreferences;

import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.List;

import io.relayr.RelayrApp;
import io.relayr.model.LogEvent;

/**
 * LogStorage wraps SharedPreferences and acts as queue.
 * Maximal number of potentially saved messages is 500.
 */
public class LoggerStorage {

    private static final long MAX_STORAGE = 500;
    private static final String LOG_FILE = "logger.storage";

    static final SharedPreferences STORAGE =
            RelayrApp.get().getSharedPreferences(LOG_FILE, Context.MODE_PRIVATE);

    static Long sHead = null;
    static Long sTotal = null;
    static long sLimit;

    public static void init(int limit) {
        sLimit = limit;

        sTotal = LoggerPropertiesStorage.getTotal();
        sHead = LoggerPropertiesStorage.getHead();

        refreshOldMessages();
    }

    static boolean isEmpty() {
        return sTotal == 0L;
    }

    /**
     * Saves message to storage and returns true when there are enough messages to remove from storage.
     *
     * @param message to log on the platform
     * @return true if number of saved messages is above the limit, false otherwise
     */
    static synchronized boolean saveMessage(LogEvent message) {
        if (message == null) return false;

        if (sTotal >= MAX_STORAGE) return true;

        STORAGE.edit().putString(moveHead().toString(), new Gson().toJson(message)).apply();

        return sTotal >= sLimit;
    }

    /**
     * Returns saved messages. Maximum of returned messages is limited on initialization.
     *
     * @return list of {@link io.relayr.model.LogEvent} objects
     */
    static synchronized List<LogEvent> loadMessages() {
        long start;

        synchronized (sHead) {
            synchronized (sTotal) {
                if (sTotal < sLimit) return new ArrayList<>();

                start = sHead - sTotal + 1;
                sTotal -= sLimit;
            }
        }

        List<LogEvent> messages = new ArrayList<>();

        for (long i = 0; i < sLimit; i++) {
            String key = "" + (start + i);
            String event = STORAGE.getString(key, null);

            if (event != null) messages.add(new Gson().fromJson(event, LogEvent.class));

            STORAGE.edit().remove(key).apply();
        }

        return messages;
    }

    /**
     * Returns all saved messages.
     *
     * @return list of {@link io.relayr.model.LogEvent} objects
     */
    static synchronized List<LogEvent> loadAllMessages() {
        synchronized (sHead) {
            synchronized (sTotal) {
                List<LogEvent> messages = new ArrayList<>();

                for (long i = sTotal; i > 0; i--) {
                    String event = STORAGE.getString("" + (sHead - i + 1), null);
                    if (event != null) messages.add(new Gson().fromJson(event, LogEvent.class));
                }

                sHead = 0L;
                sTotal = 0L;

                STORAGE.edit().clear().apply();
                LoggerPropertiesStorage.clear();

                return messages;
            }
        }
    }

    synchronized static boolean oldMessagesExist() {
        synchronized (sHead) {
            String currentHead = STORAGE.getString("" + sHead, null);

            if (currentHead != null && currentHead.equals(LoggerPropertiesStorage.getLastMessage()))
                if (LoggerPropertiesStorage.getLastMessageRepeat() >= 3) {
                    LoggerPropertiesStorage.saveLastMsgRepeat(0);
                    return true;
                }
        }

        return false;
    }

    static void clear() {
        STORAGE.edit().clear().apply();
    }

    private static Long moveHead() {
        synchronized (sHead) {
            synchronized (sTotal) {
                sHead++;
                sTotal++;

                LoggerPropertiesStorage.saveHead(sHead);
                LoggerPropertiesStorage.saveTotal(sTotal);

                return sHead;
            }
        }
    }

    private static void refreshOldMessages() {
        String currentHead = STORAGE.getString("" + sHead, null);
        String lastMessage = LoggerPropertiesStorage.getLastMessage();

        if (lastMessage != null && currentHead != null && lastMessage.equals(currentHead))
            LoggerPropertiesStorage.saveLastMsgRepeat(LoggerPropertiesStorage.getLastMessageRepeat() + 1);
        else {
            LoggerPropertiesStorage.saveLastMsgRepeat(1);
            LoggerPropertiesStorage.saveLastMessage(currentHead);
        }
    }

    static class LoggerPropertiesStorage {

        private static final String PROPS_FILE = "logger.properties.storage";
        private static final String PROPS_HEAD = "head";
        private static final String PROPS_TOTAL = "total";
        private static final String PROPS_LAST_MSG = "last.msg";
        private static final String PROPS_LAST_REPEAT = "last.msg.repeat";

        private static final SharedPreferences PROPS =
                RelayrApp.get().getSharedPreferences(PROPS_FILE, Context.MODE_PRIVATE);

        static Long getTotal() {
            Long total = PROPS.getLong(PROPS_TOTAL, -1);
            if (total == -1) total = 0L;
            return total;
        }

        static Long getHead() {
            Long head = PROPS.getLong(PROPS_HEAD, -1);
            if (head == -1) head = 0L;
            return head;
        }

        static String getLastMessage() {
            return PROPS.getString(PROPS_LAST_MSG, null);
        }

        static int getLastMessageRepeat() {
            return PROPS.getInt(PROPS_LAST_REPEAT, 0);
        }

        static void saveLastMessage(String head) {
            PROPS.edit().putString(PROPS_LAST_MSG, head).apply();
        }

        static void saveLastMsgRepeat(int repeat) {
            PROPS.edit().putInt(PROPS_LAST_REPEAT, repeat).apply();
        }

        static void saveHead(Long head) {
            PROPS.edit().putLong(PROPS_HEAD, head).apply();
        }

        static void saveTotal(Long total) {
            PROPS.edit().putLong(PROPS_TOTAL, total).apply();
        }

        static void clear() {
            PROPS.edit().clear().apply();
        }
    }
}




Java Source Code List

io.relayr.DebugModules.java
io.relayr.LoginEventListener.java
io.relayr.Modules.java
io.relayr.RelayrApp.java
io.relayr.RelayrModule.java
io.relayr.RelayrSdk.java
io.relayr.SocketClient.java
io.relayr.activity.LoginActivity.java
io.relayr.activity.UiModule.java
io.relayr.api.ApiModule.java
io.relayr.api.CloudApi.java
io.relayr.api.DebugApiModule.java
io.relayr.api.MockBackend.java
io.relayr.api.MockCloudApi.java
io.relayr.api.MockOauthApi.java
io.relayr.api.MockRelayrApi.java
io.relayr.api.MockStatusApi.java
io.relayr.api.MockSubscriptionApi.java
io.relayr.api.OauthApi.java
io.relayr.api.RelayrApi.java
io.relayr.api.StatusApi.java
io.relayr.api.SubscriptionApi.java
io.relayr.api.Utils.java
io.relayr.api.package-info.java
io.relayr.ble.BleDeviceManager.java
io.relayr.ble.BleDeviceMode.java
io.relayr.ble.BleDeviceType.java
io.relayr.ble.BleDevice.java
io.relayr.ble.BleDevicesScanner.java
io.relayr.ble.BleModule.java
io.relayr.ble.BleScannerFilter.java
io.relayr.ble.BleSocketClient.java
io.relayr.ble.BleUtils.java
io.relayr.ble.BluetoothGattStatus.java
io.relayr.ble.DebugBleModule.java
io.relayr.ble.DeviceCompatibilityUtils.java
io.relayr.ble.MockBleUtils.java
io.relayr.ble.NullableRelayrBleSdk.java
io.relayr.ble.RelayrBleSdkImpl.java
io.relayr.ble.RelayrBleSdk.java
io.relayr.ble.parser.AdvertisementPacketParser.java
io.relayr.ble.parser.BleDataParser.java
io.relayr.ble.service.BaseService.java
io.relayr.ble.service.BluetoothGattReceiver.java
io.relayr.ble.service.BondingReceiver.java
io.relayr.ble.service.DirectConnectionService.java
io.relayr.ble.service.MasterModuleService.java
io.relayr.ble.service.OnBoardingService.java
io.relayr.ble.service.Service.java
io.relayr.ble.service.ShortUUID.java
io.relayr.ble.service.Utils.java
io.relayr.ble.service.error.CharacteristicNotFoundException.java
io.relayr.ble.service.error.DisconnectionException.java
io.relayr.ble.service.error.GattException.java
io.relayr.ble.service.error.ReadCharacteristicException.java
io.relayr.ble.service.error.WriteCharacteristicException.java
io.relayr.ble.service.package-info.java
io.relayr.ble.package-info.java
io.relayr.log.LoggerStorage.java
io.relayr.log.Logger.java
io.relayr.model.AccelGyroscope.java
io.relayr.model.App.java
io.relayr.model.BookmarkDevice.java
io.relayr.model.Bookmark.java
io.relayr.model.Command.java
io.relayr.model.CreateWunderBar.java
io.relayr.model.DeviceModel.java
io.relayr.model.Device.java
io.relayr.model.LightColorProx.java
io.relayr.model.LogEvent.java
io.relayr.model.ModelDefinition.java
io.relayr.model.Model.java
io.relayr.model.OauthToken.java
io.relayr.model.ReadingMeaning.java
io.relayr.model.Reading.java
io.relayr.model.Status.java
io.relayr.model.TransmitterDevice.java
io.relayr.model.Transmitter.java
io.relayr.model.User.java
io.relayr.model.WebSocketConfig.java
io.relayr.model.WunderBar.java
io.relayr.model.package-info.java
io.relayr.storage.DataStorage.java
io.relayr.storage.RelayrProperties.java
io.relayr.util.DebugUtilModule.java
io.relayr.util.MockReachabilityUtils.java
io.relayr.util.ReachabilityUtils.java
io.relayr.util.UtilModule.java
io.relayr.websocket.DebugWebSocketModule.java
io.relayr.websocket.MockWebSocketFactory.java
io.relayr.websocket.MockWebSocket.java
io.relayr.websocket.WebSocketCallback.java
io.relayr.websocket.WebSocketClient.java
io.relayr.websocket.WebSocketFactory.java
io.relayr.websocket.WebSocketModule.java
io.relayr.websocket.WebSocket.java
io.relayr.websocket.package-info.java
io.relayr.package-info.java