diff --git a/ring-android/app/src/main/java/cx/ring/account/RenameSwarmDialog.kt b/ring-android/app/src/main/java/cx/ring/account/RenameSwarmDialog.kt index 6087e58b25bc4cd4017e63b514eeea99c482d928..28b4a2c517c925bfc85cbdf78e6661b49e10c895 100644 --- a/ring-android/app/src/main/java/cx/ring/account/RenameSwarmDialog.kt +++ b/ring-android/app/src/main/java/cx/ring/account/RenameSwarmDialog.kt @@ -94,25 +94,9 @@ class RenameSwarmDialog : DialogFragment() { super.onDestroy() } - private fun checkInput(input: String): Boolean { - if (input.isEmpty()) { - binding?.apply { - titleTxtBox.isErrorEnabled = true - titleTxtBox.error = getString(R.string.rename_error) - } - return false - } else { - binding?.apply { - titleTxtBox.isErrorEnabled = false - titleTxtBox.error = null - } - } - return true - } - private fun validate(): Boolean { val input = binding!!.titleTxt.text.toString().trim { it <= ' ' } - if (checkInput(input) && mListener != null) { + if (mListener != null) { mListener!!.onSwarmRename(key!!, input) return true } diff --git a/ring-android/app/src/main/java/cx/ring/adapters/ContactPickerAdapter.kt b/ring-android/app/src/main/java/cx/ring/adapters/ContactPickerAdapter.kt index 6847c7ea424a26c69ff9cfc9ee0358a132ea7c7c..40bd84ec987e243a54b50ba8acd6c6a61602631b 100644 --- a/ring-android/app/src/main/java/cx/ring/adapters/ContactPickerAdapter.kt +++ b/ring-android/app/src/main/java/cx/ring/adapters/ContactPickerAdapter.kt @@ -23,7 +23,7 @@ import android.annotation.SuppressLint import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView -import cx.ring.databinding.ItemSmartlistBinding +import cx.ring.databinding.ItemContactBinding import cx.ring.viewholders.ContactPickerViewHolder import cx.ring.viewholders.ContactPickerViewHolder.ContactPickerListeners import net.jami.smartlist.ConversationItemViewModel @@ -36,7 +36,7 @@ class ContactPickerAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContactPickerViewHolder { val layoutInflater = LayoutInflater.from(parent.context) - return ContactPickerViewHolder(ItemSmartlistBinding.inflate(layoutInflater, parent, false)) + return ContactPickerViewHolder(ItemContactBinding.inflate(layoutInflater, parent, false)) } override fun onViewRecycled(holder: ContactPickerViewHolder) { diff --git a/ring-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.kt b/ring-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.kt index e7dbc91b61f20dad58362cb8d4b78fef16b44726..f2c736983a333d98c9d80a5e3c3594e017d6ea4d 100644 --- a/ring-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.kt +++ b/ring-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.kt @@ -132,7 +132,10 @@ class ContactDetailsActivity : AppCompatActivity(), TabLayout.OnTabSelectedListe .withCircleCrop(true) .build(this)) binding.title.text = vm.title - if (conversation.getDescription() != null) binding.description.text = conversation.getDescription() + if (conversation.getDescription().isNullOrBlank()) + binding.description.text = getString(R.string.swarm_description) + else + binding.description.text = conversation.getDescription() }) { e -> Log.e(TAG, "e", e) finish() @@ -148,27 +151,32 @@ class ContactDetailsActivity : AppCompatActivity(), TabLayout.OnTabSelectedListe binding.description.isVisible = true binding.addMember.setOnClickListener { ContactPickerFragment().show(supportFragmentManager, ContactPickerFragment.TAG) } binding.title.setOnClickListener { + val title = getString(R.string.dialogtitle_title) + val hint = getString(R.string.dialog_hint_title) RenameSwarmDialog().apply { arguments = Bundle().apply { putString(RenameSwarmDialog.KEY, RenameSwarmDialog.KEY_TITLE) } - setTitle(getString(R.string.dialogtitle_title)) - setHint(getString(R.string.dialog_hint_title)) - setText(binding.title.text.toString()) + setTitle(title) + setHint(hint) + setText(conversation.getTitle()) setListener(this@ContactDetailsActivity) }.show(supportFragmentManager, TAG) } binding.description.setOnClickListener { + val title = getString(R.string.dialogtitle_description) + val hint = getString(R.string.dialog_hint_description) RenameSwarmDialog().apply { arguments = Bundle().apply { putString(RenameSwarmDialog.KEY, RenameSwarmDialog.KEY_DESCRIPTION) } - setTitle(getString(R.string.dialogtitle_description)) - setHint(getString(R.string.dialog_hint_description)) + setTitle(title) + setHint(hint) setText(conversation.getDescription()) setListener(this@ContactDetailsActivity) }.show(supportFragmentManager, TAG) } + } else { + binding.tabLayout.removeTabAt(TAB_MEMBER) } - - mPagerAdapter = ScreenSlidePagerAdapter(this, conversation.accountId, conversation.uri) + mPagerAdapter = ScreenSlidePagerAdapter(this, conversation) binding.pager.adapter = mPagerAdapter binding.pager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { @@ -246,13 +254,21 @@ class ContactDetailsActivity : AppCompatActivity(), TabLayout.OnTabSelectedListe mAccountService.updateConversationInfo(path!!.accountId, path!!.conversationUri.host, map) } - private inner class ScreenSlidePagerAdapter(fa: FragmentActivity, accountId: String, conversationId: Uri) : FragmentStateAdapter(fa) { - val fragments: List<Fragment> = listOf( + private inner class ScreenSlidePagerAdapter(fa: FragmentActivity, conversation: Conversation) : FragmentStateAdapter(fa) { + + val accountId = conversation.accountId + val conversationId = conversation.uri + val isGroup = conversation.isGroup() + + val fragments: List<Fragment> = if (isGroup) listOf( ConversationActionsFragment.newInstance(accountId, conversationId), ConversationMembersFragment.newInstance(accountId, conversationId), ConversationGalleryFragment.newInstance(accountId, conversationId)) + else listOf( + ConversationActionsFragment.newInstance(accountId, conversationId), + ConversationGalleryFragment.newInstance(accountId, conversationId)) - override fun getItemCount(): Int = fragments.size + override fun getItemCount(): Int = fragments.size override fun createFragment(position: Int): Fragment = fragments[position] } diff --git a/ring-android/app/src/main/java/cx/ring/viewholders/ContactPickerViewHolder.kt b/ring-android/app/src/main/java/cx/ring/viewholders/ContactPickerViewHolder.kt index 04947a7223f9bb9bede10ea934b7be2e8d8faabb..bf090689d1cbc94ece22b70eabde0ee861d976f8 100644 --- a/ring-android/app/src/main/java/cx/ring/viewholders/ContactPickerViewHolder.kt +++ b/ring-android/app/src/main/java/cx/ring/viewholders/ContactPickerViewHolder.kt @@ -21,15 +21,16 @@ package cx.ring.viewholders import android.view.animation.AlphaAnimation import android.view.animation.DecelerateInterpolator +import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView -import cx.ring.databinding.ItemSmartlistBinding +import cx.ring.databinding.ItemContactBinding import cx.ring.views.AvatarDrawable import net.jami.model.* import net.jami.smartlist.ConversationItemViewModel -class ContactPickerViewHolder(b: ItemSmartlistBinding) : +class ContactPickerViewHolder(b: ItemContactBinding) : RecyclerView.ViewHolder(b.root) { - private val binding: ItemSmartlistBinding = b + private val binding: ItemContactBinding = b private var currentUri: Uri? = null private fun fadeIn() = AlphaAnimation(0f, 1f).apply { @@ -40,9 +41,7 @@ class ContactPickerViewHolder(b: ItemSmartlistBinding) : fun bind(clickListener: ContactPickerListeners, conversation: ConversationItemViewModel) { if (conversation.uri != currentUri) { currentUri = conversation.uri - binding.convLastItem.text = "" - binding.convLastTime.text = "" - binding.convParticipant.text = "" + binding.quickCall.isVisible = false binding.photo.setImageDrawable(null) } @@ -52,7 +51,7 @@ class ContactPickerViewHolder(b: ItemSmartlistBinding) : true } - binding.convParticipant.text = conversation.title + binding.displayName.text = conversation.title val fade = binding.photo.drawable !is AvatarDrawable binding.photo.setImageDrawable(AvatarDrawable.Builder() .withViewModel(conversation) diff --git a/ring-android/app/src/main/res/layout/activity_contact_details.xml b/ring-android/app/src/main/res/layout/activity_contact_details.xml index 9ed66de82e34b66a1e62fdd0293a9abd5e0dc95d..e61d79f5b4f41d6913f05054bd3ac0605e02fb95 100644 --- a/ring-android/app/src/main/res/layout/activity_contact_details.xml +++ b/ring-android/app/src/main/res/layout/activity_contact_details.xml @@ -50,10 +50,8 @@ android:layout_height="wrap_content" android:layout_below="@id/contact_image" android:layout_centerHorizontal="true" - android:layout_marginStart="22dp" - android:layout_marginTop="22dp" - android:layout_marginEnd="22dp" - android:layout_marginBottom="22dp" + android:layout_margin="15dp" + android:padding="5dp" android:ellipsize="end" android:fontFamily="@font/ubuntu_medium" android:maxLines="1" diff --git a/ring-android/app/src/main/res/layout/frag_about.xml b/ring-android/app/src/main/res/layout/frag_about.xml index 20e3f3fcd242354d99fe85d6fab1b6f4404b8488..8b6d2561b309a02549b9d0736648fc60d13a9d13 100644 --- a/ring-android/app/src/main/res/layout/frag_about.xml +++ b/ring-android/app/src/main/res/layout/frag_about.xml @@ -39,6 +39,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. app:title="@string/menu_item_about" /> </com.google.android.material.appbar.AppBarLayout> + <RelativeLayout + android:fitsSystemWindows="true" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="?attr/actionBarSize"> + <androidx.core.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" @@ -306,6 +312,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. </LinearLayout> </androidx.core.widget.NestedScrollView> + </RelativeLayout> + </androidx.coordinatorlayout.widget.CoordinatorLayout> diff --git a/ring-android/app/src/main/res/layout/frag_account_settings.xml b/ring-android/app/src/main/res/layout/frag_account_settings.xml index db6f6ea7c15da1531494d872bc3426cf4cafddc5..e737ec0f9b9af805013a5edca297adb5d81de395 100644 --- a/ring-android/app/src/main/res/layout/frag_account_settings.xml +++ b/ring-android/app/src/main/res/layout/frag_account_settings.xml @@ -28,18 +28,25 @@ android:layout_below="@id/toolbar" /> </com.google.android.material.appbar.AppBarLayout> - <androidx.viewpager.widget.ViewPager - android:id="@+id/pager" - android:layout_width="wrap_content" - android:layout_height="match_parent" - android:layout_alignParentBottom="true" - app:layout_behavior="@string/appbar_scrolling_view_behavior" /> - - <FrameLayout - android:id="@+id/fragment_container" + <RelativeLayout + android:fitsSystemWindows="true" android:layout_width="match_parent" - android:layout_height="match_parent" - app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + android:layout_height="wrap_content" + android:layout_marginTop="?attr/actionBarSize"> + + <androidx.viewpager.widget.ViewPager + android:id="@+id/pager" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_alignParentBottom="true" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + + <FrameLayout + android:id="@+id/fragment_container" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + </RelativeLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout> \ No newline at end of file diff --git a/ring-android/app/src/main/res/layout/frag_settings.xml b/ring-android/app/src/main/res/layout/frag_settings.xml index 73306d39d1353330a9f31abc24c4045ddf7aaa35..693a45294dc253ef48d3bf821cd700a584da79f7 100644 --- a/ring-android/app/src/main/res/layout/frag_settings.xml +++ b/ring-android/app/src/main/res/layout/frag_settings.xml @@ -41,6 +41,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. </com.google.android.material.appbar.AppBarLayout> + <RelativeLayout + android:fitsSystemWindows="true" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="?attr/actionBarSize"> + <androidx.core.widget.NestedScrollView android:id="@+id/scrollview" android:layout_width="match_parent" @@ -780,4 +786,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. android:visibility="gone" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + </RelativeLayout> + </androidx.coordinatorlayout.widget.CoordinatorLayout> diff --git a/ring-android/libjamiclient/src/main/kotlin/net/jami/model/Conversation.kt b/ring-android/libjamiclient/src/main/kotlin/net/jami/model/Conversation.kt index b2fe3414b1122a921aabcba18021d5d67a579b66..9ef68e172e7dfcb24c934d2cd0e75399e3dd3a9a 100644 --- a/ring-android/libjamiclient/src/main/kotlin/net/jami/model/Conversation.kt +++ b/ring-android/libjamiclient/src/main/kotlin/net/jami/model/Conversation.kt @@ -59,6 +59,7 @@ class Conversation : ConversationHistory { private set private val mMode: Subject<Mode> private var description: String? = null + private var title: String? = null private val profileSubject: Subject<Single<Profile>> = BehaviorSubject.createDefault(Profile.EMPTY_PROFILE_SINGLE) val profile: Observable<Profile> = profileSubject.switchMapSingle { single -> single } @@ -640,7 +641,7 @@ class Conversation : ConversationHistory { fun getSymbol(): Observable<CharSequence> = symbol fun updateInfo(info: Map<String, String>) { - //title = info["title"] + title = info["title"] //avatar = info["avatar"] setProfile(Profile(info["title"], info["avatar"])) description = info["description"] @@ -651,7 +652,7 @@ class Conversation : ConversationHistory { preferences["symbol"]?.let { symbol.onNext(it) } } - //fun getTitle() = title + fun getTitle() = title fun getDescription() = description fun isGroup(): Boolean = isSwarm && contacts.size > 2 @Synchronized