Add report bug callback for diagnostics screen
Summary: Adds an optional interface that, when implemented, adds a "Report Bug" button to the top of the screen. This is a weird Android-ism that's sadly still the recommended way of providing hooks into Fragments: https://developer.android.com/guide/components/fragments#EventCallbacks In order to keep things vanilla here, let's follow that pattern. Reviewed By: jknoxville Differential Revision: D13045578 fbshipit-source-id: 1506fcfc630c2d1183d7d1eaf470d23954e0c097
This commit is contained in:
committed by
Facebook Github Bot
parent
85206e4d9b
commit
093ab1fe57
@@ -7,6 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.facebook.flipper.android.diagnostics;
|
package com.facebook.flipper.android.diagnostics;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -16,6 +17,7 @@ import android.support.v4.app.Fragment;
|
|||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Button;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ScrollView;
|
import android.widget.ScrollView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@@ -27,15 +29,27 @@ import com.facebook.flipper.core.StateSummary.StateElement;
|
|||||||
|
|
||||||
public class FlipperDiagnosticFragment extends Fragment implements FlipperStateUpdateListener {
|
public class FlipperDiagnosticFragment extends Fragment implements FlipperStateUpdateListener {
|
||||||
|
|
||||||
private TextView mSummaryView;
|
TextView mSummaryView;
|
||||||
private TextView mLogView;
|
TextView mLogView;
|
||||||
private ScrollView mScrollView;
|
ScrollView mScrollView;
|
||||||
|
Button mReportButton;
|
||||||
|
|
||||||
|
@Nullable FlipperDiagnosticReportListener mReportCallback;
|
||||||
|
|
||||||
|
private final View.OnClickListener mOnBugReportClickListener =
|
||||||
|
new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
mReportCallback.report(
|
||||||
|
AndroidFlipperClient.getInstance(getContext()).getState(), getSummary());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
public static FlipperDiagnosticFragment newInstance() {
|
public static FlipperDiagnosticFragment newInstance() {
|
||||||
final FlipperDiagnosticFragment fragment = new FlipperDiagnosticFragment();
|
return new FlipperDiagnosticFragment();
|
||||||
return fragment;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SetTextI18n")
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(
|
public View onCreateView(
|
||||||
@@ -46,10 +60,18 @@ public class FlipperDiagnosticFragment extends Fragment implements FlipperStateU
|
|||||||
final LinearLayout root = new LinearLayout(getContext());
|
final LinearLayout root = new LinearLayout(getContext());
|
||||||
root.setOrientation(LinearLayout.VERTICAL);
|
root.setOrientation(LinearLayout.VERTICAL);
|
||||||
|
|
||||||
|
if (mReportCallback != null) {
|
||||||
|
mReportButton = new Button(getContext());
|
||||||
|
mReportButton.setText("Report Bug");
|
||||||
|
mReportButton.setOnClickListener(mOnBugReportClickListener);
|
||||||
|
}
|
||||||
mSummaryView = new TextView(getContext());
|
mSummaryView = new TextView(getContext());
|
||||||
mLogView = new TextView(getContext());
|
mLogView = new TextView(getContext());
|
||||||
mScrollView = new ScrollView(getContext());
|
mScrollView = new ScrollView(getContext());
|
||||||
mScrollView.addView(mLogView);
|
mScrollView.addView(mLogView);
|
||||||
|
if (mReportButton != null) {
|
||||||
|
root.addView(mReportButton);
|
||||||
|
}
|
||||||
root.addView(mSummaryView);
|
root.addView(mSummaryView);
|
||||||
root.addView(mScrollView);
|
root.addView(mScrollView);
|
||||||
return root;
|
return root;
|
||||||
@@ -90,7 +112,7 @@ public class FlipperDiagnosticFragment extends Fragment implements FlipperStateU
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getSummary() {
|
String getSummary() {
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
final StateSummary summary = AndroidFlipperClient.getInstance(context).getStateSummary();
|
final StateSummary summary = AndroidFlipperClient.getInstance(context).getStateSummary();
|
||||||
final StringBuilder stateText = new StringBuilder();
|
final StringBuilder stateText = new StringBuilder();
|
||||||
@@ -115,9 +137,19 @@ public class FlipperDiagnosticFragment extends Fragment implements FlipperStateU
|
|||||||
return stateText.toString();
|
return stateText.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void onStop() {
|
public void onStop() {
|
||||||
super.onStop();
|
super.onStop();
|
||||||
final FlipperClient client = AndroidFlipperClient.getInstance(getContext());
|
final FlipperClient client = AndroidFlipperClient.getInstance(getContext());
|
||||||
client.unsubscribe();
|
client.unsubscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttach(Context context) {
|
||||||
|
super.onAttach(context);
|
||||||
|
|
||||||
|
if (context instanceof FlipperDiagnosticReportListener) {
|
||||||
|
mReportCallback = (FlipperDiagnosticReportListener) context;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018-present, Facebook, Inc.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the LICENSE
|
||||||
|
* file in the root directory of this source tree.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package com.facebook.flipper.android.diagnostics;
|
||||||
|
|
||||||
|
import com.facebook.flipper.core.FlipperClient;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implement this interface on your activity hosting {@link FlipperDiagnosticFragment} to enable the
|
||||||
|
* "Report Bug" button and receive a callback for it.
|
||||||
|
*/
|
||||||
|
public interface FlipperDiagnosticReportListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a bug report is requested, including the flipper diagnostic information.
|
||||||
|
*
|
||||||
|
* @param state See {@link FlipperClient#getState()}
|
||||||
|
* @param summary See {@link FlipperClient#getStateSummary()}
|
||||||
|
*/
|
||||||
|
void report(String state, String summary);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user