From c1234d2a0776c90c0737ab739a31415bf8544f5f Mon Sep 17 00:00:00 2001 From: Antti Poikela Date: Fri, 7 Oct 2016 00:54:21 +0200 Subject: [PATCH] Nullcheck simplifications --- .../schematicProvider/GitHubProvider.java | 10 ++- .../stores/GitHubRepositorySearchStore.java | 17 ++-- .../data/stores/GitHubRepositoryStore.java | 5 +- .../advanced/data/stores/GsonStoreBase.java | 8 +- .../stores/NetworkRequestStatusStore.java | 23 +++--- .../data/stores/UserSettingsStore.java | 15 ++-- .../cores/GitHubRepositoryStoreCore.java | 19 ++--- .../data/stores/cores/GsonStoreCoreBase.java | 8 +- .../advanced/network/ServiceDataLayer.java | 11 ++- .../rxgithubapp/basic/data/DataLayer.java | 12 +-- .../DebugApplicationInstrumentation.java | 12 +-- .../shared/utils/StethoInstrumentation.java | 23 +++--- .../shared/data/ClientDataLayerBase.java | 35 ++++---- .../shared/data/DataLayerBase.java | 30 +++---- .../shared/glide/SerialTarget.java | 12 +-- .../shared/network/NetworkApi.java | 15 +++- .../network/fetchers/AppFetcherBase.java | 13 +-- .../fetchers/GitHubRepositoryFetcher.java | 11 ++- .../GitHubRepositorySearchFetcher.java | 24 +++--- .../rxgithubapp/shared/pojo/GitHubOwner.java | 37 ++++----- .../shared/pojo/GitHubRepository.java | 81 +++++++++---------- .../pojo/GitHubRepositorySearchResults.java | 7 +- .../shared/utils/SubscriptionUtils.java | 18 +++-- .../shared/view/RepositoriesView.java | 27 ++++--- .../shared/view/RepositoryView.java | 12 +-- .../viewmodels/RepositoriesViewModel.java | 44 +++++----- .../viewmodels/RepositoryViewModel.java | 32 ++++---- .../utils/StethoInstrumentationTest.java | 2 +- .../data/stores/ContentProviderStoreTest.java | 2 +- .../cores/ContentProviderStoreCoreBase.java | 2 +- .../reark/data/utils/DataLayerUtils.java | 5 ++ 31 files changed, 307 insertions(+), 265 deletions(-) diff --git a/app/src/main/java/io/reark/rxgithubapp/advanced/data/schematicProvider/GitHubProvider.java b/app/src/main/java/io/reark/rxgithubapp/advanced/data/schematicProvider/GitHubProvider.java index 7e10cdbb..45aae172 100644 --- a/app/src/main/java/io/reark/rxgithubapp/advanced/data/schematicProvider/GitHubProvider.java +++ b/app/src/main/java/io/reark/rxgithubapp/advanced/data/schematicProvider/GitHubProvider.java @@ -26,6 +26,7 @@ package io.reark.rxgithubapp.advanced.data.schematicProvider; import android.net.Uri; +import android.net.Uri.Builder; import android.support.annotation.NonNull; import net.simonvt.schematic.annotation.ContentProvider; @@ -35,6 +36,8 @@ import io.reark.reark.utils.Preconditions; +import static io.reark.reark.utils.Preconditions.get; + @ContentProvider(authority = GitHubProvider.AUTHORITY, database = GitHubDatabase.class) public final class GitHubProvider { public static final String AUTHORITY = "io.reark.rxgithubapp.advanced.data.schematicProvider.GitHubProvider"; @@ -42,13 +45,12 @@ public final class GitHubProvider { static final Uri BASE_CONTENT_URI = Uri.parse("content://" + AUTHORITY); private static Uri buildUri(@NonNull final String... paths) { - Uri.Builder builder = BASE_CONTENT_URI.buildUpon(); + Builder builder = BASE_CONTENT_URI.buildUpon(); for (String path : paths) { builder.appendPath(path); } - Uri uri = builder.build(); - Preconditions.checkNotNull(uri, "Uri cannot be null."); - return uri; + + return get(builder.build()); } @TableEndpoint(table = GitHubDatabase.GITHUB_REPOSITORIES) diff --git a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/GitHubRepositorySearchStore.java b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/GitHubRepositorySearchStore.java index 976ae689..47a8f710 100644 --- a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/GitHubRepositorySearchStore.java +++ b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/GitHubRepositorySearchStore.java @@ -35,11 +35,13 @@ import io.reark.reark.utils.Preconditions; import io.reark.rxgithubapp.advanced.data.schematicProvider.GitHubProvider; +import io.reark.rxgithubapp.advanced.data.schematicProvider.GitHubProvider.GitHubRepositorySearches; import io.reark.rxgithubapp.advanced.data.schematicProvider.GitHubRepositorySearchColumns; import io.reark.rxgithubapp.shared.pojo.GitHubRepositorySearch; +import static io.reark.reark.utils.Preconditions.checkNotNull; + public class GitHubRepositorySearchStore extends GsonStoreBase { - private static final String TAG = GitHubRepositorySearchStore.class.getSimpleName(); public GitHubRepositorySearchStore(@NonNull final ContentResolver contentResolver, @NonNull final Gson gson) { super(contentResolver, gson); @@ -48,7 +50,7 @@ public GitHubRepositorySearchStore(@NonNull final ContentResolver contentResolve @NonNull @Override protected String getIdFor(@NonNull final GitHubRepositorySearch item) { - Preconditions.checkNotNull(item, "GitHub Repository Search cannot be null."); + checkNotNull(item); return item.getSearch(); } @@ -56,7 +58,7 @@ protected String getIdFor(@NonNull final GitHubRepositorySearch item) { @NonNull @Override public Uri getContentUri() { - return GitHubProvider.GitHubRepositorySearches.GITHUB_REPOSITORY_SEARCHES; + return GitHubRepositorySearches.GITHUB_REPOSITORY_SEARCHES; } @NonNull @@ -76,17 +78,16 @@ protected ContentValues getContentValuesForItem(GitHubRepositorySearch item) { @NonNull @Override - protected GitHubRepositorySearch read(Cursor cursor) { + protected GitHubRepositorySearch read(@NonNull Cursor cursor) { final String json = cursor.getString(cursor.getColumnIndex(GitHubRepositorySearchColumns.JSON)); - final GitHubRepositorySearch value = getGson().fromJson(json, GitHubRepositorySearch.class); - return value; + return getGson().fromJson(json, GitHubRepositorySearch.class); } @NonNull @Override public Uri getUriForId(@NonNull final String id) { - Preconditions.checkNotNull(id, "Id cannot be null."); + checkNotNull(id); - return GitHubProvider.GitHubRepositorySearches.withSearch(id); + return GitHubRepositorySearches.withSearch(id); } } diff --git a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/GitHubRepositoryStore.java b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/GitHubRepositoryStore.java index 28daf8ea..bd2777ee 100644 --- a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/GitHubRepositoryStore.java +++ b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/GitHubRepositoryStore.java @@ -35,8 +35,9 @@ import io.reark.rxgithubapp.advanced.data.stores.cores.GitHubRepositoryStoreCore; import io.reark.rxgithubapp.shared.pojo.GitHubRepository; +import static io.reark.reark.utils.Preconditions.checkNotNull; + public class GitHubRepositoryStore extends DefaultStore { - private static final String TAG = GitHubRepositoryStore.class.getSimpleName(); public GitHubRepositoryStore(@NonNull final ContentResolver contentResolver, @NonNull final Gson gson) { super(new GitHubRepositoryStoreCore(contentResolver, gson), @@ -45,7 +46,7 @@ public GitHubRepositoryStore(@NonNull final ContentResolver contentResolver, @No @NonNull protected static Integer getIdFor(@NonNull final GitHubRepository item) { - Preconditions.checkNotNull(item, "GitHub Repository cannot be null."); + checkNotNull(item); return item.getId(); } diff --git a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/GsonStoreBase.java b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/GsonStoreBase.java index 23183fc5..ce4d3642 100644 --- a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/GsonStoreBase.java +++ b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/GsonStoreBase.java @@ -35,16 +35,16 @@ public abstract class GsonStoreBase extends ContentProviderStore { + @NonNull private final Gson gson; - public GsonStoreBase(@NonNull final ContentResolver contentResolver, @NonNull final Gson gson) { + protected GsonStoreBase(@NonNull final ContentResolver contentResolver, @NonNull final Gson gson) { super(contentResolver); - Preconditions.checkNotNull(gson, "Gson cannot be null."); - - this.gson = gson; + this.gson = Preconditions.get(gson); } + @NonNull protected Gson getGson() { return gson; } diff --git a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/NetworkRequestStatusStore.java b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/NetworkRequestStatusStore.java index 68d4491f..4744fe22 100644 --- a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/NetworkRequestStatusStore.java +++ b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/NetworkRequestStatusStore.java @@ -37,9 +37,12 @@ import io.reark.reark.utils.Log; import io.reark.reark.utils.Preconditions; import io.reark.rxgithubapp.advanced.data.schematicProvider.GitHubProvider; +import io.reark.rxgithubapp.advanced.data.schematicProvider.GitHubProvider.NetworkRequestStatuses; import io.reark.rxgithubapp.advanced.data.schematicProvider.JsonIdColumns; import io.reark.rxgithubapp.advanced.data.schematicProvider.UserSettingsColumns; +import static io.reark.reark.utils.Preconditions.checkNotNull; + public class NetworkRequestStatusStore extends GsonStoreBase { private static final String TAG = NetworkRequestStatusStore.class.getSimpleName(); @@ -50,21 +53,22 @@ public NetworkRequestStatusStore(@NonNull final ContentResolver contentResolver, @NonNull @Override protected Integer getIdFor(@NonNull final NetworkRequestStatus item) { - Preconditions.checkNotNull(item, "Network Request Status cannot be null."); + checkNotNull(item); + return item.getUri().hashCode(); } @NonNull @Override public Uri getContentUri() { - return GitHubProvider.NetworkRequestStatuses.NETWORK_REQUEST_STATUSES; + return NetworkRequestStatuses.NETWORK_REQUEST_STATUSES; } @Override public void put(@NonNull final NetworkRequestStatus item) { - Preconditions.checkNotNull(item, "Network Request Status cannot be null."); - + checkNotNull(item); Log.v(TAG, "put(" + item.getStatus() + ", " + item.getUri() + ")"); + super.put(item); } @@ -85,17 +89,18 @@ protected ContentValues getContentValuesForItem(NetworkRequestStatus item) { @NonNull @Override - protected NetworkRequestStatus read(Cursor cursor) { + protected NetworkRequestStatus read(@NonNull final Cursor cursor) { + checkNotNull(cursor); + final String json = cursor.getString(cursor.getColumnIndex(JsonIdColumns.JSON)); - final NetworkRequestStatus value = getGson().fromJson(json, NetworkRequestStatus.class); - return value; + return getGson().fromJson(json, NetworkRequestStatus.class); } @NonNull @Override public Uri getUriForId(@NonNull final Integer id) { - Preconditions.checkNotNull(id, "Id cannot be null."); + checkNotNull(id); - return GitHubProvider.NetworkRequestStatuses.withId(id); + return NetworkRequestStatuses.withId(id); } } diff --git a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/UserSettingsStore.java b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/UserSettingsStore.java index 7143151d..1698c2fc 100644 --- a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/UserSettingsStore.java +++ b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/UserSettingsStore.java @@ -40,6 +40,8 @@ import io.reark.rxgithubapp.advanced.data.schematicProvider.UserSettingsColumns; import io.reark.rxgithubapp.shared.pojo.UserSettings; +import static io.reark.reark.utils.Preconditions.checkNotNull; + public class UserSettingsStore extends GsonStoreBase { private static final String TAG = UserSettingsStore.class.getSimpleName(); @@ -80,7 +82,9 @@ protected String[] getProjection() { @NonNull @Override - protected ContentValues getContentValuesForItem(UserSettings item) { + protected ContentValues getContentValuesForItem(@NonNull final UserSettings item) { + checkNotNull(item); + ContentValues contentValues = new ContentValues(); contentValues.put(JsonIdColumns.ID, DataLayer.DEFAULT_USER_ID); contentValues.put(JsonIdColumns.JSON, getGson().toJson(item)); @@ -89,16 +93,17 @@ protected ContentValues getContentValuesForItem(UserSettings item) { @NonNull @Override - protected UserSettings read(Cursor cursor) { + protected UserSettings read(@NonNull final Cursor cursor) { + checkNotNull(cursor); + final String json = cursor.getString(cursor.getColumnIndex(JsonIdColumns.JSON)); - final UserSettings value = getGson().fromJson(json, UserSettings.class); - return value; + return getGson().fromJson(json, UserSettings.class); } @NonNull @Override public Uri getUriForId(@NonNull final Integer id) { - Preconditions.checkNotNull(id, "Id cannot be null."); + checkNotNull(id); return GitHubProvider.UserSettings.withId(id); } diff --git a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/cores/GitHubRepositoryStoreCore.java b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/cores/GitHubRepositoryStoreCore.java index 8a69d581..6f50b51c 100644 --- a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/cores/GitHubRepositoryStoreCore.java +++ b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/cores/GitHubRepositoryStoreCore.java @@ -35,12 +35,14 @@ import io.reark.reark.utils.Preconditions; import io.reark.rxgithubapp.advanced.data.schematicProvider.GitHubProvider; +import io.reark.rxgithubapp.advanced.data.schematicProvider.GitHubProvider.GitHubRepositories; import io.reark.rxgithubapp.advanced.data.schematicProvider.JsonIdColumns; import io.reark.rxgithubapp.advanced.data.schematicProvider.UserSettingsColumns; import io.reark.rxgithubapp.shared.pojo.GitHubRepository; +import static io.reark.reark.utils.Preconditions.checkNotNull; + public class GitHubRepositoryStoreCore extends GsonStoreCoreBase { - private static final String TAG = GitHubRepositoryStoreCore.class.getSimpleName(); public GitHubRepositoryStoreCore(@NonNull final ContentResolver contentResolver, @NonNull final Gson gson) { super(contentResolver, gson); @@ -49,7 +51,7 @@ public GitHubRepositoryStoreCore(@NonNull final ContentResolver contentResolver, @NonNull @Override public Uri getContentUri() { - return GitHubProvider.GitHubRepositories.GITHUB_REPOSITORIES; + return GitHubRepositories.GITHUB_REPOSITORIES; } @NonNull @@ -69,10 +71,9 @@ protected ContentValues getContentValuesForItem(GitHubRepository item) { @NonNull @Override - protected GitHubRepository read(Cursor cursor) { + protected GitHubRepository read(@NonNull Cursor cursor) { final String json = cursor.getString(cursor.getColumnIndex(JsonIdColumns.JSON)); - final GitHubRepository value = getGson().fromJson(json, GitHubRepository.class); - return value; + return getGson().fromJson(json, GitHubRepository.class); } @NonNull @@ -87,16 +88,16 @@ protected GitHubRepository mergeValues(@NonNull final GitHubRepository v1, @NonN @NonNull @Override protected Uri getUriForId(@NonNull final Integer id) { - Preconditions.checkNotNull(id, "Id cannot be null."); + checkNotNull(id); - return GitHubProvider.GitHubRepositories.withId(id); + return GitHubRepositories.withId(id); } @NonNull @Override protected Integer getIdForUri(@NonNull final Uri uri) { - Preconditions.checkNotNull(uri, "Uri cannot be null."); + checkNotNull(uri); - return (int) GitHubProvider.GitHubRepositories.fromUri(uri); + return (int) GitHubRepositories.fromUri(uri); } } diff --git a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/cores/GsonStoreCoreBase.java b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/cores/GsonStoreCoreBase.java index 355750c3..d1cfd2c3 100644 --- a/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/cores/GsonStoreCoreBase.java +++ b/app/src/main/java/io/reark/rxgithubapp/advanced/data/stores/cores/GsonStoreCoreBase.java @@ -35,16 +35,16 @@ public abstract class GsonStoreCoreBase extends ContentProviderStoreCore { + @NonNull private final Gson gson; - public GsonStoreCoreBase(@NonNull final ContentResolver contentResolver, @NonNull final Gson gson) { + protected GsonStoreCoreBase(@NonNull final ContentResolver contentResolver, @NonNull final Gson gson) { super(contentResolver); - Preconditions.checkNotNull(gson, "Gson cannot be null."); - - this.gson = gson; + this.gson = Preconditions.get(gson); } + @NonNull protected Gson getGson() { return gson; } diff --git a/app/src/main/java/io/reark/rxgithubapp/advanced/network/ServiceDataLayer.java b/app/src/main/java/io/reark/rxgithubapp/advanced/network/ServiceDataLayer.java index 20a9733e..418d7fd2 100644 --- a/app/src/main/java/io/reark/rxgithubapp/advanced/network/ServiceDataLayer.java +++ b/app/src/main/java/io/reark/rxgithubapp/advanced/network/ServiceDataLayer.java @@ -38,10 +38,14 @@ import io.reark.rxgithubapp.advanced.data.stores.NetworkRequestStatusStore; import io.reark.rxgithubapp.shared.data.DataLayerBase; +import static io.reark.reark.utils.Preconditions.checkNotNull; +import static io.reark.reark.utils.Preconditions.get; + public class ServiceDataLayer extends DataLayerBase { private static final String TAG = ServiceDataLayer.class.getSimpleName(); - final private UriFetcherManager fetcherManager; + @NonNull + private final UriFetcherManager fetcherManager; public ServiceDataLayer(@NonNull final UriFetcherManager fetcherManager, @NonNull final NetworkRequestStatusStore networkRequestStatusStore, @@ -49,12 +53,11 @@ public ServiceDataLayer(@NonNull final UriFetcherManager fetcherManager, @NonNull final GitHubRepositorySearchStore gitHubRepositorySearchStore) { super(networkRequestStatusStore, gitHubRepositoryStore, gitHubRepositorySearchStore); - Preconditions.checkNotNull(fetcherManager, "FetcherManager cannot be null."); - this.fetcherManager = fetcherManager; + this.fetcherManager = get(fetcherManager); } public void processIntent(@NonNull final Intent intent) { - Preconditions.checkNotNull(intent, "Intent cannot be null."); + checkNotNull(intent); final String serviceUriString = intent.getStringExtra("serviceUriString"); if (serviceUriString != null) { diff --git a/appbasic/src/main/java/io/reark/rxgithubapp/basic/data/DataLayer.java b/appbasic/src/main/java/io/reark/rxgithubapp/basic/data/DataLayer.java index df7cea34..8257f7ee 100644 --- a/appbasic/src/main/java/io/reark/rxgithubapp/basic/data/DataLayer.java +++ b/appbasic/src/main/java/io/reark/rxgithubapp/basic/data/DataLayer.java @@ -40,6 +40,9 @@ import io.reark.rxgithubapp.shared.data.ClientDataLayerBase; import io.reark.rxgithubapp.shared.network.GitHubService; +import static io.reark.reark.utils.Preconditions.checkNotNull; +import static io.reark.reark.utils.Preconditions.get; + public class DataLayer extends ClientDataLayerBase { private static final String TAG = DataLayer.class.getSimpleName(); @@ -55,15 +58,12 @@ public DataLayer(@NonNull final UriFetcherManager fetcherManager, gitHubRepositorySearchStore, userSettingsStore); - Preconditions.checkNotNull(fetcherManager, "Context cannot be null."); - Preconditions.checkNotNull(userSettingsStore, "User Settings Store cannot be null."); - - this.fetcherManager = fetcherManager; + this.fetcherManager = get(fetcherManager); } @Override protected void fetchGitHubRepository(@NonNull final Integer repositoryId) { - Preconditions.checkNotNull(repositoryId, "Repository Id cannot be null."); + checkNotNull(repositoryId); Intent intent = new Intent(); intent.putExtra("serviceUriString", GitHubService.REPOSITORY.toString()); @@ -78,7 +78,7 @@ protected void fetchGitHubRepository(@NonNull final Integer repositoryId) { @Override protected void fetchGitHubRepositorySearch(@NonNull final String searchString) { - Preconditions.checkNotNull(searchString, "Search string Store cannot be null."); + checkNotNull(searchString); Log.d(TAG, "fetchGitHubRepositorySearch(" + searchString + ")"); Intent intent = new Intent(); diff --git a/appshared/src/debug/java/io/reark/rxgithubapp/shared/utils/DebugApplicationInstrumentation.java b/appshared/src/debug/java/io/reark/rxgithubapp/shared/utils/DebugApplicationInstrumentation.java index 12e52573..50491f34 100644 --- a/appshared/src/debug/java/io/reark/rxgithubapp/shared/utils/DebugApplicationInstrumentation.java +++ b/appshared/src/debug/java/io/reark/rxgithubapp/shared/utils/DebugApplicationInstrumentation.java @@ -29,7 +29,11 @@ import io.reark.reark.utils.Preconditions; +import static io.reark.reark.utils.Preconditions.checkNotNull; +import static io.reark.reark.utils.Preconditions.get; + public class DebugApplicationInstrumentation implements ApplicationInstrumentation { + @NonNull private final LeakTracing leakTracing; @@ -38,12 +42,8 @@ public class DebugApplicationInstrumentation implements ApplicationInstrumentati public DebugApplicationInstrumentation(@NonNull final LeakTracing leakTracing, @NonNull final Instrumentation instrumentation) { - - Preconditions.checkNotNull(leakTracing, "Leak Tracing cannot be null."); - Preconditions.checkNotNull(instrumentation, "Instrumentation cannot be null."); - - this.leakTracing = leakTracing; - this.instrumentation = instrumentation; + this.leakTracing = get(leakTracing); + this.instrumentation = get(instrumentation); } @Override diff --git a/appshared/src/debug/java/io/reark/rxgithubapp/shared/utils/StethoInstrumentation.java b/appshared/src/debug/java/io/reark/rxgithubapp/shared/utils/StethoInstrumentation.java index e14e3b16..4b6916d4 100644 --- a/appshared/src/debug/java/io/reark/rxgithubapp/shared/utils/StethoInstrumentation.java +++ b/appshared/src/debug/java/io/reark/rxgithubapp/shared/utils/StethoInstrumentation.java @@ -32,13 +32,14 @@ import com.squareup.okhttp.Interceptor; import com.squareup.okhttp.OkHttpClient; -import io.reark.reark.utils.Preconditions; import io.reark.rxgithubapp.shared.network.NetworkInstrumentation; import static com.facebook.stetho.Stetho.defaultDumperPluginsProvider; import static com.facebook.stetho.Stetho.defaultInspectorModulesProvider; import static com.facebook.stetho.Stetho.initialize; import static com.facebook.stetho.Stetho.newInitializerBuilder; +import static io.reark.reark.utils.Preconditions.checkNotNull; +import static io.reark.reark.utils.Preconditions.get; public class StethoInstrumentation implements NetworkInstrumentation { @@ -48,12 +49,10 @@ public class StethoInstrumentation implements NetworkInstrumentation userSettingsStore; - public ClientDataLayerBase(@NonNull final StoreInterface networkRequestStatusStore, - @NonNull final StoreInterface gitHubRepositoryStore, - @NonNull final StoreInterface gitHubRepositorySearchStore, - @NonNull final StoreInterface userSettingsStore) { + protected ClientDataLayerBase(@NonNull final StoreInterface networkRequestStatusStore, + @NonNull final StoreInterface gitHubRepositoryStore, + @NonNull final StoreInterface gitHubRepositorySearchStore, + @NonNull final StoreInterface userSettingsStore) { super(networkRequestStatusStore, gitHubRepositoryStore, gitHubRepositorySearchStore); - Preconditions.checkNotNull(userSettingsStore, - "User Settings Store cannot be null."); - this.userSettingsStore = userSettingsStore; + this.userSettingsStore = get(userSettingsStore); } @NonNull public Observable> getGitHubRepositorySearch(@NonNull final String searchString) { - Preconditions.checkNotNull(searchString, "Search string Store cannot be null."); + checkNotNull(searchString); Log.d(TAG, "getGitHubRepositorySearch(" + searchString + ")"); final Observable networkRequestStatusObservable = @@ -73,28 +75,27 @@ public Observable> getGitHubRepos @NonNull public Observable> fetchAndGetGitHubRepositorySearch(@NonNull final String searchString) { - Preconditions.checkNotNull(searchString, "Search string Store cannot be null."); - + checkNotNull(searchString); Log.d(TAG, "fetchAndGetGitHubRepositorySearch(" + searchString + ")"); + fetchGitHubRepositorySearch(searchString); - final Observable> gitHubRepositoryStream = - getGitHubRepositorySearch(searchString); - return gitHubRepositoryStream; + return getGitHubRepositorySearch(searchString); } protected abstract void fetchGitHubRepositorySearch(@NonNull final String searchString); @NonNull public Observable getGitHubRepository(@NonNull final Integer repositoryId) { - Preconditions.checkNotNull(repositoryId, "Repository Id cannot be null."); + checkNotNull(repositoryId); - return gitHubRepositoryStore.getOnceAndStream(repositoryId) + return gitHubRepositoryStore + .getOnceAndStream(repositoryId) .filter(value -> value != null); } @NonNull public Observable fetchAndGetGitHubRepository(@NonNull final Integer repositoryId) { - Preconditions.checkNotNull(repositoryId, "Repository Id cannot be null."); + checkNotNull(repositoryId); fetchGitHubRepository(repositoryId); return getGitHubRepository(repositoryId); @@ -109,7 +110,7 @@ public Observable getUserSettings() { } public void setUserSettings(@NonNull final UserSettings userSettings) { - Preconditions.checkNotNull(userSettings, "User Settings cannot be null."); + checkNotNull(userSettings); userSettingsStore.put(userSettings); } diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/data/DataLayerBase.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/data/DataLayerBase.java index ff670026..175c5773 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/data/DataLayerBase.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/data/DataLayerBase.java @@ -29,27 +29,27 @@ import io.reark.reark.data.stores.StoreInterface; import io.reark.reark.pojo.NetworkRequestStatus; -import io.reark.reark.utils.Preconditions; import io.reark.rxgithubapp.shared.pojo.GitHubRepository; import io.reark.rxgithubapp.shared.pojo.GitHubRepositorySearch; -abstract public class DataLayerBase { +import static io.reark.reark.utils.Preconditions.get; + +public abstract class DataLayerBase { + + @NonNull protected final StoreInterface networkRequestStatusStore; + + @NonNull protected final StoreInterface gitHubRepositoryStore; + + @NonNull protected final StoreInterface gitHubRepositorySearchStore; - public DataLayerBase(@NonNull final StoreInterface networkRequestStatusStore, - @NonNull final StoreInterface gitHubRepositoryStore, - @NonNull final StoreInterface gitHubRepositorySearchStore) { - Preconditions.checkNotNull(networkRequestStatusStore, - "Network Request Status Store cannot be null."); - Preconditions.checkNotNull(gitHubRepositoryStore, - "GitHub Repository Store cannot be null."); - Preconditions.checkNotNull(gitHubRepositorySearchStore, - "GitHub Repository Search Store cannot be null."); - - this.networkRequestStatusStore = networkRequestStatusStore; - this.gitHubRepositoryStore = gitHubRepositoryStore; - this.gitHubRepositorySearchStore = gitHubRepositorySearchStore; + protected DataLayerBase(@NonNull final StoreInterface networkRequestStatusStore, + @NonNull final StoreInterface gitHubRepositoryStore, + @NonNull final StoreInterface gitHubRepositorySearchStore) { + this.networkRequestStatusStore = get(networkRequestStatusStore); + this.gitHubRepositoryStore = get(gitHubRepositoryStore); + this.gitHubRepositorySearchStore = get(gitHubRepositorySearchStore); } } diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/glide/SerialTarget.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/glide/SerialTarget.java index e23ab159..6b2369b8 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/glide/SerialTarget.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/glide/SerialTarget.java @@ -35,7 +35,7 @@ import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; -import io.reark.reark.utils.Preconditions; +import static io.reark.reark.utils.Preconditions.checkNotNull; public class SerialTarget implements Target { @@ -55,18 +55,19 @@ private static final class State { State set(@NonNull final Target t) { return new State<>(t); } - } public void set(@NonNull final Target s) { - Preconditions.checkNotNull(s, "Target can not be null"); + checkNotNull(s); + + State oldState; + State newState; - State oldState; - State newState; do { oldState = state; newState = oldState.set(s); } while (!STATE_UPDATER.compareAndSet(this, oldState, newState)); + oldState.target.onDestroy(); } @@ -123,5 +124,4 @@ public void onStop() { public void onDestroy() { state.target.onDestroy(); } - } diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/network/NetworkApi.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/network/NetworkApi.java index e01728bd..49313e60 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/network/NetworkApi.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/network/NetworkApi.java @@ -30,33 +30,40 @@ import java.util.List; import java.util.Map; -import io.reark.reark.utils.Preconditions; import io.reark.rxgithubapp.shared.pojo.GitHubRepository; import io.reark.rxgithubapp.shared.pojo.GitHubRepositorySearchResults; import retrofit.RestAdapter; +import retrofit.RestAdapter.Builder; +import retrofit.RestAdapter.LogLevel; import retrofit.client.Client; import rx.Observable; +import static io.reark.reark.utils.Preconditions.checkNotNull; + public class NetworkApi { + @NonNull private final GitHubService gitHubService; public NetworkApi(@NonNull final Client client) { - Preconditions.checkNotNull(client, "Client cannot be null."); + checkNotNull(client); - RestAdapter restAdapter = new RestAdapter.Builder() + RestAdapter restAdapter = new Builder() .setClient(client) .setEndpoint("https://api.github.com") - .setLogLevel(RestAdapter.LogLevel.NONE) + .setLogLevel(LogLevel.NONE) .build(); + gitHubService = restAdapter.create(GitHubService.class); } + @NonNull public Observable> search(Map search) { return gitHubService.search(search) .map(GitHubRepositorySearchResults::getItems); } + @NonNull public Observable getRepository(int id) { return gitHubService.getRepository(id); } diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/network/fetchers/AppFetcherBase.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/network/fetchers/AppFetcherBase.java index e16a4b08..75bed2a6 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/network/fetchers/AppFetcherBase.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/network/fetchers/AppFetcherBase.java @@ -33,17 +33,18 @@ import io.reark.rxgithubapp.shared.network.NetworkApi; import rx.functions.Action1; +import static io.reark.reark.utils.Preconditions.checkNotNull; +import static io.reark.reark.utils.Preconditions.get; + public abstract class AppFetcherBase extends FetcherBase { @NonNull - NetworkApi networkApi; + final NetworkApi networkApi; - public AppFetcherBase(@NonNull final NetworkApi networkApi, - @NonNull final Action1 updateNetworkRequestStatus) { + protected AppFetcherBase(@NonNull final NetworkApi networkApi, + @NonNull final Action1 updateNetworkRequestStatus) { super(updateNetworkRequestStatus); - Preconditions.checkNotNull(networkApi, "Network Api cannot be null."); - - this.networkApi = networkApi; + this.networkApi = get(networkApi); } } diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/network/fetchers/GitHubRepositoryFetcher.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/network/fetchers/GitHubRepositoryFetcher.java index 9206d153..05918009 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/network/fetchers/GitHubRepositoryFetcher.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/network/fetchers/GitHubRepositoryFetcher.java @@ -41,6 +41,8 @@ import rx.functions.Action1; import rx.schedulers.Schedulers; +import static io.reark.reark.utils.Preconditions.checkNotNull; + public class GitHubRepositoryFetcher extends AppFetcherBase { private static final String TAG = GitHubRepositoryFetcher.class.getSimpleName(); @@ -52,16 +54,17 @@ public GitHubRepositoryFetcher(@NonNull final NetworkApi networkApi, @NonNull final StorePutInterface gitHubRepositoryStore) { super(networkApi, updateNetworkRequestStatus); - Preconditions.checkNotNull(gitHubRepositoryStore, "GitHub Repository Store cannot be null."); + checkNotNull(gitHubRepositoryStore); this.gitHubRepositoryStore = gitHubRepositoryStore; } @Override public void fetch(@NonNull final Intent intent) { - Preconditions.checkNotNull(intent, "Fetch Intent cannot be null."); + checkNotNull(intent); final int repositoryId = intent.getIntExtra("id", -1); + if (repositoryId != -1) { fetchGitHubRepository(repositoryId); } else { @@ -71,12 +74,15 @@ public void fetch(@NonNull final Intent intent) { private void fetchGitHubRepository(final int repositoryId) { Log.d(TAG, "fetchGitHubRepository(" + repositoryId + ")"); + if (requestMap.containsKey(repositoryId) && !requestMap.get(repositoryId).isUnsubscribed()) { Log.d(TAG, "Found an ongoing request for repository " + repositoryId); return; } + final String uri = getUniqueId(repositoryId); + Subscription subscription = createNetworkObservable(repositoryId) .subscribeOn(Schedulers.computation()) .doOnSubscribe(() -> startRequest(uri)) @@ -84,6 +90,7 @@ private void fetchGitHubRepository(final int repositoryId) { .doOnCompleted(() -> completeRequest(uri)) .subscribe(gitHubRepositoryStore::put, e -> Log.e(TAG, "Error fetching GitHub repository " + repositoryId, e)); + requestMap.put(repositoryId, subscription); } diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/network/fetchers/GitHubRepositorySearchFetcher.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/network/fetchers/GitHubRepositorySearchFetcher.java index a2b0e1db..9d8ab50a 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/network/fetchers/GitHubRepositorySearchFetcher.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/network/fetchers/GitHubRepositorySearchFetcher.java @@ -46,10 +46,16 @@ import rx.functions.Action1; import rx.schedulers.Schedulers; +import static io.reark.reark.utils.Preconditions.checkNotNull; +import static io.reark.reark.utils.Preconditions.get; + public class GitHubRepositorySearchFetcher extends AppFetcherBase { private static final String TAG = GitHubRepositorySearchFetcher.class.getSimpleName(); + @NonNull private final StorePutInterface gitHubRepositoryStore; + + @NonNull private final StorePutInterface gitHubRepositorySearchStore; public GitHubRepositorySearchFetcher(@NonNull final NetworkApi networkApi, @@ -58,17 +64,16 @@ public GitHubRepositorySearchFetcher(@NonNull final NetworkApi networkApi, @NonNull final StorePutInterface gitHubRepositorySearchStore) { super(networkApi, updateNetworkRequestStatus); - Preconditions.checkNotNull(gitHubRepositoryStore, "GitHub Repository Store cannot be null."); - Preconditions.checkNotNull(gitHubRepositorySearchStore, "" - + "GitHub Repository Search Store cannot be null."); - - this.gitHubRepositoryStore = gitHubRepositoryStore; - this.gitHubRepositorySearchStore = gitHubRepositorySearchStore; + this.gitHubRepositoryStore = get(gitHubRepositoryStore); + this.gitHubRepositorySearchStore = get(gitHubRepositorySearchStore); } @Override public void fetch(@NonNull final Intent intent) { + checkNotNull(intent); + final String searchString = intent.getStringExtra("searchString"); + if (searchString != null) { fetchGitHubSearch(searchString); } else { @@ -77,15 +82,15 @@ public void fetch(@NonNull final Intent intent) { } private void fetchGitHubSearch(@NonNull final String searchString) { - Preconditions.checkNotNull(searchString, "Search String cannot be null."); - Log.d(TAG, "fetchGitHubSearch(" + searchString + ")"); if (requestMap.containsKey(searchString.hashCode()) && !requestMap.get(searchString.hashCode()).isUnsubscribed()) { Log.d(TAG, "Found an ongoing request for repository " + searchString); return; } + final String uri = getUniqueId(searchString); + Subscription subscription = createNetworkObservable(searchString) .subscribeOn(Schedulers.computation()) .map((repositories) -> { @@ -101,12 +106,13 @@ private void fetchGitHubSearch(@NonNull final String searchString) { .doOnError(doOnError(uri)) .subscribe(gitHubRepositorySearchStore::put, e -> Log.e(TAG, "Error fetching GitHub repository search for '" + searchString + "'", e)); + requestMap.put(searchString.hashCode(), subscription); } @NonNull private Observable> createNetworkObservable(@NonNull final String searchString) { - Preconditions.checkNotNull(searchString, "Search String cannot be null."); + checkNotNull(searchString); return networkApi.search(Collections.singletonMap("q", searchString)); } diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/pojo/GitHubOwner.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/pojo/GitHubOwner.java index a21375dc..6d9e1816 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/pojo/GitHubOwner.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/pojo/GitHubOwner.java @@ -34,15 +34,13 @@ public class GitHubOwner { - @Nullable @SerializedName("avatar_url") - final private String avatarUrl; + @NonNull + private final String avatarUrl; @SuppressWarnings("NullableProblems") public GitHubOwner(@NonNull final String avatarUrl) { - Preconditions.checkNotNull(avatarUrl, "Avatar cannot be null"); - - this.avatarUrl = avatarUrl; + this.avatarUrl = Preconditions.get(avatarUrl); } public GitHubOwner() { @@ -51,34 +49,29 @@ public GitHubOwner() { @NonNull public String getAvatarUrl() { - return avatarUrl == null ? "" : avatarUrl; + return avatarUrl; + } + + @Override + public String toString() { + return "GitHubOwner{" + + "avatarUrl='" + avatarUrl + '\'' + + '}'; } @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof GitHubOwner)) { - return false; - } + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; GitHubOwner that = (GitHubOwner) o; - return !(avatarUrl != null ? !avatarUrl.equals(that.avatarUrl) : that.avatarUrl != null); + return avatarUrl.equals(that.avatarUrl); } @Override public int hashCode() { - return avatarUrl != null ? avatarUrl.hashCode() : 0; - } - - @Override - public String toString() { - final StringBuffer sb = new StringBuffer("GitHubOwner{"); - sb.append("avatarUrl='").append(avatarUrl).append('\''); - sb.append('}'); - return sb.toString(); + return avatarUrl.hashCode(); } } diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/pojo/GitHubRepository.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/pojo/GitHubRepository.java index c9f91976..26365b58 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/pojo/GitHubRepository.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/pojo/GitHubRepository.java @@ -33,41 +33,43 @@ import io.reark.reark.pojo.OverwritablePojo; import io.reark.reark.utils.Preconditions; +import static io.reark.reark.utils.Preconditions.get; + public class GitHubRepository extends OverwritablePojo { + private final int id; + + @NonNull private final String name; @SerializedName("stargazers_count") - private int stargazersCount; + private final int stargazersCount; @SerializedName("forks_count") - private int forksCount; + private final int forksCount; - @Nullable + @NonNull @SerializedName("owner") private final GitHubOwner owner; - @SuppressWarnings("NullableProblems") public GitHubRepository(int id, - String name, + @NonNull final String name, int stargazersCount, int forksCount, @NonNull final GitHubOwner owner) { - Preconditions.checkNotNull(owner, "Owner cannot be null."); - this.id = id; - this.name = name; + this.name = get(name); this.stargazersCount = stargazersCount; this.forksCount = forksCount; - this.owner = owner; + this.owner = get(owner); } - public GitHubRepository(GitHubRepository gitHubRepository) { - this(gitHubRepository.getId(), - gitHubRepository.getName(), - gitHubRepository.getStargazersCount(), - gitHubRepository.getForksCount(), - gitHubRepository.getOwner()); + public GitHubRepository(@NonNull final GitHubRepository other) { + this(other.getId(), + other.getName(), + other.getStargazersCount(), + other.getForksCount(), + other.getOwner()); } @NonNull @@ -80,6 +82,7 @@ public int getId() { return id; } + @NonNull public String getName() { return name; } @@ -94,55 +97,43 @@ public int getForksCount() { @NonNull public GitHubOwner getOwner() { - return owner == null ? new GitHubOwner() : owner; + return owner; } @Override public String toString() { - final StringBuffer sb = new StringBuffer("GitHubRepository{"); - sb.append("id=").append(id); - sb.append(", name='").append(name).append('\''); - sb.append(", stargazersCount=").append(stargazersCount); - sb.append(", forksCount=").append(forksCount); - sb.append(", owner=").append(owner); - sb.append('}'); - return sb.toString(); + return "GitHubRepository{" + + "id=" + id + + ", name='" + name + '\'' + + ", stargazersCount=" + stargazersCount + + ", forksCount=" + forksCount + + ", owner=" + owner + + '}'; } @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof GitHubRepository)) { - return false; - } + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; GitHubRepository that = (GitHubRepository) o; - if (id != that.id) { - return false; - } - if (stargazersCount != that.stargazersCount) { - return false; - } - if (forksCount != that.forksCount) { - return false; - } - if (name != null ? !name.equals(that.name) : that.name != null) { - return false; - } - return !(owner != null ? !owner.equals(that.owner) : that.owner != null); + if (id != that.id) return false; + if (stargazersCount != that.stargazersCount) return false; + if (forksCount != that.forksCount) return false; + if (!name.equals(that.name)) return false; + return owner.equals(that.owner); } @Override public int hashCode() { int result = id; - result = 31 * result + (name != null ? name.hashCode() : 0); + result = 31 * result + name.hashCode(); result = 31 * result + stargazersCount; result = 31 * result + forksCount; - result = 31 * result + (owner != null ? owner.hashCode() : 0); + result = 31 * result + owner.hashCode(); return result; } } diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/pojo/GitHubRepositorySearchResults.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/pojo/GitHubRepositorySearchResults.java index 3cc78c03..15409af2 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/pojo/GitHubRepositorySearchResults.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/pojo/GitHubRepositorySearchResults.java @@ -33,15 +33,16 @@ import io.reark.reark.utils.Preconditions; +import static io.reark.reark.utils.Preconditions.checkNotNull; +import static io.reark.reark.utils.Preconditions.get; + public class GitHubRepositorySearchResults { @NonNull private final List items; public GitHubRepositorySearchResults(@NonNull final List items) { - Preconditions.checkNotNull(items, "GitHub Repository Items cannot be null."); - - this.items = new ArrayList<>(items); + this.items = new ArrayList<>(get(items)); } @NonNull diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/utils/SubscriptionUtils.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/utils/SubscriptionUtils.java index 77839beb..3d029495 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/utils/SubscriptionUtils.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/utils/SubscriptionUtils.java @@ -35,20 +35,24 @@ import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; -public class SubscriptionUtils { - private SubscriptionUtils() { } +import static io.reark.reark.utils.Preconditions.checkNotNull; - static public Subscription subscribeTextViewText(@NonNull final Observable observable, +public final class SubscriptionUtils { + + private SubscriptionUtils() { + } + + public static Subscription subscribeTextViewText(@NonNull final Observable observable, @NonNull final TextView textView) { return subscribeTextViewText(observable, textView, AndroidSchedulers.mainThread()); } - static public Subscription subscribeTextViewText(@NonNull final Observable observable, + public static Subscription subscribeTextViewText(@NonNull final Observable observable, @NonNull final TextView textView, @NonNull final Scheduler scheduler) { - Preconditions.checkNotNull(observable, "Observable cannot be null."); - Preconditions.checkNotNull(textView, "TextView cannot be null."); - Preconditions.checkNotNull(scheduler, "Scheduler cannot be null."); + checkNotNull(observable); + checkNotNull(textView); + checkNotNull(scheduler); return observable .observeOn(scheduler) diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/view/RepositoriesView.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/view/RepositoriesView.java index 5cba31c3..21bf98a5 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/view/RepositoriesView.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/view/RepositoriesView.java @@ -51,6 +51,9 @@ import rx.subscriptions.CompositeSubscription; import rx.subscriptions.Subscriptions; +import static io.reark.reark.utils.Preconditions.checkNotNull; +import static io.reark.reark.utils.Preconditions.get; + public class RepositoriesView extends FrameLayout { private TextView statusText; @@ -87,19 +90,20 @@ protected void onFinishInflate() { } private void setRepositories(@NonNull final List repositories) { - Preconditions.checkNotNull(repositories, "Repository List Text cannot be null."); - Preconditions.checkState(repositoriesAdapter != null, "List Adapter should not be null."); + checkNotNull(repositories); + checkNotNull(repositoriesAdapter); repositoriesAdapter.set(repositories); } private void setNetworkRequestStatus(@NonNull final ProgressStatus networkRequestStatus) { - Preconditions.checkNotNull(networkRequestStatus, "Network Request Status cannot be null."); + checkNotNull(networkRequestStatus); setNetworkRequestStatusText(getLoadingStatusString(networkRequestStatus)); } - private String getLoadingStatusString(ProgressStatus networkRequestStatus) { + @NonNull + private static String getLoadingStatusString(ProgressStatus networkRequestStatus) { switch (networkRequestStatus) { case LOADING: return "Loading.."; @@ -112,23 +116,20 @@ private String getLoadingStatusString(ProgressStatus networkRequestStatus) { } private void setNetworkRequestStatusText(@NonNull final String networkRequestStatusText) { - Preconditions.checkNotNull(networkRequestStatusText, "Network Status Text cannot be null."); - Preconditions.checkState(statusText != null, "Status Text View should not be null."); + checkNotNull(networkRequestStatusText); + checkNotNull(statusText); statusText.setText(networkRequestStatusText); } public static class ViewBinder extends RxViewBinder { - private RepositoriesView view; - private RepositoriesViewModel viewModel; + private final RepositoriesView view; + private final RepositoriesViewModel viewModel; public ViewBinder(@NonNull final RepositoriesView view, @NonNull final RepositoriesViewModel viewModel) { - Preconditions.checkNotNull(view, "View cannot be null."); - Preconditions.checkNotNull(viewModel, "ViewModel cannot be null."); - - this.view = view; - this.viewModel = viewModel; + this.view = get(view); + this.viewModel = get(viewModel); } @Override diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/view/RepositoryView.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/view/RepositoryView.java index c2004611..acf17c4b 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/view/RepositoryView.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/view/RepositoryView.java @@ -44,6 +44,9 @@ import rx.android.schedulers.AndroidSchedulers; import rx.subscriptions.CompositeSubscription; +import static io.reark.reark.utils.Preconditions.checkNotNull; +import static io.reark.reark.utils.Preconditions.get; + public class RepositoryView extends FrameLayout { private TextView titleTextView; private TextView stargazersTextView; @@ -71,7 +74,7 @@ protected void onFinishInflate() { } private void setRepository(@NonNull final GitHubRepository repository) { - Preconditions.checkNotNull(repository, "Repository cannot be null."); + checkNotNull(repository); titleTextView.setText(repository.getName()); stargazersTextView.setText("stars: " + repository.getStargazersCount()); @@ -97,11 +100,8 @@ public static class ViewBinder extends RxViewBinder { public ViewBinder(@NonNull final RepositoryView view, @NonNull final RepositoryViewModel viewModel) { - Preconditions.checkNotNull(view, "View cannot be null."); - Preconditions.checkNotNull(viewModel, "ViewModel cannot be null."); - - this.view = view; - this.viewModel = viewModel; + this.view = get(view); + this.viewModel = get(viewModel); } @Override diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/viewmodels/RepositoriesViewModel.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/viewmodels/RepositoriesViewModel.java index 3e91f98c..5540abc6 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/viewmodels/RepositoriesViewModel.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/viewmodels/RepositoriesViewModel.java @@ -36,6 +36,8 @@ import io.reark.reark.utils.RxUtils; import io.reark.reark.viewmodels.AbstractViewModel; import io.reark.rxgithubapp.shared.data.DataFunctions; +import io.reark.rxgithubapp.shared.data.DataFunctions.GetGitHubRepository; +import io.reark.rxgithubapp.shared.data.DataFunctions.GetGitHubRepositorySearch; import io.reark.rxgithubapp.shared.pojo.GitHubRepository; import io.reark.rxgithubapp.shared.pojo.GitHubRepositorySearch; import rx.Observable; @@ -45,6 +47,9 @@ import rx.subjects.PublishSubject; import rx.subscriptions.CompositeSubscription; +import static io.reark.reark.utils.Preconditions.checkNotNull; +import static io.reark.reark.utils.Preconditions.get; + public class RepositoriesViewModel extends AbstractViewModel { private static final String TAG = RepositoriesViewModel.class.getSimpleName(); @@ -56,27 +61,27 @@ public enum ProgressStatus { private static final int SEARCH_INPUT_DELAY = 500; @NonNull - private final DataFunctions.GetGitHubRepositorySearch getGitHubRepositorySearch; + private final GetGitHubRepositorySearch getGitHubRepositorySearch; @NonNull - private final DataFunctions.GetGitHubRepository getGitHubRepository; + private final GetGitHubRepository getGitHubRepository; + @NonNull private final PublishSubject searchString = PublishSubject.create(); + + @NonNull private final PublishSubject selectRepository = PublishSubject.create(); + @NonNull private final BehaviorSubject> repositories = BehaviorSubject.create(); - private final BehaviorSubject networkRequestStatusText = BehaviorSubject.create(); - public RepositoriesViewModel(@NonNull final DataFunctions.GetGitHubRepositorySearch getGitHubRepositorySearch, - @NonNull final DataFunctions.GetGitHubRepository getGitHubRepository) { - Preconditions.checkNotNull(getGitHubRepositorySearch, - "GetGitHubRepositorySearch cannot be null."); - Preconditions.checkNotNull(getGitHubRepository, - "GetGitHubRepository cannot be null."); + @NonNull + private final BehaviorSubject networkRequestStatusText = BehaviorSubject.create(); - this.getGitHubRepositorySearch = getGitHubRepositorySearch; - this.getGitHubRepository = getGitHubRepository; - Log.v(TAG, "RepositoriesViewModel"); + public RepositoriesViewModel(@NonNull final GetGitHubRepositorySearch getGitHubRepositorySearch, + @NonNull final GetGitHubRepository getGitHubRepository) { + this.getGitHubRepositorySearch = get(getGitHubRepositorySearch); + this.getGitHubRepository = get(getGitHubRepository); } @NonNull @@ -95,13 +100,13 @@ public Observable getNetworkRequestStatusText() { } public void setSearchString(@NonNull final String searchString) { - Preconditions.checkNotNull(searchString, "SearchString cannot be null."); + checkNotNull(searchString); this.searchString.onNext(searchString); } public void selectRepository(@NonNull final GitHubRepository repository) { - Preconditions.checkNotNull(repository, "Repository cannot be null."); + checkNotNull(repository); this.selectRepository.onNext(repository); } @@ -121,14 +126,15 @@ static Func1, ProgressStatus> toP @Override public void subscribeToDataStoreInternal(@NonNull final CompositeSubscription compositeSubscription) { + checkNotNull(compositeSubscription); Log.v(TAG, "subscribeToDataStoreInternal"); ConnectableObservable> repositorySearchSource = searchString - .filter(string -> string.length() > 2) + .filter(value -> value.length() > 2) .debounce(SEARCH_INPUT_DELAY, TimeUnit.MILLISECONDS) .distinctUntilChanged() - .doOnNext(string -> Log.d(TAG, "Searching with: " + string)) + .doOnNext(value -> Log.d(TAG, "Searching with: " + value)) .switchMap(getGitHubRepositorySearch::call) .publish(); @@ -143,7 +149,7 @@ public void subscribeToDataStoreInternal(@NonNull final CompositeSubscription co .map(GitHubRepositorySearch::getItems) .flatMap(toGitHubRepositoryList()) .doOnNext(list -> Log.d(TAG, "Publishing " + list.size() + " repositories from the ViewModel")) - .subscribe(RepositoriesViewModel.this.repositories::onNext)); + .subscribe(repositories::onNext)); compositeSubscription.add(repositorySearchSource.connect()); } @@ -159,7 +165,7 @@ Func1, Observable>> toGitHubRepositoryList( @NonNull Observable getGitHubRepositoryObservable(@NonNull final Integer repositoryId) { - Preconditions.checkNotNull(repositoryId, "Repository Id cannot be null."); + checkNotNull(repositoryId); return getGitHubRepository .call(repositoryId) @@ -167,7 +173,7 @@ Observable getGitHubRepositoryObservable(@NonNull final Intege } void setNetworkStatusText(@NonNull final ProgressStatus status) { - Preconditions.checkNotNull(status, "ProgressStatus cannot be null."); + checkNotNull(status); networkRequestStatusText.onNext(status); } diff --git a/appshared/src/main/java/io/reark/rxgithubapp/shared/viewmodels/RepositoryViewModel.java b/appshared/src/main/java/io/reark/rxgithubapp/shared/viewmodels/RepositoryViewModel.java index 2bd0c425..2c47cb5a 100644 --- a/appshared/src/main/java/io/reark/rxgithubapp/shared/viewmodels/RepositoryViewModel.java +++ b/appshared/src/main/java/io/reark/rxgithubapp/shared/viewmodels/RepositoryViewModel.java @@ -27,37 +27,39 @@ import android.support.annotation.NonNull; -import io.reark.reark.utils.Log; -import io.reark.reark.utils.Preconditions; import io.reark.reark.viewmodels.AbstractViewModel; -import io.reark.rxgithubapp.shared.data.DataFunctions; +import io.reark.rxgithubapp.shared.data.DataFunctions.FetchAndGetGitHubRepository; +import io.reark.rxgithubapp.shared.data.DataFunctions.GetUserSettings; import io.reark.rxgithubapp.shared.pojo.GitHubRepository; import io.reark.rxgithubapp.shared.pojo.UserSettings; import rx.Observable; import rx.subjects.BehaviorSubject; import rx.subscriptions.CompositeSubscription; +import static io.reark.reark.utils.Preconditions.checkNotNull; +import static io.reark.reark.utils.Preconditions.get; + public class RepositoryViewModel extends AbstractViewModel { - private static final String TAG = RepositoryViewModel.class.getSimpleName(); - private final DataFunctions.GetUserSettings getUserSettings; - private final DataFunctions.FetchAndGetGitHubRepository fetchAndGetGitHubRepository; + @NonNull + private final GetUserSettings getUserSettings; - final private BehaviorSubject repository = BehaviorSubject.create(); + @NonNull + private final FetchAndGetGitHubRepository fetchAndGetGitHubRepository; - public RepositoryViewModel(@NonNull final DataFunctions.GetUserSettings getUserSettings, - @NonNull final DataFunctions.FetchAndGetGitHubRepository fetchAndGetGitHubRepository) { - Preconditions.checkNotNull(getUserSettings, "Gey User Settings cannot be null."); - Preconditions.checkNotNull(fetchAndGetGitHubRepository, - "Fetch And Get GitHub Repository cannot be null."); + @NonNull + private final BehaviorSubject repository = BehaviorSubject.create(); - this.getUserSettings = getUserSettings; - this.fetchAndGetGitHubRepository = fetchAndGetGitHubRepository; - Log.v(TAG, "RepositoryViewModel"); + public RepositoryViewModel(@NonNull final GetUserSettings getUserSettings, + @NonNull final FetchAndGetGitHubRepository fetchAndGetGitHubRepository) { + this.getUserSettings = get(getUserSettings); + this.fetchAndGetGitHubRepository = get(fetchAndGetGitHubRepository); } @Override public void subscribeToDataStoreInternal(@NonNull final CompositeSubscription compositeSubscription) { + checkNotNull(compositeSubscription); + compositeSubscription.add( getUserSettings.call() .map(UserSettings::getSelectedRepositoryId) diff --git a/appshared/src/testDebug/java/io/reark/rxgithubapp/shared/utils/StethoInstrumentationTest.java b/appshared/src/testDebug/java/io/reark/rxgithubapp/shared/utils/StethoInstrumentationTest.java index 48e0402a..c397ffbe 100644 --- a/appshared/src/testDebug/java/io/reark/rxgithubapp/shared/utils/StethoInstrumentationTest.java +++ b/appshared/src/testDebug/java/io/reark/rxgithubapp/shared/utils/StethoInstrumentationTest.java @@ -76,6 +76,6 @@ public void testDecorateNetwork() { instrumentation.decorateNetwork(okHttpClient); - verify(instrumentation).addInterceptor(eq(okHttpClient), eq(interceptor)); + StethoInstrumentation.addInterceptor(eq(okHttpClient), eq(interceptor)); } } diff --git a/reark/src/androidTest/java/io/reark/reark/data/stores/ContentProviderStoreTest.java b/reark/src/androidTest/java/io/reark/reark/data/stores/ContentProviderStoreTest.java index c659a09e..716539d4 100644 --- a/reark/src/androidTest/java/io/reark/reark/data/stores/ContentProviderStoreTest.java +++ b/reark/src/androidTest/java/io/reark/reark/data/stores/ContentProviderStoreTest.java @@ -200,7 +200,7 @@ protected String[] getProjection() { @NonNull @Override - protected String read(Cursor cursor) { + protected String read(@NonNull Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DataColumns.VALUE)); } diff --git a/reark/src/main/java/io/reark/reark/data/stores/cores/ContentProviderStoreCoreBase.java b/reark/src/main/java/io/reark/reark/data/stores/cores/ContentProviderStoreCoreBase.java index bfc42ad5..ece5c5d5 100644 --- a/reark/src/main/java/io/reark/reark/data/stores/cores/ContentProviderStoreCoreBase.java +++ b/reark/src/main/java/io/reark/reark/data/stores/cores/ContentProviderStoreCoreBase.java @@ -183,7 +183,7 @@ protected ContentResolver getContentResolver() { protected abstract String[] getProjection(); @NonNull - protected abstract T read(Cursor cursor); + protected abstract T read(@NonNull final Cursor cursor); @NonNull protected abstract ContentValues getContentValuesForItem(T item); diff --git a/reark/src/main/java/io/reark/reark/data/utils/DataLayerUtils.java b/reark/src/main/java/io/reark/reark/data/utils/DataLayerUtils.java index 9a17d29f..f45b4ef1 100644 --- a/reark/src/main/java/io/reark/reark/data/utils/DataLayerUtils.java +++ b/reark/src/main/java/io/reark/reark/data/utils/DataLayerUtils.java @@ -32,7 +32,10 @@ import rx.Observable; import rx.functions.Func1; +import static io.reark.reark.utils.Preconditions.checkNotNull; + public final class DataLayerUtils { + private DataLayerUtils() { } @@ -54,6 +57,8 @@ public static Observable> createDataStreamNotificat private static Func1> fromNetworkRequestStatus() { return networkRequestStatus -> { + checkNotNull(networkRequestStatus); + switch (networkRequestStatus.getStatus()) { case NETWORK_STATUS_ONGOING: return DataStreamNotification.fetchingStart();