Shandong video conference v3.2.10版本的 MD5 值为:e9e908f971313b4c4bca5737f96781ef

以下内容为反编译后的 WWAPIImpl.java 源代码,内容仅作参考


package com.tencent.wework.api;

import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
import androidx.annotation.g0;
import com.tencent.wework.api.Callbacks;
import com.tencent.wework.api.IWWAPI;
import com.tencent.wework.api.model.BaseMessage;
import com.tencent.wework.api.model.OpenData;
import com.tencent.wework.api.model.WWAuthMessage;
import com.tencent.wework.api.model.WWBaseMessage;
import com.tencent.wework.api.model.WWBaseRespMessage;
import com.tencent.wework.api.utils.OpenDataUtils;
import com.tencent.wework.api.view.H5Activity;
import com.umeng.analytics.pro.bw;
import io.xylink.rtc.internal.model.define.CallConst;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.http.client.methods.HttpPostHC4;
import org.json.JSONArray;
import org.json.JSONObject;
public final class WWAPIImpl implements IWWAPI {
    private static final String LOCAL_PKG_NAME = "com.tencent.weworklocal";
    public static final String LOCAL_PKG_SIGNATURE = "011A40266C8C75D181DDD8E4DDC50075";
    private static final String PKG_NAME = "com.tencent.wework";
    private static final String SPECIAL_PKG_NAME = "com.tencent.wework.special";
    private Context context;
    private SharedPreferences mPreferences;
    private String schema;
    private static final ArrayList<String> PKG_NAMES = new ArrayList<String>() {
        {
            add(WWAPIImpl.LOCAL_PKG_NAME);
            add(WWAPIImpl.PKG_NAME);
            add(WWAPIImpl.SPECIAL_PKG_NAME);
        }
    };
    private static final ArrayList<String> PKG_NAMES2 = new ArrayList<String>() {
        {
            add(WWAPIImpl.PKG_NAME);
        }
    };
    private static boolean requesting = false;
    private Map<String, IWWAPIEventHandler> callbacks = new HashMap();
    private BroadcastReceiver mReciver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            try {
                if (WWAPIImpl.this.schema.equals(intent.getScheme())) {
                    final BaseMessage parseUri = BaseMessage.parseUri(intent.getData());
                    parseUri.setsKey(WWAPIImpl.this.mPreferences.getString("sk", ""));
                    parseUri.fromBundle(intent.getExtras());
                    if (parseUri instanceof WWBaseRespMessage) {
                        new Handler(Looper.getMainLooper()).post(new Runnable() {
                            @Override
                            public void run() {
                                try {
                                    ((IWWAPIEventHandler) WWAPIImpl.this.callbacks.get(((WWBaseRespMessage) parseUri).transaction)).handleResp(parseUri);
                                    WWAPIImpl.this.callbacks.remove(((WWBaseRespMessage) parseUri).transaction);
                                } catch (Throwable unused) {
                                }
                            }
                        });
                    }
                }
            } catch (Throwable unused) {
            }
        }
    };

    class AnonymousClass4 implements Runnable {
        final Callbacks.InitOpenDataCallBack val$cb;
        final Handler val$handler;
        final String val$skey;

        AnonymousClass4(String str, Handler handler, Callbacks.InitOpenDataCallBack initOpenDataCallBack) {
            this.val$skey = str;
            this.val$handler = handler;
            this.val$cb = initOpenDataCallBack;
        }

        @Override
        public void run() {
            try {
                JSONObject jSONObject = new JSONObject();
                jSONObject.put("session_key", this.val$skey);
                WWAPIImpl.this.httpPost("https://open.work.weixin.qq.com/sdk/opendata/init_open_data", jSONObject.toString().getBytes("UTF-8"), new HttpResult() {
                    @Override
                    public void call(final int i2, StringBuilder sb) {
                        if (i2 != 0) {
                            AnonymousClass4.this.val$handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    AnonymousClass4.this.val$cb.onResult(i2, "");
                                }
                            });
                            return;
                        }
                        try {
                            JSONObject jSONObject2 = new JSONObject(sb.toString());
                            final int i3 = jSONObject2.getInt("errcode");
                            final String optString = jSONObject2.optString("errmsg");
                            final String optString2 = jSONObject2.optString("open_data_ticket");
                            AnonymousClass4.this.val$handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    AnonymousClass4.this.val$cb.onResult(i3, optString);
                                    if (i3 != 0 || TextUtils.isEmpty(optString2)) {
                                        return;
                                    }
                                    WWAPIImpl.this.mPreferences.edit().putString("tk", optString2).commit();
                                }
                            });
                        } catch (Throwable unused) {
                            AnonymousClass4.this.val$handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    AnonymousClass4.this.val$cb.onResult(101, "");
                                }
                            });
                        }
                    }
                });
            } catch (Throwable unused) {
                this.val$handler.post(new Runnable() {
                    @Override
                    public void run() {
                        AnonymousClass4.this.val$cb.onResult(101, "");
                    }
                });
            }
            boolean unused2 = WWAPIImpl.requesting = false;
        }
    }

    class AnonymousClass5 implements Runnable {
        final Callbacks.GetOpenDataCallBack val$cb;
        final List val$data;
        final Handler val$handler;
        final String val$tk;

        AnonymousClass5(String str, List list, Handler handler, Callbacks.GetOpenDataCallBack getOpenDataCallBack) {
            this.val$tk = str;
            this.val$data = list;
            this.val$handler = handler;
            this.val$cb = getOpenDataCallBack;
        }

        @Override
        public void run() {
            try {
                JSONObject jSONObject = new JSONObject();
                jSONObject.put("open_data_ticket", this.val$tk);
                JSONArray jSONArray = new JSONArray();
                for (OpenData openData : this.val$data) {
                    if (openData != null && !TextUtils.isEmpty(openData.id)) {
                        JSONObject jSONObject2 = new JSONObject();
                        jSONObject2.put("id", openData.id);
                        if (openData.type == 1) {
                            jSONObject2.put("type", CallConst.KEY_USER_NAME);
                        } else if (openData.type == 2) {
                            jSONObject2.put("type", "departmentName");
                        } else if (openData.type == 3) {
                            jSONObject2.put("type", "userGender");
                        } else if (openData.type == 4) {
                            jSONObject2.put("type", "userDepartment");
                        } else if (openData.type == 100 && !TextUtils.isEmpty(openData.typeStr)) {
                            jSONObject2.put("type", openData.typeStr);
                        }
                        jSONArray.put(jSONObject2);
                    }
                }
                jSONObject.put("items", jSONArray);
                WWAPIImpl.this.httpPost("https://open.work.weixin.qq.com/sdk/opendata/get_open_data", jSONObject.toString().getBytes("UTF-8"), new HttpResult() {
                    @Override
                    public void call(final int i2, StringBuilder sb) {
                        if (i2 != 0) {
                            AnonymousClass5.this.val$handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    AnonymousClass5.this.val$cb.onResult(i2, "", new ArrayList());
                                }
                            });
                            return;
                        }
                        try {
                            JSONObject jSONObject3 = new JSONObject(sb.toString());
                            final int i3 = jSONObject3.getInt("errcode");
                            final String optString = jSONObject3.optString("errmsg");
                            JSONArray optJSONArray = jSONObject3.optJSONArray("items");
                            final ArrayList arrayList = new ArrayList();
                            for (int i4 = 0; i4 < optJSONArray.length(); i4++) {
                                JSONObject jSONObject4 = optJSONArray.getJSONObject(i4);
                                OpenData openData2 = new OpenData();
                                String optString2 = jSONObject4.optString("type");
                                if (TextUtils.equals(optString2, CallConst.KEY_USER_NAME)) {
                                    openData2.type = 1;
                                } else if (TextUtils.equals(optString2, "departmentName")) {
                                    openData2.type = 2;
                                } else if (TextUtils.equals(optString2, "userGender")) {
                                    openData2.type = 3;
                                } else if (TextUtils.equals(optString2, "userDepartment")) {
                                    openData2.type = 4;
                                } else if (!TextUtils.isEmpty(optString2)) {
                                    openData2.type = 100;
                                }
                                openData2.typeStr = optString2;
                                openData2.id = jSONObject4.optString("id");
                                openData2.name = jSONObject4.optString("data");
                                arrayList.add(openData2);
                            }
                            AnonymousClass5.this.val$handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    AnonymousClass5.this.val$cb.onResult(i3, optString, arrayList);
                                }
                            });
                        } catch (Throwable unused) {
                            AnonymousClass5.this.val$handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    AnonymousClass5.this.val$cb.onResult(101, "", new ArrayList());
                                }
                            });
                        }
                    }
                });
            } catch (Throwable unused) {
                this.val$handler.post(new Runnable() {
                    @Override
                    public void run() {
                        AnonymousClass5.this.val$cb.onResult(101, "", new ArrayList());
                    }
                });
            }
            boolean unused2 = WWAPIImpl.requesting = false;
        }
    }

    public interface HttpResult {
        void call(int i2, StringBuilder sb);
    }

    WWAPIImpl(Context context) {
        this.mPreferences = null;
        this.context = context;
        this.mPreferences = context.getSharedPreferences("wxwork_wwapi_store", 0);
    }

    private static String HexEncode(byte[] bArr) {
        StringBuilder sb = new StringBuilder(bArr.length * 2);
        for (byte b2 : bArr) {
            sb.append(Integer.toHexString((b2 & 240) >>> 4));
            sb.append(Integer.toHexString(b2 & bw.m));
        }
        return sb.toString().toUpperCase();
    }

    private static String MD5Encode(byte[] bArr) {
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            messageDigest.reset();
            messageDigest.update(bArr);
            return HexEncode(messageDigest.digest());
        } catch (NoSuchAlgorithmException e2) {
            e2.printStackTrace();
            return "";
        }
    }

    private String getSignature(String str) {
        try {
            return MD5Encode(this.context.getPackageManager().getPackageInfo(str, 64).signatures[0].toByteArray());
        } catch (Throwable unused) {
            return "";
        }
    }

    private int getVersioncode(String str) {
        try {
            PackageInfo packageInfo = this.context.getPackageManager().getPackageInfo(str, 128);
            if (packageInfo == null) {
                return 0;
            }
            return packageInfo.versionCode;
        } catch (Throwable unused) {
            return 0;
        }
    }

    private List<String> getWwPkgs() {
        ArrayList<String> arrayList = PKG_NAMES;
        Context context = this.context;
        return (context == null || TextUtils.equals(context.getPackageName(), "com.tencent.mm")) ? arrayList : PKG_NAMES2;
    }

    public void httpPost(String str, byte[] bArr, HttpResult httpResult) {
        HttpURLConnection httpURLConnection;
        InputStream inputStream;
        OutputStream outputStream;
        InputStreamReader inputStreamReader;
        BufferedReader bufferedReader;
        try {
            try {
                httpURLConnection = (HttpURLConnection) new URL(str).openConnection();
                try {
                    httpURLConnection.setConnectTimeout(5000);
                    httpURLConnection.setRequestMethod(HttpPostHC4.METHOD_NAME);
                    httpURLConnection.setDoInput(true);
                    httpURLConnection.setDoOutput(true);
                    outputStream = httpURLConnection.getOutputStream();
                    int i2 = 512;
                    for (int i3 = 0; i3 < bArr.length; i3 += i2) {
                        try {
                            if (i3 + i2 > bArr.length) {
                                i2 = bArr.length - i3;
                            }
                            outputStream.write(bArr, i3, i2);
                            outputStream.flush();
                        } catch (Throwable unused) {
                            inputStream = null;
                            inputStreamReader = 0;
                        }
                    }
                    inputStream = httpURLConnection.getInputStream();
                } catch (Throwable unused2) {
                    inputStream = null;
                    outputStream = inputStream;
                    inputStreamReader = outputStream;
                    bufferedReader = inputStreamReader;
                    try {
                        httpResult.call(101, null);
                        if (httpURLConnection != null) {
                            httpURLConnection.disconnect();
                        }
                        if (bufferedReader != null) {
                            bufferedReader.close();
                        }
                        if (inputStreamReader != 0) {
                            inputStreamReader.close();
                        }
                        if (inputStream != null) {
                            inputStream.close();
                        }
                        if (outputStream == null) {
                            return;
                        }
                        outputStream.close();
                    } catch (Throwable th) {
                        if (httpURLConnection != null) {
                            httpURLConnection.disconnect();
                        }
                        if (bufferedReader != null) {
                            try {
                                bufferedReader.close();
                            } catch (Throwable unused3) {
                                throw th;
                            }
                        }
                        if (inputStreamReader != 0) {
                            inputStreamReader.close();
                        }
                        if (inputStream != null) {
                            inputStream.close();
                        }
                        if (outputStream != null) {
                            outputStream.close();
                        }
                        throw th;
                    }
                }
            } catch (Throwable unused4) {
                httpURLConnection = null;
                inputStream = null;
            }
            try {
                inputStreamReader = new InputStreamReader(inputStream);
                try {
                    bufferedReader = new BufferedReader(inputStreamReader);
                    try {
                        StringBuilder sb = new StringBuilder();
                        while (true) {
                            String readLine = bufferedReader.readLine();
                            if (readLine == null) {
                                break;
                            }
                            sb.append(readLine);
                        }
                        httpResult.call(0, sb);
                        if (httpURLConnection != null) {
                            httpURLConnection.disconnect();
                        }
                        bufferedReader.close();
                        inputStreamReader.close();
                        if (inputStream != null) {
                            inputStream.close();
                        }
                        if (outputStream == null) {
                            return;
                        }
                    } catch (Throwable unused5) {
                        httpResult.call(101, null);
                        if (httpURLConnection != null) {
                        }
                        if (bufferedReader != null) {
                        }
                        if (inputStreamReader != 0) {
                        }
                        if (inputStream != null) {
                        }
                        if (outputStream == null) {
                        }
                        outputStream.close();
                    }
                } catch (Throwable unused6) {
                    bufferedReader = null;
                }
            } catch (Throwable unused7) {
                inputStreamReader = 0;
                bufferedReader = inputStreamReader;
                httpResult.call(101, null);
                if (httpURLConnection != null) {
                }
                if (bufferedReader != null) {
                }
                if (inputStreamReader != 0) {
                }
                if (inputStream != null) {
                }
                if (outputStream == null) {
                }
                outputStream.close();
            }
            outputStream.close();
        } catch (Throwable unused8) {
        }
    }

    private boolean isValidSignature(String str) {
        return "011A40266C8C75D181DDD8E4DDC50075".equals(getSignature(str));
    }

    @Override
    public void addPackageName(String str) {
    }

    @Override
    public void clearCustomScheme() {
    }

    @Override
    public void detach() {
        this.context.unregisterReceiver(this.mReciver);
    }

    @Override
    public void getOpenData(List<OpenData> list, Callbacks.GetOpenDataCallBack getOpenDataCallBack) {
        if (requesting) {
            getOpenDataCallBack.onResult(100, "", new ArrayList());
            return;
        }
        String string = this.mPreferences.getString("tk", "");
        if (TextUtils.isEmpty(string)) {
            getOpenDataCallBack.onResult(Callbacks.ERR_INVALID_TICKET, "", new ArrayList());
            return;
        }
        new Thread(new AnonymousClass5(string, list, new Handler(Looper.myLooper()), getOpenDataCallBack)).start();
        requesting = true;
    }

    @Override
    @g0
    public String getWWAppName() {
        Iterator<String> it = getWwPkgs().iterator();
        if (it.hasNext()) {
            String next = it.next();
            try {
                PackageManager packageManager = this.context.getPackageManager();
                String charSequence = packageManager.getApplicationLabel(packageManager.getApplicationInfo(next, 0)).toString();
                return TextUtils.isEmpty(charSequence) ? "企业微信" : charSequence;
            } catch (Throwable unused) {
                return "企业微信";
            }
        }
        return "企业微信";
    }

    @Override
    public String getWWAppName(IWWAPI.WWAppType wWAppType) {
        return null;
    }

    @Override
    public int getWWAppSupportAPI() {
        for (String str : getWwPkgs()) {
            int versioncode = getVersioncode(str);
            if (versioncode != 0) {
                return versioncode;
            }
        }
        return 0;
    }

    @Override
    public boolean handleIntent(Intent intent, IWWAPIEventHandler iWWAPIEventHandler) {
        return false;
    }

    @Override
    public void initOpenData(Callbacks.InitOpenDataCallBack initOpenDataCallBack) {
        if (requesting) {
            initOpenDataCallBack.onResult(100, "");
            return;
        }
        String string = this.mPreferences.getString("sk", "");
        if (TextUtils.isEmpty(string)) {
            initOpenDataCallBack.onResult(Callbacks.ERR_INVALID_SESSION, "");
            return;
        }
        new Thread(new AnonymousClass4(string, new Handler(Looper.myLooper()), initOpenDataCallBack)).start();
        requesting = true;
    }

    @Override
    public boolean isWWAppInstalled() {
        for (String str : getWwPkgs()) {
            if (isValidSignature(str)) {
                return true;
            }
        }
        return false;
    }

    @Override
    public boolean isWWAppInstalled(IWWAPI.WWAppType wWAppType) {
        return false;
    }

    @Override
    public boolean isWWAppSupportAPI() {
        return getWWAppSupportAPI() >= 100;
    }

    @Override
    public boolean openWWApp() {
        for (String str : getWwPkgs()) {
            if (isValidSignature(str)) {
                try {
                    this.context.startActivity(this.context.getPackageManager().getLaunchIntentForPackage(str));
                    return true;
                } catch (Throwable unused) {
                }
            }
        }
        return false;
    }

    @Override
    public boolean registerApp(String str) {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addDataScheme(str);
        intentFilter.addAction(str);
        this.context.registerReceiver(this.mReciver, intentFilter);
        this.schema = str;
        return true;
    }

    @Override
    public boolean sendMessage(BaseMessage baseMessage) {
        baseMessage.setsKey(this.mPreferences.getString("sk", ""));
        ArrayList<String> arrayList = PKG_NAMES2;
        if ((baseMessage instanceof WWBaseMessage) && TextUtils.equals(((WWBaseMessage) baseMessage).appPkg, "com.tencent.mm")) {
            arrayList = PKG_NAMES;
        }
        Context context = this.context;
        if (context != null && TextUtils.equals(context.getPackageName(), "com.tencent.mm")) {
            arrayList = PKG_NAMES;
        }
        Iterator<String> it = arrayList.iterator();
        while (it.hasNext()) {
            String next = it.next();
            if (isValidSignature(next)) {
                Intent intent = new Intent("com.tencent.wework.apihost");
                intent.setClassName(next, "com.tencent.wework.apihost.WWAPIActivity");
                intent.addFlags(411041792);
                try {
                    baseMessage.setDestPkg(next);
                    baseMessage.setContext(this.context);
                    Bundle pack = BaseMessage.pack(baseMessage);
                    long addBundle = OpenDataUtils.addBundle(this.context, this.context.getPackageName(), next, pack);
                    if (addBundle > 0) {
                        intent.putExtra("data_id", addBundle);
                        intent.putExtra("data_pkg", this.context.getPackageName());
                    } else {
                        intent.putExtras(pack);
                    }
                    intent.putExtra("PendingIntent", PendingIntent.getBroadcast(this.context, 0, new Intent(this.context, this.mReciver.getClass()), 134217728));
                    baseMessage.adjustIntent(intent, next);
                    this.context.startActivity(intent);
                    return true;
                } catch (Throwable th) {
                    th.printStackTrace();
                }
            }
        }
        return false;
    }

    @Override
    public boolean sendMessage(BaseMessage baseMessage, IWWAPI.WWAppType wWAppType) {
        return false;
    }

    @Override
    public boolean sendMessage(BaseMessage baseMessage, IWWAPI.WWAppType wWAppType, IWWAPIEventHandler iWWAPIEventHandler) {
        return false;
    }

    @Override
    public void setCustomScheme(String str) {
    }

    @Override
    public void setSessionKey(String str) {
        this.mPreferences.edit().putString("sk", str).commit();
    }

    @Override
    public void unregisterApp() {
    }

    @Override
    public boolean sendMessage(BaseMessage baseMessage, IWWAPIEventHandler iWWAPIEventHandler) {
        if ((baseMessage instanceof WWAuthMessage.Req) && !isWWAppInstalled()) {
            Intent intent = new Intent(this.context, H5Activity.class);
            intent.putExtra("url", "https://open.work.weixin.qq.com/native/sso/auth/guide?appid=" + ((WWAuthMessage.Req) baseMessage).appId);
            intent.addFlags(268435456);
            try {
                this.context.startActivity(intent);
            } catch (Throwable unused) {
            }
            return false;
        } else if (sendMessage(baseMessage)) {
            if (baseMessage instanceof WWBaseMessage) {
                this.callbacks.put(((WWBaseMessage) baseMessage).transaction, iWWAPIEventHandler);
                return true;
            }
            return true;
        } else {
            return false;
        }
    }
}