├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_logo.png │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_logo.png │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_logo.png │ │ │ ├── drawable-hdpi │ │ │ │ └── img_logo.png │ │ │ ├── drawable-ldpi │ │ │ │ └── img_logo.png │ │ │ ├── drawable-mdpi │ │ │ │ └── img_logo.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_logo.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_logo.png │ │ │ ├── drawable-xhdpi │ │ │ │ └── img_logo.png │ │ │ ├── drawable-xxhdpi │ │ │ │ └── img_logo.png │ │ │ ├── drawable │ │ │ │ ├── bg_primary_dark.xml │ │ │ │ ├── ic_search.xml │ │ │ │ ├── ic_website.xml │ │ │ │ ├── ic_github.xml │ │ │ │ └── ic_settings.xml │ │ │ ├── values │ │ │ │ ├── colors.xml │ │ │ │ ├── styles.xml │ │ │ │ ├── dimens.xml │ │ │ │ └── strings.xml │ │ │ ├── layout │ │ │ │ ├── component_loading.xml │ │ │ │ ├── item_setting.xml │ │ │ │ ├── fragment_apps.xml │ │ │ │ ├── activity_settings.xml │ │ │ │ ├── activity_tos.xml │ │ │ │ ├── card_app.xml │ │ │ │ ├── activity_main.xml │ │ │ │ └── activity_about.xml │ │ │ ├── menu │ │ │ │ └── menu_apps.xml │ │ │ ├── values-fa-rIR │ │ │ │ └── strings.xml │ │ │ └── raw │ │ │ │ └── opensource.md │ │ ├── kotlin │ │ │ └── ir │ │ │ │ └── alilo │ │ │ │ └── virustotalclient │ │ │ │ ├── injection │ │ │ │ ├── FeatureScope.kt │ │ │ │ ├── ApplicationComponent.kt │ │ │ │ ├── FeatureComponents.kt │ │ │ │ ├── AndroidModule.kt │ │ │ │ └── FeatureModules.kt │ │ │ │ ├── features │ │ │ │ ├── settings │ │ │ │ │ ├── SettingsInteractor.kt │ │ │ │ │ ├── SettingsPresenter.kt │ │ │ │ │ ├── Settings.kt │ │ │ │ │ ├── about │ │ │ │ │ │ └── AboutActivity.kt │ │ │ │ │ ├── SettingsActivity.kt │ │ │ │ │ └── SettingsAdapter.kt │ │ │ │ ├── applist │ │ │ │ │ ├── AppListPagerAdapter.kt │ │ │ │ │ ├── AppListPresenter.kt │ │ │ │ │ ├── AppListInteractor.kt │ │ │ │ │ ├── AppListActivity.kt │ │ │ │ │ ├── AppListAdapter.kt │ │ │ │ │ └── AppListFragment.kt │ │ │ │ └── tos │ │ │ │ │ └── ToSActivity.kt │ │ │ │ ├── mvp │ │ │ │ ├── Presenter.kt │ │ │ │ └── View.kt │ │ │ │ ├── datasources │ │ │ │ ├── db │ │ │ │ │ ├── VirusTotalDatabase.kt │ │ │ │ │ └── models.kt │ │ │ │ └── Preference.kt │ │ │ │ ├── ui │ │ │ │ └── ViewExtensions.kt │ │ │ │ └── VirusTotal.kt │ │ └── AndroidManifest.xml │ └── test │ │ └── java │ │ └── ir │ │ └── alilo │ │ └── virustotalclient │ │ ├── utils │ │ └── MockitoExtensions.kt │ │ └── features │ │ └── applist │ │ └── AppListPresenterTest.kt ├── proguard-rules.pro └── build.gradle ├── settings.gradle ├── .idea ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── vcs.xml ├── modules.xml ├── runConfigurations.xml ├── gradle.xml ├── compiler.xml └── misc.xml ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .tx └── config ├── .travis.yml ├── .gitignore ├── TODO.md ├── gradle.properties ├── README.md ├── gradlew.bat ├── gradlew └── LICENSE /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alilotfi/VirusTotalClient/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alilotfi/VirusTotalClient/HEAD/app/src/main/res/mipmap-hdpi/ic_logo.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alilotfi/VirusTotalClient/HEAD/app/src/main/res/mipmap-mdpi/ic_logo.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alilotfi/VirusTotalClient/HEAD/app/src/main/res/mipmap-xhdpi/ic_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/img_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alilotfi/VirusTotalClient/HEAD/app/src/main/res/drawable-hdpi/img_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/img_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alilotfi/VirusTotalClient/HEAD/app/src/main/res/drawable-ldpi/img_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/img_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alilotfi/VirusTotalClient/HEAD/app/src/main/res/drawable-mdpi/img_logo.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alilotfi/VirusTotalClient/HEAD/app/src/main/res/mipmap-xxhdpi/ic_logo.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alilotfi/VirusTotalClient/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/img_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alilotfi/VirusTotalClient/HEAD/app/src/main/res/drawable-xhdpi/img_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/img_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alilotfi/VirusTotalClient/HEAD/app/src/main/res/drawable-xxhdpi/img_logo.png -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/kotlin/ir/alilo/virustotalclient/injection/FeatureScope.kt: -------------------------------------------------------------------------------- 1 | package ir.alilo.virustotalclient.injection 2 | 3 | import javax.inject.Scope 4 | 5 | @Scope 6 | @Retention() 7 | annotation class FeatureScope -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_primary_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/kotlin/ir/alilo/virustotalclient/features/settings/SettingsInteractor.kt: -------------------------------------------------------------------------------- 1 | package ir.alilo.virustotalclient.features.settings 2 | 3 | import javax.inject.Inject 4 | 5 | class SettingsInteractor @Inject constructor() { 6 | } -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | 4 | [virus-total-client.strings] 5 | source_file = app/src/main/res/values/strings.xml 6 | source_lang = en 7 | type = ANDROID 8 | file_filter = app/src/main/res/values-/strings.xml 9 | -------------------------------------------------------------------------------- /app/src/main/kotlin/ir/alilo/virustotalclient/mvp/Presenter.kt: -------------------------------------------------------------------------------- 1 | package ir.alilo.virustotalclient.mvp 2 | 3 | abstract class Presenter(var view: V?, var interactor: I?) { 4 | fun onDestroy() { 5 | view = null 6 | interactor = null 7 | } 8 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 28 10:00:20 PST 2015 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip 7 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # DBFlow 2 | -keep class * extends com.raizlabs.android.dbflow.config.DatabaseHolder { *; } 3 | 4 | # Build Warnings Hack 5 | -ignorewarnings 6 | 7 | # Include line numbers 8 | -renamesourcefileattribute SourceFile 9 | -keepattributes SourceFile,LineNumberTable 10 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: android 2 | jdk: oraclejdk8 3 | sudo: false 4 | 5 | android: 6 | components: 7 | - platform-tools 8 | - tools 9 | - build-tools-24.0.2 10 | - android-22 11 | - android-24 12 | - extra-android-m2repository 13 | 14 | notifications: 15 | email: false 16 | 17 | script: ./gradlew test 18 | -------------------------------------------------------------------------------- /app/src/main/kotlin/ir/alilo/virustotalclient/datasources/db/VirusTotalDatabase.kt: -------------------------------------------------------------------------------- 1 | package ir.alilo.virustotalclient.datasources.db 2 | 3 | import com.raizlabs.android.dbflow.annotation.Database 4 | 5 | @Database(name = VirusTotalDatabase.NAME, version = VirusTotalDatabase.VERSION) 6 | object VirusTotalDatabase { 7 | const val NAME = "VirusTotalDatabase" 8 | const val VERSION = 1 9 | } -------------------------------------------------------------------------------- /app/src/test/java/ir/alilo/virustotalclient/utils/MockitoExtensions.kt: -------------------------------------------------------------------------------- 1 | package ir.alilo.virustotalclient.utils 2 | 3 | import org.mockito.stubbing.OngoingStubbing 4 | 5 | fun OngoingStubbing.callbackWithCode(codePosition: Int = -1, callback: (Int) -> Unit) { 6 | thenAnswer { callback((if (codePosition == -1) it.arguments.last() else it.arguments[codePosition]) as Int) } 7 | } 8 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/kotlin/ir/alilo/virustotalclient/injection/ApplicationComponent.kt: -------------------------------------------------------------------------------- 1 | package ir.alilo.virustotalclient.injection 2 | 3 | import android.content.pm.PackageManager 4 | import dagger.Component 5 | import ir.alilo.virustotalclient.VirusTotal 6 | import javax.inject.Singleton 7 | 8 | @Singleton 9 | @Component(modules = arrayOf(AndroidModule::class)) 10 | interface ApplicationComponent { 11 | fun getPackageManager(): PackageManager 12 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/ir/alilo/virustotalclient/ui/ViewExtensions.kt: -------------------------------------------------------------------------------- 1 | package ir.alilo.virustotalclient.ui 2 | 3 | import android.view.View 4 | 5 | fun View.click(listener: (View) -> Unit) { 6 | setOnClickListener { listener(this) } 7 | } 8 | 9 | var View.visible: Boolean 10 | get() = visibility == View.VISIBLE 11 | set(value) = when (value) { 12 | true -> visibility = View.VISIBLE 13 | false -> visibility = View.GONE 14 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/ir/alilo/virustotalclient/features/settings/SettingsPresenter.kt: -------------------------------------------------------------------------------- 1 | package ir.alilo.virustotalclient.features.settings 2 | 3 | import ir.alilo.virustotalclient.mvp.Presenter 4 | import javax.inject.Inject 5 | 6 | class SettingsPresenter @Inject constructor(view: SettingsView, interactor: SettingsInteractor) : 7 | Presenter(view, interactor) { 8 | 9 | interface SettingsView 10 | } -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #187CBC 4 | #0F75BC 5 | #468847 6 | 7 | #FFFFFF 8 | #333333 9 | 10 | #FFFFFF 11 | 12 | #00000000 13 | 14 | #33000000 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 |