content: /**
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you 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 org.apache.weex.update;
  
  import android.app.AlertDialog;
  import android.content.Context;
  import android.content.DialogInterface;
  import android.content.pm.PackageInfo;
  import android.content.pm.PackageManager;
  import android.text.TextUtils;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.widget.TextView;
  import com.taobao.weex.WXEnvironment;
  import com.taobao.weex.WXSDKManager;
  import com.taobao.weex.adapter.IWXHttpAdapter;
  import com.taobao.weex.common.WXRequest;
  import com.taobao.weex.common.WXResponse;
  import com.taobao.weex.utils.WXLogUtils;
  import java.net.URL;
  import java.util.List;
  import java.util.Map;
  import org.apache.weex.R;
  import org.json.JSONException;
  import org.json.JSONObject;
  
  /**
   * Created by moxun on 2018/3/9.
   */
  
  public class CheckForUpdateUtil {
    public static void checkForUpdate(final Context context) {
      PackageManager pm = context.getPackageManager();
      try {
        PackageInfo info = pm.getPackageInfo(context.getPackageName(), 0);
        if (info != null) {
          int versionCode = info.versionCode;
          String updateUrl = "http://dotwe.org/release/latest?v=" + versionCode;
          WXRequest request = new WXRequest();
          request.method = "GET";
          request.url = updateUrl;
          WXLogUtils.d("Update", "check for update: " + versionCode);
          WXSDKManager.getInstance().getIWXHttpAdapter().sendRequest(request, new IWXHttpAdapter.OnHttpListener() {
            @Override
            public void onHttpStart() {
  
            }
  
            @Override
            public void onHeadersReceived(int statusCode, Map<String, List<String>> headers) {
  
            }
  
            @Override
            public void onHttpUploadProgress(int uploadProgress) {
  
            }
  
            @Override
            public void onHttpResponseProgress(int loadedLength) {
  
            }
  
            @Override
            public void onHttpFinish(final WXResponse response) {
              if (!response.statusCode.equals("200")) {
                WXLogUtils.e("Update", "failed: " + response.statusCode);
                return;
              }
              WXSDKManager.getInstance().getWXRenderManager().postOnUiThread(new Runnable() {
                @Override
                public void run() {
                  String s = new String(response.originalData);
                  if (!TextUtils.isEmpty(s)) {
                    try {
                      WXLogUtils.d("Update", s);
                      JSONObject object = new JSONObject(s);
                      JSONObject params = object.optJSONObject("params");
                      if (params != null) {
                        boolean hasUpdate = params.optBoolean("hasUpdate", false);
                        if (hasUpdate) {
                          String version = params.optString("version", "latest");
                          String updateDate = params.optString("updateDate", "");
                          final String updateUrl = params.optString("updateUrl", "");
  
                          try {
                            new URL(updateUrl);
                          } catch (Throwable t) {
                            WXLogUtils.e("Update", "Invalid update url");
                            return;
                          }
  
                          String updateDescription = params.optString("updateDescription", null);
  
                          AlertDialog.Builder builder = new AlertDialog.Builder(context);
  
                          View view = LayoutInflater.from(context).inflate(R.layout.common_update_notify_dialog, null);
                          TextView textView = (TextView) view.findViewById(R.id.common_update_dialog_msg);
                          textView.setText(getMsg(version, updateDate, updateDescription));
                          builder.setCancelable(false)
                              .setView(view)
                              .setPositiveButton(R.string.update_now, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                  UpdateService.startActionUpdate(context, updateUrl);
                                  dialog.dismiss();
                                }
                              });
  
                          builder.setNegativeButton(R.string.update_remind_later, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                              dialog.dismiss();
                            }
                          });
  
                          builder.create().show();
                        }
                      }
                    } catch (JSONException e) {
                      e.printStackTrace();
                    }
                  }
                }
              }, 0);
            }
          });
        }
      } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
      }
    }
  
    private static String getMsg(String v, String date, String desc) {
      StringBuilder sb = new StringBuilder();
      sb.append(getStringRes(R.string.update_version)).append(v).append("\n")
          .append(getStringRes(R.string.update_date)).append(date).append("\n")
          .append(getStringRes(R.string.update_desc)).append(desc);
      return sb.toString();
    }
  
    public static String getStringRes(int id) {
      if (WXEnvironment.getApplication() != null) {
        return WXEnvironment.getApplication().getString(id);
      }
      return "";
    }
  }
  