Skip to content

Commit

Permalink
Wait dialog with progress bar
Browse files Browse the repository at this point in the history
  • Loading branch information
usharik committed May 16, 2018
1 parent bf26a4d commit 99a2a2a
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,29 @@

import android.databinding.DataBindingUtil;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Log;

import com.usharik.seznamslovnik.action.Action;
import com.usharik.seznamslovnik.action.ShowToastAction;
import com.usharik.seznamslovnik.databinding.ActivityDeclensionBinding;
import com.usharik.seznamslovnik.framework.ViewActivity;
import com.usharik.seznamslovnik.util.WaitDialogManager;

import javax.inject.Inject;

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import io.reactivex.subjects.PublishSubject;

public class DeclensionActivity extends ViewActivity<DeclensionViewModel> {

private ActivityDeclensionBinding binding;
private Disposable disposable;

@Inject
PublishSubject<Action> executeActionSubject;

@Override
protected void onResume() {
super.onResume();
Expand All @@ -24,10 +34,16 @@ protected void onResume() {
disposable = getViewModel().getAdapter()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(binding.declensionList::setAdapter);
.compose(WaitDialogManager.showWaitDialog(getSupportFragmentManager()))
.subscribe(binding.declensionList::setAdapter, this::onError);
binding.linkToSource.setText(getViewModel().getLink());
}

public void onError(Throwable thr) {
executeActionSubject.onNext(new ShowToastAction(thr.getLocalizedMessage()));
Log.e(getClass().getName(), thr.getLocalizedMessage(), thr);
}

@Override
protected Class<DeclensionViewModel> getViewModelClass() {
return DeclensionViewModel.class;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import com.usharik.seznamslovnik.action.Action;
import com.usharik.seznamslovnik.action.OpenUrlInBrowserAction;
import com.usharik.seznamslovnik.action.ShowToastAction;
import com.usharik.seznamslovnik.adapter.DeclensionAdapter;
import com.usharik.seznamslovnik.adapter.FormsOfVerbAdapter;
import com.usharik.seznamslovnik.dao.DatabaseManager;
Expand Down Expand Up @@ -132,7 +133,8 @@ private RecyclerView.Adapter prepareWordFormsAdapter(String word) {
adapter = new DeclensionAdapter(Collections.emptyMap(), Collections.emptyMap());
}
} catch (Exception ex) {
Log.e(getClass().getName(), "!!!!!", ex);
Log.e(getClass().getName(), ex.getLocalizedMessage(), ex);
executeActionSubject.onNext(new ShowToastAction(ex.getLocalizedMessage()));
} finally {
notifyPropertyChanged(BR.wordInfo);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package com.usharik.seznamslovnik.util;

import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;

import com.usharik.seznamslovnik.R;

import io.reactivex.ObservableTransformer;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Action;
import io.reactivex.functions.Consumer;

public class WaitDialogManager {
public static class WaitDialogFragment extends DialogFragment {

public static WaitDialogFragment newInstance() {
return new WaitDialogFragment();
}

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.wait_dialog_fragment, container, false);
}
}

public static <T> ObservableTransformer<T, T> showWaitDialog(FragmentManager fragmentManager) {
ActionConsumer actionConsumer = new ActionConsumer(WaitDialogFragment.newInstance(), fragmentManager);
return observable -> observable
.doOnSubscribe(actionConsumer)
.doOnComplete(actionConsumer)
.doOnTerminate(actionConsumer)
.doOnDispose(actionConsumer);
}

private static class ActionConsumer implements Action, Consumer<Disposable> {

private WaitDialogFragment dialogFragment;
private FragmentManager fragmentManager;

ActionConsumer(WaitDialogFragment dialogFragment, FragmentManager fragmentManager) {
this.dialogFragment = dialogFragment;
this.fragmentManager = fragmentManager;
}

@Override
public void accept(Disposable disposable) {
dialogFragment.show(fragmentManager, "wait_dialog");
}

@Override
public void run() {
dialogFragment.dismiss();
}
}
}
18 changes: 18 additions & 0 deletions app/src/main/res/layout/wait_dialog_fragment.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="15dp"
xmlns:app="http://schemas.android.com/apk/res-auto">

<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent" />

</android.support.constraint.ConstraintLayout>

0 comments on commit 99a2a2a

Please sign in to comment.