This app is based on sample app that uses Android Architecture Components with Dagger 2.
Here is the file diff:

The app is composed of 3 main screens.

- Allows you to search users on Github.
- Each search result is kept in the database in
UserSearchResulttable where the list of repository IDs are denormalized into a single column. - The actual
Userinstances live in theUsertable. - Each time a new page is fetched, the same
UserSearchResultrecord in the Database is updated with the new list of user ids. (NOTE The UI currently loads allUseritems at once, which would not perform well on lower end devices. Instead of manually writing lazy adapters, we've decided to wait until the built in support in Room is released.)
- This fragment displays the details of a repository and its contributors.
- This fragment displays a user and their repositories.
You can open the project in Android studio and press run.
You can download the apk through the following QR code for installation.
The project uses both instrumentation tests that run on the device and local unit tests that run on your computer.
The project creates an in memory database for each database test but still runs them on the device.
Each ViewModel is tested using local unit tests with mock Repository implementations.
Each Repository is tested using local unit tests with mock web service and mock database.
The project uses MockWebServer project to test REST api interactions.
- Android Support Library
- Android Architecture Components
- Android Data Binding
- Dagger 2 for dependency injection
- Retrofit for REST api communication
- Glide for image loading
- Timber for logging
- espresso for UI tests
- mockito for mocking in tests
Copyright 2017 The Android Open Source Project, Inc.
Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you 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.

