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
6007fd56
Commit
6007fd56
authored
Nov 05, 2016
by
Yusuke Iwaki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
reformat with SquareAndroid plugin for Android Studio (google-java-formatter didn't work properly!)
parent
352f0c01
Changes
60
Show whitespace changes
Inline
Side-by-side
Showing
60 changed files
with
1552 additions
and
1601 deletions
+1552
-1601
build.gradle
app/build.gradle
+41
-41
lint.xml
app/lint.xml
+3
-3
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+24
-21
LaunchUtil.java
app/src/main/java/chat/rocket/android/LaunchUtil.java
+9
-10
RocketChatApplication.java
.../main/java/chat/rocket/android/RocketChatApplication.java
+12
-17
AbstractAuthedActivity.java
.../chat/rocket/android/activity/AbstractAuthedActivity.java
+41
-51
AbstractFragmentActivity.java
...hat/rocket/android/activity/AbstractFragmentActivity.java
+23
-23
MainActivity.java
.../main/java/chat/rocket/android/activity/MainActivity.java
+10
-12
ServerConfigActivity.java
...va/chat/rocket/android/activity/ServerConfigActivity.java
+120
-130
AbstractFragment.java
...n/java/chat/rocket/android/fragment/AbstractFragment.java
+18
-18
AbstractServerConfigFragment.java
.../fragment/server_config/AbstractServerConfigFragment.java
+13
-15
ConnectingToHostFragment.java
...roid/fragment/server_config/ConnectingToHostFragment.java
+5
-7
InputHostnameFragment.java
...android/fragment/server_config/InputHostnameFragment.java
+61
-73
LogcatIfError.java
...c/main/java/chat/rocket/android/helper/LogcatIfError.java
+5
-6
OkHttpHelper.java
...rc/main/java/chat/rocket/android/helper/OkHttpHelper.java
+11
-15
OnBackPressListener.java
.../java/chat/rocket/android/helper/OnBackPressListener.java
+6
-6
TextUtils.java
app/src/main/java/chat/rocket/android/helper/TextUtils.java
+19
-16
MeteorLoginServiceConfiguration.java
...rocket/android/model/MeteorLoginServiceConfiguration.java
+7
-8
ServerConfig.java
...src/main/java/chat/rocket/android/model/ServerConfig.java
+87
-95
Registerable.java
...c/main/java/chat/rocket/android/service/Registerable.java
+12
-12
RocketChatService.java
...n/java/chat/rocket/android/service/RocketChatService.java
+75
-83
RocketChatWebSocketThread.java
...hat/rocket/android/service/RocketChatWebSocketThread.java
+164
-172
AbstractDDPDocEventSubscriber.java
...service/ddp_subscriber/AbstractDDPDocEventSubscriber.java
+123
-125
LoginServiceConfigurationSubscriber.java
...e/ddp_subscriber/LoginServiceConfigurationSubscriber.java
+12
-16
AbstractModelObserver.java
...ocket/android/service/observer/AbstractModelObserver.java
+14
-18
AbstractCustomFontTextView.java
.../chat/rocket/android/view/AbstractCustomFontTextView.java
+27
-25
FontAwesomeTextView.java
...in/java/chat/rocket/android/view/FontAwesomeTextView.java
+12
-13
FontelloTextView.java
.../main/java/chat/rocket/android/view/FontelloTextView.java
+12
-13
TypefaceHelper.java
...rc/main/java/chat/rocket/android/view/TypefaceHelper.java
+19
-22
WaitingView.java
app/src/main/java/chat/rocket/android/view/WaitingView.java
+92
-96
RocketChatWebSocketAPI.java
...n/java/chat/rocket/android/ws/RocketChatWebSocketAPI.java
+50
-54
ic_arrow_forward_white_24dp.xml
app/src/main/res/drawable/ic_arrow_forward_white_24dp.xml
+7
-7
selector_text_color_link.xml
app/src/main/res/drawable/selector_text_color_link.xml
+2
-2
userstatus_away.xml
app/src/main/res/drawable/userstatus_away.xml
+6
-3
userstatus_busy.xml
app/src/main/res/drawable/userstatus_busy.xml
+6
-3
userstatus_offline.xml
app/src/main/res/drawable/userstatus_offline.xml
+6
-3
userstatus_online.xml
app/src/main/res/drawable/userstatus_online.xml
+6
-3
white_circle.xml
app/src/main/res/drawable/white_circle.xml
+1
-1
activity_main.xml
app/src/main/res/layout-w720dp/activity_main.xml
+28
-24
activity_main.xml
app/src/main/res/layout/activity_main.xml
+29
-23
avatar_container_large.xml
app/src/main/res/layout/avatar_container_large.xml
+25
-19
avatar_container_normal.xml
app/src/main/res/layout/avatar_container_normal.xml
+25
-19
fragment_input_hostname.xml
app/src/main/res/layout/fragment_input_hostname.xml
+48
-39
fragment_wait_for_connection.xml
app/src/main/res/layout/fragment_wait_for_connection.xml
+7
-5
sidebar.xml
app/src/main/res/layout/sidebar.xml
+51
-44
simple_screen.xml
app/src/main/res/layout/simple_screen.xml
+2
-1
colors.xml
app/src/main/res/values/colors.xml
+9
-9
dimens.xml
app/src/main/res/values/dimens.xml
+4
-4
fa_strings.xml
app/src/main/res/values/fa_strings.xml
+1
-1
margin_dimens.xml
app/src/main/res/values/margin_dimens.xml
+3
-3
strings.xml
app/src/main/res/values/strings.xml
+1
-1
styles.xml
app/src/main/res/values/styles.xml
+41
-41
user_status_colors.xml
app/src/main/res/values/user_status_colors.xml
+8
-8
waiting_view_attrs.xml
app/src/main/res/values/waiting_view_attrs.xml
+5
-5
build.gradle
build.gradle
+19
-19
checkstyle-suppressions.xml
config/quality/checkstyle/checkstyle-suppressions.xml
+0
-8
android-exclude-filter.xml
config/quality/findbugs/android-exclude-filter.xml
+13
-13
pmd-ruleset.xml
config/quality/pmd/pmd-ruleset.xml
+19
-19
quality.gradle
config/quality/quality.gradle
+53
-54
gradle.properties
gradle.properties
+0
-4
No files found.
app/build.gradle
View file @
6007fd56
app/lint.xml
View file @
6007fd56
<lint>
<lint>
<issue
id=
"InvalidPackage"
>
<issue
id=
"InvalidPackage"
>
<ignore
regexp=
"okio.*jar"
/>
<ignore
regexp=
"okio.*jar"
/>
</issue>
</issue>
</lint>
</lint>
\ No newline at end of file
app/src/main/AndroidManifest.xml
View file @
6007fd56
...
@@ -5,23 +5,26 @@
...
@@ -5,23 +5,26 @@
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<application
<application
android:name=
".RocketChatApplication"
android:allowBackup=
"true"
android:allowBackup=
"true"
android:icon=
"@mipmap/ic_launcher"
android:icon=
"@mipmap/ic_launcher"
android:label=
"@string/app_name"
android:label=
"@string/app_name"
android:supportsRtl=
"true"
android:supportsRtl=
"true"
android:theme=
"@style/AppTheme"
android:theme=
"@style/AppTheme"
>
android:name=
".RocketChatApplication"
>
<activity
android:name=
".activity.MainActivity"
<activity
android:name=
".activity.MainActivity"
android:windowSoftInputMode=
"adjustResize"
>
android:windowSoftInputMode=
"adjustResize"
>
<intent-filter>
<intent-filter>
<action
android:name=
"android.intent.action.MAIN"
/>
<action
android:name=
"android.intent.action.MAIN"
/>
<category
android:name=
"android.intent.category.DEFAULT"
/>
<category
android:name=
"android.intent.category.DEFAULT"
/>
<category
android:name=
"android.intent.category.LAUNCHER"
/>
<category
android:name=
"android.intent.category.LAUNCHER"
/>
</intent-filter>
</intent-filter>
</activity>
</activity>
<activity
android:name=
".activity.ServerConfigActivity"
<activity
android:name=
".activity.ServerConfigActivity"
android:windowSoftInputMode=
"adjustResize"
/>
android:windowSoftInputMode=
"adjustResize"
/>
<service
android:name=
".service.RocketChatService"
/>
<service
android:name=
".service.RocketChatService"
/>
...
...
app/src/main/java/chat/rocket/android/LaunchUtil.java
View file @
6007fd56
...
@@ -2,7 +2,6 @@ package chat.rocket.android;
...
@@ -2,7 +2,6 @@ package chat.rocket.android;
import
android.content.Context
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.Intent
;
import
chat.rocket.android.activity.ServerConfigActivity
;
import
chat.rocket.android.activity.ServerConfigActivity
;
/**
/**
...
...
app/src/main/java/chat/rocket/android/RocketChatApplication.java
View file @
6007fd56
package
chat
.
rocket
.
android
;
package
chat
.
rocket
.
android
;
import
android.app.Application
;
import
android.app.Application
;
import
com.facebook.stetho.Stetho
;
import
com.facebook.stetho.Stetho
;
import
com.uphyca.stetho_realm.RealmInspectorModulesProvider
;
import
com.uphyca.stetho_realm.RealmInspectorModulesProvider
;
import
io.realm.Realm
;
import
io.realm.Realm
;
import
io.realm.RealmConfiguration
;
import
io.realm.RealmConfiguration
;
import
timber.log.Timber
;
import
timber.log.Timber
;
...
@@ -13,19 +11,16 @@ import timber.log.Timber;
...
@@ -13,19 +11,16 @@ import timber.log.Timber;
* Customized Application-class for Rocket.Chat
* Customized Application-class for Rocket.Chat
*/
*/
public
class
RocketChatApplication
extends
Application
{
public
class
RocketChatApplication
extends
Application
{
@Override
@Override
public
void
onCreate
()
{
public
void
onCreate
()
{
super
.
onCreate
();
super
.
onCreate
();
Timber
.
plant
(
new
Timber
.
DebugTree
());
Timber
.
plant
(
new
Timber
.
DebugTree
());
Realm
.
init
(
this
);
Realm
.
init
(
this
);
Realm
.
setDefaultConfiguration
(
new
RealmConfiguration
.
Builder
()
Realm
.
setDefaultConfiguration
(
.
deleteRealmIfMigrationNeeded
()
new
RealmConfiguration
.
Builder
().
deleteRealmIfMigrationNeeded
().
build
());
.
build
());
Stetho
.
initialize
(
Stetho
.
initialize
(
Stetho
.
newInitializerBuilder
(
this
)
Stetho
.
newInitializerBuilder
(
this
)
.
enableDumpapp
(
Stetho
.
defaultDumperPluginsProvider
(
this
))
.
enableDumpapp
(
Stetho
.
defaultDumperPluginsProvider
(
this
))
.
enableWebKitInspector
(
RealmInspectorModulesProvider
.
builder
(
this
).
build
())
.
enableWebKitInspector
(
RealmInspectorModulesProvider
.
builder
(
this
).
build
())
.
build
());
.
build
());
...
...
app/src/main/java/chat/rocket/android/activity/AbstractAuthedActivity.java
View file @
6007fd56
package
chat
.
rocket
.
android
.
activity
;
package
chat
.
rocket
.
android
.
activity
;
import
android.support.v7.app.AppCompatActivity
;
import
android.support.v7.app.AppCompatActivity
;
import
java.util.List
;
import
java.util.UUID
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.model.ServerConfig
;
import
chat.rocket.android.model.ServerConfig
;
import
chat.rocket.android.service.RocketChatService
;
import
chat.rocket.android.service.RocketChatService
;
import
io.realm.Realm
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
io.realm.RealmResults
;
import
java.util.List
;
import
java.util.UUID
;
import
jp.co.crowdworks.realm_java_helpers.RealmListObserver
;
import
jp.co.crowdworks.realm_java_helpers.RealmListObserver
;
import
jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts
;
import
jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts
;
abstract
class
AbstractAuthedActivity
extends
AppCompatActivity
{
abstract
class
AbstractAuthedActivity
extends
AppCompatActivity
{
private
RealmListObserver
<
ServerConfig
>
serverConfigEmptinessObserver
=
private
RealmListObserver
<
ServerConfig
>
mInsertEmptyRecordIfNoConfigurationExists
=
new
RealmListObserver
<
ServerConfig
>()
{
new
RealmListObserver
<
ServerConfig
>()
{
@Override
@Override
protected
RealmResults
<
ServerConfig
>
queryItems
(
Realm
realm
)
{
protected
RealmResults
<
ServerConfig
>
queryItems
(
Realm
realm
)
{
return
realm
.
where
(
ServerConfig
.
class
).
findAll
();
return
realm
.
where
(
ServerConfig
.
class
).
findAll
();
}
}
@Override
@Override
protected
void
onCollectionChanged
(
List
<
ServerConfig
>
list
)
{
protected
void
onCollectionChanged
(
List
<
ServerConfig
>
list
)
{
if
(
list
.
isEmpty
())
{
if
(
list
.
isEmpty
())
{
final
String
newId
=
UUID
.
randomUUID
().
toString
();
final
String
newId
=
UUID
.
randomUUID
().
toString
();
RealmHelperBolts
RealmHelperBolts
.
executeTransaction
(
.
executeTransaction
(
realm
->
realm
->
realm
.
createObject
(
ServerConfig
.
class
,
newId
))
realm
.
createObject
(
ServerConfig
.
class
,
newId
))
.
continueWith
(
new
LogcatIfError
());
.
continueWith
(
new
LogcatIfError
());
}
}
}
}
};
};
private
RealmListObserver
<
ServerConfig
>
mShowConfigActivityIfNeeded
=
private
RealmListObserver
<
ServerConfig
>
loginRequiredServerConfigObserver
=
new
RealmListObserver
<
ServerConfig
>()
{
new
RealmListObserver
<
ServerConfig
>()
{
@Override
@Override
protected
RealmResults
<
ServerConfig
>
queryItems
(
Realm
realm
)
{
protected
RealmResults
<
ServerConfig
>
queryItems
(
Realm
realm
)
{
return
ServerConfig
.
queryLoginRequiredConnections
(
realm
).
findAll
();
return
ServerConfig
.
queryLoginRequiredConnections
(
realm
).
findAll
();
}
}
@Override
@Override
protected
void
onCollectionChanged
(
List
<
ServerConfig
>
list
)
{
protected
void
onCollectionChanged
(
List
<
ServerConfig
>
list
)
{
ServerConfigActivity
.
launchFor
(
AbstractAuthedActivity
.
this
,
list
);
ServerConfigActivity
.
launchFor
(
AbstractAuthedActivity
.
this
,
list
);
}
}
};
};
@Override
@Override
protected
void
onResume
()
{
protected
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
RocketChatService
.
keepalive
(
this
);
RocketChatService
.
keepalive
(
this
);
mInsertEmptyRecordIfNoConfigurationExists
.
sub
();
serverConfigEmptinessObserver
.
sub
();
mShowConfigActivityIfNeeded
.
sub
();
loginRequiredServerConfigObserver
.
sub
();
}
}
@Override
@Override
protected
void
onPause
()
{
protected
void
onPause
()
{
loginRequiredServerConfigObserver
.
unsub
();
mShowConfigActivityIfNeeded
.
unsub
();
serverConfigEmptinessObserver
.
unsub
();
mInsertEmptyRecordIfNoConfigurationExists
.
unsub
();
super
.
onPause
();
super
.
onPause
();
}
}
}
}
app/src/main/java/chat/rocket/android/activity/AbstractFragmentActivity.java
View file @
6007fd56
...
@@ -3,22 +3,22 @@ package chat.rocket.android.activity;
...
@@ -3,22 +3,22 @@ package chat.rocket.android.activity;
import
android.support.annotation.IdRes
;
import
android.support.annotation.IdRes
;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.Fragment
;
import
android.support.v7.app.AppCompatActivity
;
import
android.support.v7.app.AppCompatActivity
;
import
chat.rocket.android.helper.OnBackPressListener
;
import
chat.rocket.android.helper.OnBackPressListener
;
abstract
class
AbstractFragmentActivity
extends
AppCompatActivity
{
abstract
class
AbstractFragmentActivity
extends
AppCompatActivity
{
protected
abstract
@IdRes
int
getLayoutContainerForFragment
();
protected
abstract
@IdRes
int
getLayoutContainerForFragment
();
@Override
@Override
public
void
onBackPressed
()
{
public
void
onBackPressed
()
{
Fragment
fragment
=
Fragment
fragment
=
getSupportFragmentManager
().
findFragmentById
(
getLayoutContainerForFragment
());
getSupportFragmentManager
().
findFragmentById
(
getLayoutContainerForFragment
());
if
(
fragment
instanceof
OnBackPressListener
if
(
fragment
instanceof
OnBackPressListener
&&
((
OnBackPressListener
)
fragment
).
onBackPressed
())
{
&&
((
OnBackPressListener
)
fragment
).
onBackPressed
())
{
//consumed. do nothing.
//consumed. do nothing.
}
else
super
.
onBackPressed
();
}
else
{
super
.
onBackPressed
();
}
}
}
protected
void
showFragment
(
Fragment
fragment
)
{
protected
void
showFragment
(
Fragment
fragment
)
{
...
...
app/src/main/java/chat/rocket/android/activity/MainActivity.java
View file @
6007fd56
...
@@ -2,7 +2,6 @@ package chat.rocket.android.activity;
...
@@ -2,7 +2,6 @@ package chat.rocket.android.activity;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.model.ServerConfig
;
import
chat.rocket.android.model.ServerConfig
;
...
@@ -12,14 +11,13 @@ import jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts;
...
@@ -12,14 +11,13 @@ import jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts;
* Entry-point for Rocket.Chat.Android application.
* Entry-point for Rocket.Chat.Android application.
*/
*/
public
class
MainActivity
extends
AbstractAuthedActivity
{
public
class
MainActivity
extends
AbstractAuthedActivity
{
@Override
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_main
);
setContentView
(
R
.
layout
.
activity_main
);
if
(
savedInstanceState
==
null
)
{
if
(
savedInstanceState
==
null
)
{
RealmHelperBolts
.
executeTransaction
(
realm
->
{
RealmHelperBolts
.
executeTransaction
(
realm
->
{
for
(
ServerConfig
config
:
ServerConfig
.
queryActiveConnections
(
realm
).
findAll
())
{
for
(
ServerConfig
config
:
ServerConfig
.
queryActiveConnections
(
realm
).
findAll
())
{
config
.
setTokenVerified
(
false
);
config
.
setTokenVerified
(
false
);
}
}
return
null
;
return
null
;
...
...
app/src/main/java/chat/rocket/android/activity/ServerConfigActivity.java
View file @
6007fd56
...
@@ -5,9 +5,6 @@ import android.content.Intent;
...
@@ -5,9 +5,6 @@ import android.content.Intent;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.Fragment
;
import
java.util.List
;
import
chat.rocket.android.LaunchUtil
;
import
chat.rocket.android.LaunchUtil
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.fragment.server_config.ConnectingToHostFragment
;
import
chat.rocket.android.fragment.server_config.ConnectingToHostFragment
;
...
@@ -19,6 +16,7 @@ import chat.rocket.android.service.RocketChatService;
...
@@ -19,6 +16,7 @@ import chat.rocket.android.service.RocketChatService;
import
io.realm.Realm
;
import
io.realm.Realm
;
import
io.realm.RealmList
;
import
io.realm.RealmList
;
import
io.realm.RealmQuery
;
import
io.realm.RealmQuery
;
import
java.util.List
;
import
jp.co.crowdworks.realm_java_helpers.RealmObjectObserver
;
import
jp.co.crowdworks.realm_java_helpers.RealmObjectObserver
;
/**
/**
...
@@ -26,21 +24,14 @@ import jp.co.crowdworks.realm_java_helpers.RealmObjectObserver;
...
@@ -26,21 +24,14 @@ import jp.co.crowdworks.realm_java_helpers.RealmObjectObserver;
*/
*/
public
class
ServerConfigActivity
extends
AbstractFragmentActivity
{
public
class
ServerConfigActivity
extends
AbstractFragmentActivity
{
@Override
protected
int
getLayoutContainerForFragment
()
{
return
R
.
id
.
content
;
}
private
String
mServerConfigId
;
private
String
mServerConfigId
;
private
RealmObjectObserver
<
ServerConfig
>
mServerConfigObserver
=
private
RealmObjectObserver
<
ServerConfig
>
mServerConfigObserver
=
new
RealmObjectObserver
<
ServerConfig
>()
{
new
RealmObjectObserver
<
ServerConfig
>()
{
@Override
@Override
protected
RealmQuery
<
ServerConfig
>
query
(
Realm
realm
)
{
protected
RealmQuery
<
ServerConfig
>
query
(
Realm
realm
)
{
return
realm
.
where
(
ServerConfig
.
class
).
equalTo
(
"id"
,
mServerConfigId
);
return
realm
.
where
(
ServerConfig
.
class
).
equalTo
(
"id"
,
mServerConfigId
);
}
}
@Override
@Override
protected
void
onChange
(
ServerConfig
config
)
{
protected
void
onChange
(
ServerConfig
config
)
{
onRenderServerConfig
(
config
);
onRenderServerConfig
(
config
);
}
}
};
};
...
@@ -49,7 +40,7 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
...
@@ -49,7 +40,7 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
* Start the ServerConfigActivity with considering the priority of ServerConfig in the list.
* Start the ServerConfigActivity with considering the priority of ServerConfig in the list.
*/
*/
public
static
boolean
launchFor
(
Context
context
,
List
<
ServerConfig
>
configList
)
{
public
static
boolean
launchFor
(
Context
context
,
List
<
ServerConfig
>
configList
)
{
for
(
ServerConfig
config
:
configList
)
{
for
(
ServerConfig
config
:
configList
)
{
if
(
TextUtils
.
isEmpty
(
config
.
getHostname
()))
{
if
(
TextUtils
.
isEmpty
(
config
.
getHostname
()))
{
return
launchFor
(
context
,
config
);
return
launchFor
(
context
,
config
);
}
else
if
(!
TextUtils
.
isEmpty
(
config
.
getConnectionError
()))
{
}
else
if
(!
TextUtils
.
isEmpty
(
config
.
getConnectionError
()))
{
...
@@ -57,25 +48,25 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
...
@@ -57,25 +48,25 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
}
}
}
}
for
(
ServerConfig
config
:
configList
)
{
for
(
ServerConfig
config
:
configList
)
{
if
(
config
.
getAuthProviders
().
isEmpty
())
{
if
(
config
.
getAuthProviders
().
isEmpty
())
{
return
launchFor
(
context
,
config
);
return
launchFor
(
context
,
config
);
}
}
}
}
for
(
ServerConfig
config
:
configList
)
{
for
(
ServerConfig
config
:
configList
)
{
if
(
TextUtils
.
isEmpty
(
config
.
getSelectedProviderName
()))
{
if
(
TextUtils
.
isEmpty
(
config
.
getSelectedProviderName
()))
{
return
launchFor
(
context
,
config
);
return
launchFor
(
context
,
config
);
}
}
}
}
for
(
ServerConfig
config
:
configList
)
{
for
(
ServerConfig
config
:
configList
)
{
if
(
TextUtils
.
isEmpty
(
config
.
getToken
()))
{
if
(
TextUtils
.
isEmpty
(
config
.
getToken
()))
{
return
launchFor
(
context
,
config
);
return
launchFor
(
context
,
config
);
}
}
}
}
for
(
ServerConfig
config
:
configList
)
{
for
(
ServerConfig
config
:
configList
)
{
if
(!
config
.
isTokenVerified
())
{
if
(!
config
.
isTokenVerified
())
{
return
launchFor
(
context
,
config
);
return
launchFor
(
context
,
config
);
}
}
...
@@ -89,9 +80,11 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
...
@@ -89,9 +80,11 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
return
true
;
return
true
;
}
}
@Override
protected
int
getLayoutContainerForFragment
()
{
return
R
.
id
.
content
;
}
@Override
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
Intent
intent
=
getIntent
();
Intent
intent
=
getIntent
();
...
@@ -109,15 +102,13 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
...
@@ -109,15 +102,13 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
setContentView
(
R
.
layout
.
simple_screen
);
setContentView
(
R
.
layout
.
simple_screen
);
}
}
@Override
@Override
protected
void
onResume
()
{
protected
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
RocketChatService
.
keepalive
(
this
);
RocketChatService
.
keepalive
(
this
);
mServerConfigObserver
.
sub
();
mServerConfigObserver
.
sub
();
}
}
@Override
@Override
protected
void
onPause
()
{
protected
void
onPause
()
{
mServerConfigObserver
.
unsub
();
mServerConfigObserver
.
unsub
();
super
.
onPause
();
super
.
onPause
();
}
}
...
@@ -160,27 +151,26 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
...
@@ -160,27 +151,26 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
showFragment
(
new
InputHostnameFragment
());
showFragment
(
new
InputHostnameFragment
());
}
}
@Override
@Override
protected
void
showFragment
(
Fragment
fragment
)
{
protected
void
showFragment
(
Fragment
fragment
)
{
injectIdArgTo
(
fragment
);
injectIdArgTo
(
fragment
);
super
.
showFragment
(
fragment
);
super
.
showFragment
(
fragment
);
}
}
@Override
@Override
protected
void
showFragmentWithBackStack
(
Fragment
fragment
)
{
protected
void
showFragmentWithBackStack
(
Fragment
fragment
)
{
injectIdArgTo
(
fragment
);
injectIdArgTo
(
fragment
);
super
.
showFragmentWithBackStack
(
fragment
);
super
.
showFragmentWithBackStack
(
fragment
);
}
}
private
void
injectIdArgTo
(
Fragment
fragment
)
{
private
void
injectIdArgTo
(
Fragment
fragment
)
{
Bundle
args
=
fragment
.
getArguments
();
Bundle
args
=
fragment
.
getArguments
();
if
(
args
==
null
)
args
=
new
Bundle
();
if
(
args
==
null
)
{
args
=
new
Bundle
();
}
args
.
putString
(
"id"
,
mServerConfigId
);
args
.
putString
(
"id"
,
mServerConfigId
);
fragment
.
setArguments
(
args
);
fragment
.
setArguments
(
args
);
}
}
@Override
@Override
public
void
onBackPressed
()
{
public
void
onBackPressed
()
{
if
(
ServerConfig
.
hasActiveConnection
())
{
if
(
ServerConfig
.
hasActiveConnection
())
{
super
.
onBackPressed
();
super
.
onBackPressed
();
}
else
{
}
else
{
...
...
app/src/main/java/chat/rocket/android/fragment/AbstractFragment.java
View file @
6007fd56
...
@@ -13,13 +13,13 @@ import android.view.ViewGroup;
...
@@ -13,13 +13,13 @@ import android.view.ViewGroup;
*/
*/
public
abstract
class
AbstractFragment
extends
Fragment
{
public
abstract
class
AbstractFragment
extends
Fragment
{
protected
View
mRootView
;
protected
View
mRootView
;
protected
abstract
@LayoutRes
int
getLayout
();
protected
abstract
@LayoutRes
int
getLayout
();
protected
abstract
void
onSetupView
();
protected
abstract
void
onSetupView
();
@Nullable
@Nullable
@Override
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
public
View
onCreateView
(
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
@Nullable
Bundle
savedInstanceState
)
{
mRootView
=
inflater
.
inflate
(
getLayout
(),
container
,
false
);
mRootView
=
inflater
.
inflate
(
getLayout
(),
container
,
false
);
onSetupView
();
onSetupView
();
...
...
app/src/main/java/chat/rocket/android/fragment/server_config/AbstractServerConfigFragment.java
View file @
6007fd56
...
@@ -2,15 +2,13 @@ package chat.rocket.android.fragment.server_config;
...
@@ -2,15 +2,13 @@ package chat.rocket.android.fragment.server_config;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
chat.rocket.android.fragment.AbstractFragment
;
import
chat.rocket.android.fragment.AbstractFragment
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
abstract
class
AbstractServerConfigFragment
extends
AbstractFragment
{
abstract
class
AbstractServerConfigFragment
extends
AbstractFragment
{
protected
String
mServerConfigId
;
protected
String
mServerConfigId
;
@Override
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
Bundle
args
=
getArguments
();
Bundle
args
=
getArguments
();
...
...
app/src/main/java/chat/rocket/android/fragment/server_config/ConnectingToHostFragment.java
View file @
6007fd56
...
@@ -6,13 +6,11 @@ import chat.rocket.android.R;
...
@@ -6,13 +6,11 @@ import chat.rocket.android.R;
* Just showing "connecting..." screen.
* Just showing "connecting..." screen.
*/
*/
public
class
ConnectingToHostFragment
extends
AbstractServerConfigFragment
{
public
class
ConnectingToHostFragment
extends
AbstractServerConfigFragment
{
@Override
@Override
protected
int
getLayout
()
{
protected
int
getLayout
()
{
return
R
.
layout
.
fragment_wait_for_connection
;
return
R
.
layout
.
fragment_wait_for_connection
;
}
}
@Override
@Override
protected
void
onSetupView
()
{
protected
void
onSetupView
()
{
}
}
}
}
app/src/main/java/chat/rocket/android/fragment/server_config/InputHostnameFragment.java
View file @
6007fd56
...
@@ -4,9 +4,6 @@ import android.os.Handler;
...
@@ -4,9 +4,6 @@ import android.os.Handler;
import
android.os.Message
;
import
android.os.Message
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
android.widget.Toast
;
import
android.widget.Toast
;
import
org.json.JSONObject
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
...
@@ -15,32 +12,35 @@ import io.realm.Realm;
...
@@ -15,32 +12,35 @@ import io.realm.Realm;
import
io.realm.RealmQuery
;
import
io.realm.RealmQuery
;
import
jp.co.crowdworks.realm_java_helpers.RealmObjectObserver
;
import
jp.co.crowdworks.realm_java_helpers.RealmObjectObserver
;
import
jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts
;
import
jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts
;
import
org.json.JSONObject
;
/**
/**
* Input server host.
* Input server host.
*/
*/
public
class
InputHostnameFragment
extends
AbstractServerConfigFragment
{
public
class
InputHostnameFragment
extends
AbstractServerConfigFragment
{
public
InputHostnameFragment
(){}
private
Handler
mShowError
=
new
Handler
()
{
@Override
public
void
handleMessage
(
Message
msg
)
{
@Override
Toast
.
makeText
(
mRootView
.
getContext
(),
(
String
)
msg
.
obj
,
Toast
.
LENGTH_SHORT
).
show
();
protected
int
getLayout
()
{
return
R
.
layout
.
fragment_input_hostname
;
}
}
};
RealmObjectObserver
<
ServerConfig
>
mObserver
=
new
RealmObjectObserver
<
ServerConfig
>()
{
RealmObjectObserver
<
ServerConfig
>
mObserver
=
new
RealmObjectObserver
<
ServerConfig
>()
{
@Override
@Override
protected
RealmQuery
<
ServerConfig
>
query
(
Realm
realm
)
{
protected
RealmQuery
<
ServerConfig
>
query
(
Realm
realm
)
{
return
realm
.
where
(
ServerConfig
.
class
).
equalTo
(
"id"
,
mServerConfigId
);
return
realm
.
where
(
ServerConfig
.
class
).
equalTo
(
"id"
,
mServerConfigId
);
}
}
@Override
@Override
protected
void
onChange
(
ServerConfig
config
)
{
protected
void
onChange
(
ServerConfig
config
)
{
onRenderServerConfig
(
config
);
onRenderServerConfig
(
config
);
}
}
};
};
@Override
public
InputHostnameFragment
()
{
protected
void
onSetupView
()
{
}
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
fragment_input_hostname
;
}
@Override
protected
void
onSetupView
()
{
mRootView
.
findViewById
(
R
.
id
.
btn_connect
).
setOnClickListener
(
view
->
handleConnect
());
mRootView
.
findViewById
(
R
.
id
.
btn_connect
).
setOnClickListener
(
view
->
handleConnect
());
mObserver
.
sub
();
mObserver
.
sub
();
...
@@ -49,38 +49,26 @@ public class InputHostnameFragment extends AbstractServerConfigFragment {
...
@@ -49,38 +49,26 @@ public class InputHostnameFragment extends AbstractServerConfigFragment {
private
void
handleConnect
()
{
private
void
handleConnect
()
{
final
TextView
editor
=
(
TextView
)
mRootView
.
findViewById
(
R
.
id
.
editor_hostname
);
final
TextView
editor
=
(
TextView
)
mRootView
.
findViewById
(
R
.
id
.
editor_hostname
);
final
String
hostname
=
TextUtils
.
or
(
final
String
hostname
=
TextUtils
.
or
(
editor
.
getText
(),
editor
.
getHint
()),
TextUtils
.
or
(
TextUtils
.
or
(
editor
.
getText
(),
editor
.
getHint
()),
""
).
toString
();
""
).
toString
();
RealmHelperBolts
RealmHelperBolts
.
executeTransaction
(
.
executeTransaction
(
realm
->
realm
->
realm
.
createOrUpdateObjectFromJson
(
ServerConfig
.
class
,
realm
.
createOrUpdateObjectFromJson
(
ServerConfig
.
class
,
new
JSONObject
()
new
JSONObject
().
put
(
"id"
,
mServerConfigId
)
.
put
(
"id"
,
mServerConfigId
)
.
put
(
"hostname"
,
hostname
)
.
put
(
"hostname"
,
hostname
)
.
put
(
"connectionError"
,
JSONObject
.
NULL
)))
.
put
(
"connectionError"
,
JSONObject
.
NULL
))).
continueWith
(
new
LogcatIfError
());
.
continueWith
(
new
LogcatIfError
());
}
}
@Override
@Override
public
void
onResume
()
{
public
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
mObserver
.
keepalive
();
mObserver
.
keepalive
();
}
}
@Override
@Override
public
void
onDestroyView
()
{
public
void
onDestroyView
()
{
mObserver
.
unsub
();
mObserver
.
unsub
();
super
.
onDestroyView
();
super
.
onDestroyView
();
}
}
private
Handler
mShowError
=
new
Handler
()
{
@Override
public
void
handleMessage
(
Message
msg
)
{
Toast
.
makeText
(
mRootView
.
getContext
(),
(
String
)
msg
.
obj
,
Toast
.
LENGTH_SHORT
).
show
();
}
};
private
void
showError
(
String
errString
)
{
private
void
showError
(
String
errString
)
{
mShowError
.
removeMessages
(
0
);
mShowError
.
removeMessages
(
0
);
Message
msg
=
Message
.
obtain
(
mShowError
,
0
,
errString
);
Message
msg
=
Message
.
obtain
(
mShowError
,
0
,
errString
);
...
@@ -90,7 +78,9 @@ public class InputHostnameFragment extends AbstractServerConfigFragment {
...
@@ -90,7 +78,9 @@ public class InputHostnameFragment extends AbstractServerConfigFragment {
private
void
onRenderServerConfig
(
ServerConfig
config
)
{
private
void
onRenderServerConfig
(
ServerConfig
config
)
{
final
TextView
editor
=
(
TextView
)
mRootView
.
findViewById
(
R
.
id
.
editor_hostname
);
final
TextView
editor
=
(
TextView
)
mRootView
.
findViewById
(
R
.
id
.
editor_hostname
);
if
(!
TextUtils
.
isEmpty
(
config
.
getHostname
()))
editor
.
setText
(
config
.
getHostname
());
if
(!
TextUtils
.
isEmpty
(
config
.
getHostname
()))
{
editor
.
setText
(
config
.
getHostname
());
}
if
(!
TextUtils
.
isEmpty
(
config
.
getConnectionError
()))
{
if
(!
TextUtils
.
isEmpty
(
config
.
getConnectionError
()))
{
clearConnectionErrorAndHostname
();
clearConnectionErrorAndHostname
();
showError
(
config
.
getConnectionError
());
showError
(
config
.
getConnectionError
());
...
@@ -98,12 +88,10 @@ public class InputHostnameFragment extends AbstractServerConfigFragment {
...
@@ -98,12 +88,10 @@ public class InputHostnameFragment extends AbstractServerConfigFragment {
}
}
private
void
clearConnectionErrorAndHostname
()
{
private
void
clearConnectionErrorAndHostname
()
{
RealmHelperBolts
RealmHelperBolts
.
executeTransaction
(
.
executeTransaction
(
realm
->
realm
->
realm
.
createOrUpdateObjectFromJson
(
ServerConfig
.
class
,
realm
.
createOrUpdateObjectFromJson
(
ServerConfig
.
class
,
new
JSONObject
()
new
JSONObject
().
put
(
"id"
,
mServerConfigId
)
.
put
(
"id"
,
mServerConfigId
)
.
put
(
"hostname"
,
JSONObject
.
NULL
)
.
put
(
"hostname"
,
JSONObject
.
NULL
)
.
put
(
"connectionError"
,
JSONObject
.
NULL
)))
.
put
(
"connectionError"
,
JSONObject
.
NULL
))).
continueWith
(
new
LogcatIfError
());
.
continueWith
(
new
LogcatIfError
());
}
}
}
}
app/src/main/java/chat/rocket/android/helper/LogcatIfError.java
View file @
6007fd56
...
@@ -8,8 +8,7 @@ import timber.log.Timber;
...
@@ -8,8 +8,7 @@ import timber.log.Timber;
* Bolts-Task continuation for just logging if error occurred.
* Bolts-Task continuation for just logging if error occurred.
*/
*/
public
class
LogcatIfError
implements
Continuation
{
public
class
LogcatIfError
implements
Continuation
{
@Override
@Override
public
Object
then
(
Task
task
)
throws
Exception
{
public
Object
then
(
Task
task
)
throws
Exception
{
if
(
task
.
isFaulted
())
{
if
(
task
.
isFaulted
())
{
Timber
.
w
(
task
.
getError
());
Timber
.
w
(
task
.
getError
());
}
}
...
...
app/src/main/java/chat/rocket/android/helper/OkHttpHelper.java
View file @
6007fd56
package
chat
.
rocket
.
android
.
helper
;
package
chat
.
rocket
.
android
.
helper
;
import
com.facebook.stetho.okhttp3.StethoInterceptor
;
import
com.facebook.stetho.okhttp3.StethoInterceptor
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.TimeUnit
;
import
okhttp3.OkHttpClient
;
import
okhttp3.OkHttpClient
;
/**
/**
...
@@ -18,8 +15,7 @@ public class OkHttpHelper {
...
@@ -18,8 +15,7 @@ public class OkHttpHelper {
*/
*/
public
static
OkHttpClient
getClientForWebSocket
()
{
public
static
OkHttpClient
getClientForWebSocket
()
{
if
(
sHttpClientForWS
==
null
)
{
if
(
sHttpClientForWS
==
null
)
{
sHttpClientForWS
=
new
OkHttpClient
.
Builder
()
sHttpClientForWS
=
new
OkHttpClient
.
Builder
().
readTimeout
(
0
,
TimeUnit
.
NANOSECONDS
)
.
readTimeout
(
0
,
TimeUnit
.
NANOSECONDS
)
.
addNetworkInterceptor
(
new
StethoInterceptor
())
.
addNetworkInterceptor
(
new
StethoInterceptor
())
.
build
();
.
build
();
}
}
...
...
app/src/main/java/chat/rocket/android/helper/OnBackPressListener.java
View file @
6007fd56
app/src/main/java/chat/rocket/android/helper/TextUtils.java
View file @
6007fd56
...
@@ -7,6 +7,7 @@ public class TextUtils {
...
@@ -7,6 +7,7 @@ public class TextUtils {
/**
/**
* Returns true if the string is null or 0-length.
* Returns true if the string is null or 0-length.
*
* @param str the string to be examined
* @param str the string to be examined
* @return true if str is null or zero length
* @return true if str is null or zero length
*/
*/
...
@@ -18,9 +19,11 @@ public class TextUtils {
...
@@ -18,9 +19,11 @@ public class TextUtils {
/**
/**
* Returns str if it is not empty; otherwise defaultValue is returned.
* Returns str if it is not empty; otherwise defaultValue is returned.
*/
*/
@SuppressWarnings
(
"PMD.ShortMethodName"
)
@SuppressWarnings
(
"PMD.ShortMethodName"
)
public
static
CharSequence
or
(
CharSequence
str
,
public
static
CharSequence
or
(
CharSequence
str
,
CharSequence
defaultValue
)
{
CharSequence
defaultValue
)
{
if
(
isEmpty
(
str
))
return
defaultValue
;
if
(
isEmpty
(
str
))
{
return
defaultValue
;
}
return
str
;
return
str
;
}
}
}
}
app/src/main/java/chat/rocket/android/model/MeteorLoginServiceConfiguration.java
View file @
6007fd56
...
@@ -6,10 +6,9 @@ import io.realm.annotations.PrimaryKey;
...
@@ -6,10 +6,9 @@ import io.realm.annotations.PrimaryKey;
/**
/**
* subscription model for "meteor_accounts_loginServiceConfiguration"
* subscription model for "meteor_accounts_loginServiceConfiguration"
*/
*/
@SuppressWarnings
(
"PMD.ShortVariable"
)
@SuppressWarnings
(
"PMD.ShortVariable"
)
public
class
MeteorLoginServiceConfiguration
public
class
MeteorLoginServiceConfiguration
extends
RealmObject
{
extends
RealmObject
{
@PrimaryKey
@PrimaryKey
private
String
id
;
private
String
id
;
private
String
service
;
private
String
service
;
private
String
consumerKey
;
//for Twitter
private
String
consumerKey
;
//for Twitter
private
String
appId
;
//for Facebook
private
String
appId
;
//for Facebook
...
...
app/src/main/java/chat/rocket/android/model/ServerConfig.java
View file @
6007fd56
package
chat
.
rocket
.
android
.
model
;
package
chat
.
rocket
.
android
.
model
;
import
org.json.JSONObject
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
hugo.weaving.DebugLog
;
import
hugo.weaving.DebugLog
;
import
io.realm.Realm
;
import
io.realm.Realm
;
...
@@ -11,14 +9,13 @@ import io.realm.RealmQuery;
...
@@ -11,14 +9,13 @@ import io.realm.RealmQuery;
import
io.realm.annotations.PrimaryKey
;
import
io.realm.annotations.PrimaryKey
;
import
jp.co.crowdworks.realm_java_helpers.RealmHelper
;
import
jp.co.crowdworks.realm_java_helpers.RealmHelper
;
import
jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts
;
import
jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts
;
import
org.json.JSONObject
;
/**
/**
* Server configuration
* Server configuration
*/
*/
@SuppressWarnings
(
"PMD.ShortVariable"
)
@SuppressWarnings
(
"PMD.ShortVariable"
)
public
class
ServerConfig
extends
RealmObject
{
public
class
ServerConfig
extends
RealmObject
{
@PrimaryKey
private
String
id
;
@PrimaryKey
private
String
id
;
private
String
hostname
;
private
String
hostname
;
private
String
connectionError
;
private
String
connectionError
;
private
String
token
;
private
String
token
;
...
@@ -26,6 +23,28 @@ public class ServerConfig extends RealmObject {
...
@@ -26,6 +23,28 @@ public class ServerConfig extends RealmObject {
private
RealmList
<
MeteorLoginServiceConfiguration
>
authProviders
;
private
RealmList
<
MeteorLoginServiceConfiguration
>
authProviders
;
private
String
selectedProviderName
;
private
String
selectedProviderName
;
public
static
RealmQuery
<
ServerConfig
>
queryLoginRequiredConnections
(
Realm
realm
)
{
return
realm
.
where
(
ServerConfig
.
class
).
equalTo
(
"tokenVerified"
,
false
);
}
public
static
RealmQuery
<
ServerConfig
>
queryActiveConnections
(
Realm
realm
)
{
return
realm
.
where
(
ServerConfig
.
class
).
isNotNull
(
"token"
);
}
public
static
boolean
hasActiveConnection
()
{
ServerConfig
config
=
RealmHelper
.
executeTransactionForRead
(
realm
->
queryActiveConnections
(
realm
).
findFirst
());
return
config
!=
null
;
}
@DebugLog
public
static
void
logError
(
String
id
,
Exception
exception
)
{
RealmHelperBolts
.
executeTransaction
(
realm
->
realm
.
createOrUpdateObjectFromJson
(
ServerConfig
.
class
,
new
JSONObject
().
put
(
"id"
,
id
).
put
(
"connectionError"
,
exception
.
getMessage
())))
.
continueWith
(
new
LogcatIfError
());
}
public
String
getId
()
{
public
String
getId
()
{
return
id
;
return
id
;
}
}
...
@@ -81,31 +100,4 @@ public class ServerConfig extends RealmObject {
...
@@ -81,31 +100,4 @@ public class ServerConfig extends RealmObject {
public
void
setSelectedProviderName
(
String
selectedProviderName
)
{
public
void
setSelectedProviderName
(
String
selectedProviderName
)
{
this
.
selectedProviderName
=
selectedProviderName
;
this
.
selectedProviderName
=
selectedProviderName
;
}
}
public
static
RealmQuery
<
ServerConfig
>
queryLoginRequiredConnections
(
Realm
realm
)
{
return
realm
.
where
(
ServerConfig
.
class
)
.
equalTo
(
"tokenVerified"
,
false
);
}
public
static
RealmQuery
<
ServerConfig
>
queryActiveConnections
(
Realm
realm
)
{
return
realm
.
where
(
ServerConfig
.
class
)
.
isNotNull
(
"token"
);
}
public
static
boolean
hasActiveConnection
()
{
ServerConfig
config
=
RealmHelper
.
executeTransactionForRead
(
realm
->
queryActiveConnections
(
realm
).
findFirst
());
return
config
!=
null
;
}
@DebugLog
public
static
void
logError
(
String
id
,
Exception
exception
)
{
RealmHelperBolts
.
executeTransaction
(
realm
->
realm
.
createOrUpdateObjectFromJson
(
ServerConfig
.
class
,
new
JSONObject
()
.
put
(
"id"
,
id
)
.
put
(
"connectionError"
,
exception
.
getMessage
())))
.
continueWith
(
new
LogcatIfError
());
}
}
}
app/src/main/java/chat/rocket/android/service/Registerable.java
View file @
6007fd56
app/src/main/java/chat/rocket/android/service/RocketChatService.java
View file @
6007fd56
...
@@ -5,16 +5,14 @@ import android.content.Context;
...
@@ -5,16 +5,14 @@ import android.content.Context;
import
android.content.Intent
;
import
android.content.Intent
;
import
android.os.IBinder
;
import
android.os.IBinder
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.model.ServerConfig
;
import
chat.rocket.android.model.ServerConfig
;
import
io.realm.Realm
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
io.realm.RealmResults
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
jp.co.crowdworks.realm_java_helpers.RealmListObserver
;
import
jp.co.crowdworks.realm_java_helpers.RealmListObserver
;
/**
/**
...
@@ -22,6 +20,21 @@ import jp.co.crowdworks.realm_java_helpers.RealmListObserver;
...
@@ -22,6 +20,21 @@ import jp.co.crowdworks.realm_java_helpers.RealmListObserver;
*/
*/
public
class
RocketChatService
extends
Service
{
public
class
RocketChatService
extends
Service
{
private
HashMap
<
String
,
RocketChatWebSocketThread
>
mWebSocketThreads
;
private
RealmListObserver
<
ServerConfig
>
mConnectionRequiredServerConfigObserver
=
new
RealmListObserver
<
ServerConfig
>()
{
@Override
protected
RealmResults
<
ServerConfig
>
queryItems
(
Realm
realm
)
{
return
realm
.
where
(
ServerConfig
.
class
)
.
isNotNull
(
"hostname"
)
.
isNull
(
"connectionError"
)
.
findAll
();
}
@Override
protected
void
onCollectionChanged
(
List
<
ServerConfig
>
list
)
{
syncWebSocketThreadsWith
(
list
);
}
};
/**
/**
* ensure RocketChatService alive.
* ensure RocketChatService alive.
*/
*/
...
@@ -36,31 +49,12 @@ public class RocketChatService extends Service {
...
@@ -36,31 +49,12 @@ public class RocketChatService extends Service {
context
.
stopService
(
new
Intent
(
context
,
RocketChatService
.
class
));
context
.
stopService
(
new
Intent
(
context
,
RocketChatService
.
class
));
}
}
private
HashMap
<
String
,
RocketChatWebSocketThread
>
mWebSocketThreads
;
@Override
public
void
onCreate
()
{
private
RealmListObserver
<
ServerConfig
>
mConnectionRequiredServerConfigObserver
=
new
RealmListObserver
<
ServerConfig
>()
{
@Override
protected
RealmResults
<
ServerConfig
>
queryItems
(
Realm
realm
)
{
return
realm
.
where
(
ServerConfig
.
class
)
.
isNotNull
(
"hostname"
)
.
isNull
(
"connectionError"
)
.
findAll
();
}
@Override
protected
void
onCollectionChanged
(
List
<
ServerConfig
>
list
)
{
syncWebSocketThreadsWith
(
list
);
}
};
@Override
public
void
onCreate
()
{
super
.
onCreate
();
super
.
onCreate
();
mWebSocketThreads
=
new
HashMap
<>();
mWebSocketThreads
=
new
HashMap
<>();
}
}
@Override
@Override
public
int
onStartCommand
(
Intent
intent
,
int
flags
,
int
startId
)
{
public
int
onStartCommand
(
Intent
intent
,
int
flags
,
int
startId
)
{
mConnectionRequiredServerConfigObserver
.
keepalive
();
mConnectionRequiredServerConfigObserver
.
keepalive
();
return
START_STICKY
;
return
START_STICKY
;
}
}
...
@@ -73,7 +67,7 @@ public class RocketChatService extends Service {
...
@@ -73,7 +67,7 @@ public class RocketChatService extends Service {
Map
.
Entry
<
String
,
RocketChatWebSocketThread
>
entry
=
iterator
.
next
();
Map
.
Entry
<
String
,
RocketChatWebSocketThread
>
entry
=
iterator
.
next
();
String
serverConfigId
=
entry
.
getKey
();
String
serverConfigId
=
entry
.
getKey
();
boolean
found
=
false
;
boolean
found
=
false
;
for
(
ServerConfig
config
:
configList
)
{
for
(
ServerConfig
config
:
configList
)
{
if
(
serverConfigId
.
equals
(
config
.
getId
()))
{
if
(
serverConfigId
.
equals
(
config
.
getId
()))
{
found
=
true
;
found
=
true
;
break
;
break
;
...
@@ -85,7 +79,7 @@ public class RocketChatService extends Service {
...
@@ -85,7 +79,7 @@ public class RocketChatService extends Service {
}
}
}
}
for
(
ServerConfig
config
:
configList
)
{
for
(
ServerConfig
config
:
configList
)
{
findOrCreateWebSocketThread
(
config
).
onSuccess
(
task
->
{
findOrCreateWebSocketThread
(
config
).
onSuccess
(
task
->
{
RocketChatWebSocketThread
thread
=
task
.
getResult
();
RocketChatWebSocketThread
thread
=
task
.
getResult
();
thread
.
syncStateWith
(
config
);
thread
.
syncStateWith
(
config
);
...
@@ -107,9 +101,7 @@ public class RocketChatService extends Service {
...
@@ -107,9 +101,7 @@ public class RocketChatService extends Service {
}
}
}
}
@Nullable
@Nullable
@Override
public
IBinder
onBind
(
Intent
intent
)
{
@Override
public
IBinder
onBind
(
Intent
intent
)
{
return
null
;
return
null
;
}
}
}
}
app/src/main/java/chat/rocket/android/service/RocketChatWebSocketThread.java
View file @
6007fd56
...
@@ -3,11 +3,6 @@ package chat.rocket.android.service;
...
@@ -3,11 +3,6 @@ package chat.rocket.android.service;
import
android.content.Context
;
import
android.content.Context
;
import
android.os.Handler
;
import
android.os.Handler
;
import
android.os.HandlerThread
;
import
android.os.HandlerThread
;
import
java.lang.reflect.Constructor
;
import
java.util.ArrayList
;
import
java.util.Iterator
;
import
bolts.Task
;
import
bolts.Task
;
import
bolts.TaskCompletionSource
;
import
bolts.TaskCompletionSource
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
...
@@ -16,6 +11,9 @@ import chat.rocket.android.service.ddp_subscriber.LoginServiceConfigurationSubsc
...
@@ -16,6 +11,9 @@ import chat.rocket.android.service.ddp_subscriber.LoginServiceConfigurationSubsc
import
chat.rocket.android.ws.RocketChatWebSocketAPI
;
import
chat.rocket.android.ws.RocketChatWebSocketAPI
;
import
chat.rocket.android_ddp.DDPClient
;
import
chat.rocket.android_ddp.DDPClient
;
import
hugo.weaving.DebugLog
;
import
hugo.weaving.DebugLog
;
import
java.lang.reflect.Constructor
;
import
java.util.ArrayList
;
import
java.util.Iterator
;
import
jp.co.crowdworks.realm_java_helpers.RealmHelper
;
import
jp.co.crowdworks.realm_java_helpers.RealmHelper
;
import
timber.log.Timber
;
import
timber.log.Timber
;
...
@@ -23,8 +21,12 @@ import timber.log.Timber;
...
@@ -23,8 +21,12 @@ import timber.log.Timber;
* Thread for handling WebSocket connection.
* Thread for handling WebSocket connection.
*/
*/
public
class
RocketChatWebSocketThread
extends
HandlerThread
{
public
class
RocketChatWebSocketThread
extends
HandlerThread
{
private
static
final
Class
[]
REGISTERABLE_CLASSES
=
{
LoginServiceConfigurationSubscriber
.
class
};
private
final
Context
mAppContext
;
private
final
Context
mAppContext
;
private
final
String
mServerConfigId
;
private
final
String
mServerConfigId
;
private
final
ArrayList
<
Registerable
>
mListeners
=
new
ArrayList
<>();
private
RocketChatWebSocketAPI
mWebSocketAPI
;
private
RocketChatWebSocketAPI
mWebSocketAPI
;
private
boolean
mSocketExists
;
private
boolean
mSocketExists
;
private
boolean
mListenersRegistered
;
private
boolean
mListenersRegistered
;
...
@@ -38,13 +40,11 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -38,13 +40,11 @@ public class RocketChatWebSocketThread extends HandlerThread {
/**
/**
* create new Thread.
* create new Thread.
*/
*/
@DebugLog
@DebugLog
public
static
Task
<
RocketChatWebSocketThread
>
getStarted
(
Context
appContext
,
public
static
Task
<
RocketChatWebSocketThread
>
getStarted
(
Context
appContext
,
ServerConfig
config
)
{
ServerConfig
config
)
{
TaskCompletionSource
<
RocketChatWebSocketThread
>
task
=
new
TaskCompletionSource
<>();
TaskCompletionSource
<
RocketChatWebSocketThread
>
task
=
new
TaskCompletionSource
<>();
new
RocketChatWebSocketThread
(
appContext
,
config
.
getId
()){
new
RocketChatWebSocketThread
(
appContext
,
config
.
getId
())
{
@Override
@Override
protected
void
onLooperPrepared
()
{
protected
void
onLooperPrepared
()
{
try
{
try
{
super
.
onLooperPrepared
();
super
.
onLooperPrepared
();
task
.
setResult
(
this
);
task
.
setResult
(
this
);
...
@@ -59,8 +59,7 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -59,8 +59,7 @@ public class RocketChatWebSocketThread extends HandlerThread {
/**
/**
* terminate the thread
* terminate the thread
*/
*/
@DebugLog
@DebugLog
public
static
void
terminate
(
RocketChatWebSocketThread
thread
)
{
public
static
void
terminate
(
RocketChatWebSocketThread
thread
)
{
thread
.
quit
();
thread
.
quit
();
}
}
...
@@ -75,36 +74,30 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -75,36 +74,30 @@ public class RocketChatWebSocketThread extends HandlerThread {
/**
/**
* synchronize the state of the thread with ServerConfig.
* synchronize the state of the thread with ServerConfig.
*/
*/
@DebugLog
@DebugLog
public
void
syncStateWith
(
ServerConfig
config
)
{
public
void
syncStateWith
(
ServerConfig
config
)
{
if
(
config
==
null
||
TextUtils
.
isEmpty
(
config
.
getHostname
())
||
!
TextUtils
.
isEmpty
(
if
(
config
==
null
config
.
getConnectionError
()))
{
||
TextUtils
.
isEmpty
(
config
.
getHostname
())
||
!
TextUtils
.
isEmpty
(
config
.
getConnectionError
()))
{
quit
();
quit
();
}
else
{
}
else
{
ensureConnection
()
ensureConnection
().
continueWith
(
task
->
{
.
continueWith
(
task
->
{
new
Handler
(
getLooper
()).
post
(
this
::
keepaliveListeners
);
new
Handler
(
getLooper
()).
post
(
this
::
keepaliveListeners
);
return
null
;
return
null
;
});
});
}
}
}
}
@Override
@Override
protected
void
onLooperPrepared
()
{
protected
void
onLooperPrepared
()
{
super
.
onLooperPrepared
();
super
.
onLooperPrepared
();
registerListeners
();
registerListeners
();
}
}
@Override
@Override
public
boolean
quit
()
{
public
boolean
quit
()
{
scheduleUnregisterListeners
();
scheduleUnregisterListeners
();
return
super
.
quit
();
return
super
.
quit
();
}
}
@Override
@Override
public
boolean
quitSafely
()
{
public
boolean
quitSafely
()
{
scheduleUnregisterListeners
();
scheduleUnregisterListeners
();
return
super
.
quitSafely
();
return
super
.
quitSafely
();
}
}
...
@@ -118,26 +111,19 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -118,26 +111,19 @@ public class RocketChatWebSocketThread extends HandlerThread {
}
}
}
}
private
static
final
Class
[]
REGISTERABLE_CLASSES
=
{
LoginServiceConfigurationSubscriber
.
class
};
private
final
ArrayList
<
Registerable
>
mListeners
=
new
ArrayList
<>();
private
void
prepareWebSocket
()
{
private
void
prepareWebSocket
()
{
ServerConfig
config
=
RealmHelper
.
executeTransactionForRead
(
realm
->
ServerConfig
config
=
RealmHelper
.
executeTransactionForRead
(
realm
.
where
(
ServerConfig
.
class
)
realm
->
realm
.
where
(
ServerConfig
.
class
).
equalTo
(
"id"
,
mServerConfigId
).
findFirst
());
.
equalTo
(
"id"
,
mServerConfigId
)
.
findFirst
());
if
(
mWebSocketAPI
==
null
||
!
mWebSocketAPI
.
isConnected
())
{
if
(
mWebSocketAPI
==
null
||
!
mWebSocketAPI
.
isConnected
())
{
mWebSocketAPI
=
RocketChatWebSocketAPI
.
create
(
config
.
getHostname
());
mWebSocketAPI
=
RocketChatWebSocketAPI
.
create
(
config
.
getHostname
());
}
}
}
}
@DebugLog
@DebugLog
private
Task
<
Void
>
registerListeners
()
{
private
Task
<
Void
>
registerListeners
()
{
if
(
mSocketExists
)
{
if
(
mSocketExists
)
return
Task
.
forResult
(
null
);
return
Task
.
forResult
(
null
);
}
mSocketExists
=
true
;
mSocketExists
=
true
;
prepareWebSocket
();
prepareWebSocket
();
...
@@ -168,13 +154,14 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -168,13 +154,14 @@ public class RocketChatWebSocketThread extends HandlerThread {
//@DebugLog
//@DebugLog
private
void
registerListenersActually
()
{
private
void
registerListenersActually
()
{
if
(
mListenersRegistered
)
return
;
if
(
mListenersRegistered
)
{
return
;
}
mListenersRegistered
=
true
;
mListenersRegistered
=
true
;
for
(
Class
clazz
:
REGISTERABLE_CLASSES
)
{
for
(
Class
clazz
:
REGISTERABLE_CLASSES
)
{
try
{
try
{
Constructor
ctor
=
clazz
.
getConstructor
(
Constructor
ctor
=
clazz
.
getConstructor
(
Context
.
class
,
RocketChatWebSocketAPI
.
class
);
Context
.
class
,
RocketChatWebSocketAPI
.
class
);
Object
obj
=
ctor
.
newInstance
(
mAppContext
,
mWebSocketAPI
);
Object
obj
=
ctor
.
newInstance
(
mAppContext
,
mWebSocketAPI
);
if
(
obj
instanceof
Registerable
)
{
if
(
obj
instanceof
Registerable
)
{
...
@@ -190,14 +177,20 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -190,14 +177,20 @@ public class RocketChatWebSocketThread extends HandlerThread {
//@DebugLog
//@DebugLog
private
void
keepaliveListeners
()
{
private
void
keepaliveListeners
()
{
if
(!
mSocketExists
||
!
mListenersRegistered
)
return
;
if
(!
mSocketExists
||
!
mListenersRegistered
)
{
return
;
}
for
(
Registerable
registerable
:
mListeners
)
registerable
.
keepalive
();
for
(
Registerable
registerable
:
mListeners
)
{
registerable
.
keepalive
();
}
}
}
//@DebugLog
//@DebugLog
private
void
unregisterListeners
()
{
private
void
unregisterListeners
()
{
if
(!
mSocketExists
||
!
mListenersRegistered
)
return
;
if
(!
mSocketExists
||
!
mListenersRegistered
)
{
return
;
}
Iterator
<
Registerable
>
iterator
=
mListeners
.
iterator
();
Iterator
<
Registerable
>
iterator
=
mListeners
.
iterator
();
while
(
iterator
.
hasNext
())
{
while
(
iterator
.
hasNext
())
{
...
@@ -212,5 +205,4 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -212,5 +205,4 @@ public class RocketChatWebSocketThread extends HandlerThread {
mListenersRegistered
=
false
;
mListenersRegistered
=
false
;
mSocketExists
=
false
;
mSocketExists
=
false
;
}
}
}
}
app/src/main/java/chat/rocket/android/service/ddp_subscriber/AbstractDDPDocEventSubscriber.java
View file @
6007fd56
...
@@ -2,19 +2,16 @@ package chat.rocket.android.service.ddp_subscriber;
...
@@ -2,19 +2,16 @@ package chat.rocket.android.service.ddp_subscriber;
import
android.content.Context
;
import
android.content.Context
;
import
android.text.TextUtils
;
import
android.text.TextUtils
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
java.util.Iterator
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.service.Registerable
;
import
chat.rocket.android.service.Registerable
;
import
chat.rocket.android.ws.RocketChatWebSocketAPI
;
import
chat.rocket.android.ws.RocketChatWebSocketAPI
;
import
chat.rocket.android_ddp.DDPSubscription
;
import
chat.rocket.android_ddp.DDPSubscription
;
import
io.realm.Realm
;
import
io.realm.Realm
;
import
io.realm.RealmObject
;
import
io.realm.RealmObject
;
import
java.util.Iterator
;
import
jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts
;
import
jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
rx.Subscription
;
import
rx.Subscription
;
import
timber.log.Timber
;
import
timber.log.Timber
;
...
@@ -30,14 +27,16 @@ abstract class AbstractDDPDocEventSubscriber implements Registerable {
...
@@ -30,14 +27,16 @@ abstract class AbstractDDPDocEventSubscriber implements Registerable {
}
}
protected
abstract
String
getSubscriptionName
();
protected
abstract
String
getSubscriptionName
();
protected
abstract
String
getSubscriptionCallbackName
();
protected
abstract
String
getSubscriptionCallbackName
();
protected
abstract
Class
<?
extends
RealmObject
>
getModelClass
();
protected
abstract
Class
<?
extends
RealmObject
>
getModelClass
();
protected
JSONObject
customizeFieldJSON
(
JSONObject
json
)
{
protected
JSONObject
customizeFieldJSON
(
JSONObject
json
)
{
return
json
;
return
json
;
}
}
@Override
@Override
public
void
register
()
{
public
void
register
()
{
mAPI
.
subscribe
(
getSubscriptionName
(),
null
).
onSuccess
(
task
->
{
mAPI
.
subscribe
(
getSubscriptionName
(),
null
).
onSuccess
(
task
->
{
mID
=
task
.
getResult
().
id
;
mID
=
task
.
getResult
().
id
;
return
null
;
return
null
;
...
@@ -110,8 +109,7 @@ abstract class AbstractDDPDocEventSubscriber implements Registerable {
...
@@ -110,8 +109,7 @@ abstract class AbstractDDPDocEventSubscriber implements Registerable {
}
}
}
}
private
void
onDocumentAdded
(
Realm
realm
,
DDPSubscription
.
Added
docEvent
)
private
void
onDocumentAdded
(
Realm
realm
,
DDPSubscription
.
Added
docEvent
)
throws
JSONException
{
throws
JSONException
{
//executed in RealmTransaction
//executed in RealmTransaction
JSONObject
json
=
new
JSONObject
().
put
(
"id"
,
docEvent
.
docID
);
JSONObject
json
=
new
JSONObject
().
put
(
"id"
,
docEvent
.
docID
);
mergeJSON
(
json
,
docEvent
.
fields
);
mergeJSON
(
json
,
docEvent
.
fields
);
...
@@ -136,14 +134,14 @@ abstract class AbstractDDPDocEventSubscriber implements Registerable {
...
@@ -136,14 +134,14 @@ abstract class AbstractDDPDocEventSubscriber implements Registerable {
realm
.
where
(
getModelClass
()).
equalTo
(
"id"
,
docEvent
.
docID
).
findAll
().
deleteAllFromRealm
();
realm
.
where
(
getModelClass
()).
equalTo
(
"id"
,
docEvent
.
docID
).
findAll
().
deleteAllFromRealm
();
}
}
@Override
@Override
public
void
keepalive
()
{
public
void
keepalive
()
{
}
}
@Override
@Override
public
void
unregister
()
{
public
void
unregister
()
{
if
(
mSubscription
!=
null
)
{
if
(
mSubscription
!=
null
)
mSubscription
.
unsubscribe
();
mSubscription
.
unsubscribe
();
}
if
(!
TextUtils
.
isEmpty
(
mID
))
{
if
(!
TextUtils
.
isEmpty
(
mID
))
{
mAPI
.
unsubscribe
(
mID
).
continueWith
(
new
LogcatIfError
());
mAPI
.
unsubscribe
(
mID
).
continueWith
(
new
LogcatIfError
());
}
}
...
...
app/src/main/java/chat/rocket/android/service/ddp_subscriber/LoginServiceConfigurationSubscriber.java
View file @
6007fd56
package
chat
.
rocket
.
android
.
service
.
ddp_subscriber
;
package
chat
.
rocket
.
android
.
service
.
ddp_subscriber
;
import
android.content.Context
;
import
android.content.Context
;
import
chat.rocket.android.model.MeteorLoginServiceConfiguration
;
import
chat.rocket.android.model.MeteorLoginServiceConfiguration
;
import
chat.rocket.android.ws.RocketChatWebSocketAPI
;
import
chat.rocket.android.ws.RocketChatWebSocketAPI
;
import
io.realm.RealmObject
;
import
io.realm.RealmObject
;
...
@@ -14,18 +13,15 @@ public class LoginServiceConfigurationSubscriber extends AbstractDDPDocEventSubs
...
@@ -14,18 +13,15 @@ public class LoginServiceConfigurationSubscriber extends AbstractDDPDocEventSubs
super
(
context
,
api
);
super
(
context
,
api
);
}
}
@Override
@Override
protected
String
getSubscriptionName
()
{
protected
String
getSubscriptionName
()
{
return
"meteor.loginServiceConfiguration"
;
return
"meteor.loginServiceConfiguration"
;
}
}
@Override
@Override
protected
String
getSubscriptionCallbackName
()
{
protected
String
getSubscriptionCallbackName
()
{
return
"meteor_accounts_loginServiceConfiguration"
;
return
"meteor_accounts_loginServiceConfiguration"
;
}
}
@Override
@Override
protected
Class
<?
extends
RealmObject
>
getModelClass
()
{
protected
Class
<?
extends
RealmObject
>
getModelClass
()
{
return
MeteorLoginServiceConfiguration
.
class
;
return
MeteorLoginServiceConfiguration
.
class
;
}
}
}
}
app/src/main/java/chat/rocket/android/service/observer/AbstractModelObserver.java
View file @
6007fd56
package
chat
.
rocket
.
android
.
service
.
observer
;
package
chat
.
rocket
.
android
.
service
.
observer
;
import
android.content.Context
;
import
android.content.Context
;
import
chat.rocket.android.service.Registerable
;
import
chat.rocket.android.service.Registerable
;
import
chat.rocket.android.ws.RocketChatWebSocketAPI
;
import
chat.rocket.android.ws.RocketChatWebSocketAPI
;
import
io.realm.RealmObject
;
import
io.realm.RealmObject
;
import
jp.co.crowdworks.realm_java_helpers.RealmListObserver
;
import
jp.co.crowdworks.realm_java_helpers.RealmListObserver
;
abstract
class
AbstractModelObserver
<
T
extends
RealmObject
>
abstract
class
AbstractModelObserver
<
T
extends
RealmObject
>
extends
RealmListObserver
<
T
>
extends
RealmListObserver
<
T
>
implements
Registerable
{
implements
Registerable
{
protected
final
Context
mContext
;
protected
final
Context
mContext
;
protected
final
RocketChatWebSocketAPI
mAPI
;
protected
final
RocketChatWebSocketAPI
mAPI
;
...
@@ -18,14 +17,11 @@ abstract class AbstractModelObserver<T extends RealmObject>
...
@@ -18,14 +17,11 @@ abstract class AbstractModelObserver<T extends RealmObject>
mAPI
=
api
;
mAPI
=
api
;
}
}
@Override
public
void
register
()
{
@Override
public
void
register
()
{
sub
();
sub
();
}
}
@Override
@Override
public
void
unregister
()
{
public
void
unregister
()
{
unsub
();
unsub
();
}
}
}
}
app/src/main/java/chat/rocket/android/view/AbstractCustomFontTextView.java
View file @
6007fd56
...
@@ -7,14 +7,11 @@ import android.util.AttributeSet;
...
@@ -7,14 +7,11 @@ import android.util.AttributeSet;
abstract
class
AbstractCustomFontTextView
extends
AppCompatTextView
{
abstract
class
AbstractCustomFontTextView
extends
AppCompatTextView
{
protected
abstract
String
getFont
();
//CHECKSTYLE:OFF RedundantModifier
//CHECKSTYLE:OFF RedundantModifier
public
AbstractCustomFontTextView
(
Context
context
,
AttributeSet
attrs
,
int
defStyle
)
{
public
AbstractCustomFontTextView
(
Context
context
,
AttributeSet
attrs
,
int
defStyle
)
{
super
(
context
,
attrs
,
defStyle
);
super
(
context
,
attrs
,
defStyle
);
init
();
init
();
}
}
//CHECKSTYLE:ON RedundantModifier
//CHECKSTYLE:OFF RedundantModifier
//CHECKSTYLE:OFF RedundantModifier
public
AbstractCustomFontTextView
(
Context
context
,
AttributeSet
attrs
)
{
public
AbstractCustomFontTextView
(
Context
context
,
AttributeSet
attrs
)
{
...
@@ -30,11 +27,16 @@ abstract class AbstractCustomFontTextView extends AppCompatTextView {
...
@@ -30,11 +27,16 @@ abstract class AbstractCustomFontTextView extends AppCompatTextView {
}
}
//CHECKSTYLE:ON RedundantModifier
//CHECKSTYLE:ON RedundantModifier
protected
abstract
String
getFont
();
//CHECKSTYLE:ON RedundantModifier
private
void
init
()
{
private
void
init
()
{
String
font
=
getFont
();
String
font
=
getFont
();
if
(
font
!=
null
)
{
if
(
font
!=
null
)
{
Typeface
typeface
=
TypefaceHelper
.
getTypeface
(
getContext
(),
font
);
Typeface
typeface
=
TypefaceHelper
.
getTypeface
(
getContext
(),
font
);
if
(
typeface
!=
null
)
setTypeface
(
typeface
);
if
(
typeface
!=
null
)
{
setTypeface
(
typeface
);
}
}
}
}
}
}
}
app/src/main/java/chat/rocket/android/view/FontAwesomeTextView.java
View file @
6007fd56
...
@@ -19,8 +19,7 @@ public class FontAwesomeTextView extends AbstractCustomFontTextView {
...
@@ -19,8 +19,7 @@ public class FontAwesomeTextView extends AbstractCustomFontTextView {
super
(
context
);
super
(
context
);
}
}
@Override
@Override
protected
String
getFont
()
{
protected
String
getFont
()
{
return
"fontawesome-webfont.ttf"
;
return
"fontawesome-webfont.ttf"
;
}
}
}
}
app/src/main/java/chat/rocket/android/view/FontelloTextView.java
View file @
6007fd56
...
@@ -19,8 +19,7 @@ public class FontelloTextView extends AbstractCustomFontTextView {
...
@@ -19,8 +19,7 @@ public class FontelloTextView extends AbstractCustomFontTextView {
super
(
context
);
super
(
context
);
}
}
@Override
@Override
protected
String
getFont
()
{
protected
String
getFont
()
{
return
"fontello.ttf"
;
return
"fontello.ttf"
;
}
}
}
}
app/src/main/java/chat/rocket/android/view/TypefaceHelper.java
View file @
6007fd56
...
@@ -3,12 +3,10 @@ package chat.rocket.android.view;
...
@@ -3,12 +3,10 @@ package chat.rocket.android.view;
import
android.content.Context
;
import
android.content.Context
;
import
android.graphics.Typeface
;
import
android.graphics.Typeface
;
import
android.util.Log
;
import
android.util.Log
;
import
java.util.Hashtable
;
import
java.util.Hashtable
;
/**
/**
* Helper for reading typeface.
* Helper for reading typeface. ref:https://code.google.com/p/android/issues/detail?id=9904#c7
* ref:https://code.google.com/p/android/issues/detail?id=9904#c7
*/
*/
public
class
TypefaceHelper
{
public
class
TypefaceHelper
{
private
static
final
String
TAG
=
TypefaceHelper
.
class
.
getName
();
private
static
final
String
TAG
=
TypefaceHelper
.
class
.
getName
();
...
@@ -22,12 +20,11 @@ public class TypefaceHelper {
...
@@ -22,12 +20,11 @@ public class TypefaceHelper {
synchronized
(
CACHE
)
{
synchronized
(
CACHE
)
{
if
(!
CACHE
.
containsKey
(
assetPath
))
{
if
(!
CACHE
.
containsKey
(
assetPath
))
{
try
{
try
{
Typeface
typeface
=
Typeface
.
createFromAsset
(
context
.
getAssets
(),
Typeface
typeface
=
Typeface
.
createFromAsset
(
context
.
getAssets
(),
assetPath
);
assetPath
);
CACHE
.
put
(
assetPath
,
typeface
);
CACHE
.
put
(
assetPath
,
typeface
);
}
catch
(
Exception
exception
)
{
}
catch
(
Exception
exception
)
{
Log
.
e
(
TAG
,
"Could not get typeface '"
+
assetPath
Log
.
e
(
TAG
,
+
"' because "
+
exception
.
getMessage
());
"Could not get typeface '"
+
assetPath
+
"' because "
+
exception
.
getMessage
());
return
null
;
return
null
;
}
}
}
}
...
...
app/src/main/java/chat/rocket/android/view/WaitingView.java
View file @
6007fd56
...
@@ -11,10 +11,8 @@ import android.view.View;
...
@@ -11,10 +11,8 @@ import android.view.View;
import
android.widget.FrameLayout
;
import
android.widget.FrameLayout
;
import
android.widget.ImageView
;
import
android.widget.ImageView
;
import
android.widget.LinearLayout
;
import
android.widget.LinearLayout
;
import
java.util.ArrayList
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
java.util.ArrayList
;
/**
/**
* View for indicating "waiting for connection ..." and so on.
* View for indicating "waiting for connection ..." and so on.
...
@@ -48,9 +46,8 @@ public class WaitingView extends LinearLayout {
...
@@ -48,9 +46,8 @@ public class WaitingView extends LinearLayout {
int
count
=
3
;
int
count
=
3
;
if
(
attrs
!=
null
)
{
if
(
attrs
!=
null
)
{
TypedArray
array
=
context
.
getTheme
().
obtainStyledAttributes
(
TypedArray
array
=
attrs
,
context
.
getTheme
().
obtainStyledAttributes
(
attrs
,
R
.
styleable
.
WaitingView
,
0
,
0
);
R
.
styleable
.
WaitingView
,
0
,
0
);
size
=
array
.
getDimensionPixelSize
(
R
.
styleable
.
WaitingView_dotSize
,
size
);
size
=
array
.
getDimensionPixelSize
(
R
.
styleable
.
WaitingView_dotSize
,
size
);
count
=
array
.
getInteger
(
R
.
styleable
.
WaitingView_dotCount
,
count
);
count
=
array
.
getInteger
(
R
.
styleable
.
WaitingView_dotCount
,
count
);
array
.
recycle
();
array
.
recycle
();
...
@@ -58,16 +55,16 @@ public class WaitingView extends LinearLayout {
...
@@ -58,16 +55,16 @@ public class WaitingView extends LinearLayout {
mDots
=
new
ArrayList
<>();
mDots
=
new
ArrayList
<>();
setOrientation
(
HORIZONTAL
);
setOrientation
(
HORIZONTAL
);
for
(
int
i
=
0
;
i
<
count
;
i
++)
addDot
(
context
,
size
);
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
addDot
(
context
,
size
);
}
addOnAttachStateChangeListener
(
new
OnAttachStateChangeListener
()
{
addOnAttachStateChangeListener
(
new
OnAttachStateChangeListener
()
{
@Override
@Override
public
void
onViewAttachedToWindow
(
View
view
)
{
public
void
onViewAttachedToWindow
(
View
view
)
{
start
();
start
();
}
}
@Override
@Override
public
void
onViewDetachedFromWindow
(
View
view
)
{
public
void
onViewDetachedFromWindow
(
View
view
)
{
cancel
();
cancel
();
}
}
});
});
...
@@ -75,8 +72,7 @@ public class WaitingView extends LinearLayout {
...
@@ -75,8 +72,7 @@ public class WaitingView extends LinearLayout {
private
void
addDot
(
Context
context
,
int
size
)
{
private
void
addDot
(
Context
context
,
int
size
)
{
FrameLayout
frameLayout
=
new
FrameLayout
(
context
);
FrameLayout
frameLayout
=
new
FrameLayout
(
context
);
frameLayout
.
setLayoutParams
(
frameLayout
.
setLayoutParams
(
new
LinearLayoutCompat
.
LayoutParams
(
size
*
3
/
2
,
size
*
3
/
2
));
new
LinearLayoutCompat
.
LayoutParams
(
size
*
3
/
2
,
size
*
3
/
2
));
ImageView
dot
=
new
ImageView
(
context
);
ImageView
dot
=
new
ImageView
(
context
);
dot
.
setImageResource
(
R
.
drawable
.
white_circle
);
dot
.
setImageResource
(
R
.
drawable
.
white_circle
);
dot
.
setLayoutParams
(
new
FrameLayout
.
LayoutParams
(
size
,
size
,
Gravity
.
CENTER
));
dot
.
setLayoutParams
(
new
FrameLayout
.
LayoutParams
(
size
,
size
,
Gravity
.
CENTER
));
...
@@ -91,19 +87,19 @@ public class WaitingView extends LinearLayout {
...
@@ -91,19 +87,19 @@ public class WaitingView extends LinearLayout {
}
}
}
}
private
void
animateDot
(
final
View
dot
,
private
void
animateDot
(
final
View
dot
,
final
long
startDelay
,
final
long
duration
,
final
long
startDelay
,
final
long
duration
,
final
long
interval
)
{
final
long
interval
)
{
dot
.
setScaleX
(
0
);
dot
.
setScaleX
(
0
);
dot
.
setScaleY
(
0
);
dot
.
setScaleY
(
0
);
dot
.
animate
()
dot
.
animate
()
.
scaleX
(
1
).
scaleY
(
1
)
.
scaleX
(
1
)
.
scaleY
(
1
)
.
setDuration
(
duration
)
.
setDuration
(
duration
)
.
setStartDelay
(
startDelay
)
.
setStartDelay
(
startDelay
)
.
withEndAction
(()
->
{
.
withEndAction
(()
->
{
dot
.
animate
()
dot
.
animate
()
.
scaleX
(
0
).
scaleY
(
0
)
.
scaleX
(
0
)
.
scaleY
(
0
)
.
setDuration
(
duration
)
.
setDuration
(
duration
)
.
setStartDelay
(
0
)
.
setStartDelay
(
0
)
.
withEndAction
(()
->
{
.
withEndAction
(()
->
{
...
@@ -115,7 +111,7 @@ public class WaitingView extends LinearLayout {
...
@@ -115,7 +111,7 @@ public class WaitingView extends LinearLayout {
}
}
private
void
cancel
()
{
private
void
cancel
()
{
for
(
View
dot
:
mDots
)
{
for
(
View
dot
:
mDots
)
{
dot
.
clearAnimation
();
dot
.
clearAnimation
();
}
}
}
}
...
...
app/src/main/java/chat/rocket/android/ws/RocketChatWebSocketAPI.java
View file @
6007fd56
package
chat
.
rocket
.
android
.
ws
;
package
chat
.
rocket
.
android
.
ws
;
import
org.json.JSONArray
;
import
java.util.UUID
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.helper.OkHttpHelper
;
import
chat.rocket.android.helper.OkHttpHelper
;
import
chat.rocket.android_ddp.DDPClient
;
import
chat.rocket.android_ddp.DDPClient
;
import
chat.rocket.android_ddp.DDPClientCallback
;
import
chat.rocket.android_ddp.DDPClientCallback
;
import
chat.rocket.android_ddp.DDPSubscription
;
import
chat.rocket.android_ddp.DDPSubscription
;
import
java.util.UUID
;
import
org.json.JSONArray
;
import
rx.Observable
;
import
rx.Observable
;
/**
/**
...
@@ -51,7 +49,6 @@ public class RocketChatWebSocketAPI {
...
@@ -51,7 +49,6 @@ public class RocketChatWebSocketAPI {
mDDPClient
.
close
();
mDDPClient
.
close
();
}
}
/**
/**
* Subscribe with DDP client.
* Subscribe with DDP client.
*/
*/
...
@@ -72,5 +69,4 @@ public class RocketChatWebSocketAPI {
...
@@ -72,5 +69,4 @@ public class RocketChatWebSocketAPI {
public
Observable
<
DDPSubscription
.
Event
>
getSubscriptionCallback
()
{
public
Observable
<
DDPSubscription
.
Event
>
getSubscriptionCallback
()
{
return
mDDPClient
.
getSubscriptionCallback
();
return
mDDPClient
.
getSubscriptionCallback
();
}
}
}
}
app/src/main/res/drawable/ic_arrow_forward_white_24dp.xml
View file @
6007fd56
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:height=
"24dp"
android:viewportHeight=
"24.0"
android:viewportWidth=
"24.0"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0
"
>
android:width=
"24dp
"
>
<path
<path
android:fillColor=
"#FFFFFFFF"
android:fillColor=
"#FFFFFFFF"
android:pathData=
"M12,4l-1.41,1.41L16.17,11H4v2h12.17l-5.58,5.59L12,20l8,-8z"
/>
android:pathData=
"M12,4l-1.41,1.41L16.17,11H4v2h12.17l-5.58,5.59L12,20l8,-8z"
/>
...
...
app/src/main/res/drawable/selector_text_color_link.xml
View file @
6007fd56
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<selector
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<!--item android:state_enabled="false" android:color="@color/textColorLink" /-->
<!--item android:state_enabled="false" android:color="@color/textColorLink" /-->
<item
android:color=
"@color/textColorLink"
/>
<item
android:color=
"@color/textColorLink"
/>
</selector>
</selector>
\ No newline at end of file
app/src/main/res/drawable/userstatus_away.xml
View file @
6007fd56
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<shape
android:shape=
"oval"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"oval"
>
<solid
android:color=
"@color/userstatus_away"
/>
<solid
android:color=
"@color/userstatus_away"
/>
<stroke
android:width=
"1dp"
android:color=
"@color/userstatus_away_outline"
/>
<stroke
android:color=
"@color/userstatus_away_outline"
android:width=
"1dp"
/>
</shape>
</shape>
app/src/main/res/drawable/userstatus_busy.xml
View file @
6007fd56
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<shape
android:shape=
"oval"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"oval"
>
<solid
android:color=
"@color/userstatus_busy"
/>
<solid
android:color=
"@color/userstatus_busy"
/>
<stroke
android:width=
"1dp"
android:color=
"@color/userstatus_busy_outline"
/>
<stroke
android:color=
"@color/userstatus_busy_outline"
android:width=
"1dp"
/>
</shape>
</shape>
app/src/main/res/drawable/userstatus_offline.xml
View file @
6007fd56
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<shape
android:shape=
"oval"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"oval"
>
<solid
android:color=
"@color/userstatus_offline"
/>
<solid
android:color=
"@color/userstatus_offline"
/>
<stroke
android:width=
"1dp"
android:color=
"@color/userstatus_offline_outline"
/>
<stroke
android:color=
"@color/userstatus_offline_outline"
android:width=
"1dp"
/>
</shape>
</shape>
app/src/main/res/drawable/userstatus_online.xml
View file @
6007fd56
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<shape
android:shape=
"oval"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"oval"
>
<solid
android:color=
"@color/userstatus_online"
/>
<solid
android:color=
"@color/userstatus_online"
/>
<stroke
android:width=
"1dp"
android:color=
"@color/userstatus_online_outline"
/>
<stroke
android:color=
"@color/userstatus_online_outline"
android:width=
"1dp"
/>
</shape>
</shape>
app/src/main/res/drawable/white_circle.xml
View file @
6007fd56
app/src/main/res/layout-w720dp/activity_main.xml
View file @
6007fd56
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<include
layout=
"@layout/sidebar"
/>
<include
layout=
"@layout/sidebar"
/>
<android.support.design.widget.CoordinatorLayout
<android.support.design.widget.CoordinatorLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<android.support.design.widget.AppBarLayout
<android.support.design.widget.AppBarLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
>
<android.support.v7.widget.Toolbar
<android.support.v7.widget.Toolbar
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:theme=
"@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:theme=
"@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme=
"@style/ThemeOverlay.AppCompat.Light"
app:popupTheme=
"@style/ThemeOverlay.AppCompat.Light"
app:title=
"@string/app_name"
/>
app:title=
"@string/app_name"
/>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.AppBarLayout>
<FrameLayout
<FrameLayout
...
@@ -27,8 +31,8 @@
...
@@ -27,8 +31,8 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/white"
android:background=
"@color/white"
app:layout_behavior=
"@string/appbar_scrolling_view_behavior"
>
app:layout_behavior=
"@string/appbar_scrolling_view_behavior"
</FrameLayout>
>
</FrameLayout>
</android.support.design.widget.CoordinatorLayout>
</android.support.design.widget.CoordinatorLayout>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/activity_main.xml
View file @
6007fd56
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SlidingPaneLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<android.support.v4.widget.SlidingPaneLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<include
layout=
"@layout/sidebar"
/>
<include
layout=
"@layout/sidebar"
/>
<android.support.design.widget.CoordinatorLayout
<android.support.design.widget.CoordinatorLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<android.support.design.widget.AppBarLayout
<android.support.design.widget.AppBarLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
>
<android.support.v7.widget.Toolbar
<android.support.v7.widget.Toolbar
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:theme=
"@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:theme=
"@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme=
"@style/ThemeOverlay.AppCompat.Light"
app:popupTheme=
"@style/ThemeOverlay.AppCompat.Light"
app:title=
"@string/app_name"
/>
app:title=
"@string/app_name"
/>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.AppBarLayout>
<FrameLayout
<FrameLayout
...
@@ -26,8 +32,8 @@
...
@@ -26,8 +32,8 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/white"
android:background=
"@color/white"
app:layout_behavior=
"@string/appbar_scrolling_view_behavior"
>
app:layout_behavior=
"@string/appbar_scrolling_view_behavior"
</FrameLayout>
>
</FrameLayout>
</android.support.design.widget.CoordinatorLayout>
</android.support.design.widget.CoordinatorLayout>
</android.support.v4.widget.SlidingPaneLayout>
</android.support.v4.widget.SlidingPaneLayout>
\ No newline at end of file
app/src/main/res/layout/avatar_container_large.xml
View file @
6007fd56
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"@dimen/avatar_image_size_large"
android:layout_height=
"@dimen/avatar_image_size_large"
>
android:layout_width=
"@dimen/avatar_image_size_large"
android:layout_height=
"@dimen/avatar_image_size_large"
>
<FrameLayout
<FrameLayout
android:id=
"@+id/avatar_color"
android:id=
"@+id/avatar_color"
android:layout_width=
"@dimen/avatar_image_size_large"
android:layout_width=
"@dimen/avatar_image_size_large"
android:layout_height=
"@dimen/avatar_image_size_large"
android:layout_height=
"@dimen/avatar_image_size_large"
android:layout_gravity=
"center"
>
android:layout_gravity=
"center"
>
<TextView
<TextView
android:id=
"@+id/avatar_initials"
android:id=
"@+id/avatar_initials"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:textSize=
"@dimen/avatar_text_size_large"
android:textSize=
"@dimen/avatar_text_size_large"
android:layout_gravity=
"center"
/>
/>
</FrameLayout>
</FrameLayout>
<ImageView
<ImageView
android:id=
"@+id/avatar_img"
android:id=
"@+id/avatar_img"
android:layout_width=
"@dimen/avatar_image_size_large"
android:layout_width=
"@dimen/avatar_image_size_large"
android:layout_height=
"@dimen/avatar_image_size_large"
android:layout_height=
"@dimen/avatar_image_size_large"
android:scaleType=
"centerInside"
android:src=
"@drawable/ic_default_avatar"
android:src=
"@drawable/ic_default_avatar"
android:scaleType=
"centerInside"
/>
/>
</FrameLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/avatar_container_normal.xml
View file @
6007fd56
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"@dimen/avatar_image_size_normal"
android:layout_height=
"@dimen/avatar_image_size_normal"
>
android:layout_width=
"@dimen/avatar_image_size_normal"
android:layout_height=
"@dimen/avatar_image_size_normal"
>
<FrameLayout
<FrameLayout
android:id=
"@+id/avatar_color"
android:id=
"@+id/avatar_color"
android:layout_width=
"@dimen/avatar_image_size_normal"
android:layout_width=
"@dimen/avatar_image_size_normal"
android:layout_height=
"@dimen/avatar_image_size_normal"
android:layout_height=
"@dimen/avatar_image_size_normal"
android:layout_gravity=
"center"
>
android:layout_gravity=
"center"
>
<TextView
<TextView
android:id=
"@+id/avatar_initials"
android:id=
"@+id/avatar_initials"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:textSize=
"@dimen/avatar_text_size_normal"
android:textSize=
"@dimen/avatar_text_size_normal"
android:layout_gravity=
"center"
/>
/>
</FrameLayout>
</FrameLayout>
<ImageView
<ImageView
android:id=
"@+id/avatar_img"
android:id=
"@+id/avatar_img"
android:layout_width=
"@dimen/avatar_image_size_normal"
android:layout_width=
"@dimen/avatar_image_size_normal"
android:layout_height=
"@dimen/avatar_image_size_normal"
android:layout_height=
"@dimen/avatar_image_size_normal"
android:scaleType=
"centerInside"
android:src=
"@drawable/ic_default_avatar"
android:src=
"@drawable/ic_default_avatar"
android:scaleType=
"centerInside"
/>
/>
</FrameLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_input_hostname.xml
View file @
6007fd56
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
xmlns:app=
"http://schemas.android.com/apk/res-auto
"
android:background=
"?attr/colorPrimaryDark
"
android:background=
"?attr/colorPrimaryDark"
>
>
<LinearLayout
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:minWidth=
"288dp"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal
"
android:layout_gravity=
"center
"
android:background=
"@color/white"
android:background=
"@color/white"
android:minWidth=
"288dp"
android:orientation=
"horizontal"
android:padding=
"@dimen/margin_24"
android:padding=
"@dimen/margin_24"
android:layout_gravity=
"center"
>
>
<LinearLayout
<LinearLayout
android:layout_width=
"0px"
android:layout_width=
"0px"
android:layout_weight=
"1"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
android:layout_weight=
"1"
android:orientation=
"vertical"
>
<TextView
<TextView
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"hostname"
android:text=
"hostname"
android:textAppearance=
"@style/TextAppearance.AppCompat.Caption"
/>
android:textAppearance=
"@style/TextAppearance.AppCompat.Caption"
/>
<EditText
<EditText
android:id=
"@+id/editor_hostname"
android:id=
"@+id/editor_hostname"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:singleLine=
"true"
android:hint=
"demo.rocket.chat"
android:hint=
"demo.rocket.chat"
android:imeOptions=
"actionGo"
android:imeOptions=
"actionGo"
android:inputType=
"textWebEditText"
/>
android:inputType=
"textWebEditText"
android:singleLine=
"true"
/>
</LinearLayout>
</LinearLayout>
<Space
<Space
android:layout_width=
"@dimen/margin_8"
android:layout_width=
"@dimen/margin_8"
android:layout_height=
"wrap_content"
/>
android:layout_height=
"wrap_content"
/>
<android.support.design.widget.FloatingActionButton
<android.support.design.widget.FloatingActionButton
android:id=
"@+id/btn_connect"
android:id=
"@+id/btn_connect"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"end|bottom"
app:elevation=
"2dp"
app:fabSize=
"mini"
app:fabSize=
"mini"
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
app:elevation=
"2dp"
/>
android:layout_gravity=
"end|bottom"
/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_wait_for_connection.xml
View file @
6007fd56
...
@@ -2,10 +2,12 @@
...
@@ -2,10 +2,12 @@
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"?attr/colorPrimaryDark"
>
android:background=
"?attr/colorPrimaryDark"
>
<chat.rocket.android.view.WaitingView
<chat.rocket.android.view.WaitingView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
/>
android:layout_gravity=
"center"
/>
</FrameLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/sidebar.xml
View file @
6007fd56
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"288dp"
android:layout_width=
"288dp"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:layout_gravity=
"start"
android:layout_gravity=
"start"
android:background=
"?attr/colorPrimary"
android:background=
"?attr/colorPrimary"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:theme=
"@style/AppTheme.Dark"
>
android:theme=
"@style/AppTheme.Dark"
>
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:background=
"?attr/colorPrimaryDark"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:background=
"?attr/colorPrimaryDark"
>
>
<LinearLayout
<LinearLayout
android:id=
"@+id/user_info_container"
android:id=
"@+id/user_info_container"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal
"
android:background=
"?attr/selectableItemBackground
"
android:gravity=
"center_vertical"
android:gravity=
"center_vertical"
android:orientation=
"horizontal"
android:padding=
"@dimen/margin_16"
android:padding=
"@dimen/margin_16"
android:background=
"?attr/selectableItemBackground"
>
>
<ImageView
<ImageView
android:id=
"@+id/img_userstatus"
android:id=
"@+id/img_userstatus"
android:layout_width=
"8dp"
android:layout_width=
"8dp"
android:layout_height=
"8dp"
android:layout_height=
"8dp"
android:src=
"@drawable/userstatus_online"
/>
android:src=
"@drawable/userstatus_online"
/>
<Space
<Space
android:layout_width=
"@dimen/margin_8"
android:layout_width=
"@dimen/margin_8"
android:layout_height=
"wrap_content"
/>
android:layout_height=
"wrap_content"
/>
<include
layout=
"@layout/avatar_container_large"
/>
<include
layout=
"@layout/avatar_container_large"
/>
<FrameLayout
<FrameLayout
android:layout_width=
"0px"
android:layout_width=
"0px"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:layout_marginLeft=
"@dimen/margin_8"
android:layout_marginLeft=
"@dimen/margin_8"
android:layout_marginRight=
"@dimen/margin_8"
>
android:layout_marginRight=
"@dimen/margin_8"
android:layout_weight=
"1"
>
<TextView
<TextView
android:id=
"@+id/txt_account_info"
android:id=
"@+id/txt_account_info"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:textSize=
"14sp"
android:layout_gravity=
"center_vertical"
android:layout_gravity=
"center_vertical"
android:text=
"John Doe"
/>
android:text=
"John Doe"
android:textSize=
"14sp"
/>
</FrameLayout>
</FrameLayout>
...
@@ -57,7 +63,8 @@
...
@@ -57,7 +63,8 @@
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/fa_chevron_down"
android:text=
"@string/fa_chevron_down"
android:textSize=
"16dp"
/>
android:textSize=
"16dp"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
...
...
app/src/main/res/layout/simple_screen.xml
View file @
6007fd56
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/content"
android:id=
"@+id/content"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
</FrameLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/values/colors.xml
View file @
6007fd56
app/src/main/res/values/dimens.xml
View file @
6007fd56
app/src/main/res/values/fa_strings.xml
View file @
6007fd56
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<resources>
<string
translatable=
"false"
name=
"fa_chevron_down
"
>

</string>
<string
name=
"fa_chevron_down"
translatable=
"false
"
>

</string>
</resources>
</resources>
\ No newline at end of file
app/src/main/res/values/margin_dimens.xml
View file @
6007fd56
app/src/main/res/values/strings.xml
View file @
6007fd56
app/src/main/res/values/styles.xml
View file @
6007fd56
app/src/main/res/values/user_status_colors.xml
View file @
6007fd56
app/src/main/res/values/waiting_view_attrs.xml
View file @
6007fd56
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<resources>
<declare-styleable
name=
"WaitingView"
>
<declare-styleable
name=
"WaitingView"
>
<attr
name=
"dotSize"
format=
"dimension"
/>
<attr
format=
"dimension"
name=
"dotSize"
/>
<attr
name=
"dotCount"
format=
"integer"
/>
<attr
format=
"integer"
name=
"dotCount"
/>
</declare-styleable>
</declare-styleable>
<dimen
name=
"def_waiting_view_dot_size"
>
16dp
</dimen>
<dimen
name=
"def_waiting_view_dot_size"
>
16dp
</dimen>
</resources>
</resources>
\ No newline at end of file
build.gradle
View file @
6007fd56
config/quality/checkstyle/checkstyle-suppressions.xml
deleted
100644 → 0
View file @
352f0c01
<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
<suppressions>
<!-- suppress some checks for classes extending RealmObject -->
<suppress
checks=
"MemberName|JavadocMethod"
files=
"chat[\\/]rocket[\\/]android[\\/]model"
/>
</suppressions>
\ No newline at end of file
config/quality/findbugs/android-exclude-filter.xml
View file @
6007fd56
...
@@ -8,9 +8,9 @@
...
@@ -8,9 +8,9 @@
</Match>
</Match>
<!-- All bugs in test classes, except for JUnit-specific bugs -->
<!-- All bugs in test classes, except for JUnit-specific bugs -->
<Match>
<Match>
<Class
name=
"~.*\.*Test"
/>
<Class
name=
"~.*\.*Test"
/>
<Not>
<Not>
<Bug
code=
"IJU"
/>
<Bug
code=
"IJU"
/>
</Not>
</Not>
</Match>
</Match>
...
...
config/quality/pmd/pmd-ruleset.xml
View file @
6007fd56
...
@@ -9,17 +9,17 @@
...
@@ -9,17 +9,17 @@
<exclude-pattern>
.*/R.java
</exclude-pattern>
<exclude-pattern>
.*/R.java
</exclude-pattern>
<exclude-pattern>
.*/gen/.*
</exclude-pattern>
<exclude-pattern>
.*/gen/.*
</exclude-pattern>
<rule
ref=
"rulesets/java/android.xml"
/>
<rule
ref=
"rulesets/java/android.xml"
/>
<rule
ref=
"rulesets/java/clone.xml"
/>
<rule
ref=
"rulesets/java/clone.xml"
/>
<rule
ref=
"rulesets/java/finalizers.xml"
/>
<rule
ref=
"rulesets/java/finalizers.xml"
/>
<rule
ref=
"rulesets/java/imports.xml"
>
<rule
ref=
"rulesets/java/imports.xml"
>
<!-- Espresso is designed this way !-->
<!-- Espresso is designed this way !-->
<exclude
name=
"TooManyStaticImports"
/>
<exclude
name=
"TooManyStaticImports"
/>
</rule>
</rule>
<rule
ref=
"rulesets/java/basic.xml"
/>
<rule
ref=
"rulesets/java/basic.xml"
/>
<rule
ref=
"rulesets/java/naming.xml"
>
<rule
ref=
"rulesets/java/naming.xml"
>
<!--<exclude name="AbstractNaming" />-->
<!--<exclude name="AbstractNaming" />-->
<exclude
name=
"LongVariable"
/>
<exclude
name=
"LongVariable"
/>
<!--exclude name="ShortMethodName" /-->
<!--exclude name="ShortMethodName" /-->
<!--exclude name="ShortVariable" /-->
<!--exclude name="ShortVariable" /-->
<!--<exclude name="ShortClassName" />-->
<!--<exclude name="ShortClassName" />-->
...
...
config/quality/quality.gradle
View file @
6007fd56
...
@@ -7,8 +7,7 @@
...
@@ -7,8 +7,7 @@
* - pmd
* - pmd
*
*
* The three tasks above are added as dependencies of the check task so running check will
* The three tasks above are added as dependencies of the check task so running check will
* run all of them.
* run all of them.*/
*/
apply
plugin:
'checkstyle'
apply
plugin:
'checkstyle'
apply
plugin:
'findbugs'
apply
plugin:
'findbugs'
...
@@ -35,13 +34,13 @@ task checkstyle(type: Checkstyle, group: 'Verification', description: 'Runs code
...
@@ -35,13 +34,13 @@ task checkstyle(type: Checkstyle, group: 'Verification', description: 'Runs code
}
}
}
}
classpath
=
files
(
)
classpath
=
files
(
)
}
}
task
findbugs
(
type:
FindBugs
,
task
findbugs
(
type:
FindBugs
,
group:
'Verification'
,
group:
'Verification'
,
description:
'Inspect java bytecode for bugs'
,
description:
'Inspect java bytecode for bugs'
,
dependsOn:
[
'compileDebugSources'
,
'compileReleaseSources'
])
{
dependsOn:
[
'compileDebugSources'
,
'compileReleaseSources'
])
{
ignoreFailures
=
false
ignoreFailures
=
false
effort
=
"max"
effort
=
"max"
...
...
gradle.properties
View file @
6007fd56
# Project-wide Gradle settings.
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# any settings specified in this file.
# For more details on how to configure your build environment visit
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs
=
-Xmx1536m
org.gradle.jvmargs
=
-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# 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
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
...
...
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