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
923ff5e8
Commit
923ff5e8
authored
May 28, 2013
by
Alexander Ivanov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Separate context menu creation methods.
parent
a86f961b
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
374 additions
and
325 deletions
+374
-325
ContactList.java
src/com/xabber/android/ui/ContactList.java
+10
-325
ContextMenuHelper.java
src/com/xabber/android/ui/helper/ContextMenuHelper.java
+364
-0
No files found.
src/com/xabber/android/ui/ContactList.java
View file @
923ff5e8
...
@@ -31,14 +31,12 @@ import android.net.Uri;
...
@@ -31,14 +31,12 @@ import android.net.Uri;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.os.Handler
;
import
android.os.Handler
;
import
android.os.SystemClock
;
import
android.os.SystemClock
;
import
android.support.v4.app.FragmentActivity
;
import
android.view.ContextMenu
;
import
android.view.ContextMenu
;
import
android.view.ContextMenu.ContextMenuInfo
;
import
android.view.ContextMenu.ContextMenuInfo
;
import
android.view.KeyEvent
;
import
android.view.KeyEvent
;
import
android.view.Menu
;
import
android.view.Menu
;
import
android.view.MenuItem
;
import
android.view.MenuItem
;
import
android.view.MotionEvent
;
import
android.view.MotionEvent
;
import
android.view.SubMenu
;
import
android.view.View
;
import
android.view.View
;
import
android.view.View.OnLongClickListener
;
import
android.view.View.OnLongClickListener
;
import
android.view.inputmethod.InputMethodManager
;
import
android.view.inputmethod.InputMethodManager
;
...
@@ -55,12 +53,10 @@ import com.xabber.android.data.ActivityManager;
...
@@ -55,12 +53,10 @@ import com.xabber.android.data.ActivityManager;
import
com.xabber.android.data.Application
;
import
com.xabber.android.data.Application
;
import
com.xabber.android.data.NetworkException
;
import
com.xabber.android.data.NetworkException
;
import
com.xabber.android.data.SettingsManager
;
import
com.xabber.android.data.SettingsManager
;
import
com.xabber.android.data.account.AccountItem
;
import
com.xabber.android.data.account.AccountManager
;
import
com.xabber.android.data.account.AccountManager
;
import
com.xabber.android.data.account.OnAccountChangedListener
;
import
com.xabber.android.data.account.OnAccountChangedListener
;
import
com.xabber.android.data.account.StatusMode
;
import
com.xabber.android.data.account.StatusMode
;
import
com.xabber.android.data.connection.ConnectionManager
;
import
com.xabber.android.data.connection.ConnectionManager
;
import
com.xabber.android.data.connection.ConnectionState
;
import
com.xabber.android.data.entity.BaseEntity
;
import
com.xabber.android.data.entity.BaseEntity
;
import
com.xabber.android.data.extension.avatar.AvatarManager
;
import
com.xabber.android.data.extension.avatar.AvatarManager
;
import
com.xabber.android.data.extension.muc.MUCManager
;
import
com.xabber.android.data.extension.muc.MUCManager
;
...
@@ -70,27 +66,20 @@ import com.xabber.android.data.message.MessageManager;
...
@@ -70,27 +66,20 @@ import com.xabber.android.data.message.MessageManager;
import
com.xabber.android.data.message.OnChatChangedListener
;
import
com.xabber.android.data.message.OnChatChangedListener
;
import
com.xabber.android.data.notification.NotificationManager
;
import
com.xabber.android.data.notification.NotificationManager
;
import
com.xabber.android.data.roster.AbstractContact
;
import
com.xabber.android.data.roster.AbstractContact
;
import
com.xabber.android.data.roster.GroupManager
;
import
com.xabber.android.data.roster.OnContactChangedListener
;
import
com.xabber.android.data.roster.OnContactChangedListener
;
import
com.xabber.android.data.roster.PresenceManager
;
import
com.xabber.android.data.roster.RosterContact
;
import
com.xabber.android.data.roster.RosterContact
;
import
com.xabber.android.data.roster.RosterManager
;
import
com.xabber.android.data.roster.RosterManager
;
import
com.xabber.android.data.roster.ShowOfflineMode
;
import
com.xabber.android.ui.adapter.AccountConfiguration
;
import
com.xabber.android.ui.adapter.AccountConfiguration
;
import
com.xabber.android.ui.adapter.AccountToggleAdapter
;
import
com.xabber.android.ui.adapter.AccountToggleAdapter
;
import
com.xabber.android.ui.adapter.ContactListAdapter
;
import
com.xabber.android.ui.adapter.ContactListAdapter
;
import
com.xabber.android.ui.adapter.GroupConfiguration
;
import
com.xabber.android.ui.adapter.GroupConfiguration
;
import
com.xabber.android.ui.adapter.UpdatableAdapter
;
import
com.xabber.android.ui.dialog.AccountChooseDialogFragment
;
import
com.xabber.android.ui.dialog.AccountChooseDialogFragment
;
import
com.xabber.android.ui.dialog.AccountChooseDialogFragment.OnChoosedListener
;
import
com.xabber.android.ui.dialog.AccountChooseDialogFragment.OnChoosedListener
;
import
com.xabber.android.ui.dialog.ConfirmDialogListener
;
import
com.xabber.android.ui.dialog.ConfirmDialogListener
;
import
com.xabber.android.ui.dialog.ContactDeleteDialogFragment
;
import
com.xabber.android.ui.dialog.ContactIntegrationDialogFragment
;
import
com.xabber.android.ui.dialog.ContactIntegrationDialogFragment
;
import
com.xabber.android.ui.dialog.DialogBuilder
;
import
com.xabber.android.ui.dialog.DialogBuilder
;
import
com.xabber.android.ui.dialog.GroupDeleteDialogFragment
;
import
com.xabber.android.ui.dialog.GroupRenameDialogFragment
;
import
com.xabber.android.ui.dialog.MUCDeleteDialogFragment
;
import
com.xabber.android.ui.dialog.StartAtBootDialogFragment
;
import
com.xabber.android.ui.dialog.StartAtBootDialogFragment
;
import
com.xabber.android.ui.helper.ContextMenuHelper
;
import
com.xabber.android.ui.helper.ManagedListActivity
;
import
com.xabber.android.ui.helper.ManagedListActivity
;
import
com.xabber.androiddev.R
;
import
com.xabber.androiddev.R
;
import
com.xabber.xmpp.address.Jid
;
import
com.xabber.xmpp.address.Jid
;
...
@@ -126,8 +115,6 @@ public class ContactList extends ManagedListActivity implements
...
@@ -126,8 +115,6 @@ public class ContactList extends ManagedListActivity implements
private
static
final
int
OPTION_MENU_SEARCH_ID
=
0x0A
;
private
static
final
int
OPTION_MENU_SEARCH_ID
=
0x0A
;
private
static
final
int
OPTION_MENU_CLOSE_CHATS_ID
=
0x0B
;
private
static
final
int
OPTION_MENU_CLOSE_CHATS_ID
=
0x0B
;
private
static
final
int
CONTEXT_MENU_SHOW_OFFLINE_GROUP_ID
=
0x40
;
private
static
final
int
DIALOG_CLOSE_APPLICATION_ID
=
0x57
;
private
static
final
int
DIALOG_CLOSE_APPLICATION_ID
=
0x57
;
/**
/**
...
@@ -449,299 +436,24 @@ public class ContactList extends ManagedListActivity implements
...
@@ -449,299 +436,24 @@ public class ContactList extends ManagedListActivity implements
// Account toggler
// Account toggler
return
;
return
;
if
(
baseEntity
instanceof
AbstractContact
)
{
if
(
baseEntity
instanceof
AbstractContact
)
{
createContactContextMenu
(
this
,
contactListAdapter
,
ContextMenuHelper
.
createContactContextMenu
(
this
,
(
AbstractContact
)
baseEntity
,
menu
);
contactListAdapter
,
(
AbstractContact
)
baseEntity
,
menu
);
}
else
if
(
baseEntity
instanceof
AccountConfiguration
)
{
}
else
if
(
baseEntity
instanceof
AccountConfiguration
)
{
createAccountContextMenu
(
this
,
contactListAdapter
,
ContextMenuHelper
.
createAccountContextMenu
(
this
,
baseEntity
.
getAccount
(),
menu
);
contactListAdapter
,
baseEntity
.
getAccount
(),
menu
);
}
else
if
(
baseEntity
instanceof
GroupConfiguration
)
{
}
else
if
(
baseEntity
instanceof
GroupConfiguration
)
{
createGroupContextMenu
(
this
,
contactListAdapter
,
ContextMenuHelper
.
createGroupContextMenu
(
this
,
baseEntity
.
getAccount
(),
baseEntity
.
getUser
(),
menu
);
contactListAdapter
,
baseEntity
.
getAccount
(),
baseEntity
.
getUser
(),
menu
);
}
}
}
else
{
}
else
{
// Account panel
// Account panel
createAccountContextMenu
(
this
,
contactListAdapter
,
ContextMenuHelper
.
createAccountContextMenu
(
this
,
contactListAdapter
,
accountToggleAdapter
.
getItemForView
(
view
),
menu
);
accountToggleAdapter
.
getItemForView
(
view
),
menu
);
}
}
}
}
private
static
void
createContactContextMenu
(
final
FragmentActivity
activity
,
final
UpdatableAdapter
adapter
,
AbstractContact
abstractContact
,
ContextMenu
menu
)
{
final
String
account
=
abstractContact
.
getAccount
();
final
String
user
=
abstractContact
.
getUser
();
menu
.
setHeaderTitle
(
abstractContact
.
getName
());
menu
.
add
(
R
.
string
.
chat_viewer
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MessageManager
.
getInstance
().
openChat
(
account
,
user
);
activity
.
startActivity
(
ChatViewer
.
createIntent
(
activity
,
account
,
user
));
return
true
;
}
});
if
(
MUCManager
.
getInstance
().
hasRoom
(
account
,
user
))
{
if
(!
MUCManager
.
getInstance
().
inUse
(
account
,
user
))
menu
.
add
(
R
.
string
.
muc_edit
).
setIntent
(
MUCEditor
.
createIntent
(
activity
,
account
,
user
));
menu
.
add
(
R
.
string
.
muc_delete
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MUCDeleteDialogFragment
.
newInstance
(
account
,
user
)
.
show
(
activity
.
getSupportFragmentManager
(),
"MUC_DELETE"
);
return
true
;
}
});
if
(
MUCManager
.
getInstance
().
isDisabled
(
account
,
user
))
menu
.
add
(
R
.
string
.
muc_join
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MUCManager
.
getInstance
().
joinRoom
(
account
,
user
,
true
);
return
true
;
}
});
else
menu
.
add
(
R
.
string
.
muc_leave
).
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
);
adapter
.
onChange
();
return
true
;
}
});
}
else
{
menu
.
add
(
R
.
string
.
contact_viewer
).
setIntent
(
ContactViewer
.
createIntent
(
activity
,
account
,
user
));
menu
.
add
(
R
.
string
.
contact_editor
).
setIntent
(
ContactEditor
.
createIntent
(
activity
,
account
,
user
));
menu
.
add
(
R
.
string
.
contact_delete
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
ContactDeleteDialogFragment
.
newInstance
(
account
,
user
).
show
(
activity
.
getSupportFragmentManager
(),
"CONTACT_DELETE"
);
return
true
;
}
});
if
(
MessageManager
.
getInstance
().
hasActiveChat
(
account
,
user
))
menu
.
add
(
R
.
string
.
close_chat
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MessageManager
.
getInstance
().
closeChat
(
account
,
user
);
NotificationManager
.
getInstance
()
.
removeMessageNotification
(
account
,
user
);
adapter
.
onChange
();
return
true
;
}
});
if
(
abstractContact
.
getStatusMode
()
==
StatusMode
.
unsubscribed
)
menu
.
add
(
R
.
string
.
request_subscription
)
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
PresenceManager
.
getInstance
()
.
requestSubscription
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
()
.
onError
(
e
);
}
return
true
;
}
});
}
if
(
PresenceManager
.
getInstance
().
hasSubscriptionRequest
(
account
,
user
))
{
menu
.
add
(
R
.
string
.
accept_subscription
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
PresenceManager
.
getInstance
()
.
acceptSubscription
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
().
onError
(
e
);
}
activity
.
startActivity
(
ContactEditor
.
createIntent
(
activity
,
account
,
user
));
return
true
;
}
});
menu
.
add
(
R
.
string
.
discard_subscription
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
PresenceManager
.
getInstance
()
.
discardSubscription
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
().
onError
(
e
);
}
return
true
;
}
});
}
}
private
static
void
createGroupContextMenu
(
final
FragmentActivity
activity
,
UpdatableAdapter
adapter
,
final
String
account
,
final
String
group
,
ContextMenu
menu
)
{
menu
.
setHeaderTitle
(
GroupManager
.
getInstance
().
getGroupName
(
account
,
group
));
if
(
group
!=
GroupManager
.
ACTIVE_CHATS
&&
group
!=
GroupManager
.
IS_ROOM
)
{
menu
.
add
(
R
.
string
.
group_rename
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
GroupRenameDialogFragment
.
newInstance
(
account
==
GroupManager
.
NO_ACCOUNT
?
null
:
account
,
group
==
GroupManager
.
NO_GROUP
?
null
:
group
).
show
(
activity
.
getSupportFragmentManager
(),
"GROUP_RENAME"
);
return
true
;
}
});
if
(
group
!=
GroupManager
.
NO_GROUP
)
menu
.
add
(
R
.
string
.
group_remove
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
GroupDeleteDialogFragment
.
newInstance
(
account
==
GroupManager
.
NO_ACCOUNT
?
null
:
account
,
group
)
.
show
(
activity
.
getSupportFragmentManager
(),
"GROUP_DELETE"
);
return
true
;
}
});
}
createOfflineModeContextMenu
(
adapter
,
account
,
group
,
menu
);
}
private
static
void
createAccountContextMenu
(
final
FragmentActivity
activity
,
UpdatableAdapter
adapter
,
final
String
account
,
ContextMenu
menu
)
{
menu
.
setHeaderTitle
(
AccountManager
.
getInstance
()
.
getVerboseName
(
account
));
AccountItem
accountItem
=
AccountManager
.
getInstance
().
getAccount
(
account
);
ConnectionState
state
=
accountItem
.
getState
();
if
(
state
==
ConnectionState
.
waiting
)
menu
.
add
(
R
.
string
.
account_reconnect
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
if
(
AccountManager
.
getInstance
()
.
getAccount
(
account
).
updateConnection
(
true
))
AccountManager
.
getInstance
().
onAccountChanged
(
account
);
return
true
;
}
});
menu
.
add
(
R
.
string
.
status_editor
).
setIntent
(
StatusEditor
.
createIntent
(
activity
,
account
));
menu
.
add
(
R
.
string
.
account_editor
).
setIntent
(
AccountEditor
.
createIntent
(
activity
,
account
));
if
(
state
.
isConnected
())
{
menu
.
add
(
R
.
string
.
contact_viewer
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
String
user
=
AccountManager
.
getInstance
()
.
getAccount
(
account
).
getRealJid
();
if
(
user
==
null
)
Application
.
getInstance
().
onError
(
R
.
string
.
NOT_CONNECTED
);
else
{
activity
.
startActivity
(
ContactViewer
.
createIntent
(
activity
,
account
,
user
));
}
return
true
;
}
});
menu
.
add
(
R
.
string
.
contact_add
).
setIntent
(
ContactAdd
.
createIntent
(
activity
,
account
));
}
if
(
SettingsManager
.
contactsShowAccounts
())
createOfflineModeContextMenu
(
adapter
,
account
,
null
,
menu
);
}
private
static
void
createOfflineModeContextMenu
(
UpdatableAdapter
adapter
,
String
account
,
String
group
,
ContextMenu
menu
)
{
SubMenu
mapMode
=
menu
.
addSubMenu
(
R
.
string
.
show_offline_settings
);
mapMode
.
setHeaderTitle
(
R
.
string
.
show_offline_settings
);
MenuItem
always
=
mapMode
.
add
(
CONTEXT_MENU_SHOW_OFFLINE_GROUP_ID
,
0
,
0
,
R
.
string
.
show_offline_always
).
setOnMenuItemClickListener
(
new
OfflineModeClickListener
(
adapter
,
account
,
group
,
ShowOfflineMode
.
always
));
MenuItem
normal
=
mapMode
.
add
(
CONTEXT_MENU_SHOW_OFFLINE_GROUP_ID
,
0
,
0
,
R
.
string
.
show_offline_normal
).
setOnMenuItemClickListener
(
new
OfflineModeClickListener
(
adapter
,
account
,
group
,
ShowOfflineMode
.
normal
));
MenuItem
never
=
mapMode
.
add
(
CONTEXT_MENU_SHOW_OFFLINE_GROUP_ID
,
0
,
0
,
R
.
string
.
show_offline_never
).
setOnMenuItemClickListener
(
new
OfflineModeClickListener
(
adapter
,
account
,
group
,
ShowOfflineMode
.
never
));
mapMode
.
setGroupCheckable
(
CONTEXT_MENU_SHOW_OFFLINE_GROUP_ID
,
true
,
true
);
ShowOfflineMode
showOfflineMode
=
GroupManager
.
getInstance
()
.
getShowOfflineMode
(
account
,
group
==
null
?
GroupManager
.
IS_ACCOUNT
:
group
);
if
(
showOfflineMode
==
ShowOfflineMode
.
always
)
always
.
setChecked
(
true
);
else
if
(
showOfflineMode
==
ShowOfflineMode
.
normal
)
normal
.
setChecked
(
true
);
else
if
(
showOfflineMode
==
ShowOfflineMode
.
never
)
never
.
setChecked
(
true
);
else
throw
new
IllegalStateException
();
}
@Override
@Override
protected
Dialog
onCreateDialog
(
int
id
)
{
protected
Dialog
onCreateDialog
(
int
id
)
{
super
.
onCreateDialog
(
id
);
super
.
onCreateDialog
(
id
);
...
@@ -1003,33 +715,6 @@ public class ContactList extends ManagedListActivity implements
...
@@ -1003,33 +715,6 @@ public class ContactList extends ManagedListActivity implements
0
);
0
);
}
}
private
static
class
OfflineModeClickListener
implements
MenuItem
.
OnMenuItemClickListener
{
private
final
UpdatableAdapter
adapter
;
private
final
String
account
;
private
final
String
group
;
private
final
ShowOfflineMode
mode
;
public
OfflineModeClickListener
(
UpdatableAdapter
adapter
,
String
account
,
String
group
,
ShowOfflineMode
mode
)
{
super
();
this
.
adapter
=
adapter
;
this
.
account
=
account
;
this
.
group
=
group
;
this
.
mode
=
mode
;
}
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
GroupManager
.
getInstance
().
setShowOfflineMode
(
account
,
group
==
null
?
GroupManager
.
IS_ACCOUNT
:
group
,
mode
);
adapter
.
onChange
();
return
true
;
}
}
public
static
Intent
createPersistentIntent
(
Context
context
)
{
public
static
Intent
createPersistentIntent
(
Context
context
)
{
Intent
intent
=
new
Intent
(
context
,
ContactList
.
class
);
Intent
intent
=
new
Intent
(
context
,
ContactList
.
class
);
intent
.
setAction
(
"android.intent.action.MAIN"
);
intent
.
setAction
(
"android.intent.action.MAIN"
);
...
...
src/com/xabber/android/ui/helper/ContextMenuHelper.java
0 → 100644
View file @
923ff5e8
/**
* Copyright (c) 2013, Redsolution LTD. All rights reserved.
*
* This file is part of Xabber project; you can redistribute it and/or
* modify it under the terms of the GNU General Public License, Version 3.
*
* Xabber is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License,
* along with this program. If not, see http://www.gnu.org/licenses/.
*/
package
com
.
xabber
.
android
.
ui
.
helper
;
import
android.support.v4.app.FragmentActivity
;
import
android.view.ContextMenu
;
import
android.view.MenuItem
;
import
android.view.SubMenu
;
import
com.xabber.android.data.Application
;
import
com.xabber.android.data.NetworkException
;
import
com.xabber.android.data.SettingsManager
;
import
com.xabber.android.data.account.AccountItem
;
import
com.xabber.android.data.account.AccountManager
;
import
com.xabber.android.data.account.StatusMode
;
import
com.xabber.android.data.connection.ConnectionState
;
import
com.xabber.android.data.extension.muc.MUCManager
;
import
com.xabber.android.data.message.MessageManager
;
import
com.xabber.android.data.notification.NotificationManager
;
import
com.xabber.android.data.roster.AbstractContact
;
import
com.xabber.android.data.roster.GroupManager
;
import
com.xabber.android.data.roster.PresenceManager
;
import
com.xabber.android.data.roster.ShowOfflineMode
;
import
com.xabber.android.ui.AccountEditor
;
import
com.xabber.android.ui.ChatViewer
;
import
com.xabber.android.ui.ContactAdd
;
import
com.xabber.android.ui.ContactEditor
;
import
com.xabber.android.ui.ContactViewer
;
import
com.xabber.android.ui.MUCEditor
;
import
com.xabber.android.ui.StatusEditor
;
import
com.xabber.android.ui.adapter.UpdatableAdapter
;
import
com.xabber.android.ui.dialog.ContactDeleteDialogFragment
;
import
com.xabber.android.ui.dialog.GroupDeleteDialogFragment
;
import
com.xabber.android.ui.dialog.GroupRenameDialogFragment
;
import
com.xabber.android.ui.dialog.MUCDeleteDialogFragment
;
import
com.xabber.androiddev.R
;
/**
* Helper class for context menu creation.
*
* @author alexander.ivanov
*
*/
public
class
ContextMenuHelper
{
private
ContextMenuHelper
()
{
}
public
static
void
createContactContextMenu
(
final
FragmentActivity
activity
,
final
UpdatableAdapter
adapter
,
AbstractContact
abstractContact
,
ContextMenu
menu
)
{
final
String
account
=
abstractContact
.
getAccount
();
final
String
user
=
abstractContact
.
getUser
();
menu
.
setHeaderTitle
(
abstractContact
.
getName
());
menu
.
add
(
R
.
string
.
chat_viewer
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MessageManager
.
getInstance
().
openChat
(
account
,
user
);
activity
.
startActivity
(
ChatViewer
.
createIntent
(
activity
,
account
,
user
));
return
true
;
}
});
if
(
MUCManager
.
getInstance
().
hasRoom
(
account
,
user
))
{
if
(!
MUCManager
.
getInstance
().
inUse
(
account
,
user
))
menu
.
add
(
R
.
string
.
muc_edit
).
setIntent
(
MUCEditor
.
createIntent
(
activity
,
account
,
user
));
menu
.
add
(
R
.
string
.
muc_delete
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MUCDeleteDialogFragment
.
newInstance
(
account
,
user
)
.
show
(
activity
.
getSupportFragmentManager
(),
"MUC_DELETE"
);
return
true
;
}
});
if
(
MUCManager
.
getInstance
().
isDisabled
(
account
,
user
))
menu
.
add
(
R
.
string
.
muc_join
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MUCManager
.
getInstance
().
joinRoom
(
account
,
user
,
true
);
return
true
;
}
});
else
menu
.
add
(
R
.
string
.
muc_leave
).
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
);
adapter
.
onChange
();
return
true
;
}
});
}
else
{
menu
.
add
(
R
.
string
.
contact_viewer
).
setIntent
(
ContactViewer
.
createIntent
(
activity
,
account
,
user
));
menu
.
add
(
R
.
string
.
contact_editor
).
setIntent
(
ContactEditor
.
createIntent
(
activity
,
account
,
user
));
menu
.
add
(
R
.
string
.
contact_delete
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
ContactDeleteDialogFragment
.
newInstance
(
account
,
user
).
show
(
activity
.
getSupportFragmentManager
(),
"CONTACT_DELETE"
);
return
true
;
}
});
if
(
MessageManager
.
getInstance
().
hasActiveChat
(
account
,
user
))
menu
.
add
(
R
.
string
.
close_chat
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
MessageManager
.
getInstance
().
closeChat
(
account
,
user
);
NotificationManager
.
getInstance
()
.
removeMessageNotification
(
account
,
user
);
adapter
.
onChange
();
return
true
;
}
});
if
(
abstractContact
.
getStatusMode
()
==
StatusMode
.
unsubscribed
)
menu
.
add
(
R
.
string
.
request_subscription
)
.
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
PresenceManager
.
getInstance
()
.
requestSubscription
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
()
.
onError
(
e
);
}
return
true
;
}
});
}
if
(
PresenceManager
.
getInstance
().
hasSubscriptionRequest
(
account
,
user
))
{
menu
.
add
(
R
.
string
.
accept_subscription
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
PresenceManager
.
getInstance
()
.
acceptSubscription
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
().
onError
(
e
);
}
activity
.
startActivity
(
ContactEditor
.
createIntent
(
activity
,
account
,
user
));
return
true
;
}
});
menu
.
add
(
R
.
string
.
discard_subscription
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
try
{
PresenceManager
.
getInstance
()
.
discardSubscription
(
account
,
user
);
}
catch
(
NetworkException
e
)
{
Application
.
getInstance
().
onError
(
e
);
}
return
true
;
}
});
}
}
public
static
void
createGroupContextMenu
(
final
FragmentActivity
activity
,
UpdatableAdapter
adapter
,
final
String
account
,
final
String
group
,
ContextMenu
menu
)
{
menu
.
setHeaderTitle
(
GroupManager
.
getInstance
().
getGroupName
(
account
,
group
));
if
(
group
!=
GroupManager
.
ACTIVE_CHATS
&&
group
!=
GroupManager
.
IS_ROOM
)
{
menu
.
add
(
R
.
string
.
group_rename
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
GroupRenameDialogFragment
.
newInstance
(
account
==
GroupManager
.
NO_ACCOUNT
?
null
:
account
,
group
==
GroupManager
.
NO_GROUP
?
null
:
group
).
show
(
activity
.
getSupportFragmentManager
(),
"GROUP_RENAME"
);
return
true
;
}
});
if
(
group
!=
GroupManager
.
NO_GROUP
)
menu
.
add
(
R
.
string
.
group_remove
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
GroupDeleteDialogFragment
.
newInstance
(
account
==
GroupManager
.
NO_ACCOUNT
?
null
:
account
,
group
)
.
show
(
activity
.
getSupportFragmentManager
(),
"GROUP_DELETE"
);
return
true
;
}
});
}
createOfflineModeContextMenu
(
adapter
,
account
,
group
,
menu
);
}
public
static
void
createAccountContextMenu
(
final
FragmentActivity
activity
,
UpdatableAdapter
adapter
,
final
String
account
,
ContextMenu
menu
)
{
menu
.
setHeaderTitle
(
AccountManager
.
getInstance
()
.
getVerboseName
(
account
));
AccountItem
accountItem
=
AccountManager
.
getInstance
().
getAccount
(
account
);
ConnectionState
state
=
accountItem
.
getState
();
if
(
state
==
ConnectionState
.
waiting
)
menu
.
add
(
R
.
string
.
account_reconnect
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
if
(
AccountManager
.
getInstance
()
.
getAccount
(
account
).
updateConnection
(
true
))
AccountManager
.
getInstance
().
onAccountChanged
(
account
);
return
true
;
}
});
menu
.
add
(
R
.
string
.
status_editor
).
setIntent
(
StatusEditor
.
createIntent
(
activity
,
account
));
menu
.
add
(
R
.
string
.
account_editor
).
setIntent
(
AccountEditor
.
createIntent
(
activity
,
account
));
if
(
state
.
isConnected
())
{
menu
.
add
(
R
.
string
.
contact_viewer
).
setOnMenuItemClickListener
(
new
MenuItem
.
OnMenuItemClickListener
()
{
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
String
user
=
AccountManager
.
getInstance
()
.
getAccount
(
account
).
getRealJid
();
if
(
user
==
null
)
Application
.
getInstance
().
onError
(
R
.
string
.
NOT_CONNECTED
);
else
{
activity
.
startActivity
(
ContactViewer
.
createIntent
(
activity
,
account
,
user
));
}
return
true
;
}
});
menu
.
add
(
R
.
string
.
contact_add
).
setIntent
(
ContactAdd
.
createIntent
(
activity
,
account
));
}
if
(
SettingsManager
.
contactsShowAccounts
())
createOfflineModeContextMenu
(
adapter
,
account
,
null
,
menu
);
}
private
static
void
createOfflineModeContextMenu
(
UpdatableAdapter
adapter
,
String
account
,
String
group
,
ContextMenu
menu
)
{
SubMenu
mapMode
=
menu
.
addSubMenu
(
R
.
string
.
show_offline_settings
);
mapMode
.
setHeaderTitle
(
R
.
string
.
show_offline_settings
);
MenuItem
always
=
mapMode
.
add
(
R
.
string
.
show_offline_settings
,
0
,
0
,
R
.
string
.
show_offline_always
).
setOnMenuItemClickListener
(
new
OfflineModeClickListener
(
adapter
,
account
,
group
,
ShowOfflineMode
.
always
));
MenuItem
normal
=
mapMode
.
add
(
R
.
string
.
show_offline_settings
,
0
,
0
,
R
.
string
.
show_offline_normal
).
setOnMenuItemClickListener
(
new
OfflineModeClickListener
(
adapter
,
account
,
group
,
ShowOfflineMode
.
normal
));
MenuItem
never
=
mapMode
.
add
(
R
.
string
.
show_offline_settings
,
0
,
0
,
R
.
string
.
show_offline_never
).
setOnMenuItemClickListener
(
new
OfflineModeClickListener
(
adapter
,
account
,
group
,
ShowOfflineMode
.
never
));
mapMode
.
setGroupCheckable
(
R
.
string
.
show_offline_settings
,
true
,
true
);
ShowOfflineMode
showOfflineMode
=
GroupManager
.
getInstance
()
.
getShowOfflineMode
(
account
,
group
==
null
?
GroupManager
.
IS_ACCOUNT
:
group
);
if
(
showOfflineMode
==
ShowOfflineMode
.
always
)
always
.
setChecked
(
true
);
else
if
(
showOfflineMode
==
ShowOfflineMode
.
normal
)
normal
.
setChecked
(
true
);
else
if
(
showOfflineMode
==
ShowOfflineMode
.
never
)
never
.
setChecked
(
true
);
else
throw
new
IllegalStateException
();
}
private
static
class
OfflineModeClickListener
implements
MenuItem
.
OnMenuItemClickListener
{
private
final
UpdatableAdapter
adapter
;
private
final
String
account
;
private
final
String
group
;
private
final
ShowOfflineMode
mode
;
public
OfflineModeClickListener
(
UpdatableAdapter
adapter
,
String
account
,
String
group
,
ShowOfflineMode
mode
)
{
super
();
this
.
adapter
=
adapter
;
this
.
account
=
account
;
this
.
group
=
group
;
this
.
mode
=
mode
;
}
@Override
public
boolean
onMenuItemClick
(
MenuItem
item
)
{
GroupManager
.
getInstance
().
setShowOfflineMode
(
account
,
group
==
null
?
GroupManager
.
IS_ACCOUNT
:
group
,
mode
);
adapter
.
onChange
();
return
true
;
}
}
}
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