Adds a confirmation dialog for unfollowing a user using the account header button.

This commit is contained in:
Vavassor 2017-08-09 01:16:00 -04:00
parent d895949136
commit 973c6168f8
2 changed files with 81 additions and 44 deletions

View file

@ -26,6 +26,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.AttrRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
@ -96,13 +97,13 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_account);
avatar = (CircularImageView) findViewById(R.id.account_avatar);
header = (ImageView) findViewById(R.id.account_header);
floatingBtn = (FloatingActionButton) findViewById(R.id.floating_btn);
followBtn = (Button) findViewById(R.id.follow_btn);
followsYouView = (TextView) findViewById(R.id.account_follows_you);
tabLayout = (TabLayout) findViewById(R.id.tab_layout);
accountLockedView = (ImageView) findViewById(R.id.account_locked);
avatar = findViewById(R.id.account_avatar);
header = findViewById(R.id.account_header);
floatingBtn = findViewById(R.id.floating_btn);
followBtn = findViewById(R.id.follow_btn);
followsYouView = findViewById(R.id.account_follows_you);
tabLayout = findViewById(R.id.tab_layout);
accountLockedView = findViewById(R.id.account_locked);
container = findViewById(R.id.activity_account);
if (savedInstanceState != null) {
@ -123,7 +124,7 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
String loggedInAccountId = preferences.getString("loggedInAccountId", null);
// Setup the toolbar.
final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
final Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
@ -135,9 +136,8 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
hideFab = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("fabHide", false);
// Add a listener to change the toolbar icon color when it enters/exits its collapsed state.
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.account_app_bar_layout);
final CollapsingToolbarLayout collapsingToolbar =
(CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
AppBarLayout appBarLayout = findViewById(R.id.account_app_bar_layout);
final CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_toolbar);
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@AttrRes int priorAttribute = R.attr.account_toolbar_icon_tint_uncollapsed;
@ -204,7 +204,7 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
getString(R.string.title_followers)
};
adapter.setPageTitles(pageTitles);
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
ViewPager viewPager = findViewById(R.id.pager);
int pageMargin = getResources().getDimensionPixelSize(R.dimen.tab_page_margin);
viewPager.setPageMargin(pageMargin);
Drawable pageMarginDrawable = ThemeUtils.getDrawable(this, R.attr.tab_page_margin_drawable,
@ -232,7 +232,8 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
private void obtainAccount() {
mastodonApi.account(accountId).enqueue(new Callback<Account>() {
@Override
public void onResponse(Call<Account> call, Response<Account> response) {
public void onResponse(@NonNull Call<Account> call,
@NonNull Response<Account> response) {
if (response.isSuccessful()) {
onObtainAccountSuccess(response.body());
} else {
@ -241,7 +242,7 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
}
@Override
public void onFailure(Call<Account> call, Throwable t) {
public void onFailure(@NonNull Call<Account> call, @NonNull Throwable t) {
onObtainAccountFailure();
}
});
@ -250,9 +251,9 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
private void onObtainAccountSuccess(Account account) {
loadedAccount = account;
TextView username = (TextView) findViewById(R.id.account_username);
TextView displayName = (TextView) findViewById(R.id.account_display_name);
TextView note = (TextView) findViewById(R.id.account_note);
TextView username = findViewById(R.id.account_username);
TextView displayName = findViewById(R.id.account_display_name);
TextView note = findViewById(R.id.account_note);
String usernameFormatted = String.format(
getString(R.string.status_username_format), account.username);
@ -316,7 +317,7 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
if (tab != null) {
View view = tab.getCustomView();
if (view != null) {
TextView total = (TextView) view.findViewById(R.id.total);
TextView total = view.findViewById(R.id.total);
total.setText(counts[i]);
}
}
@ -339,10 +340,11 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
ids.add(accountId);
mastodonApi.relationships(ids).enqueue(new Callback<List<Relationship>>() {
@Override
public void onResponse(Call<List<Relationship>> call,
Response<List<Relationship>> response) {
if (response.isSuccessful()) {
Relationship relationship = response.body().get(0);
public void onResponse(@NonNull Call<List<Relationship>> call,
@NonNull Response<List<Relationship>> response) {
List<Relationship> relationships = response.body();
if (response.isSuccessful() && relationships != null) {
Relationship relationship = relationships.get(0);
onObtainRelationshipsSuccess(relationship);
} else {
onObtainRelationshipsFailure(new Exception(response.message()));
@ -350,7 +352,7 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
}
@Override
public void onFailure(Call<List<Relationship>> call, Throwable t) {
public void onFailure(@NonNull Call<List<Relationship>> call, @NonNull Throwable t) {
onObtainRelationshipsFailure((Exception) t);
}
});
@ -367,7 +369,7 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
this.blocking = relation.blocking;
this.muting = relation.muting;
if(relation.followedBy) {
if (relation.followedBy) {
followsYouView.setVisibility(View.VISIBLE);
} else {
followsYouView.setVisibility(View.GONE);
@ -412,10 +414,19 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
followBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (followState != FollowState.REQUESTED) {
follow(accountId);
} else {
showFollowRequestPendingDialog(accountId);
switch (followState) {
case NOT_FOLLOWING: {
follow(accountId);
break;
}
case REQUESTED: {
showFollowRequestPendingDialog();
break;
}
case FOLLOWING: {
showUnfollowWarningDialog();
break;
}
}
updateFollowButton(followBtn);
}
@ -479,9 +490,10 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
private void follow(final String id) {
Callback<Relationship> cb = new Callback<Relationship>() {
@Override
public void onResponse(Call<Relationship> call, Response<Relationship> response) {
if (response.isSuccessful()) {
Relationship relationship = response.body();
public void onResponse(@NonNull Call<Relationship> call,
@NonNull Response<Relationship> response) {
Relationship relationship = response.body();
if (response.isSuccessful() && relationship != null) {
if (relationship.following) {
followState = FollowState.FOLLOWING;
} else if (relationship.requested) {
@ -499,7 +511,7 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
}
@Override
public void onFailure(Call<Relationship> call, Throwable t) {
public void onFailure(@NonNull Call<Relationship> call, @NonNull Throwable t) {
onFollowFailure(id);
}
};
@ -523,26 +535,48 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
.show();
}
private void showFollowRequestPendingDialog(final String id) {
private void showFollowRequestPendingDialog() {
DialogInterface.OnClickListener waitListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
};
new AlertDialog.Builder(AccountActivity.this)
new AlertDialog.Builder(this)
.setMessage(R.string.dialog_message_follow_request)
.setPositiveButton(R.string.action_ok, waitListener)
.setPositiveButton(android.R.string.ok, waitListener)
.show();
}
private void showUnfollowWarningDialog() {
DialogInterface.OnClickListener cancelListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
};
DialogInterface.OnClickListener unfollowListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
follow(accountId);
}
};
new AlertDialog.Builder(this)
.setMessage(R.string.dialog_unfollow_warning)
.setPositiveButton(android.R.string.ok, unfollowListener)
.setNegativeButton(android.R.string.cancel, cancelListener)
.show();
}
private void block(final String id) {
Callback<Relationship> cb = new Callback<Relationship>() {
@Override
public void onResponse(Call<Relationship> call, Response<Relationship> response) {
if (response.isSuccessful()) {
public void onResponse(@NonNull Call<Relationship> call,
@NonNull Response<Relationship> response) {
Relationship relationship = response.body();
if (response.isSuccessful() && relationship != null) {
broadcast(TimelineReceiver.Types.BLOCK_ACCOUNT, id);
blocking = response.body().blocking;
blocking = relationship.blocking;
updateButtons();
} else {
onBlockFailure(id);
@ -550,7 +584,7 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
}
@Override
public void onFailure(Call<Relationship> call, Throwable t) {
public void onFailure(@NonNull Call<Relationship> call, @NonNull Throwable t) {
onBlockFailure(id);
}
};
@ -576,10 +610,12 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
private void mute(final String id) {
Callback<Relationship> cb = new Callback<Relationship>() {
@Override
public void onResponse(Call<Relationship> call, Response<Relationship> response) {
if (response.isSuccessful()) {
public void onResponse(@NonNull Call<Relationship> call,
@NonNull Response<Relationship> response) {
Relationship relationship = response.body();
if (response.isSuccessful() && relationship != null) {
broadcast(TimelineReceiver.Types.MUTE_ACCOUNT, id);
muting = response.body().muting;
muting = relationship.muting;
updateButtons();
} else {
onMuteFailure(id);
@ -587,7 +623,7 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
}
@Override
public void onFailure(Call<Relationship> call, Throwable t) {
public void onFailure(@NonNull Call<Relationship> call, @NonNull Throwable t) {
onMuteFailure(id);
}
};
@ -667,7 +703,7 @@ public class AccountActivity extends BaseActivity implements ActionButtonActivit
@Nullable
@Override
public FloatingActionButton getActionButton() {
if(!isSelf && !blocking) {
if (!isSelf && !blocking) {
return floatingBtn;
}
return null;

View file

@ -138,6 +138,7 @@
<string name="dialog_message_uploading_media">Uploading…</string>
<string name="dialog_download_image">Download</string>
<string name="dialog_message_follow_request">Follow request pending: awaiting their response</string>
<string name="dialog_unfollow_warning">Unfollow this account?</string>
<string name="visibility_public">Public: Post to public timelines</string>
<string name="visibility_unlisted">Unlisted: Do not show in public timelines</string>