From 0a8afdd44dc8fff6233d1ad12b5f4a821ecb774a Mon Sep 17 00:00:00 2001 From: 2Tu Date: Tue, 7 Mar 2017 17:43:40 +0800 Subject: [PATCH 1/4] fixed #22 ,add method get\edit --- CHANGELOG.md | 4 + README.md | 55 ++++++++---- build.gradle | 29 +++---- .../main/java/fit/compiler/FitProcessor.java | 17 ---- fit-compiler/src/test/java/fit/MM.java | 2 - .../java/fit/SharedPreferenceAbleTest.java | 28 ------ .../src/test/java/fit/internal/Utils.java | 7 +- fit/build.gradle | 1 + fit/src/main/java/fit/Fit.java | 87 +++++++++++++------ fit/src/main/java/fit/MM.java | 2 - fit/src/main/java/fit/internal/Utils.java | 7 +- 11 files changed, 129 insertions(+), 110 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae54fe5..7eb577b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## Changelog +### Newest version: 0.3.2 + +* 为Fit添加get、edit方法 + ### Newest version: 0.3.1 * save和clear返回Editor diff --git a/README.md b/README.md index eeb27fd..8814ade 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # Fit -[![Release](https://jitpack.io/v/2tu/fit.svg)](https://jitpack.io/#2tu/fit) [![Build Status](https://travis-ci.org/2tu/fit.svg?branch=master)](https://travis-ci.org/2tu/fit) [![Apache License](http://img.shields.io/hexpm/l/plug.svg?style=flat)](https://github.com/kentarosasaki/raspberrypi/blob/master/LICENSE) +[![Release](https://jitpack.io/v/2tu/fit.svg)](https://jitpack.io/#2tu/fit) Fit 使用SharedPreferences存储对象中的基本数据类型。利用APT编译时生成代码,与转成String及反射相比更快。 ## support * 基本类型 * 基本包装类型 -* Set +* Set<String> * minSdkVersion 4 @@ -27,8 +27,8 @@ Add the following dependency to your `build.gradle` file: ``` dependencies { - compile 'com.github.2tu.fit:fit:0.3.1' - annotationProcessor 'com.github.2tu.fit:fit-compiler:0.3.1' + compile 'com.github.2tu.fit:fit:0.3.2' + annotationProcessor 'com.github.2tu.fit:fit-compiler:0.3.2' } ``` @@ -38,23 +38,48 @@ annotation model class. @SharedPreferenceAble ``` -save +save object ```java -User user = new User("Three.Tu"); -Fit.save(this, user); -Fit.save(this, "user", user); +User user = new User(); +Fit.save(context, user); +Fit.save(context, "user", user); ``` get ```java -User user = Fit.get(this, User.class); -User user = Fit.get(this, "user", User.class); +User user = Fit.get(context, User.class); +User user = Fit.get(context, "user", User.class); ``` clear ```java -Fit.clear(this, User.class); -Fit.clear(this, "user", User.class); +Fit.clear(context, User.class); +Fit.clear(context, "user"); ``` +other +```java +Fit.get(context, "name").getBoolean("isFirst", false); +SharedPreferences.Editor editor = Fit.edit(context, "name"); +editor.putBoolean("isFirst", true); +editor.apply(); +``` + + +License +------- + + Copyright 2016 Tu + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + -## What's new (0.3.1) - [Changelog](https://github.com/2tu/fit/blob/master/CHANGELOG.md) -* save和clear返回Editor -* 修复Double未校验空问题 + [1]: http://2tu.github.com/fit/ diff --git a/build.gradle b/build.gradle index 90f9fcb..029aae6 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ allprojects { maven { url "https://jitpack.io" } } } - +def supportLibraryVersion = '25.1.0' ext { minSdkVersion = 4 targetSdkVersion = 25 @@ -26,20 +26,19 @@ ext { targetCompatibilityVersion = JavaVersion.VERSION_1_7 } -ext.deps = [ - // Android - android: 'com.google.android:android:4.0.1.2', - androidGradle: 'com.android.tools.build:gradle:2.2.2', - - // Square - javapoet: 'com.squareup:javapoet:1.7.0', - - // Test dependencies - autoservice: 'com.google.auto.service:auto-service:1.0-rc2', - compiletesting: 'com.google.testing.compile:compile-testing:0.9', - autocommon: 'com.google.auto:auto-common:0.6', - truth: 'com.google.truth:truth:0.28', - junit: 'junit:junit:4.12' +ext.deps = [// Android + android : 'com.google.android:android:4.0.1.2', + androidGradle : 'com.android.tools.build:gradle:2.2.2', + supportAnnotations: "com.android.support:support-annotations:$supportLibraryVersion", + // Square + javapoet : 'com.squareup:javapoet:1.7.0', + + // Test dependencies + autoservice : 'com.google.auto.service:auto-service:1.0-rc2', + compiletesting : 'com.google.testing.compile:compile-testing:0.9', + autocommon : 'com.google.auto:auto-common:0.6', + truth : 'com.google.truth:truth:0.28', + junit : 'junit:junit:4.12' ] diff --git a/fit-compiler/src/main/java/fit/compiler/FitProcessor.java b/fit-compiler/src/main/java/fit/compiler/FitProcessor.java index eae20d7..9b0f393 100644 --- a/fit-compiler/src/main/java/fit/compiler/FitProcessor.java +++ b/fit-compiler/src/main/java/fit/compiler/FitProcessor.java @@ -273,7 +273,6 @@ private TypeSpec createPreferenceClass(ClassName preferenceClassName, boolean is result.addMethod(createPreferenceGetMethod(targetTypeName, fieldElements, setterElement)); - result.addMethod(createPreferenceClearMethod()); return result.build(); } @@ -458,22 +457,6 @@ private MethodSpec.Builder genGetCode(boolean isSetter, MethodSpec.Builder build propertyName, defaultValue); } - private MethodSpec createPreferenceClearMethod() { - MethodSpec.Builder result = MethodSpec.methodBuilder("clear") - .returns(SHARED_PREFERENCES_EDITOR) - .addAnnotation(Override.class) - .addModifiers(PUBLIC) - .addParameter(CONTEXT, "context") - .addParameter(STRING, "name"); - result.addStatement( - "SharedPreferences.Editor editor = $T.getSharedPreferenceEditor(context, name).clear()", - UTILS); - - result.addStatement("return editor"); - - return result.build(); - } - private TypeName unbox(TypeName typeName) { if (typeName.isBoxedPrimitive()) { return typeName.unbox(); diff --git a/fit-compiler/src/test/java/fit/MM.java b/fit-compiler/src/test/java/fit/MM.java index 507b444..12363e7 100644 --- a/fit-compiler/src/test/java/fit/MM.java +++ b/fit-compiler/src/test/java/fit/MM.java @@ -12,6 +12,4 @@ public interface MM { SharedPreferences.Editor save(Context context, String name, T obj); T get(Context context, String name); - - SharedPreferences.Editor clear(Context context, String name); } diff --git a/fit-compiler/src/test/java/fit/SharedPreferenceAbleTest.java b/fit-compiler/src/test/java/fit/SharedPreferenceAbleTest.java index 4bb9461..e32b526 100644 --- a/fit-compiler/src/test/java/fit/SharedPreferenceAbleTest.java +++ b/fit-compiler/src/test/java/fit/SharedPreferenceAbleTest.java @@ -44,10 +44,6 @@ public class SharedPreferenceAbleTest { + " obj.aT = sharedPreferences.getString(\"aT\", null);\n" + " return obj;\n" + " }\n" - + " @Override public Editor clear(Context context, String name) {\n" - + " SharedPreferences.Editor editor = Utils.getSharedPreferenceEditor(context, name).clear();\n" - + " return editor;\n" - + " }\n" + "}"); assertAbout(javaSource()).that(source) @@ -87,10 +83,6 @@ public class SharedPreferenceAbleTest { + " obj.aT = sharedPreferences.getString(\"aT\", null);\n" + " return obj;\n" + " }\n" - + " @Override public Editor clear(Context context, String name) {\n" - + " SharedPreferences.Editor editor = Utils.getSharedPreferenceEditor(context, name).clear();" - + " return editor;\n" - + " }\n" + "}"); assertAbout(javaSource()).that(source) @@ -130,10 +122,6 @@ public class SharedPreferenceAbleTest { + " obj.aT = sharedPreferences.getString(\"aT\", null);\n" + " return obj;\n" + " }\n" - + " @Override public Editor clear(Context context, String name) {\n" - + " SharedPreferences.Editor editor = Utils.getSharedPreferenceEditor(context, name).clear();" - + " return editor;\n" - + " }\n" + "}"); assertAbout(javaSource()).that(source) @@ -175,10 +163,6 @@ public class SharedPreferenceAbleTest { + " obj.aT = sharedPreferences.getString(\"aT\", null);\n" + " return obj;\n" + " }\n" - + " @Override public Editor clear(Context context, String name) {\n" - + " SharedPreferences.Editor editor = Utils.getSharedPreferenceEditor(context, name).clear();\n" - + " return editor;\n" - + " }\n" + "}"); assertAbout(javaSource()).that(source) @@ -231,10 +215,6 @@ public class SharedPreferenceAbleTest { + " obj.aT = sharedPreferences.getString(\"aT\", null);\n" + " return obj;\n" + " }\n" - + " @Override public Editor clear(Context context, String name) {\n" - + " SharedPreferences.Editor editor = Utils.getSharedPreferenceEditor(context, name).clear();\n" - + " return editor;\n" - + " }\n" + "}"); JavaFileObject sharedSource2 = JavaFileObjects.forSourceString("test/TestOne_Preference", "" @@ -260,10 +240,6 @@ public class SharedPreferenceAbleTest { + " obj.aT = sharedPreferences.getString(\"aT\", null);\n" + " return obj;\n" + " }\n" - + " @Override public Editor clear(Context context, String name) {\n" - + " SharedPreferences.Editor editor = Utils.getSharedPreferenceEditor(context, name).clear();\n" - + " return editor;\n" - + " }\n" + "}"); JavaFileObject sharedSource3 = JavaFileObjects.forSourceString("test/TestTwo_Preference", "" @@ -287,10 +263,6 @@ public class SharedPreferenceAbleTest { + " obj.aT = sharedPreferences.getString(\"aT\", null);\n" + " return obj;\n" + " }\n" - + " @Override public Editor clear(Context context, String name) {\n" - + " SharedPreferences.Editor editor = Utils.getSharedPreferenceEditor(context, name).clear();" - + " return editor;\n" - + " }\n" + "}"); assertAbout(javaSources()).that(asList(source1, source2, source3)) diff --git a/fit-compiler/src/test/java/fit/internal/Utils.java b/fit-compiler/src/test/java/fit/internal/Utils.java index 067419d..ce546de 100644 --- a/fit-compiler/src/test/java/fit/internal/Utils.java +++ b/fit-compiler/src/test/java/fit/internal/Utils.java @@ -11,9 +11,12 @@ @SuppressWarnings({ "deprecation", "WeakerAccess" }) // Used by generated code. public final class Utils { + public static SharedPreferences getSharedPreference(Context context, String name) { + return context.getSharedPreferences(name, Context.MODE_PRIVATE); + } + public static SharedPreferences.Editor getSharedPreferenceEditor(Context context, String name) { - SharedPreferences sharedPreferences = context.getSharedPreferences(name, Context.MODE_PRIVATE); - return sharedPreferences.edit(); + return getSharedPreference(context, name).edit(); } public static void apply(SharedPreferences.Editor editor) { diff --git a/fit/build.gradle b/fit/build.gradle index 3d17cc3..14ecf79 100644 --- a/fit/build.gradle +++ b/fit/build.gradle @@ -12,4 +12,5 @@ android { } dependencies { compile project(':fit-annotations') + compile deps.supportAnnotations } \ No newline at end of file diff --git a/fit/src/main/java/fit/Fit.java b/fit/src/main/java/fit/Fit.java index 45d0f1e..21ec0fb 100644 --- a/fit/src/main/java/fit/Fit.java +++ b/fit/src/main/java/fit/Fit.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.SharedPreferences; +import android.support.annotation.NonNull; import fit.internal.Utils; /** @@ -10,61 +11,93 @@ */ public final class Fit { - public static void save(Context context, Object o) { + private static MM instanceMM(Class clazz) { + try { + Class mmClass = findMMForClass(clazz); + return mmClass.newInstance(); + } catch (ClassNotFoundException e) { + throw new RuntimeException("Miss SharedPreferenceAble", e); + } catch (InstantiationException e) { + throw new RuntimeException(clazz.getName() + " can't instance ", e); + } catch (IllegalAccessException e) { + throw new RuntimeException(clazz.getName() + " can't instance ", e); + } + } + + private static Class findMMForClass(Class clazz) throws ClassNotFoundException { + return (Class) Class.forName(clazz.getName() + "_Preference"); + } + + public static void save(@NonNull Context context, @NonNull Object o) { save(context, o.getClass().getName(), o); } - public static void save(Context context, String name, Object o) { + public static void save(@NonNull Context context, String name, @NonNull Object o) { Utils.apply(saveEditor(context, name, o)); } - public static SharedPreferences.Editor saveEditor(Context context, Object o) { + @NonNull + public static SharedPreferences.Editor saveEditor(@NonNull Context context, @NonNull Object o) { return saveEditor(context, o.getClass().getName(), o); } - public static SharedPreferences.Editor saveEditor(Context context, String name, Object o) { + @NonNull public static SharedPreferences.Editor saveEditor(@NonNull Context context, String name, + @NonNull Object o) { Class clazz = o.getClass(); return instanceMM(clazz).save(context, name, o); } - public static T get(Context context, Class clazz) { + public static T get(@NonNull Context context, @NonNull Class clazz) { return get(context, clazz.getName(), clazz); } - public static T get(Context context, String name, Class clazz) { + public static T get(@NonNull Context context, String name, @NonNull Class clazz) { return (T) instanceMM(clazz).get(context, name); } - public static void clear(Context context, Class clazz) { - clear(context, clazz.getName(), clazz); + public static void clear(@NonNull Context context, @NonNull Class clazz) { + clear(context, clazz.getName()); } - public static void clear(Context context, String name, Class clazz) { - Utils.apply(clearEditor(context, name, clazz)); + public static void clear(@NonNull Context context, String name) { + Utils.apply(clearEditor(context, name)); } - public static SharedPreferences.Editor clearEditor(Context context, Class clazz) { - return clearEditor(context, clazz.getName(), clazz); + @NonNull public static SharedPreferences.Editor clearEditor(@NonNull Context context, + @NonNull Class clazz) { + return clearEditor(context, clazz.getName()); } - public static SharedPreferences.Editor clearEditor(Context context, String name, Class clazz) { - return instanceMM(clazz).clear(context, name); + @NonNull + public static SharedPreferences.Editor clearEditor(@NonNull Context context, String name) { + return Utils.getSharedPreferenceEditor(context, name).clear(); } - private static MM instanceMM(Class clazz) { - try { - Class mmClass = findMMForClass(clazz); - return mmClass.newInstance(); - } catch (ClassNotFoundException e) { - throw new RuntimeException("Miss SharedPreferenceAble", e); - } catch (InstantiationException e) { - throw new RuntimeException(clazz.getName() + " can't instance ", e); - } catch (IllegalAccessException e) { - throw new RuntimeException(clazz.getName() + " can't instance ", e); - } + /** + * remove all values from the preferences for {@code name}. + * + * @deprecated use {@link #clear(Context, Class)} or {@link #clear(Context, String)}. + */ + @Deprecated public static void clear(@NonNull Context context, String name, Class clazz) { + Utils.apply(clearEditor(context, name)); } - private static Class findMMForClass(Class clazz) throws ClassNotFoundException { - return (Class) Class.forName(clazz.getName() + "_Preference"); + /** + * Mark in the {@link SharedPreferences.Editor} to remove all values from the {@code name} + * preferences. + * + * @deprecated use {@link #clearEditor(Context, Class)} or {@link #clearEditor(Context, String)}. + */ + @Deprecated public static SharedPreferences.Editor clearEditor(@NonNull Context context, + String name, Class clazz) { + return clearEditor(context, name); + } + + public static SharedPreferences get(@NonNull Context context, String name) { + return Utils.getSharedPreference(context, name); + } + + public static SharedPreferences.Editor edit(@NonNull Context context, String name) { + return Utils.getSharedPreferenceEditor(context, name); } } diff --git a/fit/src/main/java/fit/MM.java b/fit/src/main/java/fit/MM.java index 507b444..12363e7 100644 --- a/fit/src/main/java/fit/MM.java +++ b/fit/src/main/java/fit/MM.java @@ -12,6 +12,4 @@ public interface MM { SharedPreferences.Editor save(Context context, String name, T obj); T get(Context context, String name); - - SharedPreferences.Editor clear(Context context, String name); } diff --git a/fit/src/main/java/fit/internal/Utils.java b/fit/src/main/java/fit/internal/Utils.java index 067419d..ce546de 100644 --- a/fit/src/main/java/fit/internal/Utils.java +++ b/fit/src/main/java/fit/internal/Utils.java @@ -11,9 +11,12 @@ @SuppressWarnings({ "deprecation", "WeakerAccess" }) // Used by generated code. public final class Utils { + public static SharedPreferences getSharedPreference(Context context, String name) { + return context.getSharedPreferences(name, Context.MODE_PRIVATE); + } + public static SharedPreferences.Editor getSharedPreferenceEditor(Context context, String name) { - SharedPreferences sharedPreferences = context.getSharedPreferences(name, Context.MODE_PRIVATE); - return sharedPreferences.edit(); + return getSharedPreference(context, name).edit(); } public static void apply(SharedPreferences.Editor editor) { From eab6fb563bcdf360a85a19f4d3ae7432923efcbd Mon Sep 17 00:00:00 2001 From: 2Tu Date: Tue, 7 Mar 2017 18:00:01 +0800 Subject: [PATCH 2/4] update buildToolsVersion --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 029aae6..9f77073 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,7 @@ ext { minSdkVersion = 4 targetSdkVersion = 25 compileSdkVersion = 25 - buildToolsVersion = '25.0.0' + buildToolsVersion = '25.0.2' sourceCompatibilityVersion = JavaVersion.VERSION_1_7 targetCompatibilityVersion = JavaVersion.VERSION_1_7 } From eb02f77831bde3b2eb0dfb86f2f7f4496413e55f Mon Sep 17 00:00:00 2001 From: 2Tu Date: Tue, 7 Mar 2017 18:20:09 +0800 Subject: [PATCH 3/4] fixed buildtools --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 81ef55e..f6a0591 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ android: components: - tools - platform-tools - - build-tools-25.0.0 + - build-tools-25.0.2 - android-25 script: - chmod +x gradlew From f56d200d668b107572fd508aea826f5f1718ae2d Mon Sep 17 00:00:00 2001 From: 2Tu Date: Tue, 7 Mar 2017 18:25:50 +0800 Subject: [PATCH 4/4] add extra-android-m2repository --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index f6a0591..984ee2c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,7 @@ android: - platform-tools - build-tools-25.0.2 - android-25 + - extra-android-m2repository script: - chmod +x gradlew - ./gradlew clean build