WiGLE WiFi Wardriving FOSS v2.63版本的 MD5 值为:20a157bff1dec2e81d8268d404e15cb5

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


package net.wigle.wigleandroid;

import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Parcelable;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.TextView;
import androidx.core.view.MenuItemCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.google.android.material.navigation.NavigationView;
import java.io.File;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import net.wigle.wigleandroid.background.AbstractApiRequest;
import net.wigle.wigleandroid.background.ApiDownloader;
import net.wigle.wigleandroid.background.ApiListener;
import net.wigle.wigleandroid.background.DownloadHandler;
import net.wigle.wigleandroid.model.Upload;
import net.wigle.wigleandroid.ui.EndlessScrollListener;
import net.wigle.wigleandroid.util.FileUtility;
import net.wigle.wigleandroid.util.MenuUtil;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class UploadsFragment extends Fragment {
    private static final String KEY_DOWNLOADED = "downloadedToLocal";
    private static final String KEY_FILE_NAME = "fileName";
    private static final String KEY_QUEUE_DEPTH = "processingQueueDepth";
    private static final String KEY_STATUS = "status";
    private static final String KEY_TRANSID = "transid";
    private static final String KEY_UPLOADED = "uploadedFromLocal";
    private static final int MENU_SITE_STATS = 201;
    private static final int MENU_USER_STATS = 200;
    private static final int MSG_RANKING_DONE = 100;
    private static final String RESULT_LIST_KEY = "results";
    private static final int ROW_COUNT = 100;
    public static boolean disableListButtons = false;
    private static final Map<String, String> uploadStatusMap;
    private AtomicBoolean finishing;
    private RankDownloadHandler handler;
    private UploadsListAdapter listAdapter;
    private NumberFormat numberFormat;
    private static final String KEY_TOTAL_WIFI_GPS = "discoveredGps";
    private static final String KEY_TOTAL_BT_GPS = "btDiscoveredGps";
    private static final String KEY_TOTAL_CELL_GPS = "genDiscoveredGps";
    private static final String KEY_PERCENT_DONE = "percentDone";
    private static final String KEY_FILE_SIZE = "fileSize";
    private static final String[] ALL_ROW_KEYS = {KEY_TOTAL_WIFI_GPS, KEY_TOTAL_BT_GPS, KEY_TOTAL_CELL_GPS, KEY_PERCENT_DONE, KEY_FILE_SIZE};
    private int currentPage = 0;
    private final AtomicBoolean busy = new AtomicBoolean(false);

    static int access$708(UploadsFragment uploadsFragment) {
        int i = uploadsFragment.currentPage;
        uploadsFragment.currentPage = i + 1;
        return i;
    }

    static {
        HashMap hashMap = new HashMap();
        hashMap.put("W", "upload_queued");
        hashMap.put("I", "upload_parsing");
        hashMap.put("T", "upload_trilaterating");
        hashMap.put("S", "upload_stats");
        hashMap.put("D", "upload_success");
        hashMap.put("E", "upload_failed");
        hashMap.put("A", "upload_archive");
        hashMap.put("C", "upload_catalog");
        hashMap.put("G", "upload_geoindex");
        uploadStatusMap = Collections.unmodifiableMap(hashMap);
    }

    @Override
    public void onCreate(Bundle bundle) {
        MainActivity.info("UPLOADS: onCreate");
        super.onCreate(bundle);
        setHasOptionsMenu(true);
        FragmentActivity activity = getActivity();
        if (activity != null) {
            MainActivity.setLocale(activity);
            activity.setVolumeControlStream(3);
        }
        this.finishing = new AtomicBoolean(false);
        NumberFormat numberInstance = NumberFormat.getNumberInstance(Locale.US);
        this.numberFormat = numberInstance;
        if (numberInstance instanceof DecimalFormat) {
            numberInstance.setMinimumFractionDigits(0);
            this.numberFormat.setMaximumFractionDigits(2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle) {
        MainActivity.info("UPLOADS: onCreateView. orientation: " + getResources().getConfiguration().orientation);
        LinearLayout linearLayout = (LinearLayout) layoutInflater.inflate(R.layout.uploads, viewGroup, false);
        setupSwipeRefresh(linearLayout);
        setupListView(linearLayout);
        if (getActivity() != null) {
            RankDownloadHandler rankDownloadHandler = new RankDownloadHandler(linearLayout, this.numberFormat, getActivity().getPackageName(), getResources());
            this.handler = rankDownloadHandler;
            rankDownloadHandler.setUploadsListAdapter(this.listAdapter);
            this.busy.set(false);
            downloadUploads(0);
        }
        return linearLayout;
    }

    private void setupSwipeRefresh(LinearLayout linearLayout) {
        ((SwipeRefreshLayout) linearLayout.findViewById(R.id.uploads_swipe_container)).setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                if (UploadsFragment.this.listAdapter != null) {
                    UploadsFragment.this.listAdapter.clear();
                }
                UploadsFragment.this.downloadUploads(0);
            }
        });
    }

    public void downloadUploads(int i) {
        if (this.handler == null) {
            MainActivity.error("downloadUploads handler is null");
        }
        if (this.busy.compareAndSet(false, true)) {
            int i2 = i * 100;
            try {
                new ApiDownloader(getActivity(), ListFragment.lameStatic.dbHelper, null, "https://api.wigle.net/api/v2/file/transactions?pagestart=" + i2 + "&pageend=" + (i2 + 100), false, true, true, AbstractApiRequest.REQUEST_GET, new ApiListener() {
                    @Override
                    public void requestComplete(JSONObject jSONObject, boolean z) {
                        if (!z) {
                            UploadsFragment uploadsFragment = UploadsFragment.this;
                            uploadsFragment.handleUploads(jSONObject, uploadsFragment.handler);
                        }
                        UploadsFragment.this.busy.set(false);
                    }
                }).startDownload(this);
                return;
            } catch (WiGLEAuthException unused) {
                MainActivity.info("Transactions Download Failed due to failed auth");
                return;
            }
        }
        MainActivity.error("preventing download because previous is still in progress.");
    }

    private void setupListView(View view) {
        FragmentActivity activity = getActivity();
        if (activity != null) {
            SharedPreferences sharedPreferences = activity.getSharedPreferences(ListFragment.SHARED_PREFS, 0);
            UploadsListAdapter uploadsListAdapter = this.listAdapter;
            if (uploadsListAdapter == null) {
                this.listAdapter = new UploadsListAdapter(getActivity(), R.layout.uploadrow, sharedPreferences, this);
            } else if (!uploadsListAdapter.isEmpty() && !TokenAccess.hasApiToken(sharedPreferences)) {
                this.listAdapter.clear();
            }
        }
        AbsListView absListView = (AbsListView) view.findViewById(R.id.uploads_list_view);
        absListView.setAdapter((ListAdapter) this.listAdapter);
        absListView.setOnScrollListener(new EndlessScrollListener() {
            @Override
            public boolean onLoadMore(int i, int i2) {
                UploadsFragment.access$708(UploadsFragment.this);
                UploadsFragment uploadsFragment = UploadsFragment.this;
                uploadsFragment.downloadUploads(uploadsFragment.currentPage);
                return true;
            }
        });
    }

    private String statusValue(String str) {
        int identifier = getResources().getIdentifier("upload_unknown", "string", BuildConfig.APPLICATION_ID);
        Map<String, String> map = uploadStatusMap;
        if (map.containsKey(str)) {
            identifier = getResources().getIdentifier(map.get(str), "string", BuildConfig.APPLICATION_ID);
        }
        return getString(identifier);
    }

    public static final class RankDownloadHandler extends DownloadHandler {
        private final AtomicBoolean lockListAdapter;
        private UploadsListAdapter uploadsListAdapter;

        private RankDownloadHandler(View view, NumberFormat numberFormat, String str, Resources resources) {
            super(view, numberFormat, str, resources);
            this.lockListAdapter = new AtomicBoolean(false);
        }

        public void setUploadsListAdapter(UploadsListAdapter uploadsListAdapter) {
            this.uploadsListAdapter = uploadsListAdapter;
        }

        @Override
        public void handleMessage(Message message) {
            Bundle data = message.getData();
            ArrayList parcelableArrayList = data.getParcelableArrayList(UploadsFragment.RESULT_LIST_KEY);
            if (message.what != 100 || parcelableArrayList == null || this.uploadsListAdapter == null) {
                return;
            }
            if (this.lockListAdapter.compareAndSet(false, true)) {
                try {
                    ((TextView) this.view.findViewById(R.id.queue_depth)).setText(this.resources.getString(R.string.queue_depth) + ": " + data.getString(UploadsFragment.KEY_QUEUE_DEPTH));
                    this.uploadsListAdapter.clear();
                    Iterator it = parcelableArrayList.iterator();
                    while (it.hasNext()) {
                        Parcelable parcelable = (Parcelable) it.next();
                        if (parcelable instanceof Bundle) {
                            Bundle bundle = (Bundle) parcelable;
                            this.uploadsListAdapter.add(new Upload(bundle.getString(UploadsFragment.KEY_TRANSID), bundle.getLong(UploadsFragment.KEY_TOTAL_WIFI_GPS), bundle.getLong(UploadsFragment.KEY_TOTAL_BT_GPS), bundle.getLong(UploadsFragment.KEY_TOTAL_CELL_GPS), (int) bundle.getLong(UploadsFragment.KEY_PERCENT_DONE), bundle.getString("status"), bundle.getLong(UploadsFragment.KEY_FILE_SIZE), bundle.getString(UploadsFragment.KEY_FILE_NAME), Boolean.valueOf(bundle.getBoolean(UploadsFragment.KEY_UPLOADED)), Boolean.valueOf(bundle.getBoolean(UploadsFragment.KEY_DOWNLOADED))));
                        }
                    }
                } finally {
                    this.lockListAdapter.set(false);
                    ((SwipeRefreshLayout) this.view.findViewById(R.id.uploads_swipe_container)).setRefreshing(false);
                }
            }
        }
    }

    public void handleUploads(JSONObject jSONObject, Handler handler) {
        String str;
        boolean z;
        String str2 = "status";
        String str3 = KEY_QUEUE_DEPTH;
        String str4 = RESULT_LIST_KEY;
        if (jSONObject == null) {
            MainActivity.info("handleUploads null json, returning");
            return;
        }
        Bundle bundle = new Bundle();
        try {
            JSONArray jSONArray = jSONObject.getJSONArray(RESULT_LIST_KEY);
            ArrayList<? extends Parcelable> arrayList = new ArrayList<>(100);
            List<File> csvUploadsAndDownloads = FileUtility.getCsvUploadsAndDownloads(getContext());
            int i = 0;
            while (i < jSONArray.length()) {
                JSONObject jSONObject2 = jSONArray.getJSONObject(i);
                Bundle bundle2 = new Bundle();
                String[] strArr = ALL_ROW_KEYS;
                int length = strArr.length;
                JSONArray jSONArray2 = jSONArray;
                int i2 = 0;
                while (i2 < length) {
                    int i3 = length;
                    String str5 = strArr[i2];
                    bundle2.putLong(str5, jSONObject2.getLong(str5));
                    i2++;
                    length = i3;
                    str3 = str3;
                    str4 = str4;
                }
                String str6 = str3;
                String str7 = str4;
                String string = jSONObject2.getString(KEY_TRANSID);
                bundle2.putString(KEY_TRANSID, string);
                String string2 = jSONObject2.getString(KEY_FILE_NAME);
                bundle2.putString(KEY_FILE_NAME, string2);
                bundle2.putString(str2, statusValue(jSONObject2.getString(str2)));
                arrayList.add(bundle2);
                String str8 = string2 + FileUtility.GZ_EXT;
                int i4 = 0;
                while (true) {
                    str = str2;
                    if (i4 >= csvUploadsAndDownloads.size()) {
                        z = false;
                        break;
                    }
                    File file = csvUploadsAndDownloads.get(i4);
                    if (str8.contains(file.getName())) {
                        bundle2.putBoolean(KEY_UPLOADED, true);
                        bundle2.putBoolean(KEY_DOWNLOADED, false);
                        csvUploadsAndDownloads.remove(i4);
                        z = true;
                        break;
                    } else if (file.getName().startsWith(string)) {
                        bundle2.putBoolean(KEY_UPLOADED, false);
                        z = true;
                        bundle2.putBoolean(KEY_DOWNLOADED, true);
                        csvUploadsAndDownloads.remove(i4);
                        break;
                    } else {
                        i4++;
                        str2 = str;
                    }
                }
                if (!z) {
                    bundle2.putBoolean(KEY_UPLOADED, false);
                    bundle2.putBoolean(KEY_DOWNLOADED, false);
                }
                i++;
                jSONArray = jSONArray2;
                str2 = str;
                str3 = str6;
                str4 = str7;
            }
            String str9 = str3;
            bundle.putParcelableArrayList(str4, arrayList);
            bundle.putString(str9, jSONObject.getString(str9));
        } catch (JSONException e) {
            MainActivity.error("json error: " + e, e);
        } catch (Exception e2) {
            MainActivity.error("uploads error: " + e2, e2);
        }
        Message message = new Message();
        message.setData(bundle);
        message.what = 100;
        handler.sendMessage(message);
        this.busy.set(false);
    }

    @Override
    public void onDestroy() {
        MainActivity.info("UPLOADS: onDestroy");
        this.finishing.set(true);
        super.onDestroy();
    }

    @Override
    public void onResume() {
        MainActivity.info("UPLOADS: onResume");
        super.onResume();
        this.busy.set(false);
        if (getActivity() != null) {
            getActivity().setTitle(R.string.uploads_app_name);
        }
    }

    @Override
    public void onStart() {
        MainActivity.info("UPLOADS: onStart");
        super.onStart();
    }

    @Override
    public void onPause() {
        MainActivity.info("UPLOADS: onPause");
        super.onPause();
    }

    @Override
    public void onStop() {
        MainActivity.info("UPLOADS: onStop");
        super.onStop();
    }

    @Override
    public void onConfigurationChanged(Configuration configuration) {
        MainActivity.info("UPLOADS: config changed");
        super.onConfigurationChanged(configuration);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
        MenuItem add = menu.add(0, 200, 0, getString(R.string.user_stats_app_name));
        add.setIcon(17301576);
        MenuItemCompat.setShowAsAction(add, 1);
        menu.add(0, 200, 0, getString(R.string.user_stats_app_name)).setIcon(17301576);
        MenuItem add2 = menu.add(0, MENU_SITE_STATS, 0, getString(R.string.site_stats_app_name));
        add2.setIcon(R.drawable.wiglewifi_small_black_white);
        MenuItemCompat.setShowAsAction(add2, 1);
        menu.add(0, MENU_SITE_STATS, 0, getString(R.string.site_stats_app_name)).setIcon(R.drawable.wiglewifi_small_black_white);
        super.onCreateOptionsMenu(menu, menuInflater);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem menuItem) {
        MainActivity mainActivity = MainActivity.getMainActivity();
        FragmentActivity activity = getActivity();
        if (activity != null) {
            NavigationView navigationView = (NavigationView) activity.findViewById(R.id.left_drawer);
            int itemId = menuItem.getItemId();
            if (itemId == 200) {
                MenuUtil.selectStatsSubmenuItem(navigationView, mainActivity, R.id.nav_user_stats);
                return true;
            } else if (itemId != MENU_SITE_STATS) {
                return false;
            } else {
                MenuUtil.selectStatsSubmenuItem(navigationView, mainActivity, R.id.nav_site_stats);
                return true;
            }
        }
        return false;
    }
}