/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package my.home.lehome.asynctask;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
import com.squareup.otto.Subscribe;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.lang.ref.WeakReference;
import java.net.URI;
import my.home.common.BusProvider;
import my.home.domain.usecase.AutoCompleteItemUsecase;
import my.home.domain.usecase.AutoCompleteItemUsecaseImpl;
import my.home.lehome.R;
import my.home.model.events.MConfAutoCompleteItemEvent;
/**
* Created by legendmohe on 15/2/15.
*/
public class LoadAutoCompleteConfAsyncTask extends AsyncTask<String, String, Boolean> {
public static final String TAG = "LoadAutoCompleteConfAsyncTask";
public static final String CONF_URL = "/auto/init";
private final String mServerURL;
private WeakReference<Context> mContext;
private String mDeviceID;
private boolean mResult;
private AutoCompleteItemUsecase mAutoCompleteItemUsecase;
public LoadAutoCompleteConfAsyncTask(Context context, String serverURL, String deviceID) {
mContext = new WeakReference<Context>(context);
mDeviceID = deviceID;
mServerURL = serverURL;
mAutoCompleteItemUsecase = new AutoCompleteItemUsecaseImpl(context);
}
@Override
protected void onPreExecute() {
Toast.makeText(
mContext.get()
, R.string.pref_loading_auto_item
, Toast.LENGTH_SHORT)
.show();
BusProvider.getRestBusInstance().register(this);
super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... params) {
try {
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(mServerURL + CONF_URL + "?id=" + mDeviceID));
HttpResponse response = httpclient.execute(request);
String repString = EntityUtils.toString(response.getEntity());
String repJSON;
int rep_code;
try {
JSONObject jsonObject = new JSONObject(repString);
rep_code = jsonObject.getInt("code");
repJSON = jsonObject.getString("data");
} catch (JSONException e) {
e.printStackTrace();
return Boolean.FALSE;
}
//run usecase
new AutoCompleteItemUsecaseImpl(mContext.get())
.setMode(AutoCompleteItemUsecase.MODE_SAVE_CONF)
.setConfString(repJSON)
.execute();
if (mResult) {
new AutoCompleteItemUsecaseImpl(mContext.get())
.setMode(AutoCompleteItemUsecase.MODE_LOAD_CONF)
.execute();
}
return mResult;
} catch (Exception e) {
Log.e(TAG, "Error in http connection " + e.toString());
}
return Boolean.FALSE;
}
@Subscribe
public void onConfAutoCompleteItems(MConfAutoCompleteItemEvent event) {
if (event.getReturnCode() == MConfAutoCompleteItemEvent.ERROR) {
mResult = false;
} else {
mResult = true;
}
}
@Override
protected void onPostExecute(Boolean result) {
Toast.makeText(
mContext.get()
, result == true ? R.string.pref_load_auto_item_success : R.string.pref_load_auto_item_faild
, Toast.LENGTH_SHORT)
.show();
BusProvider.getRestBusInstance().unregister(this);
super.onPostExecute(result);
}
}