Search in sources :

Example 1 with RecordingLogTree

use of com.quran.labs.androidquran.util.RecordingLogTree in project quran_android by quran.

the class QuranApplication method onCreate.

@Override
public void onCreate() {
    super.onCreate();
    Fabric.with(this, new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build());
    Timber.plant(new RecordingLogTree());
    this.applicationComponent = initializeInjector();
}
Also used : CrashlyticsCore(com.crashlytics.android.core.CrashlyticsCore) RecordingLogTree(com.quran.labs.androidquran.util.RecordingLogTree) Crashlytics(com.crashlytics.android.Crashlytics)

Example 2 with RecordingLogTree

use of com.quran.labs.androidquran.util.RecordingLogTree 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)

Aggregations

RecordingLogTree (com.quran.labs.androidquran.util.RecordingLogTree)2 Activity (android.app.Activity)1 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 Crashlytics (com.crashlytics.android.Crashlytics)1 Answers (com.crashlytics.android.answers.Answers)1 CustomEvent (com.crashlytics.android.answers.CustomEvent)1