@@ -26,21 +26,27 @@ public class IterableInAppFileStorage implements IterableInAppStorage, IterableI
2626 private static final String FOLDER_PATH = "IterableInAppFileStorage" ;
2727 private static final String INDEX_FILE = "index.html" ;
2828 private static final int OPERATION_SAVE = 100 ;
29+
2930 private final Context context ;
31+
3032 private Map <String , IterableInAppMessage > messages =
3133 Collections .synchronizedMap (new LinkedHashMap <String , IterableInAppMessage >());
3234
3335 private final HandlerThread fileOperationThread = new HandlerThread ("FileOperationThread" );
36+
3437 @ VisibleForTesting
3538 FileOperationHandler fileOperationHandler ;
3639
3740 IterableInAppFileStorage (Context context ) {
3841 this .context = context ;
42+
3943 fileOperationThread .start ();
4044 fileOperationHandler = new FileOperationHandler (fileOperationThread .getLooper ());
45+
4146 load ();
4247 }
4348
49+ //region IterableInAppStorage interface implementation
4450 @ NonNull
4551 @ Override
4652 public synchronized List <IterableInAppMessage > getMessages () {
@@ -68,6 +74,45 @@ public synchronized void removeMessage(@NonNull IterableInAppMessage message) {
6874 saveMessagesInBackground ();
6975 }
7076
77+ @ Override
78+ public void saveHTML (@ NonNull String messageID , @ NonNull String contentHTML ) {
79+ File folder = createFolderForMessage (messageID );
80+ if (folder == null ) {
81+ IterableLogger .e (TAG , "Failed to create folder for HTML content" );
82+ return ;
83+ }
84+
85+ File file = new File (folder , INDEX_FILE );
86+ boolean result = IterableUtil .writeFile (file , contentHTML );
87+ if (!result ) {
88+ IterableLogger .e (TAG , "Failed to store HTML content" );
89+ }
90+ }
91+
92+ @ Nullable
93+ @ Override
94+ public String getHTML (@ NonNull String messageID ) {
95+ File file = getFileForContent (messageID );
96+ return IterableUtil .readFile (file );
97+ }
98+
99+ @ Override
100+ public void removeHTML (@ NonNull String messageID ) {
101+ File folder = getFolderForMessage (messageID );
102+
103+ File [] files = folder .listFiles ();
104+ if (files == null ) {
105+ return ;
106+ }
107+
108+ for (File file : files ) {
109+ file .delete ();
110+ }
111+ folder .delete ();
112+ }
113+ //endregion
114+
115+ //region In-App Lifecycle
71116 @ Override
72117 public void onInAppMessageChanged (@ NonNull IterableInAppMessage message ) {
73118 saveMessagesInBackground ();
@@ -80,7 +125,9 @@ private synchronized void clearMessages() {
80125 }
81126 messages .clear ();
82127 }
128+ //endregion
83129
130+ //region JSON Parsing
84131 @ NonNull
85132 private JSONObject serializeMessages () {
86133 JSONObject jsonData = new JSONObject ();
@@ -116,15 +163,9 @@ private void loadMessagesFromJson(JSONObject jsonData) {
116163 }
117164 }
118165 }
166+ //endregion
119167
120- private File getInAppStorageFile () {
121- return new File (getInAppContentFolder (), "itbl_inapp.json" );
122- }
123-
124- private File getInAppCacheStorageFile () {
125- return new File (IterableUtil .getSdkCacheDir (context ), "itbl_inapp.json" );
126- }
127-
168+ //region File Saving/Loading
128169 private void load () {
129170 try {
130171 File inAppStorageFile = getInAppStorageFile ();
@@ -169,20 +210,15 @@ private synchronized void saveMetadata() {
169210 IterableLogger .e (TAG , "Error while saving in-app messages to file" , e );
170211 }
171212 }
213+ //endregion
172214
173- @ Override
174- public void saveHTML (@ NonNull String messageID , @ NonNull String contentHTML ) {
175- File folder = createFolderForMessage (messageID );
176- if (folder == null ) {
177- IterableLogger .e (TAG , "Failed to create folder for HTML content" );
178- return ;
179- }
215+ //region File Management
216+ private File getInAppStorageFile () {
217+ return new File (getInAppContentFolder (), "itbl_inapp.json" );
218+ }
180219
181- File file = new File (folder , INDEX_FILE );
182- boolean result = IterableUtil .writeFile (file , contentHTML );
183- if (!result ) {
184- IterableLogger .e (TAG , "Failed to store HTML content" );
185- }
220+ private File getInAppCacheStorageFile () {
221+ return new File (IterableUtil .getSdkCacheDir (context ), "itbl_inapp.json" );
186222 }
187223
188224 @ Nullable
@@ -217,28 +253,7 @@ private File getFileForContent(String messageID) {
217253 File folder = getFolderForMessage (messageID );
218254 return new File (folder , INDEX_FILE );
219255 }
220-
221- @ Nullable
222- @ Override
223- public String getHTML (@ NonNull String messageID ) {
224- File file = getFileForContent (messageID );
225- return IterableUtil .readFile (file );
226- }
227-
228- @ Override
229- public void removeHTML (@ NonNull String messageID ) {
230- File folder = getFolderForMessage (messageID );
231-
232- File [] files = folder .listFiles ();
233- if (files == null ) {
234- return ;
235- }
236-
237- for (File file : files ) {
238- file .delete ();
239- }
240- folder .delete ();
241- }
256+ //endregion
242257
243258 class FileOperationHandler extends Handler {
244259 FileOperationHandler (Looper threadLooper ) {
0 commit comments