Search in sources :

Example 1 with DisposableSingleObserver

use of io.reactivex.observers.DisposableSingleObserver in project quran_android by quran.

the class QuranAdvancedSettingsFragment method onCreate.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.quran_advanced_preferences);
    final Context context = getActivity();
    appContext = context.getApplicationContext();
    // field injection
    ((QuranApplication) appContext).getApplicationComponent().inject(this);
    final Preference logsPref = findPreference(Constants.PREF_LOGS);
    if (BuildConfig.DEBUG || "beta".equals(BuildConfig.BUILD_TYPE)) {
        logsPref.setOnPreferenceClickListener(preference -> {
            if (logsSubscription == null) {
                logsSubscription = Observable.fromIterable(Timber.forest()).filter(tree -> tree instanceof RecordingLogTree).firstElement().map(tree -> ((RecordingLogTree) tree).getLogs()).map(logs -> QuranUtils.getDebugInfo(appContext, quranScreenInfo) + "\n\n" + logs).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribeWith(new DisposableMaybeObserver<String>() {

                    @Override
                    public void onSuccess(String logs) {
                        Intent intent = new Intent(Intent.ACTION_SEND);
                        intent.setType("message/rfc822");
                        intent.putExtra(Intent.EXTRA_EMAIL, new String[] { appContext.getString(R.string.logs_email) });
                        intent.putExtra(Intent.EXTRA_TEXT, logs);
                        intent.putExtra(Intent.EXTRA_SUBJECT, "Logs");
                        startActivity(Intent.createChooser(intent, appContext.getString(R.string.prefs_send_logs_title)));
                        logsSubscription = null;
                    }

                    @Override
                    public void onError(Throwable e) {
                    }

                    @Override
                    public void onComplete() {
                    }
                });
            }
            return true;
        });
    } else {
        removeAdvancePreference(logsPref);
    }
    final Preference importPref = findPreference(Constants.PREF_IMPORT);
    importPref.setOnPreferenceClickListener(preference -> {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("*/*");
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            String[] mimeTypes = new String[] { "application/*", "text/*" };
            intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
        }
        startActivityForResult(intent, REQUEST_CODE_IMPORT);
        return true;
    });
    final Preference exportPref = findPreference(Constants.PREF_EXPORT);
    exportPref.setOnPreferenceClickListener(preference -> {
        if (exportSubscription == null) {
            exportSubscription = bookmarkImportExportModel.exportBookmarksObservable().observeOn(AndroidSchedulers.mainThread()).subscribeWith(new DisposableSingleObserver<Uri>() {

                @Override
                public void onSuccess(Uri uri) {
                    Answers.getInstance().logCustom(new CustomEvent("exportData"));
                    Intent shareIntent = new Intent(Intent.ACTION_SEND);
                    shareIntent.setType("application/json");
                    shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                    shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
                    List<ResolveInfo> intents = appContext.getPackageManager().queryIntentActivities(shareIntent, 0);
                    if (intents.size() > 1) {
                        // if only one, then that is likely Quran for Android itself, so don't show
                        // the chooser since it doesn't really make sense.
                        context.startActivity(Intent.createChooser(shareIntent, context.getString(R.string.prefs_export_title)));
                    } else {
                        File exportedPath = new File(appContext.getExternalFilesDir(null), "backups");
                        String exported = appContext.getString(R.string.exported_data, exportedPath.toString());
                        Toast.makeText(appContext, exported, Toast.LENGTH_LONG).show();
                    }
                }

                @Override
                public void onError(Throwable e) {
                    exportSubscription = null;
                    if (isAdded()) {
                        Toast.makeText(context, R.string.export_data_error, Toast.LENGTH_LONG).show();
                    }
                }
            });
        }
        return true;
    });
    internalSdcardLocation = Environment.getExternalStorageDirectory().getAbsolutePath();
    listStoragePref = (DataListPreference) findPreference(getString(R.string.prefs_app_location));
    listStoragePref.setEnabled(false);
    try {
        storageList = StorageUtils.getAllStorageLocations(context.getApplicationContext());
    } catch (Exception e) {
        Timber.d(e, "Exception while trying to get storage locations");
        storageList = new ArrayList<>();
    }
    // except for the normal Environment.getExternalStorageDirectory
    if (storageList == null || storageList.size() <= 1) {
        Timber.d("removing advanced settings from preferences");
        hideStorageListPref();
    } else {
        loadStorageOptionsTask = new LoadStorageOptionsTask(context, quranFileUtils);
        loadStorageOptionsTask.execute();
    }
}
Also used : Context(android.content.Context) Context(android.content.Context) QuranImportActivity(com.quran.labs.androidquran.QuranImportActivity) Bundle(android.os.Bundle) Environment(android.os.Environment) Constants(com.quran.labs.androidquran.data.Constants) Uri(android.net.Uri) DataListPreference(com.quran.labs.androidquran.ui.preference.DataListPreference) Intent(android.content.Intent) QuranUtils(com.quran.labs.androidquran.util.QuranUtils) HashMap(java.util.HashMap) AndroidSchedulers(io.reactivex.android.schedulers.AndroidSchedulers) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) Toast(android.widget.Toast) R(com.quran.labs.androidquran.R) BuildConfig(com.quran.labs.androidquran.BuildConfig) QuranFileUtils(com.quran.labs.androidquran.util.QuranFileUtils) QuranSettings(com.quran.labs.androidquran.util.QuranSettings) Observable(io.reactivex.Observable) Schedulers(io.reactivex.schedulers.Schedulers) Build(android.os.Build) AsyncTask(android.os.AsyncTask) QuranAdvancedPreferenceActivity(com.quran.labs.androidquran.QuranAdvancedPreferenceActivity) ProgressDialog(android.app.ProgressDialog) TextUtils(android.text.TextUtils) QuranApplication(com.quran.labs.androidquran.QuranApplication) PermissionUtil(com.quran.labs.androidquran.service.util.PermissionUtil) QuranScreenInfo(com.quran.labs.androidquran.util.QuranScreenInfo) File(java.io.File) Timber(timber.log.Timber) ResolveInfo(android.content.pm.ResolveInfo) CustomEvent(com.crashlytics.android.answers.CustomEvent) StorageUtils(com.quran.labs.androidquran.util.StorageUtils) List(java.util.List) Disposable(io.reactivex.disposables.Disposable) PreferenceGroup(android.preference.PreferenceGroup) AlertDialog(android.support.v7.app.AlertDialog) BookmarkImportExportModel(com.quran.labs.androidquran.model.bookmark.BookmarkImportExportModel) DisposableMaybeObserver(io.reactivex.observers.DisposableMaybeObserver) Preference(android.preference.Preference) PreferenceFragment(android.preference.PreferenceFragment) Answers(com.crashlytics.android.answers.Answers) Activity(android.app.Activity) DisposableSingleObserver(io.reactivex.observers.DisposableSingleObserver) RecordingLogTree(com.quran.labs.androidquran.util.RecordingLogTree) CustomEvent(com.crashlytics.android.answers.CustomEvent) DisposableSingleObserver(io.reactivex.observers.DisposableSingleObserver) ArrayList(java.util.ArrayList) Intent(android.content.Intent) Uri(android.net.Uri) ResolveInfo(android.content.pm.ResolveInfo) DataListPreference(com.quran.labs.androidquran.ui.preference.DataListPreference) Preference(android.preference.Preference) RecordingLogTree(com.quran.labs.androidquran.util.RecordingLogTree) DisposableMaybeObserver(io.reactivex.observers.DisposableMaybeObserver) File(java.io.File)

Example 2 with DisposableSingleObserver

use of io.reactivex.observers.DisposableSingleObserver in project quran_android by quran.

the class JuzListFragment method onResume.

@Override
public void onResume() {
    final Activity activity = getActivity();
    if (activity instanceof QuranActivity) {
        disposable = ((QuranActivity) activity).getLatestPageObservable().first(Constants.NO_PAGE).observeOn(AndroidSchedulers.mainThread()).subscribeWith(new DisposableSingleObserver<Integer>() {

            @Override
            public void onSuccess(Integer recentPage) {
                if (recentPage != Constants.NO_PAGE) {
                    int juz = quranInfo.getJuzFromPage(recentPage);
                    int position = (juz - 1) * 9;
                    mRecyclerView.scrollToPosition(position);
                }
            }

            @Override
            public void onError(Throwable e) {
            }
        });
    }
    QuranSettings settings = QuranSettings.getInstance(activity);
    if (settings.isArabicNames()) {
        updateScrollBarPositionHoneycomb();
    }
    super.onResume();
}
Also used : DisposableSingleObserver(io.reactivex.observers.DisposableSingleObserver) QuranActivity(com.quran.labs.androidquran.ui.QuranActivity) QuranActivity(com.quran.labs.androidquran.ui.QuranActivity) Activity(android.app.Activity) QuranSettings(com.quran.labs.androidquran.util.QuranSettings)

Example 3 with DisposableSingleObserver

use of io.reactivex.observers.DisposableSingleObserver in project quran_android by quran.

the class SuraListFragment method onResume.

@Override
public void onResume() {
    final Activity activity = getActivity();
    if (activity instanceof QuranActivity) {
        QuranSettings settings = QuranSettings.getInstance(activity);
        disposable = ((QuranActivity) activity).getLatestPageObservable().first(Constants.NO_PAGE).observeOn(AndroidSchedulers.mainThread()).subscribeWith(new DisposableSingleObserver<Integer>() {

            @Override
            public void onSuccess(Integer recentPage) {
                if (recentPage != Constants.NO_PAGE) {
                    int sura = quranInfo.safelyGetSuraOnPage(recentPage);
                    int juz = quranInfo.getJuzFromPage(recentPage);
                    int position = sura + juz - 1;
                    mRecyclerView.scrollToPosition(position);
                }
            }

            @Override
            public void onError(Throwable e) {
            }
        });
        if (settings.isArabicNames()) {
            updateScrollBarPositionHoneycomb();
        }
    }
    super.onResume();
}
Also used : DisposableSingleObserver(io.reactivex.observers.DisposableSingleObserver) QuranActivity(com.quran.labs.androidquran.ui.QuranActivity) QuranActivity(com.quran.labs.androidquran.ui.QuranActivity) Activity(android.app.Activity) QuranSettings(com.quran.labs.androidquran.util.QuranSettings)

Example 4 with DisposableSingleObserver

use of io.reactivex.observers.DisposableSingleObserver in project quran_android by quran.

the class PagerActivity method toggleBookmark.

private void toggleBookmark(final Integer sura, final Integer ayah, final int page) {
    compositeDisposable.add(bookmarkModel.toggleBookmarkObservable(sura, ayah, page).observeOn(AndroidSchedulers.mainThread()).subscribeWith(new DisposableSingleObserver<Boolean>() {

        @Override
        public void onSuccess(Boolean isBookmarked) {
            if (sura == null || ayah == null) {
                // page bookmark
                bookmarksCache.put(page, isBookmarked);
                supportInvalidateOptionsMenu();
            } else {
                // ayah bookmark
                SuraAyah suraAyah = new SuraAyah(sura, ayah);
                updateAyahBookmark(suraAyah, isBookmarked, true);
            }
        }

        @Override
        public void onError(Throwable e) {
        }
    }));
}
Also used : DisposableSingleObserver(io.reactivex.observers.DisposableSingleObserver) SuraAyah(com.quran.labs.androidquran.data.SuraAyah)

Example 5 with DisposableSingleObserver

use of io.reactivex.observers.DisposableSingleObserver in project quran_android by quran.

the class PagerActivity method requestTranslationsList.

private void requestTranslationsList() {
    compositeDisposable.add(Single.fromCallable(() -> translationsDBAdapter.getTranslations()).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribeWith(new DisposableSingleObserver<List<LocalTranslation>>() {

        @Override
        public void onSuccess(List<LocalTranslation> translationList) {
            int items = translationList.size();
            String[] titles = new String[items];
            for (int i = 0; i < items; i++) {
                LocalTranslation item = translationList.get(i);
                if (!TextUtils.isEmpty(item.translatorForeign)) {
                    titles[i] = item.translatorForeign;
                } else if (!TextUtils.isEmpty(item.translator)) {
                    titles[i] = item.translator;
                } else {
                    titles[i] = item.name;
                }
            }
            Set<String> currentActiveTranslations = quranSettings.getActiveTranslations();
            if (currentActiveTranslations.isEmpty() && items > 0) {
                currentActiveTranslations = new HashSet<>();
                for (int i = 0; i < items; i++) {
                    currentActiveTranslations.add(translationList.get(i).filename);
                }
            }
            activeTranslations = currentActiveTranslations;
            if (translationsSpinnerAdapter != null) {
                translationsSpinnerAdapter.updateItems(titles, translationList, activeTranslations);
            }
            translationItems = titles;
            translations = translationList;
            if (showingTranslation) {
                // Since translation items have changed, need to
                updateActionBarSpinner();
            }
            refreshPages();
        }

        @Override
        public void onError(Throwable e) {
        }
    }));
}
Also used : DisposableSingleObserver(io.reactivex.observers.DisposableSingleObserver) LocalTranslation(com.quran.labs.androidquran.common.LocalTranslation) List(java.util.List)

Aggregations

DisposableSingleObserver (io.reactivex.observers.DisposableSingleObserver)6 Activity (android.app.Activity)3 QuranSettings (com.quran.labs.androidquran.util.QuranSettings)3 QuranActivity (com.quran.labs.androidquran.ui.QuranActivity)2 List (java.util.List)2 ProgressDialog (android.app.ProgressDialog)1 Context (android.content.Context)1 Intent (android.content.Intent)1 ResolveInfo (android.content.pm.ResolveInfo)1 Uri (android.net.Uri)1 AsyncTask (android.os.AsyncTask)1 Build (android.os.Build)1 Bundle (android.os.Bundle)1 Environment (android.os.Environment)1 Preference (android.preference.Preference)1 PreferenceFragment (android.preference.PreferenceFragment)1 PreferenceGroup (android.preference.PreferenceGroup)1 AlertDialog (android.support.v7.app.AlertDialog)1 TextUtils (android.text.TextUtils)1 Toast (android.widget.Toast)1