Minor refactoring

This commit is contained in:
nielsandriesse 2020-08-18 08:55:17 +10:00
parent 18870b7e7b
commit 5b641f4415
11 changed files with 60 additions and 86 deletions

View File

@ -89,19 +89,6 @@
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/large_spacing"
android:layout_marginTop="@dimen/medium_spacing"
android:layout_marginRight="@dimen/large_spacing"
android:layout_marginBottom="@dimen/medium_spacing"
android:textSize="@dimen/small_font_size"
android:textColor="@color/text"
android:alpha="0.6"
android:textAlignment="center"
android:text="@string/activity_edit_closed_group_explanation" />
<View
android:layout_width="match_parent"
android:layout_height="1px"

View File

@ -17,12 +17,4 @@
android:textColor="@color/text"
android:text="@string/fragment_edit_group_bottom_sheet_remove"/>
<!-- <TextView-->
<!-- android:id="@+id/makeAdministrator"-->
<!-- style="@style/ActionItem"-->
<!-- android:drawableStart="@drawable/ic_edit_white_24dp"-->
<!-- android:textSize="@dimen/medium_font_size"-->
<!-- android:textColor="@color/text"-->
<!-- android:text="@string/fragment_edit_group_bottom_sheet_admin" />-->
</LinearLayout>

View File

@ -37,7 +37,7 @@
android:layout_weight="1" />
<ImageView
android:id="@+id/tickImageView"
android:id="@+id/actionIndicatorImageView"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="@dimen/medium_spacing"

View File

@ -1751,25 +1751,6 @@
<string name="activity_create_closed_group_too_many_group_members_error">A closed group cannot have more than 10 members</string>
<string name="activity_create_closed_group_invalid_session_id_error">One of the members of your group has an invalid Session ID</string>
<string name="activity_edit_closed_group_title">Edit Closed Group</string>
<string name="activity_edit_closed_group_edit_text_hint">Enter a new group name</string>
<string name="activity_edit_closed_group_explanation">Closed groups support up to 10 members and provide the same privacy protections as one-on-one sessions.</string>
<string name="activity_edit_closed_group_edit_members">Edit members</string>
<string name="activity_edit_closed_group_add_members">Add members</string>
<string name="activity_edit_closed_group_group_name_missing_error">Group name can\'t be empty</string>
<string name="activity_edit_closed_group_group_name_too_long_error">Please enter a shorter group name</string>
<string name="activity_edit_closed_group_not_enough_group_members_error">Groups must have at least 2 group members</string>
<string name="activity_edit_closed_group_too_many_group_members_error">A closed group cannot have more than 10 members</string>
<string name="activity_edit_closed_group_invalid_session_id_error">One of the members of your group has an invalid Session ID</string>
<string name="activity_edit_closed_group_confirm_removal">Are you sure you want to remove this user?</string>
<string name="activity_edit_closed_group_member_removed">User removed from group</string>
<string name="fragment_edit_group_bottom_sheet_remove">Remove user from group</string>
<string name="fragment_edit_group_bottom_sheet_admin">Make this user a group admin</string>
<string name="activity_select_contacts_title">Select Contacts</string>
<string name="activity_join_public_chat_title">Join Open Group</string>
<string name="activity_join_public_chat_error">Couldn\'t join group</string>
<string name="activity_join_public_chat_enter_group_url_tab_title">Open Group URL</string>
@ -1852,4 +1833,22 @@
<string name="menu_apply_button">Apply</string>
<string name="menu_done_button">Done</string>
<!-- Next round of translation -->
<string name="activity_edit_closed_group_title">Edit Closed Group</string>
<string name="activity_edit_closed_group_edit_text_hint">Enter a new group name</string>
<string name="activity_edit_closed_group_edit_members">Edit members</string>
<string name="activity_edit_closed_group_add_members">Add members</string>
<string name="activity_edit_closed_group_group_name_missing_error">Group name can\'t be empty</string>
<string name="activity_edit_closed_group_group_name_too_long_error">Please enter a shorter group name</string>
<string name="activity_edit_closed_group_not_enough_group_members_error">Groups must have at least 2 group members</string>
<string name="activity_edit_closed_group_too_many_group_members_error">A closed group cannot have more than 10 members</string>
<string name="activity_edit_closed_group_invalid_session_id_error">One of the members of your group has an invalid Session ID</string>
<string name="activity_edit_closed_group_confirm_removal">Are you sure you want to remove this user?</string>
<string name="activity_edit_closed_group_member_removed">User removed from group</string>
<string name="fragment_edit_group_bottom_sheet_remove">Remove user from group</string>
<string name="activity_select_contacts_title">Select Contacts</string>
</resources>

View File

@ -28,25 +28,28 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.whispersystems.libsignal.util.guava.Optional
import java.lang.ref.WeakReference
const val RESULT_CODE_CREATE_CLOSED_GROUP = 100
class CreateClosedGroupActivity : PassphraseRequiredActionBarActivity(), LoaderManager.LoaderCallbacks<List<String>> {
private lateinit var selectContactsAdapter: SelectContactsAdapter
private var members = listOf<String>()
set(value) {
field = value
selectContactsAdapter.members = value
}
private val selectContactsAdapter by lazy {
SelectContactsAdapter(this, GlideApp.with(this))
}
companion object {
val closedGroupCreatedResultCode = 100
}
// region Lifecycle
override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) {
super.onCreate(savedInstanceState, isReady)
setContentView(R.layout.activity_create_closed_group)
supportActionBar!!.title = resources.getString(R.string.activity_create_closed_group_title)
this.selectContactsAdapter = SelectContactsAdapter(this, GlideApp.with(this))
recyclerView.adapter = this.selectContactsAdapter
recyclerView.layoutManager = LinearLayoutManager(this)
@ -91,7 +94,7 @@ class CreateClosedGroupActivity : PassphraseRequiredActionBarActivity(), LoaderM
}
private fun createNewPrivateChat() {
setResult(RESULT_CODE_CREATE_CLOSED_GROUP)
setResult(Companion.closedGroupCreatedResultCode)
finish()
}
@ -145,17 +148,17 @@ class CreateClosedGroupActivity : PassphraseRequiredActionBarActivity(), LoaderM
val masterHexEncodedPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(this) ?: TextSecurePreferences.getLocalNumber(this)
val admin = Recipient.from(this, Address.fromSerialized(masterHexEncodedPublicKey), false)
CreateClosedGroupTask(WeakReference(this), null, name.toString(), recipients, setOf( admin ))
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
}
// endregion
// region Tasks
// region Group Creation Task (Legacy)
internal class CreateClosedGroupTask(
private val activity: WeakReference<CreateClosedGroupActivity>,
private val profilePicture: Bitmap?,
private val name: String?,
private val members: Set<Recipient>,
private val admins: Set<Recipient>
private val activity: WeakReference<CreateClosedGroupActivity>,
private val profilePicture: Bitmap?,
private val name: String?,
private val members: Set<Recipient>,
private val admins: Set<Recipient>
) : AsyncTask<Void, Void, Optional<GroupManager.GroupActionResult>>() {
override fun doInBackground(vararg params: Void?): Optional<GroupManager.GroupActionResult> {
@ -176,13 +179,15 @@ class CreateClosedGroupActivity : PassphraseRequiredActionBarActivity(), LoaderM
}
}
}
// endregion
}
// endregion
// region Convenience
private fun openConversationActivity(context: Context, threadId: Long, recipient: Recipient) {
val intent = Intent(context, ConversationActivity::class.java)
intent.putExtra(ConversationActivity.THREAD_ID_EXTRA, threadId)
intent.putExtra(ConversationActivity.DISTRIBUTION_TYPE_EXTRA, ThreadDatabase.DistributionTypes.DEFAULT)
intent.putExtra(ConversationActivity.ADDRESS_EXTRA, recipient.address)
context.startActivity(intent)
}
}
// endregion

View File

@ -45,7 +45,7 @@ class EditClosedGroupMembersAdapter(
context,
Address.fromSerialized(member), false),
glide,
(if (lockedMember) UserView.ActionIndicator.NONE else UserView.ActionIndicator.MENU))
(if (lockedMember) UserView.ActionIndicator.None else UserView.ActionIndicator.Menu))
if (!lockedMember) {
viewHolder.view.setOnClickListener { this.memberClickListener?.invoke(member) }

View File

@ -223,7 +223,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity, ConversationClickListe
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_CODE_CREATE_CLOSED_GROUP) {
if (resultCode == CreateClosedGroupActivity.closedGroupCreatedResultCode) {
createNewPrivateChat()
}
}

View File

@ -1,6 +0,0 @@
package org.thoughtcrime.securesms.loki.activities
@FunctionalInterface
interface MemberClickListener {
fun onMemberClick(member: String)
}

View File

@ -37,7 +37,7 @@ class SelectContactsAdapter(
context,
Address.fromSerialized(member), false),
glide,
UserView.ActionIndicator.CHECK_BOX,
UserView.ActionIndicator.Tick,
isSelected)
}

View File

@ -55,7 +55,7 @@ class ContactSelectionListAdapter(private val context: Context, private val mult
viewHolder.view.bind(
item.recipient,
glide,
if (multiSelect) UserView.ActionIndicator.CHECK_BOX else UserView.ActionIndicator.NONE,
if (multiSelect) UserView.ActionIndicator.Tick else UserView.ActionIndicator.None,
isSelected)
} else if (viewHolder is DividerViewHolder) {
item as ContactSelectionListItem.Header

View File

@ -15,6 +15,12 @@ import org.whispersystems.signalservice.loki.protocol.mentions.MentionsManager
class UserView : LinearLayout {
enum class ActionIndicator {
None,
Menu,
Tick
}
// region Lifecycle
constructor(context: Context) : super(context) {
setUpViewHierarchy()
@ -40,12 +46,6 @@ class UserView : LinearLayout {
// endregion
// region Updating
enum class ActionIndicator {
NONE,
MENU,
CHECK_BOX,
}
fun bind(user: Recipient, glide: GlideRequests, actionIndicator: ActionIndicator, isSelected: Boolean = false) {
val address = user.address.serialize()
if (user.isGroupRecipient) {
@ -55,35 +55,32 @@ class UserView : LinearLayout {
profilePictureView.isRSSFeed = true
} else {
val threadID = GroupManager.getThreadIDFromGroupID(address, context)
val users = MentionsManager.shared.userPublicKeyCache[threadID]?.toList()
?: listOf()
val users = MentionsManager.shared.userPublicKeyCache[threadID]?.toList() ?: listOf()
val randomUsers = users.sorted() // Sort to provide a level of stability
profilePictureView.publicKey = randomUsers.getOrNull(0) ?: ""
profilePictureView.additionalPublicKey = randomUsers.getOrNull(1) ?: ""
profilePictureView.isRSSFeed = false
}
} else {
profilePictureView.publicKey = address
profilePictureView.additionalPublicKey = null
profilePictureView.isRSSFeed = false
}
tickImageView.setImageResource(R.drawable.ic_edit_white_24dp)
actionIndicatorImageView.setImageResource(R.drawable.ic_edit_white_24dp)
profilePictureView.glide = glide
profilePictureView.update()
nameTextView.text = user.name ?: "Unknown Contact"
when (actionIndicator) {
ActionIndicator.NONE -> {
tickImageView.visibility = View.GONE
ActionIndicator.None -> {
actionIndicatorImageView.visibility = View.GONE
}
ActionIndicator.MENU -> {
tickImageView.visibility = View.VISIBLE
tickImageView.setImageResource(R.drawable.ic_more_horiz_white)
ActionIndicator.Menu -> {
actionIndicatorImageView.visibility = View.VISIBLE
actionIndicatorImageView.setImageResource(R.drawable.ic_more_horiz_white)
}
ActionIndicator.CHECK_BOX -> {
tickImageView.visibility = View.VISIBLE
tickImageView.setImageResource(if (isSelected) R.drawable.ic_circle_check else R.drawable.ic_circle)
ActionIndicator.Tick -> {
actionIndicatorImageView.visibility = View.VISIBLE
actionIndicatorImageView.setImageResource(if (isSelected) R.drawable.ic_circle_check else R.drawable.ic_circle)
}
}
}