Added template project (#1)
* wip * updated project setting.gradle * updated project gradle.properties * updated project build.gradle * updated gitignore * removed extra proguard-rules file, added build.gradle * updated gradle-wrapper * wip di init, added TemplateApplication * added StartupActivity * updated manifest * add persistence * refactoring * remove extra submodules * remover vtb common * removed test folder * added network security * fixed flavors * refactoring * updated libs version * removed .idea file * review build.gradle * review AndroidManifest.xml * review removed bracers from StartupVM * review removed orientation * added .gitmodules & fabric init * review * review styles
|
|
@ -0,0 +1,19 @@
|
|||
# Generated files
|
||||
bin/
|
||||
gen/
|
||||
|
||||
# Gradle files
|
||||
.gradle/
|
||||
build/
|
||||
|
||||
# Local configuration file (sdk path, etc)
|
||||
local.properties
|
||||
|
||||
# Log Files
|
||||
*.log
|
||||
.idea
|
||||
.DS_Store
|
||||
/captures
|
||||
*.iml
|
||||
|
||||
app/src/main/res/*/*strings.xml
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
[submodule "Template-common"]
|
||||
path = Template-common
|
||||
url = git@github.com:TouchInstinct/Template-common.git
|
||||
[submodule "RoboSwag"]
|
||||
path = RoboSwag
|
||||
url = https://github.com/TouchInstinct/RoboSwag.git
|
||||
|
|
@ -0,0 +1 @@
|
|||
/build
|
||||
|
|
@ -0,0 +1,175 @@
|
|||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply plugin: 'kotlin-android-extensions'
|
||||
apply plugin: 'kotlin-kapt'
|
||||
apply plugin: 'io.fabric'
|
||||
|
||||
android {
|
||||
compileSdkVersion versions.compileSdk
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.touchin.template"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion versions.compileSdk
|
||||
versionCode System.getenv("BUILD_NUMBER") as Integer ?: 10000
|
||||
versionName "1.0." + versionCode
|
||||
|
||||
rootProject.extensions.pathToApiSchemes = "$rootDir/Template-common/api"
|
||||
rootProject.extensions.applicationId = "com.touchin.template"
|
||||
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
release {
|
||||
storeFile file("keystore/touchin.jks")
|
||||
storePassword "iphoneandroidwp7"
|
||||
keyAlias "touchin"
|
||||
keyPassword "iphoneandroidwp7"
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
debug {
|
||||
versionNameSuffix ".debug"
|
||||
minifyEnabled false
|
||||
shrinkResources false
|
||||
ext.enableCrashlytics = false
|
||||
signingConfig signingConfigs.release
|
||||
}
|
||||
release {
|
||||
minifyEnabled true
|
||||
shrinkResources true
|
||||
ext.enableCrashlytics = true
|
||||
ext.betaDistributionGroupAliases = "touch-instinct"
|
||||
ext.betaDistributionReleaseNotesFilePath = file("release-notes.txt")
|
||||
signingConfig signingConfigs.release
|
||||
}
|
||||
}
|
||||
|
||||
flavorDimensions "proguardSettings", "apiEndpoint"
|
||||
|
||||
productFlavors {
|
||||
noObfuscate {
|
||||
dimension "proguardSettings"
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), "$buildScriptsDir/proguard/noObfuscate.pro"
|
||||
}
|
||||
obfuscate {
|
||||
dimension "proguardSettings"
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), "$buildScriptsDir/proguard/obfuscate.pro"
|
||||
}
|
||||
mockDev {
|
||||
dimension "apiEndpoint"
|
||||
buildConfigField "String", "API_URL", '"https://template-mock.dev.touchin.ru/api/"'
|
||||
}
|
||||
mockTest {
|
||||
dimension "apiEndpoint"
|
||||
buildConfigField "String", "API_URL", '"https://template-mock.test.touchin.ru/api/"'
|
||||
}
|
||||
mockStage {
|
||||
dimension "apiEndpoint"
|
||||
buildConfigField "String", "API_URL", '"https://template-mock.stage.touchin.ru/api/"'
|
||||
}
|
||||
touchinDev {
|
||||
dimension "apiEndpoint"
|
||||
buildConfigField "String", "API_URL", '"https://template-middleware.dev.touchin.ru/api/"'
|
||||
}
|
||||
touchinTest {
|
||||
dimension "apiEndpoint"
|
||||
buildConfigField "String", "API_URL", '"https://template-middleware.test.touchin.ru/api/"'
|
||||
}
|
||||
touchinStage {
|
||||
dimension "apiEndpoint"
|
||||
buildConfigField "String", "API_URL", '"https://template-middleware.stage.touchin.ru/api/"'
|
||||
}
|
||||
customerProd {
|
||||
dimension "apiEndpoint"
|
||||
buildConfigField "String", "API_URL", '"https://touchin.ru/api/"'
|
||||
}
|
||||
}
|
||||
|
||||
extensions.languageMap = ["ru": "Template-common/strings/default_common_strings_ru.json"]
|
||||
|
||||
}
|
||||
|
||||
androidExtensions {
|
||||
experimental = true
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("com.crashlytics.sdk.android:crashlytics:$versions.crashlytics@aar") {
|
||||
transitive = true
|
||||
}
|
||||
|
||||
// RoboSwag
|
||||
implementation project(':utils')
|
||||
implementation project(':views')
|
||||
implementation project(':storable')
|
||||
implementation project(':logging')
|
||||
implementation project(':api-logansquare')
|
||||
implementation project(':lifecycle')
|
||||
implementation project(':lifecycle-rx')
|
||||
implementation project(':navigation')
|
||||
implementation project(':templates')
|
||||
implementation project(':recyclerview-adapters')
|
||||
implementation project(':kotlin-extensions')
|
||||
implementation project(':livedata-location')
|
||||
implementation project(':recyclerview-calendar')
|
||||
|
||||
// Kotlin
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
|
||||
// AndroidX
|
||||
implementation "androidx.appcompat:appcompat:$versions.appcompat"
|
||||
implementation "androidx.recyclerview:recyclerview:$versions.androidx"
|
||||
implementation "androidx.cardview:cardview:$versions.androidx"
|
||||
implementation "androidx.gridlayout:gridlayout:$versions.androidx"
|
||||
implementation "androidx.core:core-ktx:$versions.androidxKtx"
|
||||
implementation "androidx.constraintlayout:constraintlayout:2.0.0-alpha2"
|
||||
implementation "com.google.android.material:material:$versions.material"
|
||||
|
||||
// Lifecycle
|
||||
implementation "androidx.lifecycle:lifecycle-extensions:$versions.lifecycle"
|
||||
implementation "androidx.lifecycle:lifecycle-reactivestreams:$versions.lifecycle"
|
||||
|
||||
// Room
|
||||
implementation "androidx.room:room-runtime:$versions.room"
|
||||
implementation "androidx.room:room-rxjava2:$versions.room"
|
||||
kapt "androidx.room:room-compiler:$versions.room"
|
||||
|
||||
// Retrofit
|
||||
implementation "com.squareup.retrofit2:retrofit:$versions.retrofit"
|
||||
implementation "com.squareup.retrofit2:adapter-rxjava2:$versions.retrofit"
|
||||
implementation "com.squareup.okhttp3:logging-interceptor:$versions.okhttp3"
|
||||
implementation "com.squareup.okhttp3:okhttp-urlconnection:$versions.okhttp3"
|
||||
|
||||
// Logan square
|
||||
implementation "ru.touchin:logansquare:$versions.logansquare"
|
||||
kapt "ru.touchin:logansquare-compiler:$versions.logansquare"
|
||||
|
||||
// Dagger
|
||||
implementation "com.google.dagger:dagger:$versions.dagger"
|
||||
kapt "com.google.dagger:dagger-compiler:$versions.dagger"
|
||||
|
||||
// RxJava
|
||||
implementation "io.reactivex.rxjava2:rxjava:$versions.rxJava"
|
||||
implementation "io.reactivex.rxjava2:rxandroid:$versions.rxAndroid"
|
||||
|
||||
// Glide
|
||||
implementation "com.github.bumptech.glide:glide:$versions.glide"
|
||||
implementation "com.github.bumptech.glide:okhttp3-integration:$versions.glide"
|
||||
kapt "com.github.bumptech.glide:compiler:$versions.glide"
|
||||
|
||||
}
|
||||
|
||||
gradle.projectsEvaluated {
|
||||
preBuild.dependsOn('stringGenerator')
|
||||
}
|
||||
|
||||
apply from: "$buildScriptsDir/gradle/stringGenerator.gradle"
|
||||
apply from: "$buildScriptsDir/gradle/staticAnalysis.gradle"
|
||||
apply from: "$buildScriptsDir/gradle/apiGenerator.gradle"
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
<manifest
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.touchin.template">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
|
||||
<application
|
||||
android:name="ru.touchin.template.TemplateApplication"
|
||||
android:allowBackup="false"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/common_global_app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="false"
|
||||
tools:ignore="GoogleAppIndexingWarning">
|
||||
|
||||
<activity
|
||||
android:name=".activities.StartupActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
|
||||
</activity>
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
package ru.touchin.template
|
||||
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import com.bluelinelabs.logansquare.LoganSquare
|
||||
import org.joda.time.DateTime
|
||||
import org.joda.time.format.DateTimeFormat
|
||||
import ru.touchin.lifecycle.viewmodel.ViewModelFactory
|
||||
import ru.touchin.lifecycle.viewmodel.ViewModelFactoryProvider
|
||||
import ru.touchin.template.di.app.modules.ApplicationModule
|
||||
import ru.touchin.templates.TouchinApp
|
||||
import ru.touchin.templates.logansquare.LoganSquareBigDecimalConverter
|
||||
import ru.touchin.templates.logansquare.LoganSquareJodaTimeConverter
|
||||
import java.math.BigDecimal
|
||||
import javax.inject.Inject
|
||||
|
||||
class TemplateApplication : TouchinApp(), ViewModelFactoryProvider {
|
||||
@Inject
|
||||
override lateinit var viewModelFactory: ViewModelFactory
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
//TODO remove after init
|
||||
Fabric.with(this, Crashlytics())
|
||||
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
|
||||
initializeLoganSquare()
|
||||
initializeDagger()
|
||||
|
||||
}
|
||||
|
||||
private fun initializeLoganSquare() {
|
||||
val formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZZ")
|
||||
LoganSquare.registerTypeConverter(BigDecimal::class.java, LoganSquareBigDecimalConverter())
|
||||
LoganSquare.registerTypeConverter(DateTime::class.java, LoganSquareJodaTimeConverter(formatter))
|
||||
}
|
||||
|
||||
private fun initializeDagger() {
|
||||
DaggerApplicationComponent.builder()
|
||||
.applicationModule(ApplicationModule(this))
|
||||
.build()
|
||||
.inject(this)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
package ru.touchin.template.activities
|
||||
|
||||
import android.os.Bundle
|
||||
import com.touchin.template.R
|
||||
import ru.touchin.templates.TouchinActivity
|
||||
|
||||
class StartupActivity : TouchinActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.common_activity)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
package ru.touchin.template.api
|
||||
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Response
|
||||
import okhttp3.ResponseBody
|
||||
import org.json.JSONException
|
||||
import org.json.JSONObject
|
||||
import ru.touchin.template.api.exceptions.ServerException
|
||||
import ru.touchin.template.extensions.cloneBody
|
||||
import java.io.IOException
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
class ExceptionsInterceptor @Inject constructor() : Interceptor {
|
||||
|
||||
companion object {
|
||||
private const val ERROR_MESSAGE_FIELD = "errorMessage"
|
||||
}
|
||||
|
||||
override fun intercept(chain: Interceptor.Chain): Response = chain
|
||||
.proceed(chain.request())
|
||||
.also { getError(it, it.body())?.let { exception -> throw exception } }
|
||||
|
||||
@Suppress("detekt.NestedBlockDepth")
|
||||
private fun getError(response: Response, body: ResponseBody?): IOException? = body
|
||||
?.cloneBody()
|
||||
?.let { responseBody ->
|
||||
try {
|
||||
val jsonObject = JSONObject(responseBody)
|
||||
val message = jsonObject.optString(ERROR_MESSAGE_FIELD)
|
||||
when {
|
||||
response.code() != 200 -> ServerException(response.code(), message)
|
||||
else -> null
|
||||
}
|
||||
} catch (error: JSONException) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
package ru.touchin.template.api
|
||||
|
||||
import com.touchin.template.api.BaseResponse
|
||||
import io.reactivex.Single
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.POST
|
||||
|
||||
interface UserApi {
|
||||
|
||||
@POST("user/session/create")
|
||||
fun getSession(@Body body: Body): Single<BaseResponse<String>>
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package ru.touchin.template.api.exceptions
|
||||
|
||||
import ru.touchin.template.model.TemplateApiError
|
||||
import java.io.IOException
|
||||
|
||||
open class ServerException(val code: Int, message: String? = null) : IOException(message) {
|
||||
|
||||
companion object {
|
||||
private val codeToErrorTypeMap = mapOf(
|
||||
1 to TemplateApiError.VALID_RESPONSE,
|
||||
2 to TemplateApiError.INVALID_PARAMETERS
|
||||
)
|
||||
|
||||
fun getErrorTypeByCode(code: Int) = codeToErrorTypeMap[code]
|
||||
}
|
||||
|
||||
fun getErrorType(): TemplateApiError? = codeToErrorTypeMap[code]
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package ru.touchin.template.di.app
|
||||
|
||||
import dagger.Component
|
||||
import ru.touchin.template.TemplateApplication
|
||||
import ru.touchin.template.di.app.modules.ApplicationModule
|
||||
import ru.touchin.template.di.app.modules.NetworkModule
|
||||
import ru.touchin.template.di.app.modules.PersistentModule
|
||||
import ru.touchin.template.di.viewmodel.ViewModelModule
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
@Component(modules = [ApplicationModule::class, PersistentModule::class, ViewModelModule::class, NetworkModule::class])
|
||||
interface ApplicationComponent {
|
||||
|
||||
fun inject(application: TemplateApplication)
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package ru.touchin.template.di.app.modules
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.preference.PreferenceManager
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
|
||||
@Module
|
||||
class ApplicationModule(private val context: Context) {
|
||||
|
||||
@Provides
|
||||
fun provideContext(): Context = context
|
||||
|
||||
@Provides
|
||||
fun provideDefaultSharedPreferences(context: Context): SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
package ru.touchin.template.di.app.modules
|
||||
|
||||
import com.touchin.template.BuildConfig
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.logging.HttpLoggingInterceptor
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
|
||||
import ru.touchin.template.api.ExceptionsInterceptor
|
||||
import ru.touchin.template.api.UserApi
|
||||
import ru.touchin.template.di.qualifiers.PublicApi
|
||||
import ru.touchin.templates.logansquare.LoganSquareJsonFactory
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
class NetworkModule {
|
||||
|
||||
companion object {
|
||||
private val CONVERTER_FACTORY = LoganSquareJsonFactory()
|
||||
private val CALL_ADAPTER_FACTORY = RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io())
|
||||
private const val TIMEOUT = 30L
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
fun provideUserApi(@PublicApi retrofit: Retrofit): UserApi = retrofit.create(UserApi::class.java)
|
||||
|
||||
@Singleton
|
||||
@PublicApi
|
||||
@Provides
|
||||
fun providePublicRetrofit(@PublicApi client: OkHttpClient) = buildRetrofitInstance(client, BuildConfig.API_URL)
|
||||
|
||||
@Singleton
|
||||
@PublicApi
|
||||
@Provides
|
||||
fun providePublicClient(exceptionsInterceptor: ExceptionsInterceptor): OkHttpClient =
|
||||
buildPublicClient(exceptionsInterceptor)
|
||||
|
||||
private fun buildRetrofitInstance(client: OkHttpClient, apiUrl: String): Retrofit = Retrofit.Builder()
|
||||
.baseUrl(apiUrl)
|
||||
.client(client)
|
||||
.addCallAdapterFactory(CALL_ADAPTER_FACTORY)
|
||||
.addConverterFactory(CONVERTER_FACTORY)
|
||||
.build()
|
||||
|
||||
private fun buildPublicClient(exceptionsInterceptor: ExceptionsInterceptor): OkHttpClient = OkHttpClient.Builder()
|
||||
.apply {
|
||||
connectTimeout(TIMEOUT, TimeUnit.SECONDS)
|
||||
readTimeout(TIMEOUT, TimeUnit.SECONDS)
|
||||
writeTimeout(TIMEOUT, TimeUnit.SECONDS)
|
||||
addInterceptor(exceptionsInterceptor)
|
||||
if (BuildConfig.DEBUG) {
|
||||
addNetworkInterceptor(HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BODY })
|
||||
}
|
||||
}.build()
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package ru.touchin.template.di.app.modules
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import androidx.room.Room
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import ru.touchin.roboswag.components.utils.storables.PreferenceUtils
|
||||
import ru.touchin.roboswag.core.observables.storable.NonNullStorable
|
||||
import ru.touchin.template.di.qualifiers.SessionStorable
|
||||
import ru.touchin.template.persistence.Database
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
class PersistentModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideDatabase(context: Context): Database = Room
|
||||
.databaseBuilder(context, Database::class.java, "database")
|
||||
.build()
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
@SessionStorable
|
||||
fun provideSessionStorable(sharedPreferences: SharedPreferences): NonNullStorable<String, String, String> =
|
||||
PreferenceUtils.stringStorable("MIDDLE_SESSION", sharedPreferences, "")
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
package ru.touchin.template.di.qualifiers
|
||||
|
||||
import javax.inject.Qualifier
|
||||
|
||||
@Qualifier
|
||||
annotation class PublicApi
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
package ru.touchin.template.di.qualifiers
|
||||
|
||||
import javax.inject.Qualifier
|
||||
|
||||
@Qualifier
|
||||
annotation class SessionStorable
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
package ru.touchin.template.di.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import dagger.MapKey
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
|
||||
@MapKey
|
||||
annotation class ViewModelKey(val value: KClass<out ViewModel>)
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package ru.touchin.template.di.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.multibindings.IntoMap
|
||||
import ru.touchin.template.viewmodel.StartupViewModel
|
||||
|
||||
@Module
|
||||
interface ViewModelModule {
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(StartupViewModel::class)
|
||||
fun bindStartupViewModel(viewModel: StartupViewModel): ViewModel
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
package ru.touchin.template.extensions
|
||||
|
||||
import okhttp3.ResponseBody
|
||||
import java.nio.charset.Charset
|
||||
|
||||
fun ResponseBody.cloneBody(): String? = source()
|
||||
?.also { it.request(Long.MAX_VALUE) }
|
||||
?.buffer()
|
||||
?.clone()
|
||||
?.readString(Charset.forName("UTF-8"))
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
package ru.touchin.template.model
|
||||
|
||||
import com.bluelinelabs.logansquare.annotation.JsonEnum
|
||||
import com.bluelinelabs.logansquare.annotation.JsonNumberValue
|
||||
|
||||
@JsonEnum
|
||||
enum class TemplateApiError {
|
||||
|
||||
@JsonNumberValue(-1)
|
||||
INVALID_PARAMETERS,
|
||||
|
||||
@JsonNumberValue(0)
|
||||
VALID_RESPONSE
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
package ru.touchin.template.persistence
|
||||
|
||||
import androidx.room.Database
|
||||
import androidx.room.RoomDatabase
|
||||
import ru.touchin.template.persistence.entities.UserEntity
|
||||
|
||||
@Database(version = 1, entities = [UserEntity::class], exportSchema = false)
|
||||
abstract class Database : RoomDatabase()
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package ru.touchin.template.persistence.entities
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
|
||||
@Entity(tableName = "user")
|
||||
data class UserEntity(
|
||||
|
||||
@PrimaryKey
|
||||
val uid: String = "",
|
||||
|
||||
@ColumnInfo(name = "session_id")
|
||||
var sessionId: String?
|
||||
|
||||
)
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
package ru.touchin.template.viewmodel
|
||||
|
||||
import ru.touchin.lifecycle.viewmodel.RxViewModel
|
||||
import javax.inject.Inject
|
||||
|
||||
class StartupViewModel @Inject constructor : RxViewModel()
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
<vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
|
||||
android:strokeWidth="1"
|
||||
android:strokeColor="#00000000">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:endX="78.5885"
|
||||
android:endY="90.9159"
|
||||
android:startX="48.7653"
|
||||
android:startY="61.0927"
|
||||
android:type="linear">
|
||||
<item
|
||||
android:color="#44000000"
|
||||
android:offset="0.0"/>
|
||||
<item
|
||||
android:color="#00000000"
|
||||
android:offset="1.0"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillType="nonZero"
|
||||
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
|
||||
android:strokeWidth="1"
|
||||
android:strokeColor="#00000000"/>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,171 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:fillColor="#008577"
|
||||
android:pathData="M0,0h108v108h-108z"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M9,0L9,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,0L19,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,0L29,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,0L39,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,0L49,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,0L59,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,0L69,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,0L79,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M89,0L89,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M99,0L99,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,9L108,9"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,19L108,19"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,29L108,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,39L108,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,49L108,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,59L108,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,69L108,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,79L108,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,89L108,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,99L108,99"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,29L89,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,39L89,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,49L89,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,59L89,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,69L89,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,79L89,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,19L29,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,19L39,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,19L49,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,19L59,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,19L69,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,19L79,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF"/>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/fragment_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="colorPrimary">#008577</color>
|
||||
<color name="colorPrimaryDark">#00574B</color>
|
||||
<color name="colorAccent">#D81B60</color>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
<resources>
|
||||
<string name="app_name">Template</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<resources>
|
||||
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge">
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config usesCleartextTraffic="true">
|
||||
<trust-anchors>
|
||||
<certificates src="system"/>
|
||||
<certificates src="user"/>
|
||||
</trust-anchors>
|
||||
</base-config>
|
||||
</network-security-config>
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.3.31'
|
||||
ext.gradle_version = '3.4.0'
|
||||
ext.fabric_version = '1.27.1'
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
maven { url 'https://maven.fabric.io/public' }
|
||||
}
|
||||
dependencies {
|
||||
classpath "com.android.tools.build:gradle:$gradle_version"
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
classpath 'de.aaschmid:gradle-cpd-plugin:1.1'
|
||||
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.0.0-RC10"
|
||||
classpath "io.fabric.tools:gradle:$fabric_version"
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
maven { url "http://dl.bintray.com/touchin/touchin-tools" }
|
||||
maven { url 'https://jitpack.io' }
|
||||
}
|
||||
}
|
||||
|
||||
task clean(type: Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
||||
|
||||
ext {
|
||||
buildScriptsDir = "$rootProject.projectDir/RoboSwag/BuildScripts"
|
||||
versions = [
|
||||
compileSdk : 28,
|
||||
androidx : '1.0.0',
|
||||
androidxKtx: '1.0.2',
|
||||
appcompat : '1.0.2',
|
||||
material : '1.0.0',
|
||||
lifecycle : '2.0.0',
|
||||
room : '2.0.0',
|
||||
dagger : '2.17',
|
||||
retrofit : '2.4.0',
|
||||
okhttp3 : '3.14.1',
|
||||
logansquare: '1.4.3',
|
||||
rxJava : '2.2.3',
|
||||
rxAndroid : '2.1.1',
|
||||
crashlytics: '2.9.9',
|
||||
glide : '4.9.0',
|
||||
location : '16.0.0'
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# Project-wide Gradle settings.
|
||||
# IDE (e.g. Android Studio) users:
|
||||
# Gradle settings configured through the IDE *will override*
|
||||
# any settings specified in this file.
|
||||
# For more details on how to configure your build environment visit
|
||||
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
||||
# Specifies the JVM arguments used for the daemon process.
|
||||
# The setting is particularly useful for tweaking memory settings.
|
||||
org.gradle.jvmargs=-Xmx4096m
|
||||
# When configured, Gradle will run in incubating parallel mode.
|
||||
# This option should only be used with decoupled projects. More details, visit
|
||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||
org.gradle.parallel=true
|
||||
org.gradle.configureondemand=true
|
||||
|
||||
android.enableR8=true
|
||||
android.enableR8.fullMode=true
|
||||
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
#Fri Apr 19 19:06:20 MSK 2019
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
|
||||
|
|
@ -0,0 +1,172 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=$(save "$@")
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
gradle.ext.componentsRoot = "RoboSwag"
|
||||
apply from: "$gradle.ext.componentsRoot/modules.gradle"
|
||||
|
||||
include ':recyclerview-calendar'
|
||||
include ':livedata-location'
|
||||
|
||||
project(':recyclerview-calendar').projectDir = new File(gradle.ext.componentsRoot, 'recyclerview-calendar')
|
||||
project(':livedata-location').projectDir = new File(gradle.ext.componentsRoot, 'livedata-location')
|
||||
|
||||
include ':app'
|
||||