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

以下内容为反编译后的 RankStatsFragment.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.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import androidx.core.view.MenuItemCompat;
import androidx.fragment.app.Fragment;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.google.android.material.navigation.NavigationView;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Locale;
import java.util.concurrent.atomic.AtomicBoolean;
import net.wigle.wigleandroid.UserStatsFragment;
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.RankUser;
import net.wigle.wigleandroid.util.MenuUtil;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class RankStatsFragment extends Fragment {
    private static final String KEY_RANK = "rank";
    private static final String KEY_SELECTED = "selected";
    private static final String KEY_USERNAME = "userName";
    private static final int MENU_RANK_SWAP = 202;
    private static final int MENU_SITE_STATS = 201;
    private static final int MENU_USER_CENTRIC_SWAP = 203;
    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;
    private AtomicBoolean finishing;
    private RankDownloadHandler handler;
    private RankListAdapter listAdapter;
    private AtomicBoolean monthRanking;
    private NumberFormat numberFormat;
    private AtomicBoolean userCentric;
    private static final String KEY_MONTH_WIFI_GPS = "eventMonthCount";
    private static final String KEY_TOTAL_WIFI_GPS = "discoveredWiFiGPS";
    private static final String KEY_TOTAL_BT_GPS = "discoveredBtGPS";
    private static final String KEY_TOTAL_CELL_GPS = "discoveredCellGPS";
    private static final String KEY_PREV_RANK = "prevRank";
    private static final String KEY_PREV_MONTH_RANK = "prevMonthRank";
    private static final String[] ALL_ROW_KEYS = {KEY_MONTH_WIFI_GPS, KEY_TOTAL_WIFI_GPS, KEY_TOTAL_BT_GPS, KEY_TOTAL_CELL_GPS, "rank", KEY_PREV_RANK, KEY_PREV_MONTH_RANK};

    @Override
    public void onCreate(Bundle bundle) {
        MainActivity.info("RANKSTATS: onCreate");
        super.onCreate(bundle);
        setHasOptionsMenu(true);
        MainActivity.setLocale(getActivity());
        getActivity().setVolumeControlStream(3);
        this.finishing = new AtomicBoolean(false);
        this.monthRanking = new AtomicBoolean(false);
        this.userCentric = new AtomicBoolean(true);
        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("RANKSTATS: onCreateView.a orientation: " + getResources().getConfiguration().orientation);
        LinearLayout linearLayout = (LinearLayout) layoutInflater.inflate(R.layout.rankstats, viewGroup, false);
        setupSwipeRefresh(linearLayout);
        setupListView(linearLayout);
        RankDownloadHandler rankDownloadHandler = new RankDownloadHandler(linearLayout, this.numberFormat, getActivity().getPackageName(), getResources(), this.monthRanking);
        this.handler = rankDownloadHandler;
        rankDownloadHandler.setRankListAdapter(this.listAdapter);
        final SharedPreferences sharedPreferences = getActivity().getSharedPreferences(ListFragment.SHARED_PREFS, 0);
        UserStatsFragment.executeUserDownload(this, new UserStatsFragment.UserDownloadApiListener(new Handler() {
            @Override
            public void handleMessage(Message message) {
                Bundle data = message.getData();
                boolean z = data.getBoolean(UserStatsFragment.KEY_IS_CACHE);
                MainActivity.info("got user message, isCache: " + z);
                SharedPreferences.Editor edit = sharedPreferences.edit();
                edit.putLong("rank", data.getLong("rank"));
                edit.putLong("monthRank", data.getLong("monthRank"));
                edit.apply();
                RankStatsFragment.this.downloadRanks(z);
            }
        }));
        return linearLayout;
    }

    private void setupSwipeRefresh(LinearLayout linearLayout) {
        ((SwipeRefreshLayout) linearLayout.findViewById(R.id.rank_swipe_container)).setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                RankStatsFragment.this.downloadRanks(false);
            }
        });
    }

    public void downloadRanks(boolean z) {
        long j;
        if (this.handler == null) {
            MainActivity.error("downloadRanks: handler is null");
        } else if (getActivity() == null) {
            MainActivity.error("downloadRanks: fragmentActivity is null");
        } else {
            boolean z2 = this.monthRanking.get();
            String str = z2 ? "monthcount" : "discovered";
            final long j2 = 0;
            String str2 = "";
            if (this.userCentric.get()) {
                long j3 = getActivity().getSharedPreferences(ListFragment.SHARED_PREFS, 0).getLong(z2 ? "monthRank" : "rank", 0L);
                long j4 = j3 - 50;
                j = j4 > 0 ? j4 : 0L;
                if (j4 >= 0) {
                    j3 = 50;
                }
                long j5 = j3 - 5;
                if (j5 >= 0) {
                    j2 = j5;
                }
            } else {
                str2 = "top";
                j = 0;
            }
            ApiDownloader apiDownloader = new ApiDownloader(getActivity(), ListFragment.lameStatic.dbHelper, "rank-stats-" + ((z2 ? "month" : "all") + str2) + "-cache.json", "https://api.wigle.net/api/v2/stats/standings?pagestart=" + j + "&pageend=" + (j + 100) + "&sort=" + str, false, false, false, AbstractApiRequest.REQUEST_GET, new ApiListener() {
                @Override
                public void requestComplete(JSONObject jSONObject, boolean z3) {
                    RankStatsFragment rankStatsFragment = RankStatsFragment.this;
                    rankStatsFragment.handleRankStats(jSONObject, rankStatsFragment.handler, j2);
                }
            });
            apiDownloader.setCacheOnly(z);
            try {
                apiDownloader.startDownload(this);
            } catch (WiGLEAuthException unused) {
                MainActivity.info("Rank Stats Download Failed due to failed auth");
            }
        }
    }

    private void setupListView(View view) {
        SharedPreferences sharedPreferences = getActivity().getSharedPreferences(ListFragment.SHARED_PREFS, 0);
        RankListAdapter rankListAdapter = this.listAdapter;
        if (rankListAdapter == null) {
            this.listAdapter = new RankListAdapter(getActivity(), R.layout.rankrow);
        } else if (!rankListAdapter.isEmpty() && !TokenAccess.hasApiToken(sharedPreferences)) {
            this.listAdapter.clear();
        }
        ((ListView) view.findViewById(R.id.rank_list_view)).setAdapter((ListAdapter) this.listAdapter);
    }

    public static final class RankDownloadHandler extends DownloadHandler {
        final AtomicBoolean monthRanking;
        private RankListAdapter rankListAdapter;

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

        public void setRankListAdapter(RankListAdapter rankListAdapter) {
            this.rankListAdapter = rankListAdapter;
        }

        @Override
        public void handleMessage(Message message) {
            Bundle data = message.getData();
            ArrayList parcelableArrayList = data.getParcelableArrayList(RankStatsFragment.RESULT_LIST_KEY);
            if (message.what != 100 || parcelableArrayList == null || this.rankListAdapter == null) {
                return;
            }
            TextView textView = (TextView) this.view.findViewById(R.id.rankstats_type);
            boolean z = this.monthRanking.get();
            textView.setText(z ? R.string.monthcount_title : R.string.all_time_title);
            String str = z ? RankStatsFragment.KEY_PREV_MONTH_RANK : RankStatsFragment.KEY_PREV_RANK;
            long j = data.getLong(RankStatsFragment.KEY_SELECTED);
            this.rankListAdapter.clear();
            this.rankListAdapter.setMonthRanking(this.monthRanking.get());
            Iterator it = parcelableArrayList.iterator();
            while (it.hasNext()) {
                Parcelable parcelable = (Parcelable) it.next();
                if (parcelable instanceof Bundle) {
                    Bundle bundle = (Bundle) parcelable;
                    this.rankListAdapter.add(new RankUser(bundle.getLong("rank"), bundle.getLong(str) - bundle.getLong("rank"), bundle.getString(RankStatsFragment.KEY_USERNAME), bundle.getLong(RankStatsFragment.KEY_MONTH_WIFI_GPS), bundle.getLong(RankStatsFragment.KEY_TOTAL_WIFI_GPS), bundle.getLong(RankStatsFragment.KEY_TOTAL_BT_GPS), bundle.getLong(RankStatsFragment.KEY_TOTAL_CELL_GPS)));
                }
            }
            ((ListView) this.view.findViewById(R.id.rank_list_view)).setSelectionFromTop((int) j, 20);
            ((SwipeRefreshLayout) this.view.findViewById(R.id.rank_swipe_container)).setRefreshing(false);
        }
    }

    public void handleRankStats(JSONObject jSONObject, Handler handler, long j) {
        String[] strArr;
        MainActivity.info("handleRankStats");
        if (jSONObject == null) {
            MainActivity.info("handleRankStats null json, returning");
            return;
        }
        Bundle bundle = new Bundle();
        bundle.putLong(KEY_SELECTED, j);
        try {
            JSONArray jSONArray = jSONObject.getJSONArray(RESULT_LIST_KEY);
            ArrayList<? extends Parcelable> arrayList = new ArrayList<>(jSONArray.length());
            for (int i = 0; i < jSONArray.length(); i++) {
                JSONObject jSONObject2 = jSONArray.getJSONObject(i);
                Bundle bundle2 = new Bundle();
                for (String str : ALL_ROW_KEYS) {
                    if (jSONObject2.has(str)) {
                        bundle2.putLong(str, jSONObject2.getLong(str));
                    }
                }
                bundle2.putString(KEY_USERNAME, jSONObject2.getString(KEY_USERNAME));
                arrayList.add(bundle2);
            }
            bundle.putParcelableArrayList(RESULT_LIST_KEY, arrayList);
        } catch (JSONException e) {
            MainActivity.error("json error: " + e, e);
        } catch (Exception e2) {
            MainActivity.error("rank error: " + e2, e2);
        }
        Message message = new Message();
        message.setData(bundle);
        message.what = 100;
        handler.sendMessage(message);
    }

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

    @Override
    public void onResume() {
        MainActivity.info("RANKSTATS: onResume");
        super.onResume();
        getActivity().setTitle(R.string.rank_stats_app_name);
    }

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

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

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

    @Override
    public void onConfigurationChanged(Configuration configuration) {
        MainActivity.info("RANKSTATS: 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);
        menu.add(0, MENU_RANK_SWAP, 0, getRankSwapString()).setIcon(17301660);
        menu.add(0, MENU_USER_CENTRIC_SWAP, 0, getUserCentricSwapString()).setIcon(17301606);
        super.onCreateOptionsMenu(menu, menuInflater);
    }

    private String getRankSwapString() {
        return getString(this.monthRanking.get() ? R.string.rank_all_time : R.string.rank_month);
    }

    private String getUserCentricSwapString() {
        return getString(this.userCentric.get() ? R.string.not_user_centric : R.string.user_centric);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem menuItem) {
        MainActivity mainActivity = MainActivity.getMainActivity();
        NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.left_drawer);
        switch (menuItem.getItemId()) {
            case 200:
                MenuUtil.selectStatsSubmenuItem(navigationView, mainActivity, R.id.nav_user_stats);
                return true;
            case MENU_SITE_STATS:
                MenuUtil.selectStatsSubmenuItem(navigationView, mainActivity, R.id.nav_site_stats);
                return true;
            case MENU_RANK_SWAP:
                AtomicBoolean atomicBoolean = this.monthRanking;
                atomicBoolean.set(!atomicBoolean.get());
                menuItem.setTitle(getRankSwapString());
                downloadRanks(false);
                return true;
            case MENU_USER_CENTRIC_SWAP:
                AtomicBoolean atomicBoolean2 = this.userCentric;
                atomicBoolean2.set(!atomicBoolean2.get());
                menuItem.setTitle(getUserCentricSwapString());
                downloadRanks(false);
                return true;
            default:
                return false;
        }
    }
}