package ml.docilealligator.infinityforreddit.settings; import static android.content.Intent.ACTION_OPEN_DOCUMENT_TREE; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.preference.Preference; import javax.inject.Inject; import javax.inject.Named; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.customviews.CustomFontPreferenceFragmentCompat; import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; public class DownloadLocationPreferenceFragment extends CustomFontPreferenceFragmentCompat { private static final int IMAGE_DOWNLOAD_LOCATION_REQUEST_CODE = 10; private static final int GIF_DOWNLOAD_LOCATION_REQUEST_CODE = 11; private static final int VIDEO_DOWNLOAD_LOCATION_REQUEST_CODE = 12; private static final int NSFW_DOWNLOAD_LOCATION_REQUEST_CODE = 13; Preference imageDownloadLocationPreference; Preference gifDownloadLocationPreference; Preference videoDownloadLocationPreference; Preference nsfwDownloadLocationPreference; @Inject @Named("default") SharedPreferences sharedPreferences; @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { ((Infinity) activity.getApplication()).getAppComponent().inject(this); setPreferencesFromResource(R.xml.download_location_preferences, rootKey); imageDownloadLocationPreference = findPreference(SharedPreferencesUtils.IMAGE_DOWNLOAD_LOCATION); gifDownloadLocationPreference = findPreference(SharedPreferencesUtils.GIF_DOWNLOAD_LOCATION); videoDownloadLocationPreference = findPreference(SharedPreferencesUtils.VIDEO_DOWNLOAD_LOCATION); nsfwDownloadLocationPreference = findPreference(SharedPreferencesUtils.NSFW_DOWNLOAD_LOCATION); if (nsfwDownloadLocationPreference != null) { String downloadLocation = sharedPreferences.getString(SharedPreferencesUtils.NSFW_DOWNLOAD_LOCATION, ""); if (!downloadLocation.equals("")) { nsfwDownloadLocationPreference.setSummary(downloadLocation); } nsfwDownloadLocationPreference.setOnPreferenceClickListener(preference -> { Intent intent = new Intent(ACTION_OPEN_DOCUMENT_TREE); startActivityForResult(intent, NSFW_DOWNLOAD_LOCATION_REQUEST_CODE); return true; }); } if (imageDownloadLocationPreference != null) { String downloadLocation = sharedPreferences.getString(SharedPreferencesUtils.IMAGE_DOWNLOAD_LOCATION, ""); if (!downloadLocation.equals("")) { imageDownloadLocationPreference.setSummary(downloadLocation); } imageDownloadLocationPreference.setOnPreferenceClickListener(preference -> { Intent intent = new Intent(ACTION_OPEN_DOCUMENT_TREE); startActivityForResult(intent, IMAGE_DOWNLOAD_LOCATION_REQUEST_CODE); return true; }); } if (gifDownloadLocationPreference != null) { String downloadLocation = sharedPreferences.getString(SharedPreferencesUtils.GIF_DOWNLOAD_LOCATION, ""); if (!downloadLocation.equals("")) { gifDownloadLocationPreference.setSummary(downloadLocation); } gifDownloadLocationPreference.setOnPreferenceClickListener(preference -> { Intent intent = new Intent(ACTION_OPEN_DOCUMENT_TREE); startActivityForResult(intent, GIF_DOWNLOAD_LOCATION_REQUEST_CODE); return true; }); } if (videoDownloadLocationPreference != null) { String downloadLocation = sharedPreferences.getString(SharedPreferencesUtils.VIDEO_DOWNLOAD_LOCATION, ""); if (!downloadLocation.equals("")) { videoDownloadLocationPreference.setSummary(downloadLocation); } videoDownloadLocationPreference.setOnPreferenceClickListener(preference -> { Intent intent = new Intent(ACTION_OPEN_DOCUMENT_TREE); startActivityForResult(intent, VIDEO_DOWNLOAD_LOCATION_REQUEST_CODE); return true; }); } } @Override public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK && data != null && data.getData() != null) { if (requestCode == IMAGE_DOWNLOAD_LOCATION_REQUEST_CODE) { activity.getContentResolver().takePersistableUriPermission(data.getData(), Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); sharedPreferences.edit().putString(SharedPreferencesUtils.IMAGE_DOWNLOAD_LOCATION, data.getDataString()).apply(); if (imageDownloadLocationPreference != null) { imageDownloadLocationPreference.setSummary(data.getDataString()); } } else if (requestCode == GIF_DOWNLOAD_LOCATION_REQUEST_CODE) { activity.getContentResolver().takePersistableUriPermission(data.getData(), Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); sharedPreferences.edit().putString(SharedPreferencesUtils.GIF_DOWNLOAD_LOCATION, data.getDataString()).apply(); if (gifDownloadLocationPreference != null) { gifDownloadLocationPreference.setSummary(data.getDataString()); } } else if (requestCode == VIDEO_DOWNLOAD_LOCATION_REQUEST_CODE) { activity.getContentResolver().takePersistableUriPermission(data.getData(), Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); sharedPreferences.edit().putString(SharedPreferencesUtils.VIDEO_DOWNLOAD_LOCATION, data.getDataString()).apply(); if (videoDownloadLocationPreference != null) { videoDownloadLocationPreference.setSummary(data.getDataString()); } } else if (requestCode == NSFW_DOWNLOAD_LOCATION_REQUEST_CODE) { activity.getContentResolver().takePersistableUriPermission(data.getData(), Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); sharedPreferences.edit().putString(SharedPreferencesUtils.NSFW_DOWNLOAD_LOCATION, data.getDataString()).apply(); if (nsfwDownloadLocationPreference != null) { nsfwDownloadLocationPreference.setSummary(data.getDataString()); } } } } }