add possibility to un/lock accounts

This commit is contained in:
Conny Duck 2018-03-27 20:46:53 +02:00
parent 361352c2e1
commit 3628b8431d
5 changed files with 42 additions and 5 deletions

View file

@ -57,6 +57,7 @@ private const val AVATAR_FILE_NAME = "avatar.png"
private const val KEY_OLD_DISPLAY_NAME = "OLD_DISPLAY_NAME" private const val KEY_OLD_DISPLAY_NAME = "OLD_DISPLAY_NAME"
private const val KEY_OLD_NOTE = "OLD_NOTE" private const val KEY_OLD_NOTE = "OLD_NOTE"
private const val KEY_OLD_LOCKED = "OLD_LOCKED"
private const val KEY_IS_SAVING = "IS_SAVING" private const val KEY_IS_SAVING = "IS_SAVING"
private const val KEY_CURRENTLY_PICKING = "CURRENTLY_PICKING" private const val KEY_CURRENTLY_PICKING = "CURRENTLY_PICKING"
private const val KEY_AVATAR_CHANGED = "AVATAR_CHANGED" private const val KEY_AVATAR_CHANGED = "AVATAR_CHANGED"
@ -73,6 +74,7 @@ class EditProfileActivity : BaseActivity(), Injectable {
private var oldDisplayName: String? = null private var oldDisplayName: String? = null
private var oldNote: String? = null private var oldNote: String? = null
private var oldLocked: Boolean = false
private var isSaving: Boolean = false private var isSaving: Boolean = false
private var currentlyPicking: PickType = PickType.NOTHING private var currentlyPicking: PickType = PickType.NOTHING
private var avatarChanged: Boolean = false private var avatarChanged: Boolean = false
@ -101,6 +103,7 @@ class EditProfileActivity : BaseActivity(), Injectable {
savedInstanceState?.let { savedInstanceState?.let {
oldDisplayName = it.getString(KEY_OLD_DISPLAY_NAME) oldDisplayName = it.getString(KEY_OLD_DISPLAY_NAME)
oldNote = it.getString(KEY_OLD_NOTE) oldNote = it.getString(KEY_OLD_NOTE)
oldLocked = it.getBoolean(KEY_OLD_LOCKED)
isSaving = it.getBoolean(KEY_IS_SAVING) isSaving = it.getBoolean(KEY_IS_SAVING)
currentlyPicking = it.getSerializable(KEY_CURRENTLY_PICKING) as PickType currentlyPicking = it.getSerializable(KEY_CURRENTLY_PICKING) as PickType
avatarChanged = it.getBoolean(KEY_AVATAR_CHANGED) avatarChanged = it.getBoolean(KEY_AVATAR_CHANGED)
@ -137,10 +140,12 @@ class EditProfileActivity : BaseActivity(), Injectable {
val me = response.body() val me = response.body()
oldDisplayName = me!!.displayName oldDisplayName = me!!.displayName
oldNote = me.note.toString() oldNote = me.note.toString()
oldLocked = me.locked
displayNameEditText.setText(oldDisplayName) displayNameEditText.setText(oldDisplayName)
noteEditText.setText(oldNote) noteEditText.setText(oldNote)
lockedCheckBox.isChecked = oldLocked
if (!avatarChanged) { if (!avatarChanged) {
Picasso.with(avatarPreview.context) Picasso.with(avatarPreview.context)
.load(me.avatar) .load(me.avatar)
@ -165,6 +170,7 @@ class EditProfileActivity : BaseActivity(), Injectable {
outState.run { outState.run {
putString(KEY_OLD_DISPLAY_NAME, oldDisplayName) putString(KEY_OLD_DISPLAY_NAME, oldDisplayName)
putString(KEY_OLD_NOTE, oldNote) putString(KEY_OLD_NOTE, oldNote)
putBoolean(KEY_OLD_LOCKED, oldLocked)
putBoolean(KEY_IS_SAVING, isSaving) putBoolean(KEY_IS_SAVING, isSaving)
putSerializable(KEY_CURRENTLY_PICKING, currentlyPicking) putSerializable(KEY_CURRENTLY_PICKING, currentlyPicking)
putBoolean(KEY_AVATAR_CHANGED, avatarChanged) putBoolean(KEY_AVATAR_CHANGED, avatarChanged)
@ -259,6 +265,13 @@ class EditProfileActivity : BaseActivity(), Injectable {
RequestBody.create(MultipartBody.FORM, newNote) RequestBody.create(MultipartBody.FORM, newNote)
} }
val newLocked = lockedCheckBox.isChecked
val locked = if (oldLocked == newLocked) {
null
} else {
RequestBody.create(MultipartBody.FORM, newLocked.toString())
}
val avatar = if (avatarChanged) { val avatar = if (avatarChanged) {
val avatarBody = RequestBody.create(MediaType.parse("image/png"), getCacheFileForName(AVATAR_FILE_NAME)) val avatarBody = RequestBody.create(MediaType.parse("image/png"), getCacheFileForName(AVATAR_FILE_NAME))
MultipartBody.Part.createFormData("avatar", getFileName(), avatarBody) MultipartBody.Part.createFormData("avatar", getFileName(), avatarBody)
@ -273,13 +286,13 @@ class EditProfileActivity : BaseActivity(), Injectable {
null null
} }
if (displayName == null && note == null && avatar == null && header == null) { if (displayName == null && note == null && locked == null && avatar == null && header == null) {
/** if nothing has changed, there is no need to make a network request */ /** if nothing has changed, there is no need to make a network request */
finish() finish()
return return
} }
mastodonApi.accountUpdateCredentials(displayName, note, avatar, header).enqueue(object : Callback<Account> { mastodonApi.accountUpdateCredentials(displayName, note, locked, avatar, header).enqueue(object : Callback<Account> {
override fun onResponse(call: Call<Account>, response: Response<Account>) { override fun onResponse(call: Call<Account>, response: Response<Account>) {
if (!response.isSuccessful) { if (!response.isSuccessful) {
onSaveFailure() onSaveFailure()

View file

@ -69,7 +69,6 @@ import javax.inject.Inject;
import dagger.android.AndroidInjector; import dagger.android.AndroidInjector;
import dagger.android.DispatchingAndroidInjector; import dagger.android.DispatchingAndroidInjector;
import dagger.android.support.AndroidSupportInjection;
import dagger.android.support.HasSupportFragmentInjector; import dagger.android.support.HasSupportFragmentInjector;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
@ -457,7 +456,6 @@ public class MainActivity extends BaseActivity implements ActionButtonActivity,
.setTitle(R.string.action_logout) .setTitle(R.string.action_logout)
.setMessage(getString(R.string.action_logout_confirm, activeAccount.getFullName())) .setMessage(getString(R.string.action_logout_confirm, activeAccount.getFullName()))
.setPositiveButton(android.R.string.yes, (dialog, which) -> { .setPositiveButton(android.R.string.yes, (dialog, which) -> {
;
NotificationHelper.deleteNotificationChannelsForAccount(accountManager.getActiveAccount(), MainActivity.this); NotificationHelper.deleteNotificationChannelsForAccount(accountManager.getActiveAccount(), MainActivity.this);
@ -521,6 +519,8 @@ public class MainActivity extends BaseActivity implements ActionButtonActivity,
.withSelectable(false) .withSelectable(false)
.withIcon(GoogleMaterial.Icon.gmd_person_add); .withIcon(GoogleMaterial.Icon.gmd_person_add);
drawer.addItemAtPosition(followRequestsItem, 3); drawer.addItemAtPosition(followRequestsItem, 3);
} else {
drawer.removeItem(DRAWER_ITEM_FOLLOW_REQUESTS);
} }
updateProfiles(); updateProfiles();

View file

@ -142,6 +142,7 @@ public interface MastodonApi {
Call<Account> accountUpdateCredentials( Call<Account> accountUpdateCredentials(
@Nullable @Part(value="display_name") RequestBody displayName, @Nullable @Part(value="display_name") RequestBody displayName,
@Nullable @Part(value="note") RequestBody note, @Nullable @Part(value="note") RequestBody note,
@Nullable @Part(value="locked") RequestBody locked,
@Nullable @Part MultipartBody.Part avatar, @Nullable @Part MultipartBody.Part avatar,
@Nullable @Part MultipartBody.Part header); @Nullable @Part MultipartBody.Part header);

View file

@ -112,6 +112,27 @@
</android.support.design.widget.TextInputLayout> </android.support.design.widget.TextInputLayout>
<android.support.v7.widget.AppCompatCheckBox
android:id="@+id/lockedCheckBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="30dp"
android:paddingStart="8dp"
android:text="@string/lock_account_label"
android:textSize="?attr/status_text_medium" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:paddingStart="40dp"
android:text="@string/lock_account_label_description"
android:textSize="?attr/status_text_small" />
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>

View file

@ -286,5 +286,7 @@
<string name="hint_describe_for_visually_impaired">Describe for visually impaired</string> <string name="hint_describe_for_visually_impaired">Describe for visually impaired</string>
<string name="action_set_caption">Set caption</string> <string name="action_set_caption">Set caption</string>
<string name="action_remove_media">Remove</string> <string name="action_remove_media">Remove</string>
<string name="lock_account_label">Lock account</string>
<string name="lock_account_label_description">Requires you to manually approve followers</string>
</resources> </resources>