package com.appboy.sample;
import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.appboy.Constants;
import com.appboy.support.AppboyLogger;
import java.util.Map;
public class SetEnvironmentPreference extends DialogPreference implements DialogInterface.OnDismissListener {
private static final String TAG = String.format("%s.%s", Constants.APPBOY_LOG_TAG_PREFIX, SetEnvironmentPreference.class.getName());
private static final String OVERRIDE_API_KEY_ALIAS_PREF_KEY = "override_api_key_alias";
private TextView mApiKeyAliasTextView;
private TextView mApiKeyTextView;
private TextView mEndpointTextView;
private final Context mApplicationContext;
private SharedPreferences mSharedPreferences;
private SharedPreferences mApiKeySharedPreferences;
public SetEnvironmentPreference(Context context, AttributeSet attrs) {
super(context, attrs);
mApplicationContext = context.getApplicationContext();
setDialogLayoutResource(R.layout.set_environment_preference);
setPersistent(false);
}
@Override
protected View onCreateDialogView() {
View view = super.onCreateDialogView();
mSharedPreferences = mApplicationContext.getSharedPreferences(mApplicationContext.getString(R.string.shared_prefs_location), Context.MODE_PRIVATE);
String overrideApiKeyAlias = mSharedPreferences.getString(OVERRIDE_API_KEY_ALIAS_PREF_KEY, null);
String overrideApiKey = mSharedPreferences.getString(DroidboyApplication.OVERRIDE_API_KEY_PREF_KEY, null);
String overrideEndpointUrl = mSharedPreferences.getString(DroidboyApplication.OVERRIDE_ENDPOINT_PREF_KEY, null);
mApiKeyAliasTextView = (TextView) view.findViewById(R.id.set_environment_override_api_key_alias);
mApiKeyTextView = (TextView) view.findViewById(R.id.set_environment_override_api_key);
mEndpointTextView = (TextView) view.findViewById(R.id.set_environment_override_endpoint_url);
if (overrideApiKeyAlias != null) {
mApiKeyAliasTextView.setText(overrideApiKeyAlias);
}
if (overrideApiKey != null) {
mApiKeyTextView.setText(overrideApiKey);
}
if (overrideEndpointUrl != null) {
mEndpointTextView.setText(overrideEndpointUrl);
}
LinearLayout storedApiKeyLinearLayout = (LinearLayout) view.findViewById(R.id.stored_api_key_layout);
mApiKeySharedPreferences = mApplicationContext.getSharedPreferences(mApplicationContext.getString(R.string.api_key_shared_prefs_location), Context.MODE_PRIVATE);
Map<String, ?> apiKeys = mApiKeySharedPreferences.getAll();
// populate default API key
if (!apiKeys.keySet().contains("Default")) {
String appboyXmlApiKey = getContext().getResources().getString(R.string.com_appboy_api_key);
storedApiKeyLinearLayout.addView(getApiKeyButton("Default", appboyXmlApiKey));
}
// populate previously stored API keys
for (final String alias : apiKeys.keySet()) {
final String apiKey = mApiKeySharedPreferences.getString(alias, null);
storedApiKeyLinearLayout.addView(getApiKeyButton(alias, apiKey));
}
return view;
}
private Button getApiKeyButton(final String alias, final String apiKey) {
Button button = new Button(getContext());
button.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
mApiKeyAliasTextView.setText(alias);
mApiKeyTextView.setText(apiKey);
}
}
);
button.setText(alias + ": " + apiKey);
return button;
}
@Override
@SuppressLint("CommitPrefEdits")
protected void onDialogClosed(boolean clickedPositiveButton) {
super.onDialogClosed(clickedPositiveButton);
if (clickedPositiveButton) {
SharedPreferences.Editor sharedPreferencesEditor = mSharedPreferences.edit();
String apiKeyAlias = mApiKeyAliasTextView.getText().toString();
String apiKey = mApiKeyTextView.getText().toString();
String endpoint = mEndpointTextView.getText().toString();
if (apiKeyAlias.length() > 0) {
sharedPreferencesEditor.putString(OVERRIDE_API_KEY_ALIAS_PREF_KEY, apiKeyAlias);
} else {
sharedPreferencesEditor.remove(OVERRIDE_API_KEY_ALIAS_PREF_KEY);
}
if (apiKey.length() > 0) {
sharedPreferencesEditor.putString(DroidboyApplication.OVERRIDE_API_KEY_PREF_KEY, apiKey);
} else {
sharedPreferencesEditor.remove(DroidboyApplication.OVERRIDE_API_KEY_PREF_KEY);
}
if (apiKeyAlias.length() > 0 && apiKey.length() > 0) {
mApiKeySharedPreferences.edit().putString(apiKeyAlias, apiKey).commit();
}
if (endpoint.length() > 0) {
sharedPreferencesEditor.putString(DroidboyApplication.OVERRIDE_ENDPOINT_PREF_KEY, endpoint);
} else {
sharedPreferencesEditor.remove(DroidboyApplication.OVERRIDE_ENDPOINT_PREF_KEY);
}
sharedPreferencesEditor.commit();
restartApp();
}
}
private void restartApp() {
Intent startActivity = new Intent(mApplicationContext, DroidBoyActivity.class);
int pendingIntentId = 109829837;
PendingIntent pendingIntent = PendingIntent.getActivity(mApplicationContext, pendingIntentId, startActivity, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) mApplicationContext.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 100, pendingIntent);
AppboyLogger.i(TAG, "Restarting application to apply new environment values");
System.exit(0);
}
}