Skip to content

Commit 3a082fd

Browse files
SUPERCILEXsamtstern
authored andcommitted
Fix phone verification progress dialog bugs on pre-L devices (#817)
1 parent d2c7ed7 commit 3a082fd

File tree

4 files changed

+56
-71
lines changed

4 files changed

+56
-71
lines changed

auth/src/main/java/com/firebase/ui/auth/ui/phone/CompletableProgressDialog.java

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,51 +14,56 @@
1414

1515
package com.firebase.ui.auth.ui.phone;
1616

17-
import android.app.ProgressDialog;
18-
import android.content.Context;
17+
import android.app.Dialog;
1918
import android.os.Bundle;
19+
import android.support.annotation.NonNull;
20+
import android.support.annotation.VisibleForTesting;
21+
import android.support.v4.app.DialogFragment;
22+
import android.support.v4.app.FragmentManager;
23+
import android.support.v7.app.AlertDialog;
2024
import android.view.View;
2125
import android.widget.ImageView;
2226
import android.widget.ProgressBar;
2327
import android.widget.TextView;
2428

2529
import com.firebase.ui.auth.R;
2630

27-
public final class CompletableProgressDialog extends ProgressDialog {
31+
public final class CompletableProgressDialog extends DialogFragment {
32+
private static final String TAG = "ComProgressDialog";
33+
2834
private ProgressBar mProgress;
29-
private TextView mMessageView;
35+
@VisibleForTesting TextView mMessageView;
3036
private CharSequence mMessage;
3137
private ImageView mSuccessImage;
3238

33-
public CompletableProgressDialog(Context context) {
34-
super(context);
35-
}
36-
37-
public CompletableProgressDialog(Context context, int theme) {
38-
super(context, theme);
39+
public static CompletableProgressDialog show(FragmentManager manager) {
40+
CompletableProgressDialog dialog = new CompletableProgressDialog();
41+
dialog.show(manager, TAG);
42+
return dialog;
3943
}
4044

45+
@NonNull
4146
@Override
42-
protected void onCreate(Bundle savedInstanceState) {
43-
super.onCreate(savedInstanceState);
44-
setContentView(R.layout.fui_phone_progress_dialog);
47+
public Dialog onCreateDialog(Bundle savedInstanceState) {
48+
View rootView = View.inflate(getContext(), R.layout.fui_phone_progress_dialog, null);
4549

46-
mProgress = (ProgressBar) findViewById(R.id.progress_bar);
47-
mMessageView = (TextView) findViewById(R.id.progress_msg);
48-
mSuccessImage = (ImageView) findViewById(R.id.progress_success_imaage);
50+
mProgress = (ProgressBar) rootView.findViewById(R.id.progress_bar);
51+
mMessageView = (TextView) rootView.findViewById(R.id.progress_msg);
52+
mSuccessImage = (ImageView) rootView.findViewById(R.id.progress_success_imaage);
4953

5054
if (mMessage != null) {
5155
setMessage(mMessage);
5256
}
57+
58+
return new AlertDialog.Builder(getContext()).setView(rootView).create();
5359
}
5460

55-
public void complete(String msg) {
61+
public void onComplete(String msg) {
5662
setMessage(msg);
5763
mProgress.setVisibility(View.GONE);
5864
mSuccessImage.setVisibility(View.VISIBLE);
5965
}
6066

61-
@Override
6267
public void setMessage(CharSequence message) {
6368
if (mProgress != null) {
6469
mMessageView.setText(message);

auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivity.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ private enum VerificationState {
6767
private static final String KEY_STATE = "KEY_STATE";
6868

6969
private AlertDialog mAlertDialog;
70-
private CompletableProgressDialog mProgressDialog;
70+
@VisibleForTesting CompletableProgressDialog mProgressDialog;
7171
private Handler mHandler;
7272
private String mPhoneNumber;
7373
private String mVerificationId;
@@ -371,21 +371,18 @@ public void onClick(DialogInterface dialog, int which) {
371371

372372
private void completeLoadingDialog(String content) {
373373
if (mProgressDialog != null) {
374-
mProgressDialog.complete(content);
374+
mProgressDialog.onComplete(content);
375375
}
376376
}
377377

378378
private void showLoadingDialog(String message) {
379379
dismissLoadingDialog();
380380

381381
if (mProgressDialog == null) {
382-
mProgressDialog = new CompletableProgressDialog(this);
383-
mProgressDialog.setIndeterminate(true);
384-
mProgressDialog.setTitle("");
382+
mProgressDialog = CompletableProgressDialog.show(getSupportFragmentManager());
385383
}
386384

387385
mProgressDialog.setMessage(message);
388-
mProgressDialog.show();
389386
}
390387

391388
private void dismissLoadingDialog() {
Lines changed: 27 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,33 @@
1-
<merge
1+
<LinearLayout
22
xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:tools="http://schemas.android.com/tools"
43
android:layout_width="match_parent"
5-
android:layout_height="wrap_content">
4+
android:layout_height="wrap_content"
5+
android:orientation="horizontal"
6+
android:padding="8dp">
67

7-
<LinearLayout
8-
android:id="@+id/dgts_body"
9-
android:layout_width="match_parent"
10-
android:layout_height="match_parent"
11-
android:paddingStart="8dip"
12-
android:paddingEnd="8dip"
13-
android:paddingTop="10dip"
14-
android:paddingBottom="10dip"
15-
android:baselineAligned="false"
16-
android:orientation="horizontal"
17-
tools:ignore="UnusedIds">
18-
19-
<ProgressBar
20-
android:id="@+id/progress_bar"
21-
style="?android:attr/progressBarStyle"
22-
android:layout_width="wrap_content"
23-
android:layout_height="wrap_content"
24-
android:layout_margin="12dip"
25-
android:max="10000" />
8+
<ProgressBar
9+
android:id="@+id/progress_bar"
10+
style="@style/Base.Widget.AppCompat.ProgressBar"
11+
android:layout_width="wrap_content"
12+
android:layout_height="wrap_content"
13+
android:layout_margin="12dp"
14+
android:max="10000" />
2615

27-
<ImageView
28-
android:id="@+id/progress_success_imaage"
29-
style="?android:attr/progressBarStyle"
30-
android:layout_width="wrap_content"
31-
android:layout_height="wrap_content"
32-
android:layout_margin="12dip"
33-
android:contentDescription="@string/fui_done"
34-
android:max="10000"
35-
android:src="@drawable/fui_done_check_mark"
36-
android:visibility="gone" />
16+
<ImageView
17+
android:id="@+id/progress_success_imaage"
18+
android:layout_width="wrap_content"
19+
android:layout_height="wrap_content"
20+
android:layout_margin="12dp"
21+
android:contentDescription="@string/fui_done"
22+
android:max="10000"
23+
android:src="@drawable/fui_done_check_mark"
24+
android:visibility="gone" />
3725

38-
<TextView
39-
android:id="@+id/progress_msg"
40-
android:layout_width="match_parent"
41-
android:layout_height="wrap_content"
42-
android:layout_gravity="center_vertical"
43-
tools:ignore="SelectableText" />
44-
45-
</LinearLayout>
26+
<TextView
27+
android:id="@+id/progress_msg"
28+
android:layout_width="match_parent"
29+
android:layout_height="wrap_content"
30+
android:layout_gravity="center_vertical"
31+
android:textIsSelectable="false" />
4632

47-
</merge>
33+
</LinearLayout>

auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneVerificationActivityTest.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
package com.firebase.ui.auth.ui.phone;
1616

17-
import android.app.AlertDialog;
1817
import android.content.Intent;
1918
import android.os.Bundle;
2019
import android.view.View;
@@ -48,7 +47,6 @@
4847
import org.robolectric.RobolectricTestRunner;
4948
import org.robolectric.RuntimeEnvironment;
5049
import org.robolectric.annotation.Config;
51-
import org.robolectric.shadows.ShadowAlertDialog;
5250
import org.robolectric.shadows.ShadowLooper;
5351

5452
import java.util.Collections;
@@ -70,7 +68,6 @@
7068
import static org.mockito.Mockito.verify;
7169
import static org.mockito.Mockito.when;
7270
import static org.mockito.MockitoAnnotations.initMocks;
73-
import static org.robolectric.Shadows.shadowOf;
7471

7572
@RunWith(RobolectricTestRunner.class)
7673
@Config(constants = BuildConfig.class, sdk = 25)
@@ -155,10 +152,10 @@ public void testVerifyPhoneNumberInvalidPhoneException_showsInlineError() {
155152
reset(AuthHelperShadow.sPhoneAuthProvider);
156153

157154
mActivity.verifyPhoneNumber(PHONE, false);
158-
AlertDialog alert = ShadowAlertDialog.getLatestAlertDialog();
159-
ShadowAlertDialog sAlert = shadowOf(alert);
160155
//was dialog displayed
161-
assertEquals(mActivity.getString(R.string.fui_verifying), sAlert.getMessage());
156+
assertEquals(
157+
mActivity.getString(R.string.fui_verifying),
158+
mActivity.mProgressDialog.mMessageView.getText());
162159

163160
//was upstream method invoked
164161
verify(AuthHelperShadow.sPhoneAuthProvider).verifyPhoneNumber(

0 commit comments

Comments
 (0)