package org.softeg.slartus.forpdaplus.fragments.profile;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import org.softeg.slartus.forpdaplus.Client;
import org.softeg.slartus.forpdaplus.MainActivity;
import org.softeg.slartus.forpdaplus.R;
import org.softeg.slartus.forpdaplus.common.AppLog;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by radiationx on 07.11.15.
*/
public class DeviceEdit {
private View mView;
private String requestText="";
private final ArrayList<String> deviceNames = new ArrayList<String>();
private final ArrayList<String> deviceIds = new ArrayList<String>();
private final AutoCompleteTextView autoComplete;
private ArrayAdapter<String> autoCompleteAdapter;
private EditText accessories;
private Spinner spinner;
private final ProgressBar loadingResult;
private final ProgressBar loadingContent;
private final LinearLayout content;
private String url = "";
private String deviceId = "";
private String mdId = "";
private String deviceName="";
private String accessoriesText = "";
private int deviceStatus=1;
private boolean isEditDevice;
private Context mContext;
private String parentTag = "";
public DeviceEdit(Context context, String url, boolean isEdit, String tag) {
this.url = url;
isEditDevice = isEdit;
parentTag = tag;
mContext = context;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = inflater.inflate(R.layout.device_edit, null);
final long[] lastTimeStamp = {System.currentTimeMillis()};
autoComplete = (AutoCompleteTextView) mView.findViewById(R.id.autoComplete);
accessories = (EditText) mView.findViewById(R.id.accessories);
spinner = (Spinner) mView.findViewById(R.id.spinner);
loadingResult = (ProgressBar) mView.findViewById(R.id.loadingResult);
loadingContent = (ProgressBar) mView.findViewById(R.id.loadingContent);
content = (LinearLayout) mView.findViewById(R.id.content);
String[] data = {"Владею", "Был", "Продаю", "Продано"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, data);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setPrompt("Статус");
spinner.setSelection(1);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
deviceStatus = position;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
if(isEditDevice) {
new getInfo().execute();
}else {
content.setVisibility(View.VISIBLE);
loadingContent.setVisibility(View.GONE);
}
autoCompleteAdapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_dropdown_item_1line, deviceNames);
autoComplete.setAdapter(autoCompleteAdapter);
autoComplete.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (System.currentTimeMillis() - lastTimeStamp[0] > 1000) {
if (s.length() > 1) {
requestText = autoComplete.getText().toString();
if (!requestText.equals(deviceName)) new getDevices().execute();
//Log.e("lel", requestText + " " + deviceName);
lastTimeStamp[0] = System.currentTimeMillis();
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
autoComplete.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
deviceId = deviceIds.get(position);
deviceName = deviceNames.get(position);
}
});
autoComplete.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_GO) {
InputMethodManager inputMethodManager = (InputMethodManager) mContext.getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
return true;
}
return false;
}
});
accessories.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
accessoriesText = s.toString();
}
public void afterTextChanged(Editable s) {}
});
final MaterialDialog dialog = new MaterialDialog.Builder(context)
.title((isEditDevice ? "Изменить":"Добавить")+" устройство")
.customView(mView, true)
.negativeText("Отмена")
.build();
dialog.setActionButton(DialogAction.POSITIVE, "Применить");
dialog.getActionButton(DialogAction.POSITIVE)
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (deviceId.equals("")) {
Toast.makeText(mContext, "Введите название устройства", Toast.LENGTH_SHORT).show();
} else {
new editDeviceTask().execute();
dialog.dismiss();
}
}
});
dialog.show();
}
public class getDevices extends AsyncTask<String, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
loadingResult.setVisibility(View.VISIBLE);
autoComplete.dismissDropDown();
}
@Override
protected Void doInBackground(String... params) {
try {
Matcher m = Pattern.compile("(\\d+)\\|\\|(.*)(\\n|$)")
.matcher(Client.getInstance().performGet("http://4pda.ru/forum/index.php?act=profile-xhr&action=dev-autocomplete&q=" + requestText.replace(" ", "+") + "&limit=150"));
deviceIds.clear();
deviceNames.clear();
while (m.find()) {
deviceIds.add(m.group(1));
deviceNames.add(m.group(2));
}
} catch (Exception e) {}
return null;
}
// can use UI thread here
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
autoCompleteAdapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_dropdown_item_1line, deviceNames);
autoComplete.setAdapter(autoCompleteAdapter);
autoComplete.showDropDown();
loadingResult.setVisibility(View.INVISIBLE);
}
}
public class getInfo extends AsyncTask<String, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(String... params) {
try {
String result = Client.getInstance().performGet(url);
Matcher m = Pattern.compile("md_id_(\\d+)").matcher(result);
if(m.find())
mdId = m.group(1);
else
mdId = "0";
m = Pattern.compile("<text.*>(.*)<[\\S\\s]*getDev\\((\\d+)").matcher(result);
if(m.find()){
accessoriesText = m.group(1);
deviceId = m.group(2);
m = Pattern.compile("value=\"(\\d)\" selected").matcher(result);
if(m.find()) {
deviceStatus = Integer.valueOf(m.group(1));
}
result = Client.getInstance().performGet("http://4pda.ru/forum/index.php?act=profile-xhr&action=dev-id-mod&dev_id=" + deviceId + "&dev_mod=");
m = Pattern.compile("\\d+\\|\\|(.*)").matcher(result);
if (m.find()) deviceName = m.group(1);
}
} catch (Exception e) {
AppLog.e(mContext, e);
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
autoComplete.setText(deviceName);
accessories.setText(accessoriesText);
spinner.setSelection(deviceStatus);
content.setVisibility(View.VISIBLE);
loadingContent.setVisibility(View.GONE);
}
}
public class editDeviceTask extends AsyncTask<String, Void, Void> {
Map<String, String> additionalHeaders = new HashMap<String, String>();
MaterialDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
additionalHeaders.put("auth_key", Client.getInstance().getAuthKey());
additionalHeaders.put("md_id", mdId);
additionalHeaders.put("dev_id", deviceId);
additionalHeaders.put("dev_mod", "");
additionalHeaders.put("accessories", accessories.getText().toString());
additionalHeaders.put("status", spinner.getSelectedItemPosition()+"");
if(isEditDevice)
additionalHeaders.put("dochange", "%C8%E7%EC%E5%ED%E8%F2%FC+%F3%F1%F2%F0%EE%E9%F1%F2%E2%EE");
else
additionalHeaders.put("dochange", "%C4%EE%E1%E0%E2%E8%F2%FC+%F3%F1%F2%F0%EE%E9%F1%F2%E2%EE");
dialog = new MaterialDialog.Builder(mContext)
.progress(true, 0)
.content("Отправка данных")
.build();
dialog.show();
}
@Override
protected Void doInBackground(String... params) {
try {
Client.getInstance().performPost("http://4pda.ru/forum/index.php?act=profile-xhr&action=device", additionalHeaders);
} catch (Exception e) {
AppLog.e(mContext, e);
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
dialog.dismiss();
Toast.makeText(mContext,"Данные отправлены",Toast.LENGTH_SHORT).show();
((ProfileFragment)((MainActivity)mContext)
.getSupportFragmentManager()
.findFragmentByTag(parentTag)).startLoadData();
}
}
}