Imporved unsubscribe dialog

master
M66B 3 weeks ago
parent f3932b14c1
commit 2be9ebf95b

@ -25,6 +25,8 @@ import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
@ -33,6 +35,7 @@ import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.net.URL; import java.net.URL;
import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.HttpsURLConnection;
@ -52,16 +55,34 @@ public class FragmentDialogUnsubscribe extends FragmentDialogBase {
View view = LayoutInflater.from(context).inflate(R.layout.dialog_unsubscribe, null); View view = LayoutInflater.from(context).inflate(R.layout.dialog_unsubscribe, null);
final TextView tvSender = view.findViewById(R.id.tvSender); final TextView tvSender = view.findViewById(R.id.tvSender);
final TextView tvUri = view.findViewById(R.id.tvUri); final TextView tvUri = view.findViewById(R.id.tvUri);
final Button btnUnsubscribe = view.findViewById(R.id.btnUnsubscribe);
final ProgressBar pbUnsubscribe = view.findViewById(R.id.pbUnsubscribe);
tvSender.setText(from); tvSender.setText(from);
tvUri.setText(uri); tvUri.setText(uri);
pbUnsubscribe.setVisibility(View.GONE);
AlertDialog.Builder builder = new AlertDialog.Builder(context) AlertDialog dialog = new AlertDialog.Builder(context)
.setView(view) .setView(view)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { .setNeutralButton(android.R.string.cancel, null)
.create();
btnUnsubscribe.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(View v) {
new SimpleTask<String>() { new SimpleTask<String>() {
@Override
protected void onPreExecute(Bundle args) {
btnUnsubscribe.setEnabled(false);
pbUnsubscribe.setVisibility(View.VISIBLE);
}
@Override
protected void onPostExecute(Bundle args) {
btnUnsubscribe.setEnabled(true);
pbUnsubscribe.setVisibility(View.GONE);
}
@Override @Override
protected String onExecute(Context context, Bundle args) throws Throwable { protected String onExecute(Context context, Bundle args) throws Throwable {
final String uri = args.getString("uri"); final String uri = args.getString("uri");
@ -85,9 +106,10 @@ public class FragmentDialogUnsubscribe extends FragmentDialogBase {
connection.getOutputStream().write(request.getBytes()); connection.getOutputStream().write(request.getBytes());
int status = connection.getResponseCode(); int status = connection.getResponseCode();
if (status != HttpsURLConnection.HTTP_OK) { if (status < 200 || status > 299) {
String error = "Error " + status + ": " + connection.getResponseMessage(); String error = "Error " + status + ": " + connection.getResponseMessage();
String detail = Helper.readStream(connection.getErrorStream()); InputStream stream = connection.getErrorStream();
String detail = (stream == null ? null : Helper.readStream(stream));
throw new IOException(error + " " + detail); throw new IOException(error + " " + detail);
} }
@ -100,17 +122,19 @@ public class FragmentDialogUnsubscribe extends FragmentDialogBase {
@Override @Override
protected void onExecuted(Bundle args, String output) { protected void onExecuted(Bundle args, String output) {
ToastEx.makeText(context, R.string.title_completed, Toast.LENGTH_LONG).show(); ToastEx.makeText(context, R.string.title_completed, Toast.LENGTH_LONG).show();
dialog.dismiss();
} }
@Override @Override
protected void onException(Bundle args, Throwable ex) { protected void onException(Bundle args, Throwable ex) {
Log.unexpectedError(getParentFragment(), ex); dialog.dismiss();
Log.unexpectedError(getParentFragmentManager(), ex);
} }
}.execute(FragmentDialogUnsubscribe.this, args, "unsubscribe"); }.execute(FragmentDialogUnsubscribe.this, args, "unsubscribe");
} }
}) });
.setNegativeButton(android.R.string.cancel, null);
return builder.create(); return dialog;
} }
} }

@ -41,5 +41,29 @@
android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvSender" /> app:layout_constraintTop_toBottomOf="@id/tvSender" />
<Button
android:id="@+id/btnUnsubscribe"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:drawableEnd="@drawable/twotone_unsubscribe_24"
android:drawablePadding="6dp"
android:text="@string/title_unsubscribe"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvUri" />
<eu.faircode.email.ContentLoadingProgressBar
android:id="@+id/pbUnsubscribe"
style="@style/Base.Widget.AppCompat.ProgressBar"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="12dp"
android:indeterminate="true"
app:layout_constraintBottom_toBottomOf="@id/btnUnsubscribe"
app:layout_constraintStart_toEndOf="@id/btnUnsubscribe"
app:layout_constraintTop_toTopOf="@id/btnUnsubscribe" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView> </ScrollView>
Loading…
Cancel
Save