Turn FlipperDiagnosticsActivity into a Fragment

Summary:
This allows passing in some options in an easy way, like a callback
that contains all debug information for a bug report.

Reviewed By: jknoxville

Differential Revision: D13045282

fbshipit-source-id: 5698228ee9aef31d406313047b6836dc928448cf
This commit is contained in:
Pascal Hartig
2018-11-15 09:46:55 -08:00
committed by Facebook Github Bot
parent b2b27b774e
commit 85206e4d9b
2 changed files with 138 additions and 88 deletions

View File

@@ -1,98 +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; package com.facebook.flipper.android.diagnostics;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.support.annotation.Nullable;
import android.widget.LinearLayout; import android.support.v4.app.FragmentActivity;
import android.widget.ScrollView;
import android.widget.TextView;
import com.facebook.flipper.android.AndroidFlipperClient;
import com.facebook.flipper.core.FlipperClient;
import com.facebook.flipper.core.FlipperStateUpdateListener;
import com.facebook.flipper.core.StateSummary;
import com.facebook.flipper.core.StateSummary.StateElement;
public class FlipperDiagnosticActivity extends Activity implements FlipperStateUpdateListener { public class FlipperDiagnosticActivity extends FragmentActivity {
private TextView summaryView;
private TextView logView;
private ScrollView scrollView;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
final LinearLayout root = new LinearLayout(this); getSupportFragmentManager()
root.setOrientation(LinearLayout.VERTICAL); .beginTransaction()
.add(android.R.id.content, FlipperDiagnosticFragment.newInstance())
summaryView = new TextView(this); .commit();
logView = new TextView(this);
scrollView = new ScrollView(this);
scrollView.addView(logView);
root.addView(summaryView);
root.addView(scrollView);
setContentView(root);
}
protected void onStart() {
super.onStart();
final FlipperClient client = AndroidFlipperClient.getInstance(this);
client.subscribeForUpdates(this);
summaryView.setText(getSummary());
logView.setText(client.getState());
}
protected void onResume() {
super.onResume();
scrollView.fullScroll(View.FOCUS_DOWN);
}
@Override
public void onUpdate() {
final String state = AndroidFlipperClient.getInstance(this).getState();
final String summary = getSummary();
runOnUiThread(
new Runnable() {
@Override
public void run() {
summaryView.setText(summary);
logView.setText(state);
scrollView.fullScroll(View.FOCUS_DOWN);
}
});
}
private String getSummary() {
final Context context = this;
final StateSummary summary = AndroidFlipperClient.getInstance(context).getStateSummary();
final StringBuilder stateText = new StringBuilder();
for (StateElement e : summary.mList) {
final String status;
switch (e.getState()) {
case IN_PROGRESS:
status = "";
break;
case SUCCESS:
status = "";
break;
case FAILED:
status = "";
break;
default:
status = "";
}
stateText.append(status).append(e.getName()).append("\n");
}
return stateText.toString();
}
protected void onStop() {
super.onStop();
final FlipperClient client = AndroidFlipperClient.getInstance(this);
client.unsubscribe();
} }
} }

View File

@@ -0,0 +1,123 @@
/*
* 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 android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import com.facebook.flipper.android.AndroidFlipperClient;
import com.facebook.flipper.core.FlipperClient;
import com.facebook.flipper.core.FlipperStateUpdateListener;
import com.facebook.flipper.core.StateSummary;
import com.facebook.flipper.core.StateSummary.StateElement;
public class FlipperDiagnosticFragment extends Fragment implements FlipperStateUpdateListener {
private TextView mSummaryView;
private TextView mLogView;
private ScrollView mScrollView;
public static FlipperDiagnosticFragment newInstance() {
final FlipperDiagnosticFragment fragment = new FlipperDiagnosticFragment();
return fragment;
}
@Nullable
@Override
public View onCreateView(
@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
final LinearLayout root = new LinearLayout(getContext());
root.setOrientation(LinearLayout.VERTICAL);
mSummaryView = new TextView(getContext());
mLogView = new TextView(getContext());
mScrollView = new ScrollView(getContext());
mScrollView.addView(mLogView);
root.addView(mSummaryView);
root.addView(mScrollView);
return root;
}
@Override
public void onStart() {
super.onStart();
final FlipperClient client = AndroidFlipperClient.getInstance(getContext());
client.subscribeForUpdates(this);
mSummaryView.setText(getSummary());
mLogView.setText(client.getState());
}
@Override
public void onResume() {
super.onResume();
mScrollView.fullScroll(View.FOCUS_DOWN);
}
@Override
public void onUpdate() {
final String state = AndroidFlipperClient.getInstance(getContext()).getState();
final String summary = getSummary();
final Activity activity = getActivity();
if (activity != null) {
activity.runOnUiThread(
new Runnable() {
@Override
public void run() {
mSummaryView.setText(summary);
mLogView.setText(state);
mScrollView.fullScroll(View.FOCUS_DOWN);
}
});
}
}
private String getSummary() {
final Context context = getContext();
final StateSummary summary = AndroidFlipperClient.getInstance(context).getStateSummary();
final StringBuilder stateText = new StringBuilder();
for (StateElement e : summary.mList) {
final String status;
switch (e.getState()) {
case IN_PROGRESS:
status = "";
break;
case SUCCESS:
status = "";
break;
case FAILED:
status = "";
break;
case UNKNOWN:
default:
status = "";
}
stateText.append(status).append(e.getName()).append("\n");
}
return stateText.toString();
}
public void onStop() {
super.onStop();
final FlipperClient client = AndroidFlipperClient.getInstance(getContext());
client.unsubscribe();
}
}