Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
xabber-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
xabber-android
Commits
47e05268
Commit
47e05268
authored
Jan 20, 2015
by
Grigory Fedorov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Chat options menu rewritten using xml resource. One icon added.
parent
2e99802f
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
681 additions
and
586 deletions
+681
-586
ChatViewer.java
app/src/main/java/com/xabber/android/ui/ChatViewer.java
+337
-349
ChatViewerFragment.java
...c/main/java/com/xabber/android/ui/ChatViewerFragment.java
+198
-237
ic_create_white_24dp.png
app/src/main/res/drawable-hdpi/ic_create_white_24dp.png
+0
-0
ic_create_white_24dp.png
app/src/main/res/drawable-mdpi/ic_create_white_24dp.png
+0
-0
ic_create_white_24dp.png
app/src/main/res/drawable-xhdpi/ic_create_white_24dp.png
+0
-0
ic_create_white_24dp.png
app/src/main/res/drawable-xxhdpi/ic_create_white_24dp.png
+0
-0
ic_create_white_24dp.png
app/src/main/res/drawable-xxxhdpi/ic_create_white_24dp.png
+0
-0
chat.xml
app/src/main/res/menu/chat.xml
+146
-0
No files found.
app/src/main/java/com/xabber/android/ui/ChatViewer.java
View file @
47e05268
...
...
@@ -14,15 +14,11 @@
*/
package
com
.
xabber
.
android
.
ui
;
import
java.util.Collection
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.support.v4.app.NavUtils
;
import
android.view.KeyEvent
;
import
android.view.Menu
;
import
android.view.MenuItem
;
import
android.view.View
;
import
com.xabber.android.data.ActivityManager
;
...
...
@@ -43,6 +39,8 @@ import com.xabber.android.ui.widget.PageSwitcher;
import
com.xabber.android.ui.widget.PageSwitcher.OnSelectListener
;
import
com.xabber.androiddev.R
;
import
java.util.Collection
;
/**
* Chat activity.
*
...
...
@@ -53,357 +51,347 @@ import com.xabber.androiddev.R;
*
*/
public
class
ChatViewer
extends
ManagedActivity
implements
OnSelectListener
,
OnChatChangedListener
,
OnContactChangedListener
,
OnAccountChangedListener
{
/**
* Attention request.
*/
private
static
final
String
ACTION_ATTENTION
=
"com.xabber.android.data.ATTENTION"
;
private
static
final
String
SAVED_ACCOUNT
=
"com.xabber.android.ui.ChatViewer.SAVED_ACCOUNT"
;
private
static
final
String
SAVED_USER
=
"com.xabber.android.ui.ChatViewer.SAVED_USER"
;
private
static
final
String
SAVED_EXIT_ON_SEND
=
"com.xabber.android.ui.ChatViewer.EXIT_ON_SEND"
;
private
ChatViewerAdapter
chatViewerAdapter
;
private
PageSwitcher
pageSwitcher
;
private
String
actionWithAccount
;
private
String
actionWithUser
;
private
View
actionWithView
;
private
boolean
exitOnSend
;
private
boolean
isVisible
;
@Override
public
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
if
(
isFinishing
())
return
;
Intent
intent
=
getIntent
();
String
account
=
getAccount
(
intent
);
String
user
=
getUser
(
intent
);
if
(
PageSwitcher
.
LOG
)
LogManager
.
i
(
this
,
"Intent: "
+
account
+
":"
+
user
);
if
(
account
==
null
||
user
==
null
)
{
Application
.
getInstance
().
onError
(
R
.
string
.
ENTRY_IS_NOT_FOUND
);
finish
();
return
;
}
if
(
hasAttention
(
intent
))
AttentionManager
.
getInstance
().
removeAccountNotifications
(
account
,
user
);
actionWithAccount
=
null
;
actionWithUser
=
null
;
actionWithView
=
null
;
setContentView
(
R
.
layout
.
chat_viewer
);
chatViewerAdapter
=
new
ChatViewerAdapter
(
this
,
account
,
user
);
pageSwitcher
=
(
PageSwitcher
)
findViewById
(
R
.
id
.
switcher
);
pageSwitcher
.
setAdapter
(
chatViewerAdapter
);
pageSwitcher
.
setOnSelectListener
(
this
);
if
(
savedInstanceState
!=
null
)
{
actionWithAccount
=
savedInstanceState
.
getString
(
SAVED_ACCOUNT
);
actionWithUser
=
savedInstanceState
.
getString
(
SAVED_USER
);
exitOnSend
=
savedInstanceState
.
getBoolean
(
SAVED_EXIT_ON_SEND
);
}
if
(
actionWithAccount
==
null
)
actionWithAccount
=
account
;
if
(
actionWithUser
==
null
)
actionWithUser
=
user
;
OnChatChangedListener
,
OnContactChangedListener
,
OnAccountChangedListener
{
/**
* Attention request.
*/
private
static
final
String
ACTION_ATTENTION
=
"com.xabber.android.data.ATTENTION"
;
private
static
final
String
SAVED_ACCOUNT
=
"com.xabber.android.ui.ChatViewer.SAVED_ACCOUNT"
;
private
static
final
String
SAVED_USER
=
"com.xabber.android.ui.ChatViewer.SAVED_USER"
;
private
static
final
String
SAVED_EXIT_ON_SEND
=
"com.xabber.android.ui.ChatViewer.EXIT_ON_SEND"
;
private
ChatViewerAdapter
chatViewerAdapter
;
private
PageSwitcher
pageSwitcher
;
private
String
actionWithAccount
;
private
String
actionWithUser
;
private
View
actionWithView
;
private
boolean
exitOnSend
;
private
boolean
isVisible
;
@Override
public
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
if
(
isFinishing
())
return
;
Intent
intent
=
getIntent
();
String
account
=
getAccount
(
intent
);
String
user
=
getUser
(
intent
);
if
(
PageSwitcher
.
LOG
)
LogManager
.
i
(
this
,
"Intent: "
+
account
+
":"
+
user
);
if
(
account
==
null
||
user
==
null
)
{
Application
.
getInstance
().
onError
(
R
.
string
.
ENTRY_IS_NOT_FOUND
);
finish
();
return
;
}
if
(
hasAttention
(
intent
))
AttentionManager
.
getInstance
().
removeAccountNotifications
(
account
,
user
);
actionWithAccount
=
null
;
actionWithUser
=
null
;
actionWithView
=
null
;
setContentView
(
R
.
layout
.
chat_viewer
);
chatViewerAdapter
=
new
ChatViewerAdapter
(
this
,
account
,
user
);
pageSwitcher
=
(
PageSwitcher
)
findViewById
(
R
.
id
.
switcher
);
pageSwitcher
.
setAdapter
(
chatViewerAdapter
);
pageSwitcher
.
setOnSelectListener
(
this
);
if
(
savedInstanceState
!=
null
)
{
actionWithAccount
=
savedInstanceState
.
getString
(
SAVED_ACCOUNT
);
actionWithUser
=
savedInstanceState
.
getString
(
SAVED_USER
);
exitOnSend
=
savedInstanceState
.
getBoolean
(
SAVED_EXIT_ON_SEND
);
}
if
(
actionWithAccount
==
null
)
actionWithAccount
=
account
;
if
(
actionWithUser
==
null
)
actionWithUser
=
user
;
getSupportActionBar
().
setDisplayHomeAsUpEnabled
(
true
);
selectChat
(
actionWithAccount
,
actionWithUser
);
}
@Override
protected
void
onResume
()
{
super
.
onResume
();
Application
.
getInstance
().
addUIListener
(
OnChatChangedListener
.
class
,
this
);
Application
.
getInstance
().
addUIListener
(
OnContactChangedListener
.
class
,
this
);
Application
.
getInstance
().
addUIListener
(
OnAccountChangedListener
.
class
,
this
);
chatViewerAdapter
.
onChange
();
if
(
actionWithView
!=
null
)
chatViewerAdapter
.
onChatChange
(
actionWithView
,
false
);
Intent
intent
=
getIntent
();
if
(
Intent
.
ACTION_SEND
.
equals
(
intent
.
getAction
()))
{
String
additional
=
intent
.
getStringExtra
(
Intent
.
EXTRA_TEXT
);
if
(
additional
!=
null
)
{
intent
.
removeExtra
(
Intent
.
EXTRA_TEXT
);
exitOnSend
=
true
;
if
(
actionWithView
!=
null
)
chatViewerAdapter
.
insertText
(
actionWithView
,
additional
);
}
}
isVisible
=
true
;
}
@Override
protected
void
onSaveInstanceState
(
Bundle
outState
)
{
super
.
onSaveInstanceState
(
outState
);
if
(
PageSwitcher
.
LOG
)
LogManager
.
i
(
this
,
"onSave: "
+
actionWithAccount
+
":"
+
actionWithUser
);
outState
.
putString
(
SAVED_ACCOUNT
,
actionWithAccount
);
outState
.
putString
(
SAVED_USER
,
actionWithUser
);
outState
.
putBoolean
(
SAVED_EXIT_ON_SEND
,
exitOnSend
);
}
@Override
protected
void
onPause
()
{
super
.
onPause
();
Application
.
getInstance
().
removeUIListener
(
OnChatChangedListener
.
class
,
this
);
Application
.
getInstance
().
removeUIListener
(
OnContactChangedListener
.
class
,
this
);
Application
.
getInstance
().
removeUIListener
(
OnAccountChangedListener
.
class
,
this
);
MessageManager
.
getInstance
().
removeVisibleChat
();
pageSwitcher
.
saveState
();
isVisible
=
false
;
}
@Override
protected
void
onNewIntent
(
Intent
intent
)
{
super
.
onNewIntent
(
intent
);
if
(
isFinishing
())
return
;
String
account
=
getAccount
(
intent
);
String
user
=
getUser
(
intent
);
if
(
account
==
null
||
user
==
null
)
{
return
;
}
if
(
hasAttention
(
intent
))
AttentionManager
.
getInstance
().
removeAccountNotifications
(
account
,
user
);
chatViewerAdapter
.
onChange
();
if
(!
selectChat
(
account
,
user
))
Application
.
getInstance
().
onError
(
R
.
string
.
ENTRY_IS_NOT_FOUND
);
}
@Override
public
boolean
onPrepareOptionsMenu
(
Menu
menu
)
{
super
.
onPrepareOptionsMenu
(
menu
);
menu
.
clear
();
chatViewerAdapter
.
onPrepareOptionsMenu
(
actionWithView
,
menu
);
return
true
;
}
@Override
public
boolean
onKeyDown
(
int
keyCode
,
KeyEvent
event
)
{
switch
(
keyCode
)
{
case
KeyEvent
.
KEYCODE_BACK
:
close
();
return
false
;
}
return
super
.
onKeyDown
(
keyCode
,
event
);
}
void
close
()
{
finish
();
if
(!
Intent
.
ACTION_SEND
.
equals
(
getIntent
().
getAction
()))
{
ActivityManager
.
getInstance
().
clearStack
(
false
);
if
(!
ActivityManager
.
getInstance
().
hasContactList
(
this
))
startActivity
(
ContactList
.
createIntent
(
this
));
}
}
void
onSent
()
{
if
(
exitOnSend
)
close
();
}
@Override
public
void
onSelect
()
{
BaseEntity
contactItem
=
(
BaseEntity
)
pageSwitcher
.
getSelectedItem
();
actionWithAccount
=
contactItem
.
getAccount
();
actionWithUser
=
contactItem
.
getUser
();
if
(
PageSwitcher
.
LOG
)
LogManager
.
i
(
this
,
"onSelect: "
+
actionWithAccount
+
":"
+
actionWithUser
);
actionWithView
=
pageSwitcher
.
getSelectedView
();
if
(
isVisible
)
MessageManager
.
getInstance
().
setVisibleChat
(
actionWithAccount
,
actionWithUser
);
MessageArchiveManager
.
getInstance
().
requestHistory
(
actionWithAccount
,
actionWithUser
,
0
,
MessageManager
.
getInstance
()
.
getChat
(
actionWithAccount
,
actionWithUser
)
.
getRequiredMessageCount
());
NotificationManager
.
getInstance
().
removeMessageNotification
(
actionWithAccount
,
actionWithUser
);
}
@Override
public
void
onUnselect
()
{
actionWithAccount
=
null
;
actionWithUser
=
null
;
actionWithView
=
null
;
if
(
PageSwitcher
.
LOG
)
LogManager
.
i
(
this
,
"onUnselect"
);
}
@Override
public
void
onChatChanged
(
final
String
account
,
final
String
user
,
final
boolean
incoming
)
{
BaseEntity
baseEntity
;
baseEntity
=
(
BaseEntity
)
pageSwitcher
.
getSelectedItem
();
if
(
baseEntity
!=
null
&&
baseEntity
.
equals
(
account
,
user
))
{
chatViewerAdapter
.
onChatChange
(
pageSwitcher
.
getSelectedView
(),
incoming
);
return
;
}
baseEntity
=
(
BaseEntity
)
pageSwitcher
.
getVisibleItem
();
if
(
baseEntity
!=
null
&&
baseEntity
.
equals
(
account
,
user
))
{
chatViewerAdapter
.
onChatChange
(
pageSwitcher
.
getVisibleView
(),
incoming
);
return
;
}
// Search for chat in adapter.
final
int
count
=
chatViewerAdapter
.
getCount
();
for
(
int
index
=
0
;
index
<
count
;
index
++)
if
(((
BaseEntity
)
chatViewerAdapter
.
getItem
(
index
)).
equals
(
account
,
user
))
return
;
// New chat.
chatViewerAdapter
.
onChange
();
}
@Override
public
void
onContactsChanged
(
Collection
<
BaseEntity
>
entities
)
{
BaseEntity
baseEntity
;
baseEntity
=
(
BaseEntity
)
pageSwitcher
.
getSelectedItem
();
if
(
baseEntity
!=
null
&&
entities
.
contains
(
baseEntity
))
{
chatViewerAdapter
.
onChange
();
return
;
}
baseEntity
=
(
BaseEntity
)
pageSwitcher
.
getVisibleItem
();
if
(
baseEntity
!=
null
&&
entities
.
contains
(
baseEntity
))
{
chatViewerAdapter
.
onChange
();
return
;
}
}
@Override
public
void
onAccountsChanged
(
Collection
<
String
>
accounts
)
{
BaseEntity
baseEntity
;
baseEntity
=
(
BaseEntity
)
pageSwitcher
.
getSelectedItem
();
if
(
baseEntity
!=
null
&&
accounts
.
contains
(
baseEntity
.
getAccount
()))
{
chatViewerAdapter
.
onChange
();
return
;
}
baseEntity
=
(
BaseEntity
)
pageSwitcher
.
getVisibleItem
();
if
(
baseEntity
!=
null
&&
accounts
.
contains
(
baseEntity
.
getAccount
()))
{
chatViewerAdapter
.
onChange
();
return
;
}
}
private
boolean
selectChat
(
String
account
,
String
user
)
{
for
(
int
position
=
0
;
position
<
chatViewerAdapter
.
getCount
();
position
++)
if
(((
BaseEntity
)
chatViewerAdapter
.
getItem
(
position
)).
equals
(
account
,
user
))
{
if
(
PageSwitcher
.
LOG
)
LogManager
.
i
(
this
,
"setSelection: "
+
position
+
", "
+
account
+
":"
+
user
);
pageSwitcher
.
setSelection
(
position
);
return
true
;
}
if
(
PageSwitcher
.
LOG
)
LogManager
.
i
(
this
,
"setSelection: not found, "
+
account
+
":"
+
user
);
return
false
;
}
public
int
getChatCount
()
{
return
chatViewerAdapter
.
getCount
();
}
public
int
getChatPosition
(
String
account
,
String
user
)
{
return
chatViewerAdapter
.
getPosition
(
account
,
user
);
}
public
static
Intent
createIntent
(
Context
context
,
String
account
,
String
user
)
{
return
new
EntityIntentBuilder
(
context
,
ChatViewer
.
class
)
.
setAccount
(
account
).
setUser
(
user
).
build
();
}
public
static
Intent
createClearTopIntent
(
Context
context
,
String
account
,
String
user
)
{
Intent
intent
=
createIntent
(
context
,
account
,
user
);
intent
.
setFlags
(
Intent
.
FLAG_ACTIVITY_CLEAR_TOP
);
return
intent
;
}
/**
* Create intent to send message.
*
* Contact list will not be shown on when chat will be closed.
*
* @param context
* @param account
* @param user
* @param text
* if <code>null</code> then user will be able to send a number
* of messages. Else only one message can be send.
* @return
*/
public
static
Intent
createSendIntent
(
Context
context
,
String
account
,
String
user
,
String
text
)
{
Intent
intent
=
ChatViewer
.
createIntent
(
context
,
account
,
user
);
intent
.
setAction
(
Intent
.
ACTION_SEND
);
intent
.
putExtra
(
Intent
.
EXTRA_TEXT
,
text
);
return
intent
;
}
public
static
Intent
createAttentionRequestIntent
(
Context
context
,
String
account
,
String
user
)
{
Intent
intent
=
ChatViewer
.
createClearTopIntent
(
context
,
account
,
user
);
intent
.
setAction
(
ACTION_ATTENTION
);
return
intent
;
}
private
static
String
getAccount
(
Intent
intent
)
{
String
value
=
EntityIntentBuilder
.
getAccount
(
intent
);
if
(
value
!=
null
)
return
value
;
// Backward compatibility.
return
intent
.
getStringExtra
(
"com.xabber.android.data.account"
);
}
private
static
String
getUser
(
Intent
intent
)
{
String
value
=
EntityIntentBuilder
.
getUser
(
intent
);
if
(
value
!=
null
)
return
value
;
// Backward compatibility.
return
intent
.
getStringExtra
(
"com.xabber.android.data.user"
);
}
private
static
boolean
hasAttention
(
Intent
intent
)
{
return
ACTION_ATTENTION
.
equals
(
intent
.
getAction
());
}
selectChat
(
actionWithAccount
,
actionWithUser
);
}
@Override
public
boolean
onOptionsItemSelected
(
MenuItem
item
)
{
switch
(
item
.
getItemId
())
{
// Respond to the action bar's Up/Home button
case
android
.
R
.
id
.
home
:
NavUtils
.
navigateUpFromSameTask
(
this
);
return
true
;
protected
void
onResume
()
{
super
.
onResume
();
Application
.
getInstance
().
addUIListener
(
OnChatChangedListener
.
class
,
this
);
Application
.
getInstance
().
addUIListener
(
OnContactChangedListener
.
class
,
this
);
Application
.
getInstance
().
addUIListener
(
OnAccountChangedListener
.
class
,
this
);
chatViewerAdapter
.
onChange
();
if
(
actionWithView
!=
null
)
chatViewerAdapter
.
onChatChange
(
actionWithView
,
false
);
Intent
intent
=
getIntent
();
if
(
Intent
.
ACTION_SEND
.
equals
(
intent
.
getAction
()))
{
String
additional
=
intent
.
getStringExtra
(
Intent
.
EXTRA_TEXT
);
if
(
additional
!=
null
)
{
intent
.
removeExtra
(
Intent
.
EXTRA_TEXT
);
exitOnSend
=
true
;
if
(
actionWithView
!=
null
)
chatViewerAdapter
.
insertText
(
actionWithView
,
additional
);
}
}
return
super
.
onOptionsItemSelected
(
item
);
isVisible
=
true
;
}
@Override
protected
void
onSaveInstanceState
(
Bundle
outState
)
{
super
.
onSaveInstanceState
(
outState
);
if
(
PageSwitcher
.
LOG
)
LogManager
.
i
(
this
,
"onSave: "
+
actionWithAccount
+
":"
+
actionWithUser
);
outState
.
putString
(
SAVED_ACCOUNT
,
actionWithAccount
);
outState
.
putString
(
SAVED_USER
,
actionWithUser
);
outState
.
putBoolean
(
SAVED_EXIT_ON_SEND
,
exitOnSend
);
}
@Override
protected
void
onPause
()
{
super
.
onPause
();
Application
.
getInstance
().
removeUIListener
(
OnChatChangedListener
.
class
,
this
);
Application
.
getInstance
().
removeUIListener
(
OnContactChangedListener
.
class
,
this
);
Application
.
getInstance
().
removeUIListener
(
OnAccountChangedListener
.
class
,
this
);
MessageManager
.
getInstance
().
removeVisibleChat
();
pageSwitcher
.
saveState
();
isVisible
=
false
;
}
@Override
protected
void
onNewIntent
(
Intent
intent
)
{
super
.
onNewIntent
(
intent
);
if
(
isFinishing
())
return
;
String
account
=
getAccount
(
intent
);
String
user
=
getUser
(
intent
);
if
(
account
==
null
||
user
==
null
)
{
return
;
}
if
(
hasAttention
(
intent
))
AttentionManager
.
getInstance
().
removeAccountNotifications
(
account
,
user
);
chatViewerAdapter
.
onChange
();
if
(!
selectChat
(
account
,
user
))
Application
.
getInstance
().
onError
(
R
.
string
.
ENTRY_IS_NOT_FOUND
);
}
@Override
public
boolean
onPrepareOptionsMenu
(
Menu
menu
)
{
super
.
onPrepareOptionsMenu
(
menu
);
menu
.
clear
();
chatViewerAdapter
.
onPrepareOptionsMenu
(
actionWithView
,
menu
);
return
true
;
}
@Override
public
boolean
onKeyDown
(
int
keyCode
,
KeyEvent
event
)
{
switch
(
keyCode
)
{
case
KeyEvent
.
KEYCODE_BACK
:
close
();
return
false
;
}
return
super
.
onKeyDown
(
keyCode
,
event
);
}
void
close
()
{
finish
();
if
(!
Intent
.
ACTION_SEND
.
equals
(
getIntent
().
getAction
()))
{
ActivityManager
.
getInstance
().
clearStack
(
false
);
if
(!
ActivityManager
.
getInstance
().
hasContactList
(
this
))
startActivity
(
ContactList
.
createIntent
(
this
));
}
}
void
onSent
()
{
if
(
exitOnSend
)
close
();
}
@Override
public
void
onSelect
()
{
BaseEntity
contactItem
=
(
BaseEntity
)
pageSwitcher
.
getSelectedItem
();
actionWithAccount
=
contactItem
.
getAccount
();
actionWithUser
=
contactItem
.
getUser
();
if
(
PageSwitcher
.
LOG
)
LogManager
.
i
(
this
,
"onSelect: "
+
actionWithAccount
+
":"
+
actionWithUser
);
actionWithView
=
pageSwitcher
.
getSelectedView
();
if
(
isVisible
)
MessageManager
.
getInstance
().
setVisibleChat
(
actionWithAccount
,
actionWithUser
);
MessageArchiveManager
.
getInstance
().
requestHistory
(
actionWithAccount
,
actionWithUser
,
0
,
MessageManager
.
getInstance
()
.
getChat
(
actionWithAccount
,
actionWithUser
)
.
getRequiredMessageCount
());
NotificationManager
.
getInstance
().
removeMessageNotification
(
actionWithAccount
,
actionWithUser
);
}
@Override
public
void
onUnselect
()
{
actionWithAccount
=
null
;
actionWithUser
=
null
;
actionWithView
=
null
;
if
(
PageSwitcher
.
LOG
)
LogManager
.
i
(
this
,
"onUnselect"
);
}
@Override
public
void
onChatChanged
(
final
String
account
,
final
String
user
,
final
boolean
incoming
)
{
BaseEntity
baseEntity
;
baseEntity
=
(
BaseEntity
)
pageSwitcher
.
getSelectedItem
();
if
(
baseEntity
!=
null
&&
baseEntity
.
equals
(
account
,
user
))
{
chatViewerAdapter
.
onChatChange
(
pageSwitcher
.
getSelectedView
(),
incoming
);
return
;
}
baseEntity
=
(
BaseEntity
)
pageSwitcher
.
getVisibleItem
();
if
(
baseEntity
!=
null
&&
baseEntity
.
equals
(
account
,
user
))
{
chatViewerAdapter
.
onChatChange
(
pageSwitcher
.
getVisibleView
(),
incoming
);
return
;
}
// Search for chat in adapter.
final
int
count
=
chatViewerAdapter
.
getCount
();
for
(
int
index
=
0
;
index
<
count
;
index
++)
if
(((
BaseEntity
)
chatViewerAdapter
.
getItem
(
index
)).
equals
(
account
,
user
))
return
;
// New chat.
chatViewerAdapter
.
onChange
();
}
@Override
public
void
onContactsChanged
(
Collection
<
BaseEntity
>
entities
)
{
BaseEntity
baseEntity
;
baseEntity
=
(
BaseEntity
)
pageSwitcher
.
getSelectedItem
();
if
(
baseEntity
!=
null
&&
entities
.
contains
(
baseEntity
))
{
chatViewerAdapter
.
onChange
();
return
;
}
baseEntity
=
(
BaseEntity
)
pageSwitcher
.
getVisibleItem
();
if
(
baseEntity
!=
null
&&
entities
.
contains
(
baseEntity
))
{
chatViewerAdapter
.
onChange
();
return
;
}
}
@Override
public
void
onAccountsChanged
(
Collection
<
String
>
accounts
)
{
BaseEntity
baseEntity
;
baseEntity
=
(
BaseEntity
)
pageSwitcher
.
getSelectedItem
();
if
(
baseEntity
!=
null
&&
accounts
.
contains
(
baseEntity
.
getAccount
()))
{
chatViewerAdapter
.
onChange
();
return
;
}
baseEntity
=
(
BaseEntity
)
pageSwitcher
.
getVisibleItem
();
if
(
baseEntity
!=
null
&&
accounts
.
contains
(
baseEntity
.
getAccount
()))
{
chatViewerAdapter
.
onChange
();
return
;
}
}
private
boolean
selectChat
(
String
account
,
String
user
)
{
for
(
int
position
=
0
;
position
<
chatViewerAdapter
.
getCount
();
position
++)
if
(((
BaseEntity
)
chatViewerAdapter
.
getItem
(
position
)).
equals
(
account
,
user
))
{
if
(
PageSwitcher
.
LOG
)
LogManager
.
i
(
this
,
"setSelection: "
+
position
+
", "
+
account
+
":"
+
user
);
pageSwitcher
.
setSelection
(
position
);
return
true
;
}
if
(
PageSwitcher
.
LOG
)
LogManager
.
i
(
this
,
"setSelection: not found, "
+
account
+
":"
+
user
);
return
false
;
}
public
int
getChatCount
()
{
return
chatViewerAdapter
.
getCount
();
}
public
int
getChatPosition
(
String
account
,
String
user
)
{
return
chatViewerAdapter
.
getPosition
(
account
,
user
);
}
public
static
Intent
createIntent
(
Context
context
,
String
account
,
String
user
)
{
return
new
EntityIntentBuilder
(
context
,
ChatViewer
.
class
)
.
setAccount
(
account
).
setUser
(
user
).
build
();
}
public
static
Intent
createClearTopIntent
(
Context
context
,
String
account
,
String
user
)
{
Intent
intent
=
createIntent
(
context
,
account
,
user
);
intent
.
setFlags
(
Intent
.
FLAG_ACTIVITY_CLEAR_TOP
);
return
intent
;
}
/**
* Create intent to send message.
*
* Contact list will not be shown on when chat will be closed.
*
* @param context
* @param account
* @param user
* @param text
* if <code>null</code> then user will be able to send a number
* of messages. Else only one message can be send.
* @return
*/
public
static
Intent
createSendIntent
(
Context
context
,
String
account
,
String
user
,
String
text
)
{
Intent
intent
=
ChatViewer
.
createIntent
(
context
,
account
,
user
);
intent
.
setAction
(
Intent
.
ACTION_SEND
);
intent
.
putExtra
(
Intent
.
EXTRA_TEXT
,
text
);
return
intent
;
}
public
static
Intent
createAttentionRequestIntent
(
Context
context
,
String
account
,
String
user
)
{
Intent
intent
=
ChatViewer
.
createClearTopIntent
(
context
,
account
,
user
);
intent
.
setAction
(
ACTION_ATTENTION
);
return
intent
;
}
private
static
String
getAccount
(
Intent
intent
)
{
String
value
=
EntityIntentBuilder
.
getAccount
(
intent
);
if
(
value
!=
null
)
return
value
;
// Backward compatibility.
return
intent
.
getStringExtra
(
"com.xabber.android.data.account"
);
}
private
static
String
getUser
(
Intent
intent
)
{
String
value
=
EntityIntentBuilder
.
getUser
(
intent
);
if
(
value
!=
null
)
return
value
;
// Backward compatibility.
return
intent
.
getStringExtra
(
"com.xabber.android.data.user"
);
}
private
static
boolean
hasAttention
(
Intent
intent
)
{
return
ACTION_ATTENTION
.
equals
(
intent
.
getAction
());
}
}
app/src/main/java/com/xabber/android/ui/ChatViewerFragment.java
View file @
47e05268
...
...
@@ -249,245 +249,206 @@ public class ChatViewerFragment implements OnCreateContextMenuListener {
return
view
;
}
public
boolean
onPrepareOptionsMenu
(
Menu
menu
)
{
final
String
account
=
chatMessageAdapter
.
getAccount
();
final
String
user
=
chatMessageAdapter
.
getUser
();
AbstractChat
abstractChat
=
MessageManager
.
getInstance
().
getChat
(
account
,
user
);
if
(
abstractChat
!=
null
&&
abstractChat
instanceof
RoomChat
)
{
if
(((
RoomChat
)
abstractChat
).
getState
()
==
RoomState
.
unavailable
)
menu
.
add
(
R
.
string
.
muc_join
)
.
setIcon
(
android
.
R
.
drawable
.
ic_menu_add
)
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MUCManager
.
getInstance
().
joinRoom
(
account
,
user
,
true
);
return
true
;
}
});
else
menu
.
add
(
R
.
string
.
muc_invite
)
.
setIcon
(
android
.
R
.
drawable
.
ic_menu_add
)
.
setIntent
(
ContactList
.
createRoomInviteIntent
(
getActivity
(),
account
,
user
));
}
else
{
menu
.
add
(
R
.
string
.
contact_editor
)
.
setIcon
(
android
.
R
.
drawable
.
ic_menu_edit
)
.
setIntent
(
ContactEditor
.
createIntent
(
getActivity
(),
account
,
user
));
}
menu
.
add
(
R
.
string
.
chat_list
).
setIcon
(
R
.
drawable
.
ic_menu_friendslist
)
.
setIntent
(
ChatList
.
createIntent
(
getActivity
()));
menu
.
add
(
R
.
string
.
chat_settings
)
.
setIcon
(
android
.
R
.
drawable
.
ic_menu_preferences
)
.
setIntent
(
ChatEditor
.
createIntent
(
getActivity
(),
account
,
user
));
menu
.
add
(
R
.
string
.
show_history
)
.
setIcon
(
R
.
drawable
.
ic_menu_archive
)
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MessageManager
.
getInstance
()
.
requestToLoadLocalHistory
(
account
,
user
);
MessageArchiveManager
.
getInstance
()
.
requestHistory
(
account
,
user
,
MINIMUM_MESSAGES_TO_LOAD
,
0
);
onChatChange
(
false
);
return
true
;
}
});
if
(
abstractChat
!=
null
&&
abstractChat
instanceof
RoomChat
&&
((
RoomChat
)
abstractChat
).
getState
()
!=
RoomState
.
unavailable
)
{
if
(((
RoomChat
)
abstractChat
).
getState
()
==
RoomState
.
error
)
menu
.
add
(
R
.
string
.
muc_edit
)
.
setIcon
(
android
.
R
.
drawable
.
ic_menu_edit
)
.
setIntent
(
MUCEditor
.
createIntent
(
getActivity
(),
account
,
user
));
else
menu
.
add
(
R
.
string
.
muc_leave
)
.
setIcon
(
android
.
R
.
drawable
.
ic_menu_close_clear_cancel
)
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MUCManager
.
getInstance
().
leaveRoom
(
account
,
user
);
MessageManager
.
getInstance
().
closeChat
(
account
,
user
);
NotificationManager
.
getInstance
()
.
removeMessageNotification
(
account
,
user
);
((
ChatViewer
)
getActivity
()).
close
();
return
true
;
}
});
}
else
{
menu
.
add
(
R
.
string
.
close_chat
)
.
setIcon
(
android
.
R
.
drawable
.
ic_menu_close_clear_cancel
)
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MessageManager
.
getInstance
().
closeChat
(
account
,
user
);
NotificationManager
.
getInstance
()
.
removeMessageNotification
(
account
,
user
);
((
ChatViewer
)
getActivity
()).
close
();
return
true
;
}
});
}
menu
.
add
(
R
.
string
.
clear_message
)
.
setIcon
(
R
.
drawable
.
ic_menu_stop
)
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
inputView
.
setText
(
""
);
return
true
;
}
});
menu
.
add
(
R
.
string
.
clear_history
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MessageManager
.
getInstance
()
.
clearHistory
(
account
,
user
);
onChatChange
(
false
);
return
false
;
}
});
menu
.
add
(
R
.
string
.
export_chat
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
public
boolean
onPrepareOptionsMenu
(
Menu
menu
)
{
final
String
account
=
chatMessageAdapter
.
getAccount
();
final
String
user
=
chatMessageAdapter
.
getUser
();
AbstractChat
abstractChat
=
MessageManager
.
getInstance
().
getChat
(
account
,
user
);
getActivity
().
getMenuInflater
().
inflate
(
R
.
menu
.
chat
,
menu
);
if
(
abstractChat
!=
null
&&
abstractChat
instanceof
RoomChat
)
{
if
(((
RoomChat
)
abstractChat
).
getState
()
==
RoomState
.
unavailable
)
{
MenuItem
item
=
menu
.
findItem
(
R
.
id
.
action_join_conference
);
item
.
setVisible
(
true
);
item
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MUCManager
.
getInstance
().
joinRoom
(
account
,
user
,
true
);
return
true
;
}});
}
else
{
menu
.
findItem
(
R
.
id
.
action_invite_to_chat
).
setVisible
(
true
)
.
setIntent
(
ContactList
.
createRoomInviteIntent
(
getActivity
(),
account
,
user
));
}
}
else
{
menu
.
findItem
(
R
.
id
.
action_edit_contact
).
setVisible
(
true
)
.
setIntent
(
ContactEditor
.
createIntent
(
getActivity
(),
account
,
user
));
}
menu
.
findItem
(
R
.
id
.
action_chat_list
).
setIntent
(
ChatList
.
createIntent
(
getActivity
()));
menu
.
findItem
(
R
.
id
.
action_chat_settings
)
.
setIntent
(
ChatEditor
.
createIntent
(
getActivity
(),
account
,
user
));
menu
.
findItem
(
R
.
id
.
action_show_history
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MessageManager
.
getInstance
().
requestToLoadLocalHistory
(
account
,
user
);
MessageArchiveManager
.
getInstance
()
.
requestHistory
(
account
,
user
,
MINIMUM_MESSAGES_TO_LOAD
,
0
);
onChatChange
(
false
);
return
true
;
}
});
if
(
abstractChat
!=
null
&&
abstractChat
instanceof
RoomChat
&&
((
RoomChat
)
abstractChat
).
getState
()
!=
RoomState
.
unavailable
)
{
if
(((
RoomChat
)
abstractChat
).
getState
()
==
RoomState
.
error
)
{
menu
.
findItem
(
R
.
id
.
action_authorization_settings
).
setVisible
(
true
)
.
setIntent
(
MUCEditor
.
createIntent
(
getActivity
(),
account
,
user
));
}
else
{
menu
.
findItem
(
R
.
id
.
action_leave_conference
).
setVisible
(
true
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MUCManager
.
getInstance
().
leaveRoom
(
account
,
user
);
MessageManager
.
getInstance
().
closeChat
(
account
,
user
);
NotificationManager
.
getInstance
()
.
removeMessageNotification
(
account
,
user
);
((
ChatViewer
)
getActivity
()).
close
();
return
true
;
}
});
}
}
else
{
menu
.
findItem
(
R
.
id
.
action_close_chat
).
setVisible
(
true
)
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MessageManager
.
getInstance
().
closeChat
(
account
,
user
);
NotificationManager
.
getInstance
()
.
removeMessageNotification
(
account
,
user
);
((
ChatViewer
)
getActivity
()).
close
();
return
true
;
}
});
}
menu
.
findItem
(
R
.
id
.
action_clear_text
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
inputView
.
setText
(
""
);
return
true
;
}
});
menu
.
findItem
(
R
.
id
.
action_clear_history
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MessageManager
.
getInstance
()
.
clearHistory
(
account
,
user
);
onChatChange
(
false
);
return
false
;
}
});
menu
.
findItem
(
R
.
id
.
action_export_chat
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
ChatExportDialogFragment
.
newInstance
(
account
,
user
)
.
show
(
getActivity
().
getSupportFragmentManager
(),
"CHAT_EXPORT"
);
return
true
;
}
});
if
(
abstractChat
!=
null
&&
abstractChat
instanceof
RegularChat
)
{
menu
.
findItem
(
R
.
id
.
action_call_attention
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
AttentionManager
.
getInstance
().
sendAttention
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
().
onError
(
e
);
}
return
true
;
}
});
SecurityLevel
securityLevel
=
OTRManager
.
getInstance
()
.
getSecurityLevel
(
abstractChat
.
getAccount
(),
abstractChat
.
getUser
());
if
(
securityLevel
==
SecurityLevel
.
plain
)
{
menu
.
findItem
(
R
.
id
.
action_start_encryption
).
setVisible
(
true
)
.
setEnabled
(
SettingsManager
.
securityOtrMode
()
!=
SecurityOtrMode
.
disabled
)
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
OTRManager
.
getInstance
().
startSession
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
().
onError
(
e
);
}
return
true
;
}
});
}
else
{
menu
.
findItem
(
R
.
id
.
action_restart_encryption
).
setVisible
(
true
)
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
OTRManager
.
getInstance
().
refreshSession
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
().
onError
(
e
);
}
return
true
;
}
});
}
menu
.
findItem
(
R
.
id
.
action_stop_encryption
)
.
setEnabled
(
securityLevel
!=
SecurityLevel
.
plain
)
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
OTRManager
.
getInstance
().
endSession
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
().
onError
(
e
);
}
return
true
;
}
});
menu
.
findItem
(
R
.
id
.
action_verify_with_fingerprint
)
.
setEnabled
(
securityLevel
!=
SecurityLevel
.
plain
)
.
setIntent
(
FingerprintViewer
.
createIntent
(
getActivity
(),
account
,
user
));
menu
.
findItem
(
R
.
id
.
action_verify_with_question
)
.
setEnabled
(
securityLevel
!=
SecurityLevel
.
plain
)
.
setIntent
(
QuestionViewer
.
createIntent
(
getActivity
(),
account
,
user
,
true
,
false
,
null
));
menu
.
findItem
(
R
.
id
.
action_verify_with_shared_secret
)
.
setEnabled
(
securityLevel
!=
SecurityLevel
.
plain
)
.
setIntent
(
QuestionViewer
.
createIntent
(
getActivity
(),
account
,
user
,
false
,
false
,
null
));
}
if
(
abstractChat
!=
null
&&
abstractChat
instanceof
RoomChat
&&
((
RoomChat
)
abstractChat
).
getState
()
==
RoomState
.
available
)
menu
.
findItem
(
R
.
id
.
action_list_of_occupants
).
setVisible
(
true
).
setIntent
(
OccupantList
.
createIntent
(
getActivity
(),
account
,
user
));
return
true
;
}
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
ChatExportDialogFragment
.
newInstance
(
account
,
user
)
.
show
(
getActivity
().
getSupportFragmentManager
(),
"CHAT_EXPORT"
);
return
true
;
}
});
if
(
abstractChat
!=
null
&&
abstractChat
instanceof
RegularChat
)
{
menu
.
add
(
R
.
string
.
call_attention
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
AttentionManager
.
getInstance
().
sendAttention
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
().
onError
(
e
);
}
return
true
;
}
});
SecurityLevel
securityLevel
=
OTRManager
.
getInstance
()
.
getSecurityLevel
(
abstractChat
.
getAccount
(),
abstractChat
.
getUser
());
SubMenu
otrMenu
=
menu
.
addSubMenu
(
R
.
string
.
otr_encryption
);
otrMenu
.
setHeaderTitle
(
R
.
string
.
otr_encryption
);
if
(
securityLevel
==
SecurityLevel
.
plain
)
otrMenu
.
add
(
R
.
string
.
otr_start
)
.
setEnabled
(
SettingsManager
.
securityOtrMode
()
!=
SecurityOtrMode
.
disabled
)
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
OTRManager
.
getInstance
()
.
startSession
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
()
.
onError
(
e
);
}
return
true
;
}
});
else
otrMenu
.
add
(
R
.
string
.
otr_refresh
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
OTRManager
.
getInstance
().
refreshSession
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
().
onError
(
e
);
}
return
true
;
}
});
otrMenu
.
add
(
R
.
string
.
otr_end
)
.
setEnabled
(
securityLevel
!=
SecurityLevel
.
plain
)
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
OTRManager
.
getInstance
().
endSession
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
().
onError
(
e
);
}
return
true
;
}
});
otrMenu
.
add
(
R
.
string
.
otr_verify_fingerprint
)
.
setEnabled
(
securityLevel
!=
SecurityLevel
.
plain
)
.
setIntent
(
FingerprintViewer
.
createIntent
(
getActivity
(),
account
,
user
));
otrMenu
.
add
(
R
.
string
.
otr_verify_question
)
.
setEnabled
(
securityLevel
!=
SecurityLevel
.
plain
)
.
setIntent
(
QuestionViewer
.
createIntent
(
getActivity
(),
account
,
user
,
true
,
false
,
null
));
otrMenu
.
add
(
R
.
string
.
otr_verify_secret
)
.
setEnabled
(
securityLevel
!=
SecurityLevel
.
plain
)
.
setIntent
(
QuestionViewer
.
createIntent
(
getActivity
(),
account
,
user
,
false
,
false
,
null
));
}
if
(
abstractChat
!=
null
&&
abstractChat
instanceof
RoomChat
&&
((
RoomChat
)
abstractChat
).
getState
()
==
RoomState
.
available
)
menu
.
add
(
R
.
string
.
occupant_list
).
setIntent
(
OccupantList
.
createIntent
(
getActivity
(),
account
,
user
));
return
true
;
}
@Override
public
void
onCreateContextMenu
(
ContextMenu
menu
,
View
view
,
...
...
app/src/main/res/drawable-hdpi/ic_create_white_24dp.png
0 → 100644
View file @
47e05268
339 Bytes
app/src/main/res/drawable-mdpi/ic_create_white_24dp.png
0 → 100644
View file @
47e05268
272 Bytes
app/src/main/res/drawable-xhdpi/ic_create_white_24dp.png
0 → 100644
View file @
47e05268
378 Bytes
app/src/main/res/drawable-xxhdpi/ic_create_white_24dp.png
0 → 100644
View file @
47e05268
490 Bytes
app/src/main/res/drawable-xxxhdpi/ic_create_white_24dp.png
0 → 100644
View file @
47e05268
632 Bytes
app/src/main/res/menu/chat.xml
0 → 100644
View file @
47e05268
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
>
<item
android:id=
"@+id/action_join_conference"
android:title=
"@string/muc_join"
app:showAsAction=
"ifRoom"
android:orderInCategory=
"80"
android:visible=
"false"
android:icon=
"@drawable/ic_group_white_24dp"
/>
<item
android:id=
"@+id/action_invite_to_chat"
android:title=
"@string/muc_invite"
app:showAsAction=
"never"
android:orderInCategory=
"90"
android:visible=
"false"
/>
<item
android:id=
"@+id/action_edit_contact"
android:title=
"@string/contact_editor"
app:showAsAction=
"ifRoom"
android:orderInCategory=
"100"
android:visible=
"false"
android:icon=
"@drawable/ic_create_white_24dp"
/>
<item
android:id=
"@+id/action_chat_list"
android:title=
"@string/chat_list"
app:showAsAction=
"never"
android:orderInCategory=
"110"
/>
<item
android:id=
"@+id/action_chat_settings"
android:title=
"@string/chat_settings"
app:showAsAction=
"never"
android:orderInCategory=
"120"
/>
<item
android:id=
"@+id/action_show_history"
android:title=
"@string/show_history"
app:showAsAction=
"never"
android:orderInCategory=
"130"
/>
<item
android:id=
"@+id/action_authorization_settings"
android:title=
"@string/muc_edit"
app:showAsAction=
"never"
android:orderInCategory=
"133"
android:visible=
"false"
/>
<item
android:id=
"@+id/action_leave_conference"
android:title=
"@string/muc_leave"
app:showAsAction=
"never"
android:orderInCategory=
"136"
android:visible=
"false"
/>
<item
android:id=
"@+id/action_close_chat"
android:title=
"@string/close_chat"
app:showAsAction=
"ifRoom"
android:orderInCategory=
"140"
android:visible=
"false"
android:icon=
"@drawable/ic_clear_white_24dp"
/>
<item
android:id=
"@+id/action_clear_text"
android:title=
"@string/clear_message"
app:showAsAction=
"never"
android:orderInCategory=
"150"
/>
<item
android:id=
"@+id/action_clear_history"
android:title=
"@string/clear_history"
app:showAsAction=
"never"
android:orderInCategory=
"160"
/>
<item
android:id=
"@+id/action_export_chat"
android:title=
"@string/export_chat"
app:showAsAction=
"never"
android:orderInCategory=
"170"
/>
<item
android:id=
"@+id/action_call_attention"
android:title=
"@string/call_attention"
app:showAsAction=
"never"
android:orderInCategory=
"180"
/>
<item
android:id=
"@+id/action_otr_encryption"
android:title=
"@string/otr_encryption"
app:showAsAction=
"never"
android:orderInCategory=
"190"
>
<menu>
<item
android:id=
"@+id/action_start_encryption"
android:title=
"@string/otr_start"
app:showAsAction=
"never"
android:orderInCategory=
"100"
android:visible=
"false"
/>
<item
android:id=
"@+id/action_restart_encryption"
android:title=
"@string/otr_refresh"
app:showAsAction=
"never"
android:orderInCategory=
"105"
android:visible=
"false"
/>
<item
android:id=
"@+id/action_stop_encryption"
android:title=
"@string/otr_end"
app:showAsAction=
"never"
android:orderInCategory=
"110"
/>
<item
android:id=
"@+id/action_verify_with_fingerprint"
android:title=
"@string/otr_verify_fingerprint"
app:showAsAction=
"never"
android:orderInCategory=
"120"
/>
<item
android:id=
"@+id/action_verify_with_question"
android:title=
"@string/otr_verify_question"
app:showAsAction=
"never"
android:orderInCategory=
"130"
/>
<item
android:id=
"@+id/action_verify_with_shared_secret"
android:title=
"@string/otr_verify_secret"
app:showAsAction=
"never"
android:orderInCategory=
"140"
/>
</menu>
</item>
<item
android:id=
"@+id/action_list_of_occupants"
android:title=
"@string/occupant_list"
app:showAsAction=
"never"
android:orderInCategory=
"200"
android:visible=
"false"
/>
</menu>
\ No newline at end of file
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