From 85206e4d9b1b5651ae36a7455f41745a27c7f4f6 Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Thu, 15 Nov 2018 09:46:55 -0800 Subject: [PATCH] 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 --- .../FlipperDiagnosticActivity.java | 103 +++------------ .../FlipperDiagnosticFragment.java | 123 ++++++++++++++++++ 2 files changed, 138 insertions(+), 88 deletions(-) create mode 100644 android/src/main/java/com/facebook/flipper/android/diagnostics/FlipperDiagnosticFragment.java diff --git a/android/src/main/java/com/facebook/flipper/android/diagnostics/FlipperDiagnosticActivity.java b/android/src/main/java/com/facebook/flipper/android/diagnostics/FlipperDiagnosticActivity.java index eb6ddf0b6..aa1a597df 100644 --- a/android/src/main/java/com/facebook/flipper/android/diagnostics/FlipperDiagnosticActivity.java +++ b/android/src/main/java/com/facebook/flipper/android/diagnostics/FlipperDiagnosticActivity.java @@ -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; -import android.app.Activity; -import android.content.Context; import android.os.Bundle; -import android.view.View; -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; +import android.support.annotation.Nullable; +import android.support.v4.app.FragmentActivity; -public class FlipperDiagnosticActivity extends Activity implements FlipperStateUpdateListener { - - private TextView summaryView; - private TextView logView; - private ScrollView scrollView; +public class FlipperDiagnosticActivity extends FragmentActivity { @Override - protected void onCreate(Bundle savedInstanceState) { + protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - final LinearLayout root = new LinearLayout(this); - root.setOrientation(LinearLayout.VERTICAL); - - summaryView = new TextView(this); - 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(); + getSupportFragmentManager() + .beginTransaction() + .add(android.R.id.content, FlipperDiagnosticFragment.newInstance()) + .commit(); } } diff --git a/android/src/main/java/com/facebook/flipper/android/diagnostics/FlipperDiagnosticFragment.java b/android/src/main/java/com/facebook/flipper/android/diagnostics/FlipperDiagnosticFragment.java new file mode 100644 index 000000000..2caddc55c --- /dev/null +++ b/android/src/main/java/com/facebook/flipper/android/diagnostics/FlipperDiagnosticFragment.java @@ -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(); + } +}