package ru.ltst.u2020mvp.ui.logs; import android.app.AlertDialog; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.widget.ListView; import android.widget.Toast; import java.io.File; import ru.ltst.u2020mvp.data.LumberYard; import ru.ltst.u2020mvp.util.Intents; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; import rx.subscriptions.CompositeSubscription; public final class LogsDialog extends AlertDialog { private final LumberYard lumberYard; private final LogAdapter adapter; private CompositeSubscription subscriptions; public LogsDialog(Context context, LumberYard lumberYard) { super(context); this.lumberYard = lumberYard; adapter = new LogAdapter(context); ListView listView = new ListView(context); listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL); listView.setAdapter(adapter); setTitle("Logs"); setView(listView); setButton(BUTTON_NEGATIVE, "Close", (dialog, which) -> { // NO-OP. }); setButton(BUTTON_POSITIVE, "Share", (dialog, which) -> { share(); }); } @Override protected void onStart() { super.onStart(); adapter.setLogs(lumberYard.bufferedLogs()); subscriptions = new CompositeSubscription(); subscriptions.add(lumberYard.logs() // .observeOn(AndroidSchedulers.mainThread()) // .subscribe(adapter)); } @Override protected void onStop() { super.onStop(); subscriptions.unsubscribe(); } private void share() { lumberYard.save() // .subscribeOn(Schedulers.io()) // .observeOn(AndroidSchedulers.mainThread()) // .subscribe(new Subscriber<File>() { @Override public void onCompleted() { // NO-OP. } @Override public void onError(Throwable e) { Toast.makeText(getContext(), "Couldn't save the logs for sharing.", Toast.LENGTH_SHORT) .show(); } @Override public void onNext(File file) { Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.setType("text/plain"); sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); Intents.maybeStartChooser(getContext(), sendIntent); } }); } }