FLIX VISION v2.8.2版本的 MD5 值为:4d33b143293b36f23ce5a6a5834e6993

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


package org.adblockplus.libadblockplus.android;

import android.content.Context;
import android.content.SharedPreferences;
import cf.a;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.adblockplus.libadblockplus.HttpClient;
import org.adblockplus.libadblockplus.HttpRequest;
import org.adblockplus.libadblockplus.ServerResponse;

public class AndroidHttpClientResourceWrapper extends HttpClient {
    public static final String ACCEPTABLE_ADS = "https://easylist-downloads.adblockplus.org/exceptionrules.txt";
    public static final String EASYLIST = "https://easylist-downloads.adblockplus.org/easylist.txt";
    public static final String EASYLIST_ARABIAN_FRENCH = "https://easylist-downloads.adblockplus.org/liste_ar+liste_fr+easylist.txt";
    public static final String EASYLIST_BULGARIAN = "https://easylist-downloads.adblockplus.org/bulgarian_list+easylist.txt";
    public static final String EASYLIST_CHINESE = "https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt";
    public static final String EASYLIST_CZECH_SLOVAK = "https://easylist-downloads.adblockplus.org/easylistczechslovak+easylist.txt";
    public static final String EASYLIST_DUTCH = "https://easylist-downloads.adblockplus.org/easylistdutch+easylist.txt";
    public static final String EASYLIST_FRENCH = "https://easylist-downloads.adblockplus.org/liste_fr+easylist.txt";
    public static final String EASYLIST_GERMAN = "https://easylist-downloads.adblockplus.org/easylistgermany+easylist.txt";
    public static final String EASYLIST_INDONESIAN = "https://easylist-downloads.adblockplus.org/abpindo+easylist.txt";
    public static final String EASYLIST_ISRAELI = "https://easylist-downloads.adblockplus.org/israellist+easylist.txt";
    public static final String EASYLIST_ITALIAN = "https://easylist-downloads.adblockplus.org/easylistitaly+easylist.txt";
    public static final String EASYLIST_LATVIAN = "https://easylist-downloads.adblockplus.org/latvianlist+easylist.txt";
    public static final String EASYLIST_LITHUANIAN = "https://easylist-downloads.adblockplus.org/easylistlithuania+easylist.txt";
    public static final String EASYLIST_POLISH = "https://easylist-downloads.adblockplus.org/easylistpolish+easylist.txt";
    public static final String EASYLIST_ROMANIAN = "https://easylist-downloads.adblockplus.org/rolist+easylist.txt";
    public static final String EASYLIST_RUSSIAN = "https://easylist-downloads.adblockplus.org/ruadlist+easylist.txt";
    private Context context;
    private HttpClient httpClient;
    private Listener listener;
    private Storage storage;
    private Map<String, Integer> urlToResourceIdMap;

    public interface Listener {
        void onIntercepted(String str, int i10);
    }

    public static class SharedPrefsStorage implements Storage {
        private static final String URLS = "urls";
        private SharedPreferences prefs;
        private Set<String> urls;

        public SharedPrefsStorage(SharedPreferences sharedPreferences) {
            this.prefs = sharedPreferences;
            this.urls = sharedPreferences.getStringSet(URLS, new HashSet());
        }

        @Override
        public synchronized boolean contains(String str) {
            return this.urls.contains(str);
        }

        @Override
        public synchronized void put(String str) {
            this.urls.add(str);
            this.prefs.edit().putStringSet(URLS, this.urls).commit();
        }
    }

    public interface Storage {
        boolean contains(String str);

        void put(String str);
    }

    public AndroidHttpClientResourceWrapper(Context context, HttpClient httpClient, Map<String, Integer> map, Storage storage) {
        this.context = context;
        this.httpClient = httpClient;
        this.urlToResourceIdMap = Collections.synchronizedMap(map);
        this.storage = storage;
    }

    public ServerResponse buildResourceContentResponse(int i10) {
        ServerResponse serverResponse = new ServerResponse();
        try {
            serverResponse.setResponse(readResourceContent(i10));
            serverResponse.setResponseStatus(200);
            serverResponse.setStatus(ServerResponse.NsStatus.OK);
        } catch (IOException e10) {
            a.e(e10, "Error injecting response", new Object[0]);
            serverResponse.setStatus(ServerResponse.NsStatus.ERROR_FAILURE);
        }
        return serverResponse;
    }

    public Listener getListener() {
        return this.listener;
    }

    public ByteBuffer readResourceContent(int i10) throws IOException {
        a.d("Reading from resource ...", new Object[0]);
        InputStream inputStream = null;
        try {
            inputStream = this.context.getResources().openRawResource(i10);
            return Utils.readFromInputStream(inputStream);
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
        }
    }

    @Override
    public void request(HttpRequest httpRequest, HttpClient.Callback callback) {
        String urlWithoutParams = Utils.getUrlWithoutParams(httpRequest.getUrl());
        Integer num = this.urlToResourceIdMap.get(urlWithoutParams);
        if (num == null) {
            a.d("Skip intercepting request for %s", urlWithoutParams);
        } else {
            if (!this.storage.contains(urlWithoutParams)) {
                a.w("Intercepting request for %s with resource #%d", httpRequest.getUrl(), num);
                ServerResponse buildResourceContentResponse = buildResourceContentResponse(num.intValue());
                this.storage.put(urlWithoutParams);
                callback.onFinished(buildResourceContentResponse);
                Listener listener = this.listener;
                if (listener != null) {
                    listener.onIntercepted(httpRequest.getUrl(), num.intValue());
                    return;
                }
                return;
            }
            a.d("Already intercepted request for %s", urlWithoutParams);
        }
        this.httpClient.request(httpRequest, callback);
    }

    public void setListener(Listener listener) {
        this.listener = listener;
    }
}