package de.robv.android.xposed.installer;
import android.Manifest;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Toast;
import com.afollestad.materialdialogs.folderselector.FolderChooserDialog;
import java.io.File;
import java.io.IOException;
import de.robv.android.xposed.installer.util.RepoLoader;
import de.robv.android.xposed.installer.util.ThemeUtil;
public class SettingsActivity extends XposedBaseActivity implements FolderChooserDialog.FolderCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ThemeUtil.setTheme(this);
setContentView(R.layout.activity_container);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
ActionBar ab = getSupportActionBar();
if (ab != null) {
ab.setTitle(R.string.nav_item_settings);
ab.setDisplayHomeAsUpEnabled(true);
}
setFloating(toolbar, 0);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new SettingsFragment()).commit();
}
}
@Override
public void onFolderSelection(@NonNull FolderChooserDialog dialog, @NonNull File folder) {
if (folder.canWrite()) {
XposedApp.getPreferences().edit().putString("download_location", folder.getPath()).apply();
} else {
Toast.makeText(this, R.string.sdcard_not_writable, Toast.LENGTH_SHORT).show();
}
}
public static class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener {
private static final File mDisableResourcesFlag = new File(XposedApp.BASE_DIR + "conf/disable_resources");
private Preference mClickedPreference;
private Preference downloadLocation;
public SettingsFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
findPreference("release_type_global").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
RepoLoader.getInstance().setReleaseTypeGlobal((String) newValue);
return true;
}
});
CheckBoxPreference prefDisableResources = (CheckBoxPreference) findPreference("disable_resources");
prefDisableResources.setChecked(mDisableResourcesFlag.exists());
prefDisableResources.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean enabled = (Boolean) newValue;
if (enabled) {
try {
//noinspection ResultOfMethodCallIgnored
mDisableResourcesFlag.createNewFile();
} catch (IOException e) {
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
} else {
//noinspection ResultOfMethodCallIgnored
mDisableResourcesFlag.delete();
}
return (enabled == mDisableResourcesFlag.exists());
}
});
// TODO maybe enable again after checking the implementation
//downloadLocation = findPreference("download_location");
//downloadLocation.setOnPreferenceClickListener(this);
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals("theme")) getActivity().recreate();
}
@Override
public boolean onPreferenceClick(Preference preference) {
if (preference.getKey().equals(downloadLocation.getKey())) {
if (checkPermissions()) {
mClickedPreference = downloadLocation;
return false;
}
new FolderChooserDialog.Builder((SettingsActivity) getActivity())
.cancelButton(android.R.string.cancel)
.initialPath(XposedApp.getDownloadPath())
.show();
}
return true;
}
private boolean checkPermissions() {
if (Build.VERSION.SDK_INT < 23) return false;
if (ActivityCompat.checkSelfPermission(getContext(),
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
return true;
}
return false;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (mClickedPreference != null) {
new android.os.Handler().postDelayed(new Runnable() {
@Override
public void run() {
onPreferenceClick(mClickedPreference);
}
}, 500);
}
} else {
Toast.makeText(getActivity(), R.string.permissionNotGranted, Toast.LENGTH_LONG).show();
}
}
}
}