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;
}
}
}