All Projects → bernaferrari → Sdkmonitor

bernaferrari / Sdkmonitor

Licence: apache-2.0
App to display and monitor the targetSDK from installed apps.

Programming Languages

kotlin
9241 projects

Projects that are alternatives of or similar to Sdkmonitor

Changedetection
Automatically track websites changes on Android in background.
Stars: ✭ 563 (+361.48%)
Mutual labels:  android-app, dagger2, viewmodel, room, material-design, android-application
Androidroom
Android example to show how to use Room to access SQLite database on device for reading and writing data. This example also shows how to use LiveData and ViewModel with Room to build reactive, well performing and easy to maintain applications.
Stars: ✭ 36 (-70.49%)
Mutual labels:  android-app, viewmodel, room, android-application
Popularmovies
🎥 Movie discovery app showcasing Android best practices with Google's recommended architecture: MVVM + Repository + Offline support + Android Architecture Components + Paging library & Retrofit2.
Stars: ✭ 142 (+16.39%)
Mutual labels:  android-app, viewmodel, room, material-design
Quill
👻 [MOVED TO https://github.com/TryGhost/Ghost-Android] The beautiful Android app for your Ghost blog.
Stars: ✭ 552 (+352.46%)
Mutual labels:  android-app, material-design, android-application
Mvvmarms
Android MVVM Architecture Components based on MVPArms and Android Architecture Components.
Stars: ✭ 425 (+248.36%)
Mutual labels:  dagger2, viewmodel, room
Weatherapp
5 Day Forecast app that works on Android and uses latest tools (Kotlin, Navigation, Room, LiveData, Databinding, Dagger 2)
Stars: ✭ 426 (+249.18%)
Mutual labels:  dagger2, viewmodel, room
catchflicks
🎬 Kitchen sink project for learning android concepts 🎬
Stars: ✭ 12 (-90.16%)
Mutual labels:  room, dagger2, viewmodel
Morphing Material Dialogs
Material dialog ❤️ morphing animation. An android kotlin UI library for building beautiful animations for converting a floating action button into a material dialog.
Stars: ✭ 806 (+560.66%)
Mutual labels:  android-app, material-design, android-application
Music Player Go
🎶🎼 Very slim music player 👨‍🎤 100% made in Italy 🍕🌳🌞🍝🌄
Stars: ✭ 654 (+436.07%)
Mutual labels:  android-app, material-design, android-application
Base Mvvm
App built to showcase basic Android View components like ViewPager, RecyclerView(homogeneous and heterogeneous items), NavigationDrawer, Animated Vector Drawables, Collapsing Toolbar Layout etc. housed in a MVVM architecture
Stars: ✭ 18 (-85.25%)
Mutual labels:  dagger2, viewmodel, room
Kotlin Android Scaffolding
An android project structure using kotlin and most common libraries.
Stars: ✭ 53 (-56.56%)
Mutual labels:  android-app, dagger2, android-application
Githubprojectbrowser
This is a sample Android Project that is based on Clean Architecture
Stars: ✭ 64 (-47.54%)
Mutual labels:  dagger2, viewmodel, room
Wanandroid
🏄 基于Architecture Components dependencies (Lifecycles,LiveData,ViewModel,Room)构建的WanAndroid开源项目。 你值得拥有的MVVM快速开发框架:https://github.com/jenly1314/MVVMFrame
Stars: ✭ 410 (+236.07%)
Mutual labels:  dagger2, viewmodel, room
Geeknews
📚A pure reading App based on Material Design + MVP + RxJava2 + Retrofit + Dagger2 + Realm + Glide
Stars: ✭ 3,496 (+2765.57%)
Mutual labels:  dagger2, material-design, android-application
News Sample App
A sample news app which demonstrates clean architecture and best practices for developing android app
Stars: ✭ 334 (+173.77%)
Mutual labels:  dagger2, viewmodel, room
News
A sample News 🗞 app built using Modern Android Development [Architecture Components, Coroutines, Retrofit, Room, Kotlin, Dagger]
Stars: ✭ 774 (+534.43%)
Mutual labels:  dagger2, viewmodel, room
Datingapp
Dating UI kit is used for online meet up with girls and boys . The screen contains more than 30 icons and most of all required elements required to design an application like this. The XML and JAVA files contains comments at each and every point for easy understanding. Everything was made with a detail oriented style and followed by today's web trends. Clean coded & Layers are well-organized, carefully named, and grouped.
Stars: ✭ 97 (-20.49%)
Mutual labels:  android-app, material-design, android-application
Simple-Note-App-with-Online-Storage
✍️ Simple Note Making App use Sqllite Room 🧰 for caching the notes and 📥 Firebase Database for online storage
Stars: ✭ 42 (-65.57%)
Mutual labels:  room, dagger2, viewmodel
Superhero-App
🦸🏻‍♂️🦹🏻‍♀️Superhero app built with Kotlin, ViewModel, LiveData, ViewBinding, Room, and Hilt
Stars: ✭ 27 (-77.87%)
Mutual labels:  room, dagger2, viewmodel
Kodein Mvvm
Example app using Kodein for dependency injection with MVVM and Architecture Components
Stars: ✭ 26 (-78.69%)
Mutual labels:  android-app, viewmodel, android-application

SDK Monitor

SDK Monitor

This app tracks changes on targetSDK from your apps. Starting November 1st, 2018, Google is requiring all app updates to target at least 26 (28 is the latest).

The idea behind this project was to make it easy to see the apps which are "voluntarily" being updated regularly, and the ones that are resisting until the last second. I am personally a fan of App Inspector, with 100K+ downloads, simple interface, and great information. I had, however, 3 issues with it:

  • Really long time to load when app is opened;
  • No search or way to find what you want;
  • No material design.

Based on this, I made an improved app, with everything App Inspector has and more. SDK Monitor caches everything using Room, so time to load is REALLY fast. It also makes use of Implicit Broadcasts (where available) to automatically keep track of app installs, updates and deletions. Android Oreo removed these (except deletion), so the app has the option to use WorkManager to automatically fetch periodically in background for these changes. Every time the targetSDK value for an app is changed, the app will show a push notification.

This app also showcases the following Jetpack libraries working together: Room, ViewModel, WorkManager, DataBinding and Navigation.

App is currently in beta, you can download the apk here:

APK DOWNLOAD

Screenshots

Fast Scroller Logs Details Settings
First Sec Third Fourth

Introduction

Features

This app contains the following screens:

  • A list of all installed apps that were downloaded from Play Store.
  • A settings view, that allows user to toggle auto-sync on/off and configure what is required for a sync to occur.
  • [Eventually] The plan is to have a filter screen (sort by name/last update/targetSDK value) and an about screen.

Presentation layer

This app is a Single-Activity app, with the following components:

  • A main activity that handles navigation.
  • A fragment to display the list of apps currently tracked. This fragment makes use of MvRx architecture, and it was a delight integrating search with database on the viewmodel.

The app uses a Model-View-ViewModel (MVVM) architecture for the presentation layer. Each of the fragments corresponds to a MVVM View. The View and ViewModel communicate using RxJava2 and general good principles.

Data layer

The database is created using Room and it has two entities: a App and a Version that generate corresponding SQLite tables at runtime. There is a one to many relationship between them. The packageName from App is a foreign key on Version. App contains the app label, package name and color (to be displayed on the app, based on the icon). Version contains the targetSDK version, versionName and versionCode. The app only adds a new version when the targetSDK changes.

To let other components know when the data has finished populating, the ViewModel exposes a Flowable object. The app also makes use of Kotlin's Coroutines to deal with some callbacks.

How components were used

  • MvRx and Epoxy: used on the main screen to fetch and filter (if necessary) the list of apps. Since Epoxy wasn't made for items that are changing, the Settings view makes use of Groupie.

  • ViewModel: A Observables.combineLatest will merge the results from database (which will be fetched if empty) and search (which will be empty when app is first opened). Following this, the execute from MvRx will copy the state to the correct EpoxyController.

  • WorkManager: responsible for automatically syncing when the app is in background. There are two constraints: battery not low and device charging.

Third Party Libraries Used

  • Android-Iconics deal with icons without suffering.
  • Architecture Components stated above.
  • Epoxy for making static RecyclerViews as efficient and nice as possible.
  • Groupie for making RecyclerViews as simple as possible. Unfortunately it is kind of deprecated, so a lot of work was done using Epoxy.
  • Coroutines for simple background work.
  • Logger logs that are useful and can disabled on release.
  • material-about-library [eventually]create an about page without suffering.
  • Material Dialogs show dialogs in a simple and easy way.
  • Notify create notifications without effort.
  • MvRx on the main fragment.
  • Stetho debug the database easily.
  • timeago makes it easy display relative dates (i.e. 1 day ago).
  • RxJava deals with MvRx and coordinates most of the work on the app.
  • Dagger 2 dependency injection for sharedPreferences with application Context, provides singleton database instances.

Special thanks

A lot of the structure and ideas from this app came from Changes, which is also open source.

Reporting Issues

Issues and Pull Requests are welcome. You can report here.

License

Copyright 2018 Bernardo Ferrari.

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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].