diff --git a/app/src/main/java/com/etesync/syncadapter/journalmanager/JournalManager.kt b/app/src/main/java/com/etesync/syncadapter/journalmanager/JournalManager.kt index 130a7a86..3b463772 100644 --- a/app/src/main/java/com/etesync/syncadapter/journalmanager/JournalManager.kt +++ b/app/src/main/java/com/etesync/syncadapter/journalmanager/JournalManager.kt @@ -190,15 +190,18 @@ class JournalManager(httpClient: OkHttpClient, remote: HttpUrl) : BaseManager() class Member { val user: String? val key: ByteArray? + val readOnly: Boolean private constructor() { this.user = null this.key = null + this.readOnly = false } - constructor(user: String, encryptedKey: ByteArray) { + constructor(user: String, encryptedKey: ByteArray, readOnly: Boolean = false) { this.user = user this.key = encryptedKey + this.readOnly = readOnly } internal fun toJson(): String { diff --git a/app/src/main/java/com/etesync/syncadapter/ui/AddMemberFragment.kt b/app/src/main/java/com/etesync/syncadapter/ui/AddMemberFragment.kt index 31b73ed7..4f769c23 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/AddMemberFragment.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/AddMemberFragment.kt @@ -26,12 +26,14 @@ class AddMemberFragment : DialogFragment() { private lateinit var info: CollectionInfo private lateinit var memberEmail: String private lateinit var memberPubKey: ByteArray + private var readOnly: Boolean = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) account = arguments?.getParcelable(Constants.KEY_ACCOUNT)!! info = arguments?.getSerializable(Constants.KEY_COLLECTION_INFO) as CollectionInfo memberEmail = arguments?.getString(KEY_MEMBER)!!.toLowerCase() + readOnly = arguments?.getBoolean(KEY_READ_ONLY)!! ctx = context try { settings = AccountSettings(ctx!!, account) @@ -105,7 +107,7 @@ class AddMemberFragment : DialogFragment() { val crypto = Crypto.CryptoManager(info.version, settings!!.password(), info.uid!!) val encryptedKey = crypto.getEncryptedKey(settings!!.keyPair!!, memberPubKey) - val member = JournalManager.Member(memberEmail, encryptedKey!!) + val member = JournalManager.Member(memberEmail, encryptedKey!!, readOnly) journalsManager.addMember(journal, member) return AddResultSecond(null) } catch (e: Exception) { @@ -132,13 +134,15 @@ class AddMemberFragment : DialogFragment() { companion object { private val KEY_MEMBER = "memberEmail" + private val KEY_READ_ONLY = "readOnly" - fun newInstance(account: Account, info: CollectionInfo, email: String): AddMemberFragment { + fun newInstance(account: Account, info: CollectionInfo, email: String, readOnly: Boolean): AddMemberFragment { val frag = AddMemberFragment() val args = Bundle(1) args.putParcelable(Constants.KEY_ACCOUNT, account) args.putSerializable(Constants.KEY_COLLECTION_INFO, info) args.putString(KEY_MEMBER, email) + args.putBoolean(KEY_READ_ONLY, readOnly) frag.arguments = args return frag } diff --git a/app/src/main/java/com/etesync/syncadapter/ui/CollectionMembersActivity.kt b/app/src/main/java/com/etesync/syncadapter/ui/CollectionMembersActivity.kt index 579666a0..7269a9f6 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/CollectionMembersActivity.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/CollectionMembersActivity.kt @@ -7,6 +7,7 @@ import android.os.Bundle import android.support.v7.app.AlertDialog import android.text.InputType import android.view.View +import android.widget.CheckBox import android.widget.EditText import android.widget.TextView import com.etesync.syncadapter.App @@ -83,17 +84,18 @@ class CollectionMembersActivity : BaseActivity(), Refreshable { } fun onAddMemberClicked(v: View) { - val input = EditText(this) - input.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS + val view = View.inflate(this, R.layout.add_member_fragment, null) val dialog = AlertDialog.Builder(this) .setTitle(R.string.collection_members_add) .setIcon(R.drawable.ic_account_add_dark) .setPositiveButton(android.R.string.yes) { _, _ -> - val frag = AddMemberFragment.newInstance(account, info, input.text.toString()) + val input = view.findViewById(R.id.username) + val readOnly = view.findViewById(R.id.read_only).isChecked + val frag = AddMemberFragment.newInstance(account, info, input.text.toString(), readOnly) frag.show(supportFragmentManager, null) } .setNegativeButton(android.R.string.no) { _, _ -> } - dialog.setView(input) + dialog.setView(view) dialog.show() } diff --git a/app/src/main/res/layout/add_member_fragment.xml b/app/src/main/res/layout/add_member_fragment.xml new file mode 100644 index 00000000..836db366 --- /dev/null +++ b/app/src/main/res/layout/add_member_fragment.xml @@ -0,0 +1,23 @@ + + + + + + + +