package kc.spark.pixels.android.ui.util;
import kc.get.pixel.list.android.R;
import kc.spark.pixels.android.app.DeviceState;
import kc.spark.pixels.android.cloud.ApiFacade;
import kc.spark.pixels.android.cloud.api.Device;
import kc.spark.pixels.android.util.CoreNameGenerator;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.support.v4.content.LocalBroadcastManager;
import android.view.View;
import android.widget.EditText;
public class NamingHelper {
public final static String BROADCAST_NEW_NAME_FOUND = "BROADCAST_NEW_NAME_FOUND";
public final static String EXTRA_NEW_NAME = "EXTRA_NEW_NAME";
private final Activity activity;
private final ApiFacade api;
private final LocalBroadcastManager broadcastMgr;
public NamingHelper(Activity activity, ApiFacade api) {
this.activity = activity;
this.api = api;
this.broadcastMgr = LocalBroadcastManager.getInstance(activity.getApplicationContext());
}
public void renameCore(Device device, String newName, Runnable runOnDupeName) {
if (DeviceState.getExistingCoreNames().contains(newName) && !newName.equals(device.name)) {
showDupeNameDialog(runOnDupeName);
} else {
Intent intent = new Intent(BROADCAST_NEW_NAME_FOUND).
putExtra(EXTRA_NEW_NAME, newName);
broadcastMgr.sendBroadcast(intent);
DeviceState.renameDevice(device.id, newName);
api.nameCore(device.id, newName);
}
}
public void showRenameDialog(final Device device) {
String suggestedName = CoreNameGenerator.generateUniqueName(
DeviceState.getExistingCoreNames());
View dialogRoot = activity.getLayoutInflater().inflate(R.layout.dialog_rename, null);
final EditText nameView = (EditText) dialogRoot.findViewById(R.id.new_name);
nameView.setText(suggestedName);
new AlertDialog.Builder(activity)
.setView(dialogRoot)
.setTitle(R.string.rename_your_core)
.setPositiveButton(R.string.rename, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String newName = nameView.getText().toString();
dialog.dismiss();
Runnable onDupeName = new Runnable() {
@Override
public void run() {
showRenameDialog(device);
}
};
renameCore(device, newName, onDupeName);
}
})
.setNegativeButton(R.string.cancel, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.create()
.show();
}
public void showDupeNameDialog(final Runnable runOnDupeName) {
new AlertDialog.Builder(activity)
.setMessage(R.string.sorry_you_ve_already_got_a_core_by_that_name_try_another_one_)
.setPositiveButton(R.string.ok, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (runOnDupeName != null) {
runOnDupeName.run();
}
}
})
.create()
.show();
}
}