mirror of
https://github.com/emanuele-f/PCAPdroid.git
synced 2026-07-03 21:21:12 +08:00
Fix crash on screen rotation in connection details
On screen rotation, the fragments onAttach is called before the activity onCreate, which caused mConn to be null
This commit is contained in:
parent
a18d39b78c
commit
25f7193051
@ -132,17 +132,18 @@ public class ConnectionDetailsActivity extends BaseActivity implements Connectio
|
||||
public Fragment createFragment(int position) {
|
||||
//Log.d(TAG, "createFragment");
|
||||
int pos = getVisibleTabsPositions()[position];
|
||||
int conn_id = mConn.incr_id;
|
||||
|
||||
switch (pos) {
|
||||
case POS_WEBSOCKET:
|
||||
return ConnectionPayload.newInstance(PayloadChunk.ChunkType.WEBSOCKET);
|
||||
return ConnectionPayload.newInstance(PayloadChunk.ChunkType.WEBSOCKET, conn_id);
|
||||
case POS_HTTP:
|
||||
return ConnectionPayload.newInstance(PayloadChunk.ChunkType.HTTP);
|
||||
return ConnectionPayload.newInstance(PayloadChunk.ChunkType.HTTP, conn_id);
|
||||
case POS_RAW_PAYLOAD:
|
||||
return ConnectionPayload.newInstance(PayloadChunk.ChunkType.RAW);
|
||||
return ConnectionPayload.newInstance(PayloadChunk.ChunkType.RAW, conn_id);
|
||||
case POS_OVERVIEW:
|
||||
default:
|
||||
return new ConnectionOverview();
|
||||
return ConnectionOverview.newInstance(conn_id);
|
||||
}
|
||||
}
|
||||
|
||||
@ -293,6 +294,4 @@ public class ConnectionDetailsActivity extends BaseActivity implements Connectio
|
||||
if(mConn.status >= ConnectionDescriptor.CONN_STATUS_CLOSED)
|
||||
unregisterConnsListener();
|
||||
}
|
||||
|
||||
public ConnectionDescriptor getConn() { return mConn; }
|
||||
}
|
||||
|
||||
@ -25,6 +25,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
@ -42,15 +43,16 @@ import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.emanuelef.remote_capture.AppsResolver;
|
||||
import com.emanuelef.remote_capture.CaptureService;
|
||||
import com.emanuelef.remote_capture.ConnectionsRegister;
|
||||
import com.emanuelef.remote_capture.R;
|
||||
import com.emanuelef.remote_capture.Utils;
|
||||
import com.emanuelef.remote_capture.activities.ConnectionDetailsActivity;
|
||||
import com.emanuelef.remote_capture.model.AppDescriptor;
|
||||
import com.emanuelef.remote_capture.model.ConnectionDescriptor;
|
||||
import com.emanuelef.remote_capture.model.Prefs;
|
||||
import com.haipq.android.flagkit.FlagImageView;
|
||||
|
||||
public class ConnectionOverview extends Fragment implements ConnectionDetailsActivity.ConnUpdateListener {
|
||||
private static final String TAG = "ConnectionOverview";
|
||||
private ConnectionDetailsActivity mActivity;
|
||||
private ConnectionDescriptor mConn;
|
||||
private TableLayout mTable;
|
||||
@ -70,11 +72,18 @@ public class ConnectionOverview extends Fragment implements ConnectionDetailsAct
|
||||
private ImageView mBlacklistedIp;
|
||||
private ImageView mBlacklistedHost;
|
||||
|
||||
public static ConnectionOverview newInstance(int conn_id) {
|
||||
ConnectionOverview fragment = new ConnectionOverview();
|
||||
Bundle args = new Bundle();
|
||||
args.putInt("conn_id", conn_id);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(@NonNull Context context) {
|
||||
super.onAttach(context);
|
||||
mActivity = (ConnectionDetailsActivity) context;
|
||||
mConn = mActivity.getConn();
|
||||
mActivity.addConnUpdateListener(this);
|
||||
}
|
||||
|
||||
@ -123,6 +132,17 @@ public class ConnectionOverview extends Fragment implements ConnectionDetailsAct
|
||||
mBlacklistedIp = view.findViewById(R.id.blacklisted_ip);
|
||||
mBlacklistedHost = view.findViewById(R.id.blacklisted_host);
|
||||
|
||||
Bundle args = getArguments();
|
||||
assert args != null;
|
||||
ConnectionsRegister reg = CaptureService.requireConnsRegister();
|
||||
|
||||
mConn = reg.getConnById(args.getInt("conn_id"));
|
||||
if(mConn == null) {
|
||||
Log.e(TAG, "null connection");
|
||||
mActivity.finish();
|
||||
return;
|
||||
}
|
||||
|
||||
view.findViewById(R.id.whois_ip).setOnClickListener(v -> {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://search.arin.net/rdap/?query=" + mConn.dst_ip));
|
||||
Utils.startActivity(mActivity, intent);
|
||||
|
||||
@ -21,6 +21,7 @@ package com.emanuelef.remote_capture.fragments;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
@ -33,6 +34,8 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.emanuelef.remote_capture.CaptureService;
|
||||
import com.emanuelef.remote_capture.ConnectionsRegister;
|
||||
import com.emanuelef.remote_capture.R;
|
||||
import com.emanuelef.remote_capture.Utils;
|
||||
import com.emanuelef.remote_capture.activities.ConnectionDetailsActivity;
|
||||
@ -42,6 +45,7 @@ import com.emanuelef.remote_capture.model.PayloadChunk;
|
||||
import com.emanuelef.remote_capture.views.EmptyRecyclerView;
|
||||
|
||||
public class ConnectionPayload extends Fragment implements ConnectionDetailsActivity.ConnUpdateListener {
|
||||
private static final String TAG = "ConnectionPayload";
|
||||
private ConnectionDetailsActivity mActivity;
|
||||
private ConnectionDescriptor mConn;
|
||||
private PayloadAdapter mAdapter;
|
||||
@ -51,10 +55,11 @@ public class ConnectionPayload extends Fragment implements ConnectionDetailsActi
|
||||
private boolean mJustCreated;
|
||||
private boolean mShowAsPrintable;
|
||||
|
||||
public static ConnectionPayload newInstance(PayloadChunk.ChunkType mode) {
|
||||
public static ConnectionPayload newInstance(PayloadChunk.ChunkType mode, int conn_id) {
|
||||
ConnectionPayload fragment = new ConnectionPayload();
|
||||
Bundle args = new Bundle();
|
||||
args.putSerializable("mode", mode);
|
||||
args.putInt("conn_id", conn_id);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
@ -63,7 +68,6 @@ public class ConnectionPayload extends Fragment implements ConnectionDetailsActi
|
||||
public void onAttach(@NonNull Context context) {
|
||||
super.onAttach(context);
|
||||
mActivity = (ConnectionDetailsActivity) context;
|
||||
mConn = mActivity.getConn();
|
||||
mActivity.addConnUpdateListener(this);
|
||||
}
|
||||
|
||||
@ -85,10 +89,16 @@ public class ConnectionPayload extends Fragment implements ConnectionDetailsActi
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
Bundle args = getArguments();
|
||||
PayloadChunk.ChunkType mode;
|
||||
if((args != null) && args.containsKey("mode"))
|
||||
mode = (PayloadChunk.ChunkType) args.getSerializable("mode");
|
||||
else
|
||||
mode = PayloadChunk.ChunkType.RAW;
|
||||
assert args != null;
|
||||
ConnectionsRegister reg = CaptureService.requireConnsRegister();
|
||||
mode = (PayloadChunk.ChunkType) args.getSerializable("mode");
|
||||
|
||||
mConn = reg.getConnById(args.getInt("conn_id"));
|
||||
if(mConn == null) {
|
||||
Log.e(TAG, "null connection");
|
||||
mActivity.finish();
|
||||
return;
|
||||
}
|
||||
|
||||
EmptyRecyclerView recyclerView = view.findViewById(R.id.payload);
|
||||
EmptyRecyclerView.MyLinearLayoutManager layoutMan = new EmptyRecyclerView.MyLinearLayoutManager(requireContext());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user