Subversion Repository Public Repository

Nextrek

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package nextrek.minstrek.core;

import java.util.HashMap;
import java.util.Locale;

import nextrek.minstrek.utils.BookUtils;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;

public class FlagList {

    private static final String TAG = "FlagList";
    
    private HashMap<String, Boolean> map = new HashMap<String, Boolean>();
    private boolean hasChanged = false;

    public boolean hasChanged() {
        return this.hasChanged;
    }

    private FlagList() {

    }

    public static FlagList CreateFromJavascript(String jsonKeyToGrab, String eventJavascript) {

        if (eventJavascript == null) {
            return null;
        }

        FlagList result = new FlagList();

        String jsonString = cleanJavascript(eventJavascript);
        JSONTokener jsonTok = new JSONTokener(jsonString);
        try {
            JSONObject json = new JSONObject(jsonTok);
            JSONArray names = json.names();
            for (int scan = 0; scan < names.length(); scan++) {
                String eventName = names.getString(scan);
                JSONObject eventJson = json.getJSONObject(eventName);

                eventName = eventName.toLowerCase(Locale.ITALIAN);

                result.map.put(eventName, eventJson.optBoolean(jsonKeyToGrab));
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return result;
    }

    public static FlagList CreateFromSharedPrefs(String jsonString) {

        if (jsonString == null) {
            return null;
        }

        FlagList result = new FlagList();

        JSONTokener jsonTok = new JSONTokener(jsonString);
        try {
            JSONObject json = new JSONObject(jsonTok);
            JSONArray names = json.names();
            for (int scan = 0; scan < names.length(); scan++) {
                String eventName = names.getString(scan);
                boolean value = json.getBoolean(eventName);

                result.map.put(eventName, value);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return result;
    }

    private static String cleanJavascript(String js) {

        int start = js.indexOf("{");
        int end = js.indexOf("};");

        return js.substring(start, end + 1);
    }

    public String saveAsJsonString() throws JSONException {
        JSONObject root = new JSONObject(map);
        return root.toString();
    }

    public Boolean change(String eventName, boolean newValue) {
        Boolean oldValue = this.map.get(eventName);

        if ((oldValue == null) || (newValue != oldValue)) {
            this.map.put(eventName, newValue);
            hasChanged |= true;
        }

        return oldValue;
    }

    public boolean isTrue(String eventName) {
        return this.map.get(eventName);
    }

    public void clearChanged() {
        this.hasChanged = false;
    }

    public static FlagList createFromAssetsOrSharedPrefs(Context context, SharedPreferences prefs, String sharedPrefsKey, String javascriptFilename, String javascriptKey) {
        FlagList eventsList = null;
        String eventsData = prefs.getString(sharedPrefsKey, null);
        if (eventsData != null) {
            eventsList = FlagList.CreateFromSharedPrefs(eventsData);
            Log.d(TAG, sharedPrefsKey + "(SP): " + eventsData);
        } else {
            Log.d(TAG, sharedPrefsKey + "(SP): *no savegame*");
            eventsData = BookUtils.readStringFile(context, javascriptFilename);
            if (eventsData != null) {
                eventsList = FlagList.CreateFromJavascript(javascriptKey, eventsData);
                Log.d(TAG, sharedPrefsKey + "(JS): " + eventsData);
            } else {
                Log.w(TAG, sharedPrefsKey + "(JS): *missing data file*");
            }
        }
        return eventsList;
    }

    public void clear() {
        if (map != null) {
            map.clear();
            map = null;
        }
    }
}

Commits for Nextrek/Android/Minstrek/MinstrekLib/app/src/main/java/nextrek/minstrek/core/FlagList.java

Diff revisions: vs.
Revision Author Commited Message
792 MStefanelli picture MStefanelli Fri 02 Oct, 2015 12:03:54 +0000

New gradle version with ad