package com.wamod.themes; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.Toast; import com.wamod.Resources; import com.wamod.Utils; import com.wamod.settings.Miscellaneous; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; /** * Created by brianvalente on 12/19/15. */ public class CheckIn extends AsyncTask<AppCompatActivity, AppCompatActivity, AppCompatActivity> { String internalResponse = ""; AppCompatActivity activity; boolean firstCheckin = true; @Override protected AppCompatActivity doInBackground(AppCompatActivity... activity) { String SetServerString = ""; // Get phone info String androidVersion = Build.VERSION.RELEASE; String deviceModel = Build.MODEL; String wamodVersion = Utils.wamodVersionName; String deviceID = Utils.getDeviceID(); this.activity = activity[0]; try { URL url = new URL("http://wamod.ml/api/api.php"); Map<String, Object> params = new LinkedHashMap<>(); params.put("action", "checkin"); params.put("androidversion", androidVersion); params.put("devicemodel", deviceModel); params.put("wamodversion", wamodVersion); params.put("deviceid", deviceID); if (firstCheckin) { params.put("firstcheckin", 1); // Get actual theme config ;_; params.put("general_statusbarcolor", Utils.prefs.getString("general_statusbarcolor", "")); params.put("general_toolbarcolor", Utils.prefs.getString("general_toolbarcolor", "")); params.put("general_toolbarforeground", Utils.prefs.getString("general_toolbarforeground", "")); params.put("general_navbarcolor", Utils.prefs.getString("general_navbarcolor", "")); params.put("general_darkmode", Utils.parseBooleanToJson(Utils.prefs.getBoolean("general_darkmode", false))); params.put("general_darkstatusbaricons", Utils.parseBooleanToJson(Utils.prefs.getBoolean("general_darkstatusbaricons", false))); params.put("home_theme", Utils.prefs.getString("home_theme", "")); params.put("conversation_hideprofilephoto", Utils.parseBooleanToJson(Utils.prefs.getBoolean("conversation_hideprofilephoto", false))); params.put("conversation_hidetoolbarattach", Utils.parseBooleanToJson(Utils.prefs.getBoolean("conversation_hidetoolbarattach", false))); params.put("conversation_proximitysensor", Utils.parseBooleanToJson(Utils.prefs.getBoolean("conversation_proximitysensor", false))); params.put("conversation_rightbubblecolor", Utils.prefs.getString("conversation_rightbubblecolor", "")); params.put("conversation_rightbubbletextcolor", Utils.prefs.getString("conversation_rightbubbletextcolor", "")); params.put("conversation_rightbubbledatecolor", Utils.prefs.getString("conversation_rightbubbledatecolor", "")); params.put("conversation_leftbubblecolor", Utils.prefs.getString("conversation_leftbubblecolor", "")); params.put("conversation_leftbubbletextcolor", Utils.prefs.getString("conversation_leftbubbletextcolor", "")); params.put("conversation_leftbubbledatecolor", Utils.prefs.getString("conversation_leftbubbledatecolor", "")); params.put("conversation_customparticipantcolorbool", Utils.parseBooleanToJson(Utils.prefs.getBoolean("conversation_customparticipantcolorbool", false))); params.put("conversation_customparticipantcolor", Utils.prefs.getString("conversation_customparticipantcolor", "")); params.put("conversation_style_bubble", Utils.prefs.getString("conversation_style_bubble", "")); params.put("conversation_style_tick", Utils.prefs.getString("conversation_style_tick", "")); params.put("conversation_theme", Utils.prefs.getString("conversation_theme", "")); params.put("privacy_freezelastseen", Utils.parseBooleanToJson(Utils.prefs.getBoolean("privacy_freezelastseen", false))); params.put("privacy_no2ndTick", Utils.parseBooleanToJson(Utils.prefs.getBoolean("privacy_no2ndTick", false))); params.put("privacy_noBlueTick", Utils.parseBooleanToJson(Utils.prefs.getBoolean("privacy_noBlueTick", false))); params.put("privacy_hideTyping", Utils.parseBooleanToJson(Utils.prefs.getBoolean("privacy_hideTyping", false))); params.put("privacy_alwaysOnline", Utils.parseBooleanToJson(Utils.prefs.getBoolean("privacy_alwaysOnline", false))); params.put("theme_wamod_conversation_entry_bgcolor", Utils.prefs.getString("theme_wamod_conversation_entry_bgcolor", "")); params.put("theme_wamod_conversation_entry_entrybgcolor", Utils.prefs.getString("theme_wamod_conversation_entry_entrybgcolor", "")); params.put("theme_wamod_conversation_entry_hinttextcolor", Utils.prefs.getString("theme_wamod_conversation_entry_hinttextcolor", "")); params.put("theme_wamod_conversation_entry_textcolor", Utils.prefs.getString("theme_wamod_conversation_entry_textcolor", "")); params.put("theme_wamod_conversation_entry_emojibtncolor", Utils.prefs.getString("theme_wamod_conversation_entry_emojibtncolor", "")); params.put("theme_wamod_conversation_entry_btncolor", Utils.prefs.getString("theme_wamod_conversation_entry_btncolor", "")); params.put("theme_wamod_conversation_entry_sendbtncolor", Utils.prefs.getString("theme_wamod_conversation_entry_sendbtncolor", "")); params.put("theme_hangouts_conversation_entry_bgcolor", Utils.prefs.getString("theme_hangouts_conversation_entry_bgcolor", "")); params.put("theme_hangouts_conversation_entry_hintcolor", Utils.prefs.getString("theme_hangouts_conversation_entry_hintcolor", "")); params.put("theme_hangouts_conversation_entry_textcolor", Utils.prefs.getString("theme_hangouts_conversation_entry_textcolor", "")); params.put("theme_hangouts_conversation_attach_color", Utils.prefs.getString("theme_hangouts_conversation_attach_color", "")); params.put("theme_hangouts_conversation_mic_bg", Utils.prefs.getString("theme_hangouts_conversation_mic_bg", "")); params.put("theme_hangouts_conversation_mic_color", Utils.prefs.getString("theme_hangouts_conversation_mic_color", "")); params.put("theme_hangouts_conversation_send_bg", Utils.prefs.getString("theme_hangouts_conversation_send_bg", "")); params.put("theme_hangouts_conversation_send_color", Utils.prefs.getString("theme_hangouts_conversation_send_color", "")); params.put("overview_cardcolor", Utils.parseBooleanToJson(Utils.prefs.getBoolean("overview_cardcolor", false))); params.put("overview_multiplechats", Utils.parseBooleanToJson(Utils.prefs.getBoolean("overview_multiplechats", false))); params.put("conversation_style_entry", Utils.prefs.getString("conversation_style_entry", "")); params.put("conversation_style_bubble_layout", Utils.prefs.getString("conversation_style_bubble_layout", "")); params.put("conversation_custombackcolorbool", Utils.parseBooleanToJson(Utils.prefs.getBoolean("conversation_custombackcolorbool", false))); params.put("conversation_custombackcolor", Utils.prefs.getString("conversation_custombackcolor", "")); params.put("conversation_style_toolbar", Utils.prefs.getString("conversation_style_toolbar", "")); params.put("conversation_toolbarexit", Utils.parseBooleanToJson(Utils.prefs.getBoolean("conversation_toolbarexit", false))); } else { params.put("firstcheckin", 0); } StringBuilder postData = new StringBuilder(); for (Map.Entry<String,Object> param : params.entrySet()) { if (postData.length() != 0) postData.append('&'); postData.append(URLEncoder.encode(param.getKey(), "UTF-8")); postData.append('='); postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8")); } byte[] postDataBytes = postData.toString().getBytes("UTF-8"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); if (!firstCheckin) { conn.setConnectTimeout(Utils.prefs.getInt("wamodthemes_timeout", 4000)); conn.setReadTimeout(Utils.prefs.getInt("wamodthemes_timeout", 4000)); } conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); conn.setDoOutput(true); conn.getOutputStream().write(postDataBytes); internalResponse = Utils.readStream(conn.getInputStream()); } catch (IOException e) {} return activity[0]; } @Override protected void onPostExecute(final AppCompatActivity a) { Log.i("WAMOD", "Server response: " + internalResponse); Utils.timeSinceLastCheckin = System.currentTimeMillis(); try { JSONObject jObj = new JSONObject(internalResponse); // Set device ID if necessary if (Utils.getDeviceID().contentEquals("")) Utils.setDeviceID(jObj.getString("deviceid")); // Set new theme if necessary if (jObj.has("general_statusbarcolor")) { Utils.edit.putString("general_statusbarcolor", jObj.getString("general_statusbarcolor")); Utils.edit.putString("general_toolbarcolor", jObj.getString("general_toolbarcolor")); Utils.edit.putString("general_toolbarforeground", jObj.getString("general_toolbarforeground")); Utils.edit.putString("general_navbarcolor", jObj.getString("general_navbarcolor")); Utils.edit.putBoolean("general_darkmode", (jObj.getString("general_darkmode").contentEquals("1"))); Utils.edit.putBoolean("general_darkstatusbaricons", (jObj.getString("general_darkstatusbaricons").contentEquals("1"))); Utils.edit.putString("home_theme", jObj.getString("home_theme")); Utils.edit.putBoolean("conversation_hideprofilephoto", (jObj.getString("conversation_hideprofilephoto").contentEquals("1"))); Utils.edit.putBoolean("conversation_hidetoolbarattach", (jObj.getString("conversation_hidetoolbarattach").contentEquals("1"))); Utils.edit.putBoolean("conversation_proximitysensor", (jObj.getString("conversation_proximitysensor").contentEquals("1"))); Utils.edit.putString("conversation_rightbubblecolor", jObj.getString("conversation_rightbubblecolor")); Utils.edit.putString("conversation_rightbubbletextcolor", jObj.getString("conversation_rightbubbletextcolor")); Utils.edit.putString("conversation_rightbubbledatecolor", jObj.getString("conversation_rightbubbledatecolor")); Utils.edit.putString("conversation_leftbubblecolor", jObj.getString("conversation_leftbubblecolor")); Utils.edit.putString("conversation_leftbubbletextcolor", jObj.getString("conversation_leftbubbletextcolor")); Utils.edit.putString("conversation_leftbubbledatecolor", jObj.getString("conversation_leftbubbledatecolor")); Utils.edit.putBoolean("conversation_customparticipantcolorbool", (jObj.getString("conversation_customparticipantcolorbool").contentEquals("1"))); Utils.edit.putString("conversation_customparticipantcolor", jObj.getString("conversation_customparticipantcolor")); Utils.edit.putString("conversation_style_bubble", jObj.getString("conversation_style_bubble")); Utils.edit.putString("conversation_style_tick", jObj.getString("conversation_style_tick")); Utils.edit.putString("theme_wamod_conversation_entry_bgcolor", jObj.getString("theme_wamod_conversation_entry_bgcolor")); Utils.edit.putString("theme_wamod_conversation_entry_entrybgcolor", jObj.getString("theme_wamod_conversation_entry_entrybgcolor")); Utils.edit.putString("theme_wamod_conversation_entry_hinttextcolor", jObj.getString("theme_wamod_conversation_entry_hinttextcolor")); Utils.edit.putString("theme_wamod_conversation_entry_textcolor", jObj.getString("theme_wamod_conversation_entry_textcolor")); Utils.edit.putString("theme_wamod_conversation_entry_emojibtncolor", jObj.getString("theme_wamod_conversation_entry_emojibtncolor")); Utils.edit.putString("theme_wamod_conversation_entry_btncolor", jObj.getString("theme_wamod_conversation_entry_btncolor")); Utils.edit.putString("theme_wamod_conversation_entry_sendbtncolor", jObj.getString("theme_wamod_conversation_entry_sendbtncolor")); Utils.edit.putString("theme_hangouts_conversation_entry_bgcolor", jObj.getString("theme_hangouts_conversation_entry_bgcolor")); Utils.edit.putString("theme_hangouts_conversation_entry_hintcolor", jObj.getString("theme_hangouts_conversation_entry_hintcolor")); Utils.edit.putString("theme_hangouts_conversation_entry_textcolor", jObj.getString("theme_hangouts_conversation_entry_textcolor")); Utils.edit.putString("theme_hangouts_conversation_attach_color", jObj.getString("theme_hangouts_conversation_attach_color")); Utils.edit.putString("theme_hangouts_conversation_mic_bg", jObj.getString("theme_hangouts_conversation_mic_bg")); Utils.edit.putString("theme_hangouts_conversation_mic_color", jObj.getString("theme_hangouts_conversation_mic_color")); Utils.edit.putString("theme_hangouts_conversation_send_bg", jObj.getString("theme_hangouts_conversation_send_bg")); Utils.edit.putString("theme_hangouts_conversation_send_color", jObj.getString("theme_hangouts_conversation_send_color")); Utils.edit.putBoolean("overview_cardcolor", (jObj.getString("overview_cardcolor").contentEquals("1"))); Utils.edit.putBoolean("overview_multiplechats", (jObj.getString("overview_multiplechats").contentEquals("1"))); Utils.edit.putString("conversation_style_entry", jObj.getString("conversation_style_entry")); Utils.edit.putBoolean("conversation_custombackcolorbool", (jObj.getString("conversation_custombackcolorbool").contentEquals("1"))); Utils.edit.putString("conversation_custombackcolor", jObj.getString("conversation_custombackcolor")); Utils.edit.putString("conversation_style_toolbar", jObj.getString("conversation_style_toolbar")); Utils.edit.putBoolean("conversation_toolbarexit", (jObj.getString("conversation_toolbarexit").contentEquals("1"))); // Restart when the theme is saved if (Utils.edit.commit()) Utils.restartWAMOD(a); else Toast.makeText(a, activity.getResources().getString(Resources.getString("wamod_wamodthemes_errorinstallingtheme")), Toast.LENGTH_SHORT).show(); } // Check if there's a new version available //Log.i("WAMOD", "Everything fine before checking for updates"); if (firstCheckin || !(a instanceof com.whatsapp.HomeActivity)) { final String latestWAMODCodename = jObj.getString("latestversion_codename"); final String latestWAMODDescription = jObj.getString("latestversion_description"); final String latestWAMODDescriptionES = jObj.getString("latestversion_description-es"); final String latestWAMODLink = jObj.getString("latestversion_link"); final int latestWAMODCode = jObj.getInt("latestversion_code"); Update update = new Update(); update.codename = latestWAMODCodename; update.description = latestWAMODDescription; update.descriptionES = latestWAMODDescriptionES; update.code = latestWAMODCode; update.link = Uri.parse(latestWAMODLink); updateDialog(a, update); } if (jObj.has("connectiondelay") && jObj.has("timeout")) { int connectiondelay = jObj.getInt("connectiondelay"); int timeout = jObj.getInt("timeout"); if (timeout != Utils.prefs.getInt("wamodthemes_timeout", 0) || connectiondelay != Utils.prefs.getInt("wamodthemes_connectiondelay", 0)) { Utils.edit.putInt("wamodthemes_connectiondelay", connectiondelay); Utils.edit.putInt("wamodthemes_timeout", timeout); Utils.edit.apply(); } } } catch (JSONException e) {} // Delay for a new checkin /*if (a instanceof com.whatsapp.HomeActivity && utils.prefs.getBoolean("wamodthemes_constantlycheck", false)) { Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { new checkinv2().execute(a); } }, utils.prefs.getInt("wamodthemes_connectiondelay", 2500)); }*/ } @Override protected void onPreExecute() { if (Utils.timeSinceLastCheckin != 0) firstCheckin = false; } private void updateDialog(final AppCompatActivity activity, final Update update) { Log.i("WAMOD", "Activity inside the update method: " + activity.toString()); //if (!update.codename.contentEquals(utils.wamodVersionName) && !(activity instanceof com.whatsapp.HomeActivity && utils.prefs.getString("ignoreupdate", "").contentEquals(update.codename))) { if (Utils.getVersionCode() < update.code && !(activity instanceof com.whatsapp.HomeActivity && Utils.prefs.getString("ignoreupdate", "").contentEquals(update.codename))) { // Show an update dialog try { AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity); alertDialog.setTitle(activity.getResources().getString(Resources.string.wamod_updater_title)); String description = update.description; if (Locale.getDefault().getLanguage().contentEquals("es") && !update.descriptionES.contentEquals("")) description = update.descriptionES; String message = activity.getResources().getString(Resources.string.wamod_updater_message, update.codename, Utils.wamodVersionName) + " " + description; alertDialog.setMessage(message); alertDialog.setPositiveButton(activity.getResources().getString(Resources.string.wamod_updater_download), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Intent browserIntent = new Intent(Intent.ACTION_VIEW, update.link); activity.startActivity(browserIntent); } }); alertDialog.setNegativeButton(activity.getResources().getString(Resources.string.wamod_updater_later), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { //... } }); alertDialog.setNeutralButton(activity.getResources().getString(Resources.string.wamod_updater_ignore), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Utils.edit.putString("ignoreupdate", update.codename); Utils.edit.apply(); } }); alertDialog.show(); Log.i("WAMOD", "Dialog shown"); } catch (Exception e) {} } else if (activity instanceof Miscellaneous) { Toast.makeText(activity, activity.getResources().getString(Resources.string.wamod_updater_uptodate), Toast.LENGTH_LONG).show(); } } class Update { public String codename; public String description; public String descriptionES; public Uri link; public int code; } }