package what.whatandroid.settings;
import android.Manifest;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.support.v13.app.FragmentCompat;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatDelegate;
import android.widget.Toast;
import what.whatandroid.R;
import what.whatandroid.WhatApplication;
import what.whatandroid.inbox.conversation.ManageConversationDialog;
import what.whatandroid.login.LoginActivity;
import what.whatandroid.updater.UpdateBroadcastReceiver;
import what.whatandroid.updater.UpdateService;
import what.whatandroid.updater.VersionNumber;
/**
* Fragment containing the user's settings & preferences
*/
public class SettingsFragment extends PreferenceFragment implements FragmentCompat.OnRequestPermissionsResultCallback {
/**
* Key in the shared preferences file where the user cookie is stored
*/
public static final String USER_COOKIE = "pref_user_cookie", USER_NAME = "pref_user_name",
USER_PASSWORD = "pref_user_password";
private static final int PERMISSIONS_REQUEST_WRITE_EXT_STORAGE = 1;
/** Strings to pass the download dirs to the permission request if needed */
String folder_picker_dir, folder_picker_download_dir;
public SettingsFragment() {
//required empty ctor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
try {
Preference version = getPreferenceScreen().findPreference(getString(R.string.key_pref_version_name));
String versionName = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0).versionName;
VersionNumber versionNumber = new VersionNumber(versionName);
version.setTitle(versionNumber.toString());
getActivity().setTheme(R.style.AppTheme);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSIONS_REQUEST_WRITE_EXT_STORAGE && grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED){
FolderPickerDialog dialog = FolderPickerDialog.newInstance(folder_picker_dir, folder_picker_download_dir);
dialog.show(getFragmentManager(), "folder_picker");
}
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if (preference.getKey() != null && getActivity() != null) {
if (preference.getKey().equalsIgnoreCase(getString(R.string.key_pref_torrent_download_path))) {
folder_picker_download_dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
folder_picker_dir = preference.getSharedPreferences().getString(preference.getKey(), folder_picker_download_dir);
// Check that we've got permissions to view the files
int permission_check = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission_check == PackageManager.PERMISSION_GRANTED){
FolderPickerDialog dialog = FolderPickerDialog.newInstance(folder_picker_dir, folder_picker_download_dir);
dialog.show(getFragmentManager(), "folder_picker");
}
else {
FragmentCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSIONS_REQUEST_WRITE_EXT_STORAGE);
}
return true;
}
//If the version number is clicked launch an update check
if (preference.getKey().equalsIgnoreCase(getString(R.string.key_pref_version_name))) {
Toast.makeText(getActivity(), "Checking for updates", Toast.LENGTH_SHORT).show();
Intent checkUpdates = new Intent(getActivity(), UpdateService.class);
getActivity().startService(checkUpdates);
return true;
}
if (preference.getKey().equalsIgnoreCase(getString(R.string.key_pref_light_theme))) {
if (SettingsActivity.lightThemeEnabled(getActivity().getApplicationContext())) {
AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_NO);
} else {
AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_YES);
}
}
//If we're enabling or disabling the periodic update checker then cancel or recreate the alarm as necessary
else if (preference.getKey().equalsIgnoreCase(getString(R.string.key_pref_disable_updater))) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
Intent updater = new Intent(getActivity(), UpdateBroadcastReceiver.class);
PendingIntent pending = PendingIntent.getBroadcast(getActivity(), 2, updater, PendingIntent.FLAG_NO_CREATE);
AlarmManager alarmMgr = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
boolean checkerDisabled = preferences.getBoolean(getActivity().getString(R.string.key_pref_disable_updater), false);
//Cancel the alarm if we're disabling the checker
if (pending != null && checkerDisabled) {
alarmMgr.cancel(pending);
}
//Set the alarm if we're re-enabling it and it was removed (ie. pending == null)
else {
pending = PendingIntent.getBroadcast(getActivity(), 2, updater, 0);
alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, AlarmManager.INTERVAL_DAY,
AlarmManager.INTERVAL_DAY, pending);
}
return true;
}
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
}