package org.goodev.discourse.api; import android.content.res.Resources; import android.os.AsyncTask; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import org.apache.http.HttpStatus; import org.goodev.discourse.App; import org.goodev.discourse.R; import org.goodev.discourse.ui.TopicFragment; import org.goodev.discourse.utils.HttpRequest; import org.goodev.discourse.utils.L; import org.json.JSONObject; import java.lang.ref.WeakReference; import java.net.HttpURLConnection; public class TopicNotificationTask extends AsyncTask<Void, Void, Boolean> { public static final String NOTIF_PARAM = "notification_level"; private final WeakReference<TopicFragment> mFragment; private final Spinner mSpinner; private final OnItemSelectedListener mListener; private final String mSite; private final long mId; private final int mLevel; private final int mOld; private final TextView mStatus; public TopicNotificationTask(TopicFragment frag, int level) { mFragment = new WeakReference<TopicFragment>(frag); mSite = frag.getSite(); mSpinner = frag.getNotiSpinner(); mListener = frag.getListener(); mId = frag.getTopicId(); mOld = frag.getOldNotiLevel(); mLevel = level; mStatus = frag.getNotiDes(); } @Override protected void onPreExecute() { super.onPreExecute(); mStatus.setText(R.string.update_notification_level); } @Override protected Boolean doInBackground(Void... params) { try { String url = mSite + String.format(Api.NOTIFICATIONS, mId); HttpRequest hr = HttpRequest.post(url); HttpURLConnection connection = hr.getConnection(); if (App.isLogin()) { App.getCookieManager().setCookies(connection); } int code = hr.form(NOTIF_PARAM, String.valueOf(mLevel)).code(); L.i("%s star code %d " + mLevel, url, code); String body = hr.body(); L.i(body); JSONObject result = new JSONObject(body); String ok = result.getString("success"); return code == HttpStatus.SC_OK && "OK".equalsIgnoreCase(ok); } catch (Exception e) { L.e(e); return false; } } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); if (!result.booleanValue()) { mSpinner.setOnItemSelectedListener(null); mSpinner.setSelection(mOld); mSpinner.setOnItemSelectedListener(mListener); Toast.makeText(mSpinner.getContext(), R.string.change_notifi_level_failed, Toast.LENGTH_LONG).show(); setNotificationDesView(mSpinner.getContext().getResources(), mOld); } else { TopicFragment f = mFragment.get(); if (f != null) { f.setCurrentNotifLevel(mLevel); } setNotificationDesView(mSpinner.getContext().getResources(), mLevel); } } protected void setNotificationDesView(Resources res, int level) { String[] mNotificationDes = res.getStringArray(R.array.notifications_des); if (level >= mNotificationDes.length) { level = 0; } mStatus.setText(mNotificationDes[level]); } }