Add Android support for Timeline detail view
Summary: This diff adds the Java classes that serialize to the data expected by the new timeline widget. See D23865369 for the JS counterpart. Currently the Flipper plugin uses `toString` to get the wire values. I'm not feeling like using a json library or dealing with JSONObject's nonsense, so these are rolled manually for now. Reviewed By: astreet Differential Revision: D24254377 fbshipit-source-id: b2fc00400c40b47ac29c9b83c0b66621c3677974
This commit is contained in:
committed by
Facebook GitHub Bot
parent
0f9e97e55c
commit
e9dc645423
@@ -9,7 +9,14 @@ package com.facebook.flipper.plugins.inspector;
|
|||||||
|
|
||||||
import com.facebook.flipper.core.FlipperObject;
|
import com.facebook.flipper.core.FlipperObject;
|
||||||
import com.facebook.flipper.core.FlipperValue;
|
import com.facebook.flipper.core.FlipperValue;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
public class InspectorValue<T> implements FlipperValue {
|
public class InspectorValue<T> implements FlipperValue {
|
||||||
|
|
||||||
@@ -30,6 +37,7 @@ public class InspectorValue<T> implements FlipperValue {
|
|||||||
public static final Type<String> Enum = new Type<>("enum");
|
public static final Type<String> Enum = new Type<>("enum");
|
||||||
public static final Type<Integer> Color = new Type<>("color");
|
public static final Type<Integer> Color = new Type<>("color");
|
||||||
public static final Type<Picker> Picker = new Type<>("picker");
|
public static final Type<Picker> Picker = new Type<>("picker");
|
||||||
|
public static final Type<Timeline> Timeline = new Type<>("timeline");
|
||||||
|
|
||||||
private final String mName;
|
private final String mName;
|
||||||
|
|
||||||
@@ -108,4 +116,84 @@ public class InspectorValue<T> implements FlipperValue {
|
|||||||
return b.toString();
|
return b.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A widget that represents a timeline. Each point has a moment to be placed on the timeline, and
|
||||||
|
* a key to be identified as. The current field represents the key of the point in the timeline
|
||||||
|
* that matches the current moment in time.
|
||||||
|
*/
|
||||||
|
public static final class Timeline {
|
||||||
|
public final List<TimePoint> time;
|
||||||
|
public final String current;
|
||||||
|
|
||||||
|
public Timeline(List<TimePoint> time, String current) {
|
||||||
|
Collections.sort(
|
||||||
|
time,
|
||||||
|
new Comparator<TimePoint>() {
|
||||||
|
@Override
|
||||||
|
public int compare(TimePoint stringTimePointEntry, TimePoint t1) {
|
||||||
|
return Float.compare(stringTimePointEntry.moment, t1.moment);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.time = time;
|
||||||
|
this.current = current;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JSONObject toJson() {
|
||||||
|
final JSONArray points = new JSONArray();
|
||||||
|
for (TimePoint value : time) {
|
||||||
|
points.put(value.toJson());
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return new JSONObject().put("time", points).put("current", current);
|
||||||
|
} catch (JSONException t) {
|
||||||
|
throw new RuntimeException(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return toJson().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An entry in the timeline, identified by its key. They're sorted in Flipper by moment, and are
|
||||||
|
* rendered according to the display and color. Any additional properties attached to the point
|
||||||
|
* will be displayed when it's selected.
|
||||||
|
*/
|
||||||
|
public static final class TimePoint {
|
||||||
|
public final long moment;
|
||||||
|
public final String display;
|
||||||
|
public final String color;
|
||||||
|
public final String key;
|
||||||
|
public final Map<String, String> properties;
|
||||||
|
|
||||||
|
public TimePoint(
|
||||||
|
String key, long moment, String display, String color, Map<String, String> properties) {
|
||||||
|
this.key = key;
|
||||||
|
this.moment = moment;
|
||||||
|
this.display = display;
|
||||||
|
this.color = color;
|
||||||
|
this.properties = properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JSONObject toJson() {
|
||||||
|
try {
|
||||||
|
return new JSONObject()
|
||||||
|
.put("moment", moment)
|
||||||
|
.put("display", display)
|
||||||
|
.put("color", color)
|
||||||
|
.put("key", key)
|
||||||
|
.put("properties", new JSONObject(properties));
|
||||||
|
} catch (JSONException t) {
|
||||||
|
throw new RuntimeException(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return toJson().toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user