package com.fastaccess.ui.modules.settings;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.support.v14.preference.SwitchPreference;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ShareCompat;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.support.v7.preference.PreferenceGroupAdapter;
import android.view.View;
import android.widget.Toast;
import com.fastaccess.App;
import com.fastaccess.BuildConfig;
import com.fastaccess.R;
import com.fastaccess.data.dao.events.FloatingEventModel;
import com.fastaccess.helper.ActivityHelper;
import com.fastaccess.helper.AppHelper;
import com.fastaccess.helper.FileHelper;
import com.fastaccess.helper.IconPackHelper;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.helper.Logger;
import com.fastaccess.helper.PrefConstant;
import com.fastaccess.helper.PrefHelper;
import com.fastaccess.ui.modules.about.AboutMeView;
import com.fastaccess.ui.modules.intro.IntroPagerView;
import com.fastaccess.ui.modules.settings.dialogs.CustomIconChooserDialog;
import com.fastaccess.ui.modules.settings.dialogs.IconSizeTransparencyDialog;
import com.fastaccess.ui.modules.whats_new.WhatsNewView;
import com.google.common.io.Files;
import com.theartofdev.edmodo.cropper.CropImage;
import com.theartofdev.edmodo.cropper.CropImageView;
import org.greenrobot.eventbus.EventBus;
import java.io.File;
import java.io.IOException;
import java.util.List;
import pub.devrel.easypermissions.AfterPermissionGranted;
import pub.devrel.easypermissions.EasyPermissions;
import static android.app.Activity.RESULT_OK;
/**
* Created by Kosh on 15 Oct 2016, 10:49 PM
*/
public class SettingsFragmentView extends PreferenceFragmentCompat implements Preference.OnPreferenceClickListener, SharedPreferences
.OnSharedPreferenceChangeListener, CustomIconChooserDialog.OnCustomIconChooseCallback, EasyPermissions.PermissionCallbacks {
private Toast toast;
private final static String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
private void showToast(@StringRes int resId) {
if (toast != null) toast.cancel();
toast = Toast.makeText(App.getInstance(), resId, Toast.LENGTH_LONG);//getContext() might be null when onSharedPreferenceChanged, weird
// behavior
toast.show();
}
@Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.fa_settings);
}
@Override public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setDivider(ActivityCompat.getDrawable(getActivity(), R.drawable.list_divider));
setDividerHeight(1);
PreferenceGroupAdapter adapter = (PreferenceGroupAdapter) getListView().getAdapter();
for (int i = 0; i < getListView().getAdapter().getItemCount(); i++) {//lazy global setOnPreferenceClickListener
Preference preference = adapter.getItem(i);
if (preference != null && !InputHelper.isEmpty(preference.getKey())) {
if (preference.getKey().equalsIgnoreCase("version")) {
preference.setSummary(BuildConfig.VERSION_NAME);
} else if (!(preference instanceof SwitchPreference) && !(preference instanceof ListPreference)) {
preference.setOnPreferenceClickListener(this);
}
}
}
}
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == IconPackHelper.PICK_ICON) {
Bitmap bitmap = data.getParcelableExtra("icon");
if (bitmap == null) {
Uri uri = data.getData();
if (uri != null) {
File file = FileHelper.generateFile("fa_image_icon");
try {
Files.copy(new File(uri.getPath()), file);
} catch (IOException e) {
e.printStackTrace();
showToast(R.string.error_retrieving_icon);
return;
}
PrefHelper.set(PrefConstant.CUSTOM_ICON, file.getPath());
EventBus.getDefault().post(new FloatingEventModel(true, PrefConstant.CUSTOM_ICON));
} else {
showToast(R.string.error_retrieving_icon);
}
} else {
String path = AppHelper.saveBitmap(bitmap);
if (path == null) {
showToast(R.string.write_sdcard_explanation);
return;
}
PrefHelper.set(PrefConstant.CUSTOM_ICON, path);
EventBus.getDefault().post(new FloatingEventModel(true, PrefConstant.CUSTOM_ICON));
if (!bitmap.isRecycled()) {
bitmap.recycle();
}
}
} else if (requestCode == ActivityHelper.SELECT_PHOTO_REQUEST) {
CropImage.activity(data.getData())
.setCropShape(CropImageView.CropShape.OVAL)
.setOutputUri(Uri.fromFile(FileHelper.generateFile("fa_image_icon")))
.setAspectRatio(5, 5)
.setFixAspectRatio(true)
.setOutputCompressFormat(Bitmap.CompressFormat.PNG)
.start(getContext(), this);
} else if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
Uri resultUri = result.getUri();
PrefHelper.set(PrefConstant.CUSTOM_ICON, new File(resultUri.getPath()).getPath());
EventBus.getDefault().post(new FloatingEventModel(true, PrefConstant.CUSTOM_ICON));
}
} else if (resultCode == Activity.RESULT_CANCELED) {
if (requestCode == IconPackHelper.PICK_ICON) {
if (data != null) {
boolean defaultIcon = data.getBooleanExtra("default", false);
if (defaultIcon) {
PrefHelper.set(PrefConstant.CUSTOM_ICON, "");
EventBus.getDefault().post(new FloatingEventModel(true, PrefConstant.CUSTOM_ICON));
}
}
}
}
}
@Override public boolean onPreferenceClick(Preference preference) {
switch (preference.getKey()) {
case "fa_background_alpha":
IconSizeTransparencyDialog.newInstance(true).show(getChildFragmentManager(), "IconSizeTransparencyDialog");
return true;
case "icon_pack":
IconPackHelper.pickIconPack(this, false);
return true;
case "custom_icon":
new CustomIconChooserDialog().show(getChildFragmentManager(), "CustomIconChooserDialog");
return true;
case "icon_alpha":
IconSizeTransparencyDialog.newInstance(false).show(getChildFragmentManager(), "IconSizeTransparencyDialog");
return true;
case "manual_size":
IconSizeTransparencyDialog.newInstance(false, true).show(getChildFragmentManager(), "IconSizeTransparencyDialog");
return true;
case "version":
return true;
case "sourceCode":
ActivityHelper.startCustomTab(getActivity());
return true;
case "libraries":
ActivityHelper.startLibs(getActivity());
return true;
case "about_me":
startActivity(new Intent(getContext(), AboutMeView.class));
return true;
case "email_us":
ShareCompat.IntentBuilder.from(getActivity())
.setType("message/rfc822")
.setEmailTo(new String[]{"fastaccessapps@gmail.com"})
.setSubject(getString(R.string.email_subject))
.setText(AppHelper.getEmailBody())
.setChooserTitle(getString(R.string.choose_email))
.startChooser();
return true;
case "whats_new":
startActivity(new Intent(getContext(), WhatsNewView.class));
return true;
case "intro":
startActivity(new Intent(getContext(), IntroPagerView.class));
return true;
}
return false;
}
@Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key == null) return;
if (key.equalsIgnoreCase(PrefConstant.STATUS_BAR_HIDDEN) || key.equalsIgnoreCase(PrefConstant.FA_IS_HORIZONTAL)
|| key.equalsIgnoreCase(PrefConstant.FLOATING_MODE)) {
showToast(R.string.required_restart);
} else if (key.equalsIgnoreCase(PrefConstant.ICON_SIZE)) {
sharedPreferences.edit().putInt(PrefConstant.MANUAL_SIZE, 0).apply();
}
EventBus.getDefault().post(new FloatingEventModel(true, key));
}
@Override public void onResume() {
super.onResume();
PreferenceManager.getDefaultSharedPreferences(getContext()).registerOnSharedPreferenceChangeListener(this);
}
@Override public void onPause() {
super.onPause();
PreferenceManager.getDefaultSharedPreferences(getContext()).registerOnSharedPreferenceChangeListener(this);
}
@Override public void onUserChoose(boolean isFromGallery) {
if (!isFromGallery) {
pickIcon();
} else {
pickImage();
}
}
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override public void onPermissionsGranted(int requestCode, List<String> perms) {
Logger.e(perms);
}
@Override public void onPermissionsDenied(int requestCode, List<String> perms) {
Logger.e(perms);
}
@AfterPermissionGranted(IconPackHelper.PICK_ICON) private void pickIcon() {
if (EasyPermissions.hasPermissions(getContext(), permissions)) {
IconPackHelper.pickIconPack(this, true);
} else {
EasyPermissions.requestPermissions(this, getString(R.string.write_sdcard_explanation),
IconPackHelper.PICK_ICON, permissions);
}
}
@AfterPermissionGranted(ActivityHelper.SELECT_PHOTO_REQUEST) private void pickImage() {
if (EasyPermissions.hasPermissions(getContext(), permissions)) {
ActivityHelper.startGalleryIntent(this);
} else {
EasyPermissions.requestPermissions(this, getString(R.string.write_sdcard_explanation),
ActivityHelper.SELECT_PHOTO_REQUEST, permissions);
}
}
}