In my app (general construction described below), I have a timer, which the user can start by clicking an in-app button.
When the timer starts, a notification is shown. In the notification, there's a "STOP" button, which when clicked is supposed to open the app (if closed or killed) and then show a custom dialog.
The custom dialog is built of a bunch of views and a blur-background view.
There are two ways to open that dialog:
- Clicking an in-app button triggers the method that opens this dialog.
- Clicking the "STOP" button in the notification also triggers the same method (By calling a
BroadcastReceiver
that lives in the same fragment as the dialog, and in theBroadcastReceiver
I call the method that opens the dialog - it all happens after the app opens (if it was closed or killed)).
The first method works - clicking the button opens the dialog when it's supposed to.
The second, however, opens the app but not the dialog (To clarify - opening the dialog means changing its views visibility to View.VISIBLE
).
To check what goes wrong, I used a Toast
message that shows the visibility of the dialog every time the method that opens the dialog gets called. The Toast
message shows "VISIBLE
", so that means the Views visibility is set to View.VISIBLE
indeed - but the dialog is not shown, nor the blur-background.
General Construction: The app has multiple Fragments
, stored inside a view pager, inside the MainActivity
and the dialog lives in the main fragment.
Might Be Relevant: when clicking the notifications button, the app opens, but the notification panel stays fully opened. The Toast
message shows behind the notification panel.
Also might be worth mentioning, that when I click the notification button while I didn't yet leave the app, the dialog pops up. Only after I leave the app and then come back (manually or by clicking the notification button) the dialog doesn't pop up.
dialog's XML: (stored inside of fragment_main.xml
)
<com.google.android.material.circularreveal.CircularRevealFrameLayout
android:id="@+id/dialog_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
app:layout_behavior="com.google.android.material.transformation.FabTransformationSheetBehavior">
<com.google.android.material.card.MaterialCardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:cardPreventCornerOverlap="true">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="15.0dip">
//Here is the content of the dialog, textviews and custom buttons
</RelativeLayout>
</com.google.android.material.card.MaterialCardView>
</com.google.android.material.circularreveal.CircularRevealFrameLayout>
dialog opening method:
private void openDialog() {
//while "dialog" refers to the "dialog_container" in the dialog xml
dialog.setVisibility(View.VISIBLE);
fadeBlurIn(); //fades the blur-background view in
dialog.setClickable(true);
}
calling the method in the BroadcastReceiver
: (stored inside MainFragment.java
)
private final BroadcastReceiver endTimerReceiver = new BroadcastReceiver() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onReceive(Context context, Intent intent) {
.
.
.
boolean openDialog = {gets a boolean extra, works fine};
if (openDialog){
openDialog();
}
}
}
};
this BroadcastReceiver
is attached to this fragment and works fine.
Why doesn't the dialog show?
And how can I fix it?