package de.devland.masterpassword.ui.preferences;
import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.Dialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.preference.ListPreference;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.AttributeSet;
import de.devland.esperandro.Esperandro;
import de.devland.masterpassword.R;
import de.devland.masterpassword.prefs.DefaultPrefs;
import de.devland.masterpassword.ui.LoginActivity;
import lombok.Setter;
/**
* Created by David Kunzler on 11.09.2014.
*/
public class LanguagePreference extends ListPreference {
protected String oldLanguage;
protected DefaultPrefs defaultPrefs;
@Setter
protected AppCompatActivity settingsActivity;
public LanguagePreference(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public LanguagePreference(Context context) {
super(context);
init();
}
void init() {
defaultPrefs = Esperandro.getPreferences(DefaultPrefs.class, getContext());
oldLanguage = defaultPrefs.language();
}
@Override
public void onActivityDestroy() {
super.onActivityDestroy();
this.setOnPreferenceChangeListener(null);
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
if (!oldLanguage.equals(defaultPrefs.language())) {
RestartDialog restartDialog = new RestartDialog();
restartDialog.show(settingsActivity.getSupportFragmentManager(), null);
}
}
@SuppressLint("ValidFragment")
public static class RestartDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(getActivity().getString(R.string.title_restartApp));
builder.setMessage(getActivity().getString(R.string.msg_restartApp));
builder.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// http://stackoverflow.com/questions/6609414/howto-programatically-restart-android-app
Intent mStartActivity = new Intent(getContext(), LoginActivity.class);
mStartActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
int mPendingIntentId = 123456;
PendingIntent mPendingIntent = PendingIntent.getActivity(getActivity(), mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
android.os.Process.killProcess(android.os.Process.myPid());
}
});
return builder.create();
}
}
}