Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
AloqaIM-Android
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
AloqaIM-Android
Commits
c7a33414
Unverified
Commit
c7a33414
authored
Mar 29, 2018
by
Lucio Maciel
Committed by
GitHub
Mar 29, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #961 from RocketChat/feature/migration
[NEW][WIP] Migration of authentications from legacy
parents
0836f86f
261553b4
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
400 additions
and
25 deletions
+400
-25
build.gradle
app/build.gradle
+1
-0
RocketChatApplication.kt
...ain/java/chat/rocket/android/app/RocketChatApplication.kt
+141
-3
RealmMigration.kt
.../java/chat/rocket/android/app/migration/RealmMigration.kt
+59
-0
RocketChatLibraryModule.kt
...t/rocket/android/app/migration/RocketChatLibraryModule.kt
+6
-0
RocketChatServerModule.kt
...at/rocket/android/app/migration/RocketChatServerModule.kt
+7
-0
RealmBasedServerInfo.kt
...ocket/android/app/migration/model/RealmBasedServerInfo.kt
+12
-0
RealmEmail.kt
...ava/chat/rocket/android/app/migration/model/RealmEmail.kt
+12
-0
RealmPreferences.kt
...at/rocket/android/app/migration/model/RealmPreferences.kt
+40
-0
RealmPublicSetting.kt
.../rocket/android/app/migration/model/RealmPublicSetting.kt
+20
-0
RealmSession.kt
...a/chat/rocket/android/app/migration/model/RealmSession.kt
+16
-0
RealmSettings.kt
.../chat/rocket/android/app/migration/model/RealmSettings.kt
+12
-0
RealmUser.kt
...java/chat/rocket/android/app/migration/model/RealmUser.kt
+38
-0
TwoFAPresenter.kt
...d/authentication/twofactor/presentation/TwoFAPresenter.kt
+1
-1
LocalRepository.kt
...ava/chat/rocket/android/infrastructure/LocalRepository.kt
+14
-8
SharedPrefsLocalRepository.kt
...cket/android/infrastructure/SharedPrefsLocalRepository.kt
+18
-9
SharedPreferencesSettingsRepository.kt
...er/infraestructure/SharedPreferencesSettingsRepository.kt
+2
-4
build.gradle
build.gradle
+1
-0
No files found.
app/build.gradle
View file @
c7a33414
...
...
@@ -3,6 +3,7 @@ apply plugin: 'io.fabric'
apply
plugin:
'kotlin-android'
apply
plugin:
'kotlin-android-extensions'
apply
plugin:
'kotlin-kapt'
apply
plugin:
'realm-android'
android
{
compileSdkVersion
versions
.
compileSdk
...
...
app/src/main/java/chat/rocket/android/app/RocketChatApplication.kt
View file @
c7a33414
...
...
@@ -3,27 +3,44 @@ package chat.rocket.android.app
import
android.app.Activity
import
android.app.Application
import
android.app.Service
import
android.content.BroadcastReceiver
import
android.content.Context
import
android.content.SharedPreferences
import
androidx.content.edit
import
chat.rocket.android.BuildConfig
import
chat.rocket.android.app.migration.RealmMigration
import
chat.rocket.android.app.migration.RocketChatLibraryModule
import
chat.rocket.android.app.migration.RocketChatServerModule
import
chat.rocket.android.app.migration.model.RealmBasedServerInfo
import
chat.rocket.android.app.migration.model.RealmPublicSetting
import
chat.rocket.android.app.migration.model.RealmSession
import
chat.rocket.android.app.migration.model.RealmUser
import
chat.rocket.android.authentication.domain.model.toToken
import
chat.rocket.android.dagger.DaggerAppComponent
import
chat.rocket.android.helper.CrashlyticsTree
import
chat.rocket.android.helper.UrlHelper
import
chat.rocket.android.infrastructure.LocalRepository
import
chat.rocket.android.server.domain.*
import
chat.rocket.android.server.domain.model.Account
import
chat.rocket.android.widget.emoji.EmojiRepository
import
chat.rocket.common.model.Token
import
chat.rocket.core.TokenRepository
import
chat.rocket.core.model.Value
import
com.crashlytics.android.Crashlytics
import
com.crashlytics.android.core.CrashlyticsCore
import
com.facebook.drawee.backends.pipeline.DraweeConfig
import
com.facebook.drawee.backends.pipeline.Fresco
import
com.facebook.imagepipeline.core.ImagePipelineConfig
import
com.jakewharton.threetenabp.AndroidThreeTen
import
dagger.android.*
import
io.fabric.sdk.android.Fabric
import
io.realm.Realm
import
io.realm.RealmConfiguration
import
kotlinx.coroutines.experimental.CommonPool
import
kotlinx.coroutines.experimental.launch
import
kotlinx.coroutines.experimental.runBlocking
import
timber.log.Timber
import
javax.inject.Inject
import
android.content.BroadcastReceiver
import
dagger.android.*
class
RocketChatApplication
:
Application
(),
HasActivityInjector
,
HasServiceInjector
,
...
...
@@ -53,9 +70,14 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
@Inject
lateinit
var
tokenRepository
:
TokenRepository
@Inject
lateinit
var
accountRepository
:
AccountsRepository
@Inject
lateinit
var
saveCurrentServerRepository
:
SaveCurrentServerInteractor
lateinit
var
prefs
:
SharedPreferences
@Inject
lateinit
var
getAccountsInteractor
:
GetAccountsInteractor
@Inject
lateinit
var
localRepository
:
LocalRepository
override
fun
onCreate
()
{
super
.
onCreate
()
...
...
@@ -63,7 +85,6 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
DaggerAppComponent
.
builder
().
application
(
this
).
build
().
inject
(
this
)
// TODO - remove this on the future, temporary migration stuff for pre-release versions.
prefs
.
edit
{
putBoolean
(
INTERNAL_TOKEN_MIGRATION_NEEDED
,
true
)
}
migrateInternalTokens
()
AndroidThreeTen
.
init
(
this
)
...
...
@@ -72,6 +93,117 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
setupCrashlytics
()
setupFresco
()
setupTimber
()
// TODO - remove this and all realm stuff when we got to 80% in 2.0
try
{
if
(!
localRepository
.
hasMigrated
())
{
migrateFromLegacy
()
}
}
catch
(
ex
:
Exception
)
{
Timber
.
d
(
ex
,
"Error migrating old accounts"
)
}
}
private
fun
migrateFromLegacy
()
{
Realm
.
init
(
this
)
val
serveListConfiguration
=
RealmConfiguration
.
Builder
()
.
name
(
"server.list.realm"
)
.
schemaVersion
(
6
)
.
migration
(
RealmMigration
())
.
modules
(
RocketChatServerModule
())
.
build
()
val
serverRealm
=
Realm
.
getInstance
(
serveListConfiguration
)
val
serversInfoList
=
serverRealm
.
where
(
RealmBasedServerInfo
::
class
.
java
).
findAll
().
toList
()
serversInfoList
.
forEach
{
server
->
val
hostname
=
server
.
hostname
val
url
=
if
(
server
.
insecure
)
"http://$hostname"
else
"https://$hostname"
val
config
=
RealmConfiguration
.
Builder
()
.
name
(
"${server.hostname}.realm"
)
.
schemaVersion
(
6
)
.
migration
(
RealmMigration
())
.
modules
(
RocketChatLibraryModule
())
.
build
()
val
realm
=
Realm
.
getInstance
(
config
)
val
user
=
realm
.
where
(
RealmUser
::
class
.
java
)
.
isNotEmpty
(
RealmUser
.
EMAILS
).
findFirst
()
val
session
=
realm
.
where
(
RealmSession
::
class
.
java
).
findFirst
()
migratePublicSettings
(
url
,
realm
)
if
(
user
!=
null
&&
session
!=
null
)
{
val
authToken
=
session
.
token
settingsRepository
.
get
(
url
)
migrateServerInfo
(
url
,
authToken
!!
,
settingsRepository
.
get
(
url
),
user
)
}
realm
.
close
()
}
migrateCurrentServer
(
serversInfoList
)
serverRealm
.
close
()
localRepository
.
setMigrated
(
true
)
}
private
fun
migrateServerInfo
(
url
:
String
,
authToken
:
String
,
settings
:
PublicSettings
,
user
:
RealmUser
)
{
val
userId
=
user
.
_id
val
avatar
=
UrlHelper
.
getAvatarUrl
(
url
,
user
.
username
!!
)
val
icon
=
settings
.
favicon
()
?.
let
{
UrlHelper
.
getServerLogoUrl
(
url
,
it
)
}
val
logo
=
settings
.
wideTile
()
?.
let
{
UrlHelper
.
getServerLogoUrl
(
url
,
it
)
}
val
account
=
Account
(
url
,
icon
,
logo
,
user
.
username
!!
,
avatar
)
launch
(
CommonPool
)
{
tokenRepository
.
save
(
url
,
Token
(
userId
!!
,
authToken
))
accountRepository
.
save
(
account
)
}
}
private
fun
migratePublicSettings
(
url
:
String
,
realm
:
Realm
)
{
val
settings
=
realm
.
where
(
RealmPublicSetting
::
class
.
java
).
findAll
()
val
serverSettings
=
hashMapOf
<
String
,
Value
<
Any
>>()
settings
.
toList
().
forEach
{
setting
->
val
type
=
setting
.
type
!!
val
value
=
setting
.
value
!!
val
convertedSetting
=
when
(
type
)
{
"string"
->
Value
(
value
)
"language"
->
Value
(
value
)
"boolean"
->
Value
(
value
.
toBoolean
())
"int"
->
try
{
Value
(
value
.
toInt
())
}
catch
(
ex
:
NumberFormatException
)
{
Value
(
0
)
}
else
->
null
// ignore
}
if
(
convertedSetting
!=
null
)
{
val
id
=
setting
.
_id
!!
serverSettings
.
put
(
id
,
convertedSetting
)
}
}
settingsRepository
.
save
(
url
,
serverSettings
)
}
private
fun
migrateCurrentServer
(
serversList
:
List
<
RealmBasedServerInfo
>)
{
var
currentServer
=
getSharedPreferences
(
"cache"
,
Context
.
MODE_PRIVATE
)
.
getString
(
"KEY_SELECTED_SERVER_HOSTNAME"
,
null
)
currentServer
=
if
(
serversList
.
isNotEmpty
())
{
val
server
=
serversList
.
find
{
it
.
hostname
==
currentServer
}
val
hostname
=
server
!!
.
hostname
if
(
server
.
insecure
)
{
"http://$hostname"
}
else
{
"https://$hostname"
}
}
else
{
"http://$currentServer"
}
saveCurrentServerRepository
.
save
(
currentServer
)
}
private
fun
migrateInternalTokens
()
{
...
...
@@ -127,4 +259,10 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
}
}
private
fun
LocalRepository
.
setMigrated
(
migrated
:
Boolean
)
{
save
(
LocalRepository
.
MIGRATION_FINISHED_KEY
,
migrated
)
}
private
fun
LocalRepository
.
hasMigrated
()
=
getBoolean
(
LocalRepository
.
MIGRATION_FINISHED_KEY
)
private
const
val
INTERNAL_TOKEN_MIGRATION_NEEDED
=
"INTERNAL_TOKEN_MIGRATION_NEEDED"
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/RealmMigration.kt
0 → 100644
View file @
c7a33414
package
chat.rocket.android.app.migration
import
chat.rocket.android.BuildConfig
import
chat.rocket.android.app.migration.model.RealmUser
import
io.realm.DynamicRealm
import
io.realm.RealmMigration
class
RealmMigration
:
RealmMigration
{
override
fun
migrate
(
dynamicRealm
:
DynamicRealm
,
oldVersion
:
Long
,
newVersion
:
Long
)
{
var
oldVersion
=
oldVersion
val
schema
=
dynamicRealm
.
schema
if
(
oldVersion
==
0L
)
{
// NOOP
oldVersion
++
}
if
(
oldVersion
==
1L
)
{
oldVersion
++
}
if
(
oldVersion
==
2L
)
{
oldVersion
++
}
if
(
oldVersion
==
3L
)
{
oldVersion
++
}
if
(
oldVersion
==
4L
)
{
oldVersion
++
}
if
(
oldVersion
==
5L
)
{
val
userSchema
=
schema
.
get
(
"RealmUser"
)
try
{
userSchema
?.
addField
(
RealmUser
.
NAME
,
String
::
class
.
java
)
}
catch
(
e
:
IllegalArgumentException
)
{
if
(
BuildConfig
.
DEBUG
)
{
e
.
printStackTrace
()
}
// ignore; it makes here if the schema for this model was already update before without migration
}
}
}
// hack around to avoid "new different configuration cannot access the same file" error
override
fun
hashCode
():
Int
{
return
37
}
override
fun
equals
(
o
:
Any
?):
Boolean
{
return
o
is
chat
.
rocket
.
android
.
app
.
migration
.
RealmMigration
}
// end hack
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/RocketChatLibraryModule.kt
0 → 100644
View file @
c7a33414
package
chat.rocket.android.app.migration
import
io.realm.annotations.RealmModule
@RealmModule
(
library
=
true
,
allClasses
=
true
)
class
RocketChatLibraryModule
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/RocketChatServerModule.kt
0 → 100644
View file @
c7a33414
package
chat.rocket.android.app.migration
import
chat.rocket.android.app.migration.model.RealmBasedServerInfo
import
io.realm.annotations.RealmModule
@RealmModule
(
library
=
true
,
classes
=
arrayOf
(
RealmBasedServerInfo
::
class
))
class
RocketChatServerModule
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/model/RealmBasedServerInfo.kt
0 → 100644
View file @
c7a33414
package
chat.rocket.android.app.migration.model
import
io.realm.RealmObject
import
io.realm.annotations.PrimaryKey
open
class
RealmBasedServerInfo
:
RealmObject
()
{
@PrimaryKey
@JvmField
var
hostname
:
String
?
=
null
@JvmField
var
name
:
String
?
=
null
@JvmField
var
session
:
String
?
=
null
@JvmField
var
insecure
:
Boolean
=
false
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/model/RealmEmail.kt
0 → 100644
View file @
c7a33414
package
chat.rocket.android.app.migration.model
import
io.realm.RealmObject
import
io.realm.annotations.PrimaryKey
open
class
RealmEmail
:
RealmObject
()
{
@PrimaryKey
@JvmField
var
address
:
String
?
=
null
@JvmField
var
verified
:
Boolean
=
false
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/model/RealmPreferences.kt
0 → 100644
View file @
c7a33414
package
chat.rocket.android.app.migration.model
import
io.realm.RealmObject
import
io.realm.annotations.PrimaryKey
open
class
RealmPreferences
:
RealmObject
()
{
@PrimaryKey
@JvmField
var
id
:
String
?
=
null
@JvmField
var
newRoomNotification
:
String
?
=
null
@JvmField
var
newMessageNotification
:
String
?
=
null
@JvmField
var
useEmojis
:
Boolean
=
false
@JvmField
var
convertAsciiEmoji
:
Boolean
=
false
@JvmField
var
saveMobileBandwidth
:
Boolean
=
false
@JvmField
var
collapseMediaByDefault
:
Boolean
=
false
@JvmField
var
unreadRoomsMode
:
Boolean
=
false
@JvmField
var
autoImageLoad
:
Boolean
=
false
@JvmField
var
emailNotificationMode
:
String
?
=
null
@JvmField
var
unreadAlert
:
Boolean
=
false
@JvmField
var
desktopNotificationDuration
:
Int
=
0
@JvmField
var
viewMode
:
Int
=
0
@JvmField
var
hideUsernames
:
Boolean
=
false
@JvmField
var
hideAvatars
:
Boolean
=
false
@JvmField
var
hideFlexTab
:
Boolean
=
false
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/model/RealmPublicSetting.kt
0 → 100644
View file @
c7a33414
package
chat.rocket.android.app.migration.model
import
io.realm.RealmObject
import
io.realm.annotations.PrimaryKey
open
class
RealmPublicSetting
:
RealmObject
()
{
@PrimaryKey
@JvmField
var
_id
:
String
?
=
null
@JvmField
var
group
:
String
?
=
null
@JvmField
var
type
:
String
?
=
null
@JvmField
var
value
:
String
?
=
null
@JvmField
var
_updatedAt
:
Long
=
0
@JvmField
var
meta
:
String
?
=
null
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/model/RealmSession.kt
0 → 100644
View file @
c7a33414
package
chat.rocket.android.app.migration.model
import
io.realm.RealmObject
import
io.realm.annotations.PrimaryKey
open
class
RealmSession
:
RealmObject
()
{
@JvmField
@PrimaryKey
var
sessionId
:
Int
=
0
//only 0 is used!
@JvmField
var
token
:
String
?
=
null
@JvmField
var
tokenVerified
:
Boolean
=
false
@JvmField
var
error
:
String
?
=
null
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/model/RealmSettings.kt
0 → 100644
View file @
c7a33414
package
chat.rocket.android.app.migration.model
import
io.realm.RealmObject
import
io.realm.annotations.PrimaryKey
open
class
RealmSettings
:
RealmObject
()
{
@PrimaryKey
@JvmField
var
id
:
String
?
=
null
@JvmField
var
preferences
:
RealmPreferences
?
=
null
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/app/migration/model/RealmUser.kt
0 → 100644
View file @
c7a33414
package
chat.rocket.android.app.migration.model
import
io.realm.RealmList
import
io.realm.RealmObject
import
io.realm.annotations.PrimaryKey
open
class
RealmUser
:
RealmObject
()
{
companion
object
{
const
val
ID
=
"_id"
const
val
NAME
=
"name"
const
val
USERNAME
=
"username"
const
val
STATUS
=
"status"
const
val
UTC_OFFSET
=
"utcOffset"
const
val
EMAILS
=
"emails"
const
val
SETTINGS
=
"settings"
const
val
STATUS_ONLINE
=
"online"
const
val
STATUS_BUSY
=
"busy"
const
val
STATUS_AWAY
=
"away"
const
val
STATUS_OFFLINE
=
"offline"
}
@PrimaryKey
@JvmField
var
_id
:
String
?
=
null
@JvmField
var
name
:
String
?
=
null
@JvmField
var
username
:
String
?
=
null
@JvmField
var
status
:
String
?
=
null
@JvmField
var
utcOffset
:
Double
=
0
.
toDouble
()
@JvmField
var
emails
:
RealmList
<
RealmEmail
>?
=
null
@JvmField
var
settings
:
RealmSettings
?
=
null
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/authentication/twofactor/presentation/TwoFAPresenter.kt
View file @
c7a33414
...
...
@@ -54,7 +54,7 @@ class TwoFAPresenter @Inject constructor(private val view: TwoFAView,
client
.
login
(
usernameOrEmail
,
password
,
twoFactorAuthenticationCode
)
val
me
=
client
.
me
()
saveAccount
(
me
)
tokenRepository
.
save
(
server
,
token
)
tokenRepository
.
save
(
token
)
registerPushToken
()
navigator
.
toChatList
()
}
catch
(
exception
:
RocketChatException
)
{
...
...
app/src/main/java/chat/rocket/android/infrastructure/LocalRepository.kt
View file @
c7a33414
...
...
@@ -2,18 +2,24 @@ package chat.rocket.android.infrastructure
interface
LocalRepository
{
fun
save
(
key
:
String
,
value
:
String
?)
fun
save
(
key
:
String
,
value
:
Boolean
)
fun
save
(
key
:
String
,
value
:
Int
)
fun
save
(
key
:
String
,
value
:
Long
)
fun
save
(
key
:
String
,
value
:
Float
)
fun
get
(
key
:
String
):
String
?
fun
getBoolean
(
key
:
String
):
Boolean
fun
getFloat
(
key
:
String
):
Float
fun
getInt
(
key
:
String
):
Int
fun
getLong
(
key
:
String
):
Long
fun
clear
(
key
:
String
)
fun
clearAllFromServer
(
server
:
String
)
companion
object
{
const
val
KEY_PUSH_TOKEN
=
"KEY_PUSH_TOKEN"
const
val
MIGRATION_FINISHED_KEY
=
"MIGRATION_FINISHED_KEY"
const
val
TOKEN_KEY
=
"token_"
const
val
SETTINGS_KEY
=
"settings_"
const
val
CURRENT_USERNAME_KEY
=
"username_"
}
fun
save
(
key
:
String
,
value
:
String
?)
fun
get
(
key
:
String
):
String
?
fun
clear
(
key
:
String
)
fun
clearAllFromServer
(
server
:
String
)
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/infrastructure/SharedPrefsLocalRepository.kt
View file @
c7a33414
...
...
@@ -3,18 +3,27 @@ package chat.rocket.android.infrastructure
import
android.content.SharedPreferences
class
SharedPrefsLocalRepository
(
private
val
preferences
:
SharedPreferences
)
:
LocalRepository
{
override
fun
getBoolean
(
key
:
String
)
=
preferences
.
getBoolean
(
key
,
false
)
override
fun
save
(
key
:
String
,
value
:
String
?)
{
preferences
.
edit
().
putString
(
key
,
value
).
apply
()
}
override
fun
getFloat
(
key
:
String
)
=
preferences
.
getFloat
(
key
,
-
1f
)
override
fun
get
(
key
:
String
):
String
?
{
return
preferences
.
getString
(
key
,
null
)
}
override
fun
getInt
(
key
:
String
)
=
preferences
.
getInt
(
key
,
-
1
)
override
fun
clear
(
key
:
String
)
{
preferences
.
edit
().
remove
(
key
).
apply
()
}
override
fun
getLong
(
key
:
String
)
=
preferences
.
getLong
(
key
,
-
1L
)
override
fun
save
(
key
:
String
,
value
:
Int
)
=
preferences
.
edit
().
putInt
(
key
,
value
).
apply
()
override
fun
save
(
key
:
String
,
value
:
Float
)
=
preferences
.
edit
().
putFloat
(
key
,
value
).
apply
()
override
fun
save
(
key
:
String
,
value
:
Long
)
=
preferences
.
edit
().
putLong
(
key
,
value
).
apply
()
override
fun
save
(
key
:
String
,
value
:
Boolean
)
=
preferences
.
edit
().
putBoolean
(
key
,
value
).
apply
()
override
fun
save
(
key
:
String
,
value
:
String
?)
=
preferences
.
edit
().
putString
(
key
,
value
).
apply
()
override
fun
get
(
key
:
String
):
String
?
=
preferences
.
getString
(
key
,
null
)
override
fun
clear
(
key
:
String
)
=
preferences
.
edit
().
remove
(
key
).
apply
()
override
fun
clearAllFromServer
(
server
:
String
)
{
clear
(
LocalRepository
.
KEY_PUSH_TOKEN
)
...
...
app/src/main/java/chat/rocket/android/server/infraestructure/SharedPreferencesSettingsRepository.kt
View file @
c7a33414
...
...
@@ -15,9 +15,7 @@ class SharedPreferencesSettingsRepository(private val localRepository: LocalRepo
}
override
fun
get
(
url
:
String
):
PublicSettings
{
val
settings
=
localRepository
.
get
(
"$SETTINGS_KEY$url"
)
!!
settings
.
let
{
return
adapter
.
fromJson
(
it
)
!!
}
val
settings
=
localRepository
.
get
(
"$SETTINGS_KEY$url"
)
return
if
(
settings
==
null
)
hashMapOf
()
else
adapter
.
fromJson
(
settings
)
?:
hashMapOf
()
}
}
\ No newline at end of file
build.gradle
View file @
c7a33414
...
...
@@ -15,6 +15,7 @@ buildscript {
classpath
"org.jetbrains.dokka:dokka-gradle-plugin:${versions.dokka}"
classpath
'com.google.gms:google-services:3.2.0'
classpath
'io.fabric.tools:gradle:1.25.1'
classpath
"io.realm:realm-gradle-plugin:5.0.0"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment