From 13532c7392ea8522e2a5693d93dbcc9050f36035 Mon Sep 17 00:00:00 2001 From: Ernesto Olalla Date: Mon, 19 Dec 2016 12:08:24 +0000 Subject: [PATCH 1/5] Add method to retrieve all keys stored --- .../java/com/orhanobut/benchmark/MainActivity.java | 10 ++++++++++ .../java/com/orhanobut/hawk/DefaultHawkFacade.java | 6 ++++++ hawk/src/main/java/com/orhanobut/hawk/Hawk.java | 9 +++++++++ .../main/java/com/orhanobut/hawk/HawkFacade.java | 10 ++++++++++ .../orhanobut/hawk/SharedPreferencesStorage.java | 14 ++++++++++++++ hawk/src/main/java/com/orhanobut/hawk/Storage.java | 8 ++++++++ 6 files changed, 57 insertions(+) diff --git a/benchmark/src/main/java/com/orhanobut/benchmark/MainActivity.java b/benchmark/src/main/java/com/orhanobut/benchmark/MainActivity.java index e8bf3aa..e8002ff 100644 --- a/benchmark/src/main/java/com/orhanobut/benchmark/MainActivity.java +++ b/benchmark/src/main/java/com/orhanobut/benchmark/MainActivity.java @@ -19,6 +19,7 @@ protected void onCreate(Bundle savedInstanceState) { timeHawkGet(); timeHawkContains(); timeHawkCount(); + timeHawkGetKeys(); timeHawkDelete(); } @@ -79,4 +80,13 @@ private void timeHawkDelete() { long endTime = System.currentTimeMillis(); System.out.println("Hawk.count: " + (endTime - startTime) + "ms"); } + + private void timeHawkGetKeys(){ + long startTime = System.currentTimeMillis(); + + Hawk.getAllKeys(); + + long endTime = System.currentTimeMillis(); + System.out.println("Hawk.getAllKeys: " + (endTime - startTime) + "ms"); + } } diff --git a/hawk/src/main/java/com/orhanobut/hawk/DefaultHawkFacade.java b/hawk/src/main/java/com/orhanobut/hawk/DefaultHawkFacade.java index 2593fda..45d9ff9 100644 --- a/hawk/src/main/java/com/orhanobut/hawk/DefaultHawkFacade.java +++ b/hawk/src/main/java/com/orhanobut/hawk/DefaultHawkFacade.java @@ -1,5 +1,7 @@ package com.orhanobut.hawk; +import java.util.List; + public class DefaultHawkFacade implements HawkFacade { private final Storage storage; @@ -145,6 +147,10 @@ public DefaultHawkFacade(HawkBuilder builder) { @Override public void destroy() { } + @Override public List getAllKeys() { + return storage.getAllKeys(); + } + private void log(String message) { logInterceptor.onLog(message); } diff --git a/hawk/src/main/java/com/orhanobut/hawk/Hawk.java b/hawk/src/main/java/com/orhanobut/hawk/Hawk.java index 35e8b46..ba357ff 100644 --- a/hawk/src/main/java/com/orhanobut/hawk/Hawk.java +++ b/hawk/src/main/java/com/orhanobut/hawk/Hawk.java @@ -2,6 +2,7 @@ import android.content.Context; +import java.util.List; public final class Hawk { @@ -118,4 +119,12 @@ public static void destroy() { hawkFacade.destroy(); } + /** + * Use this method to get all the keys saved + * + * @return the list of all keys saved in the DB + */ + public static List getAllKeys() { + return hawkFacade.getAllKeys(); + } } diff --git a/hawk/src/main/java/com/orhanobut/hawk/HawkFacade.java b/hawk/src/main/java/com/orhanobut/hawk/HawkFacade.java index 3c40135..5f16b84 100644 --- a/hawk/src/main/java/com/orhanobut/hawk/HawkFacade.java +++ b/hawk/src/main/java/com/orhanobut/hawk/HawkFacade.java @@ -1,5 +1,7 @@ package com.orhanobut.hawk; +import java.util.List; + public interface HawkFacade { boolean put(String key, T value); @@ -20,6 +22,8 @@ public interface HawkFacade { void destroy(); + List getAllKeys(); + class EmptyHawkFacade implements HawkFacade { @Override public boolean put(String key, T value) { @@ -65,6 +69,12 @@ class EmptyHawkFacade implements HawkFacade { throwValidation(); } + @Override + public List getAllKeys() { + throwValidation(); + return null; + } + private void throwValidation() { throw new IllegalStateException("Hawk is not built. " + "Please call build() and wait the initialisation finishes."); diff --git a/hawk/src/main/java/com/orhanobut/hawk/SharedPreferencesStorage.java b/hawk/src/main/java/com/orhanobut/hawk/SharedPreferencesStorage.java index 465e265..785dce1 100644 --- a/hawk/src/main/java/com/orhanobut/hawk/SharedPreferencesStorage.java +++ b/hawk/src/main/java/com/orhanobut/hawk/SharedPreferencesStorage.java @@ -3,6 +3,10 @@ import android.content.Context; import android.content.SharedPreferences; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + final class SharedPreferencesStorage implements Storage { private final SharedPreferences preferences; @@ -45,4 +49,14 @@ private SharedPreferences.Editor getEditor() { return preferences.edit(); } + @Override + public List getAllKeys() { + List result = new ArrayList<>(); + Map allEntries = preferences.getAll(); + for (Map.Entry entry : allEntries.entrySet()) { + result.add(entry.getKey()); + } + return result; + } + } diff --git a/hawk/src/main/java/com/orhanobut/hawk/Storage.java b/hawk/src/main/java/com/orhanobut/hawk/Storage.java index bfad5cc..29bed03 100644 --- a/hawk/src/main/java/com/orhanobut/hawk/Storage.java +++ b/hawk/src/main/java/com/orhanobut/hawk/Storage.java @@ -1,5 +1,7 @@ package com.orhanobut.hawk; +import java.util.List; + @SuppressWarnings("WeakerAccess") public interface Storage { @@ -56,4 +58,10 @@ public interface Storage { */ boolean contains(String key); + /** + * Retrieve a list with all the keys in the storage + * + * @return list of keys + */ + List getAllKeys(); } From 379ef4691c4db6540d0ed4ffa5f4b4c095942a2e Mon Sep 17 00:00:00 2001 From: Ernesto Olalla Date: Mon, 19 Dec 2016 12:26:27 +0000 Subject: [PATCH 2/5] Add a method to clear all except a list of keys --- .../java/com/orhanobut/benchmark/MainActivity.java | 13 +++++++++++++ .../java/com/orhanobut/hawk/DefaultHawkFacade.java | 5 +++++ hawk/src/main/java/com/orhanobut/hawk/Hawk.java | 9 +++++++++ .../main/java/com/orhanobut/hawk/HawkFacade.java | 10 ++++++++-- .../orhanobut/hawk/SharedPreferencesStorage.java | 12 ++++++++++++ hawk/src/main/java/com/orhanobut/hawk/Storage.java | 7 +++++++ 6 files changed, 54 insertions(+), 2 deletions(-) diff --git a/benchmark/src/main/java/com/orhanobut/benchmark/MainActivity.java b/benchmark/src/main/java/com/orhanobut/benchmark/MainActivity.java index e8002ff..dd389aa 100644 --- a/benchmark/src/main/java/com/orhanobut/benchmark/MainActivity.java +++ b/benchmark/src/main/java/com/orhanobut/benchmark/MainActivity.java @@ -7,6 +7,8 @@ import com.orhanobut.hawk.Hawk; import com.orhanobut.hawk.LogInterceptor; +import java.util.Arrays; + public class MainActivity extends Activity { @Override @@ -21,6 +23,7 @@ protected void onCreate(Bundle savedInstanceState) { timeHawkCount(); timeHawkGetKeys(); timeHawkDelete(); + timeHawkSelectiveDelete(); } private void timeHawkInit() { @@ -89,4 +92,14 @@ private void timeHawkGetKeys(){ long endTime = System.currentTimeMillis(); System.out.println("Hawk.getAllKeys: " + (endTime - startTime) + "ms"); } + + private void timeHawkSelectiveDelete() { + long startTime = System.currentTimeMillis(); + + Hawk.selectiveDelete(Arrays.asList("key", "key2", "key3")); + + long endTime = System.currentTimeMillis(); + System.out.println("Hawk.getAllKeys: " + (endTime - startTime) + "ms"); + } + } diff --git a/hawk/src/main/java/com/orhanobut/hawk/DefaultHawkFacade.java b/hawk/src/main/java/com/orhanobut/hawk/DefaultHawkFacade.java index 45d9ff9..ad307ff 100644 --- a/hawk/src/main/java/com/orhanobut/hawk/DefaultHawkFacade.java +++ b/hawk/src/main/java/com/orhanobut/hawk/DefaultHawkFacade.java @@ -151,6 +151,11 @@ public DefaultHawkFacade(HawkBuilder builder) { return storage.getAllKeys(); } + @Override + public long selectiveDelete(List keys) { + return storage.selectiveDelete(keys); + } + private void log(String message) { logInterceptor.onLog(message); } diff --git a/hawk/src/main/java/com/orhanobut/hawk/Hawk.java b/hawk/src/main/java/com/orhanobut/hawk/Hawk.java index ba357ff..15d97e2 100644 --- a/hawk/src/main/java/com/orhanobut/hawk/Hawk.java +++ b/hawk/src/main/java/com/orhanobut/hawk/Hawk.java @@ -127,4 +127,13 @@ public static void destroy() { public static List getAllKeys() { return hawkFacade.getAllKeys(); } + + /** + * Use this method to clear all, except a list of keys + * + * @return the number of objects deleted + */ + public static long selectiveDelete(List keys) { + return hawkFacade.selectiveDelete(keys); + } } diff --git a/hawk/src/main/java/com/orhanobut/hawk/HawkFacade.java b/hawk/src/main/java/com/orhanobut/hawk/HawkFacade.java index 5f16b84..d0eb4f4 100644 --- a/hawk/src/main/java/com/orhanobut/hawk/HawkFacade.java +++ b/hawk/src/main/java/com/orhanobut/hawk/HawkFacade.java @@ -24,6 +24,8 @@ public interface HawkFacade { List getAllKeys(); + long selectiveDelete(List keys); + class EmptyHawkFacade implements HawkFacade { @Override public boolean put(String key, T value) { @@ -69,12 +71,16 @@ class EmptyHawkFacade implements HawkFacade { throwValidation(); } - @Override - public List getAllKeys() { + @Override public List getAllKeys() { throwValidation(); return null; } + @Override public long selectiveDelete(List keys) { + throwValidation(); + return 0; + } + private void throwValidation() { throw new IllegalStateException("Hawk is not built. " + "Please call build() and wait the initialisation finishes."); diff --git a/hawk/src/main/java/com/orhanobut/hawk/SharedPreferencesStorage.java b/hawk/src/main/java/com/orhanobut/hawk/SharedPreferencesStorage.java index 785dce1..389860a 100644 --- a/hawk/src/main/java/com/orhanobut/hawk/SharedPreferencesStorage.java +++ b/hawk/src/main/java/com/orhanobut/hawk/SharedPreferencesStorage.java @@ -59,4 +59,16 @@ public List getAllKeys() { return result; } + @Override + public long selectiveDelete(List keys) { + long result = 0; + Map allEntries = preferences.getAll(); + for (Map.Entry entry : allEntries.entrySet()) { + if(!keys.contains(entry.getKey())){ + delete(entry.getKey()); + result++; + } + } + return result; + } } diff --git a/hawk/src/main/java/com/orhanobut/hawk/Storage.java b/hawk/src/main/java/com/orhanobut/hawk/Storage.java index 29bed03..aff8697 100644 --- a/hawk/src/main/java/com/orhanobut/hawk/Storage.java +++ b/hawk/src/main/java/com/orhanobut/hawk/Storage.java @@ -64,4 +64,11 @@ public interface Storage { * @return list of keys */ List getAllKeys(); + + /** + * Clear all the data stored except the keys specified. + * @param keys to don't delete + * @return the number of items deleted + */ + long selectiveDelete(List keys); } From 57c87bc6f7b868f9aaa3696f5293b5490a361352 Mon Sep 17 00:00:00 2001 From: Ernesto Olalla Date: Mon, 19 Dec 2016 13:43:50 +0000 Subject: [PATCH 3/5] Fix check style --- .../src/main/java/com/orhanobut/benchmark/MainActivity.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/benchmark/src/main/java/com/orhanobut/benchmark/MainActivity.java b/benchmark/src/main/java/com/orhanobut/benchmark/MainActivity.java index dd389aa..f8fb106 100644 --- a/benchmark/src/main/java/com/orhanobut/benchmark/MainActivity.java +++ b/benchmark/src/main/java/com/orhanobut/benchmark/MainActivity.java @@ -84,7 +84,7 @@ private void timeHawkDelete() { System.out.println("Hawk.count: " + (endTime - startTime) + "ms"); } - private void timeHawkGetKeys(){ + private void timeHawkGetKeys() { long startTime = System.currentTimeMillis(); Hawk.getAllKeys(); @@ -101,5 +101,4 @@ private void timeHawkSelectiveDelete() { long endTime = System.currentTimeMillis(); System.out.println("Hawk.getAllKeys: " + (endTime - startTime) + "ms"); } - } From a2c0e6d1f5392ee3deed0cfda4d89e7be5cd38c7 Mon Sep 17 00:00:00 2001 From: Ernesto Olalla Date: Mon, 19 Dec 2016 13:57:53 +0000 Subject: [PATCH 4/5] Fix check style --- .../main/java/com/orhanobut/hawk/SharedPreferencesStorage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawk/src/main/java/com/orhanobut/hawk/SharedPreferencesStorage.java b/hawk/src/main/java/com/orhanobut/hawk/SharedPreferencesStorage.java index 389860a..184921b 100644 --- a/hawk/src/main/java/com/orhanobut/hawk/SharedPreferencesStorage.java +++ b/hawk/src/main/java/com/orhanobut/hawk/SharedPreferencesStorage.java @@ -64,7 +64,7 @@ public long selectiveDelete(List keys) { long result = 0; Map allEntries = preferences.getAll(); for (Map.Entry entry : allEntries.entrySet()) { - if(!keys.contains(entry.getKey())){ + if (!keys.contains(entry.getKey())) { delete(entry.getKey()); result++; } From ed1f6145c7e8902d4fa3db97266a6640fa15de6e Mon Sep 17 00:00:00 2001 From: Ernesto Olalla Date: Mon, 19 Dec 2016 14:09:01 +0000 Subject: [PATCH 5/5] Fix tests --- .../test/java/com/orhanobut/hawk/HawkBuilderTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/hawk/src/test/java/com/orhanobut/hawk/HawkBuilderTest.java b/hawk/src/test/java/com/orhanobut/hawk/HawkBuilderTest.java index bd0c252..bb35c67 100644 --- a/hawk/src/test/java/com/orhanobut/hawk/HawkBuilderTest.java +++ b/hawk/src/test/java/com/orhanobut/hawk/HawkBuilderTest.java @@ -8,6 +8,7 @@ import org.robolectric.annotation.Config; import java.lang.reflect.Type; +import java.util.List; import static com.google.common.truth.Truth.assertThat; import static junit.framework.Assert.fail; @@ -62,6 +63,16 @@ class MyStorage implements Storage { @Override public boolean contains(String key) { return false; } + + @Override + public List getAllKeys() { + return null; + } + + @Override + public long selectiveDelete(List keys) { + return 0; + } } builder.setStorage(new MyStorage()).build(); assertThat(builder.getStorage()).isInstanceOf(MyStorage.class);