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
Show 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'
...
@@ -3,6 +3,7 @@ apply plugin: 'io.fabric'
apply
plugin:
'kotlin-android'
apply
plugin:
'kotlin-android'
apply
plugin:
'kotlin-android-extensions'
apply
plugin:
'kotlin-android-extensions'
apply
plugin:
'kotlin-kapt'
apply
plugin:
'kotlin-kapt'
apply
plugin:
'realm-android'
android
{
android
{
compileSdkVersion
versions
.
compileSdk
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
...
@@ -3,27 +3,44 @@ package chat.rocket.android.app
import
android.app.Activity
import
android.app.Activity
import
android.app.Application
import
android.app.Application
import
android.app.Service
import
android.app.Service
import
android.content.BroadcastReceiver
import
android.content.Context
import
android.content.SharedPreferences
import
android.content.SharedPreferences
import
androidx.content.edit
import
androidx.content.edit
import
chat.rocket.android.BuildConfig
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.authentication.domain.model.toToken
import
chat.rocket.android.dagger.DaggerAppComponent
import
chat.rocket.android.dagger.DaggerAppComponent
import
chat.rocket.android.helper.CrashlyticsTree
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.*
import
chat.rocket.android.server.domain.model.Account
import
chat.rocket.android.widget.emoji.EmojiRepository
import
chat.rocket.android.widget.emoji.EmojiRepository
import
chat.rocket.common.model.Token
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.Crashlytics
import
com.crashlytics.android.core.CrashlyticsCore
import
com.crashlytics.android.core.CrashlyticsCore
import
com.facebook.drawee.backends.pipeline.DraweeConfig
import
com.facebook.drawee.backends.pipeline.DraweeConfig
import
com.facebook.drawee.backends.pipeline.Fresco
import
com.facebook.drawee.backends.pipeline.Fresco
import
com.facebook.imagepipeline.core.ImagePipelineConfig
import
com.facebook.imagepipeline.core.ImagePipelineConfig
import
com.jakewharton.threetenabp.AndroidThreeTen
import
com.jakewharton.threetenabp.AndroidThreeTen
import
dagger.android.*
import
io.fabric.sdk.android.Fabric
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
kotlinx.coroutines.experimental.runBlocking
import
timber.log.Timber
import
timber.log.Timber
import
javax.inject.Inject
import
javax.inject.Inject
import
android.content.BroadcastReceiver
import
dagger.android.*
class
RocketChatApplication
:
Application
(),
HasActivityInjector
,
HasServiceInjector
,
class
RocketChatApplication
:
Application
(),
HasActivityInjector
,
HasServiceInjector
,
...
@@ -53,9 +70,14 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
...
@@ -53,9 +70,14 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
@Inject
@Inject
lateinit
var
tokenRepository
:
TokenRepository
lateinit
var
tokenRepository
:
TokenRepository
@Inject
@Inject
lateinit
var
accountRepository
:
AccountsRepository
@Inject
lateinit
var
saveCurrentServerRepository
:
SaveCurrentServerInteractor
lateinit
var
prefs
:
SharedPreferences
lateinit
var
prefs
:
SharedPreferences
@Inject
@Inject
lateinit
var
getAccountsInteractor
:
GetAccountsInteractor
lateinit
var
getAccountsInteractor
:
GetAccountsInteractor
@Inject
lateinit
var
localRepository
:
LocalRepository
override
fun
onCreate
()
{
override
fun
onCreate
()
{
super
.
onCreate
()
super
.
onCreate
()
...
@@ -63,7 +85,6 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
...
@@ -63,7 +85,6 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
DaggerAppComponent
.
builder
().
application
(
this
).
build
().
inject
(
this
)
DaggerAppComponent
.
builder
().
application
(
this
).
build
().
inject
(
this
)
// TODO - remove this on the future, temporary migration stuff for pre-release versions.
// TODO - remove this on the future, temporary migration stuff for pre-release versions.
prefs
.
edit
{
putBoolean
(
INTERNAL_TOKEN_MIGRATION_NEEDED
,
true
)
}
migrateInternalTokens
()
migrateInternalTokens
()
AndroidThreeTen
.
init
(
this
)
AndroidThreeTen
.
init
(
this
)
...
@@ -72,6 +93,117 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
...
@@ -72,6 +93,117 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
setupCrashlytics
()
setupCrashlytics
()
setupFresco
()
setupFresco
()
setupTimber
()
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
()
{
private
fun
migrateInternalTokens
()
{
...
@@ -127,4 +259,10 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
...
@@ -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"
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,
...
@@ -54,7 +54,7 @@ class TwoFAPresenter @Inject constructor(private val view: TwoFAView,
client
.
login
(
usernameOrEmail
,
password
,
twoFactorAuthenticationCode
)
client
.
login
(
usernameOrEmail
,
password
,
twoFactorAuthenticationCode
)
val
me
=
client
.
me
()
val
me
=
client
.
me
()
saveAccount
(
me
)
saveAccount
(
me
)
tokenRepository
.
save
(
server
,
token
)
tokenRepository
.
save
(
token
)
registerPushToken
()
registerPushToken
()
navigator
.
toChatList
()
navigator
.
toChatList
()
}
catch
(
exception
:
RocketChatException
)
{
}
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
...
@@ -2,18 +2,24 @@ package chat.rocket.android.infrastructure
interface
LocalRepository
{
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
{
companion
object
{
const
val
KEY_PUSH_TOKEN
=
"KEY_PUSH_TOKEN"
const
val
KEY_PUSH_TOKEN
=
"KEY_PUSH_TOKEN"
const
val
MIGRATION_FINISHED_KEY
=
"MIGRATION_FINISHED_KEY"
const
val
TOKEN_KEY
=
"token_"
const
val
TOKEN_KEY
=
"token_"
const
val
SETTINGS_KEY
=
"settings_"
const
val
SETTINGS_KEY
=
"settings_"
const
val
CURRENT_USERNAME_KEY
=
"username_"
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
...
@@ -3,18 +3,27 @@ package chat.rocket.android.infrastructure
import
android.content.SharedPreferences
import
android.content.SharedPreferences
class
SharedPrefsLocalRepository
(
private
val
preferences
:
SharedPreferences
)
:
LocalRepository
{
class
SharedPrefsLocalRepository
(
private
val
preferences
:
SharedPreferences
)
:
LocalRepository
{
override
fun
getBoolean
(
key
:
String
)
=
preferences
.
getBoolean
(
key
,
false
)
override
fun
save
(
key
:
String
,
value
:
String
?)
{
override
fun
getFloat
(
key
:
String
)
=
preferences
.
getFloat
(
key
,
-
1f
)
preferences
.
edit
().
putString
(
key
,
value
).
apply
()
}
override
fun
get
(
key
:
String
):
String
?
{
override
fun
getInt
(
key
:
String
)
=
preferences
.
getInt
(
key
,
-
1
)
return
preferences
.
getString
(
key
,
null
)
}
override
fun
clear
(
key
:
String
)
{
override
fun
getLong
(
key
:
String
)
=
preferences
.
getLong
(
key
,
-
1L
)
preferences
.
edit
().
remove
(
key
).
apply
()
}
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
)
{
override
fun
clearAllFromServer
(
server
:
String
)
{
clear
(
LocalRepository
.
KEY_PUSH_TOKEN
)
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
...
@@ -15,9 +15,7 @@ class SharedPreferencesSettingsRepository(private val localRepository: LocalRepo
}
}
override
fun
get
(
url
:
String
):
PublicSettings
{
override
fun
get
(
url
:
String
):
PublicSettings
{
val
settings
=
localRepository
.
get
(
"$SETTINGS_KEY$url"
)
!!
val
settings
=
localRepository
.
get
(
"$SETTINGS_KEY$url"
)
settings
.
let
{
return
if
(
settings
==
null
)
hashMapOf
()
else
adapter
.
fromJson
(
settings
)
?:
hashMapOf
()
return
adapter
.
fromJson
(
it
)
!!
}
}
}
}
}
\ No newline at end of file
build.gradle
View file @
c7a33414
...
@@ -15,6 +15,7 @@ buildscript {
...
@@ -15,6 +15,7 @@ buildscript {
classpath
"org.jetbrains.dokka:dokka-gradle-plugin:${versions.dokka}"
classpath
"org.jetbrains.dokka:dokka-gradle-plugin:${versions.dokka}"
classpath
'com.google.gms:google-services:3.2.0'
classpath
'com.google.gms:google-services:3.2.0'
classpath
'io.fabric.tools:gradle:1.25.1'
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
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
// 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