Android: add doric panel list
This commit is contained in:
parent
75aec7f78d
commit
598634e0dc
@ -28,6 +28,10 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".DoricDebugTimingActivity"
|
android:name=".DoricDebugTimingActivity"
|
||||||
android:theme="@style/Theme.Design.Light.NoActionBar" />
|
android:theme="@style/Theme.Design.Light.NoActionBar" />
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name=".DoricPanelListActivity"
|
||||||
|
android:theme="@style/Theme.Design.Light.NoActionBar" />
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
@ -0,0 +1,137 @@
|
|||||||
|
package pub.doric.demo;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import pub.doric.DoricContext;
|
||||||
|
import pub.doric.DoricPanel;
|
||||||
|
import pub.doric.DoricSingleton;
|
||||||
|
import pub.doric.async.AsyncResult;
|
||||||
|
import pub.doric.navigator.IDoricNavigator;
|
||||||
|
import pub.doric.performance.DoricPerformanceProfile;
|
||||||
|
import pub.doric.utils.DoricLog;
|
||||||
|
import pub.doric.utils.DoricUtils;
|
||||||
|
|
||||||
|
public class DoricPanelListActivity extends AppCompatActivity {
|
||||||
|
@Override
|
||||||
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_doric_panel_list);
|
||||||
|
|
||||||
|
RecyclerView recyclerView = findViewById(R.id.doric_panel_rv);
|
||||||
|
recyclerView.setBackgroundColor(Color.WHITE);
|
||||||
|
recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
||||||
|
recyclerView.setNestedScrollingEnabled(true);
|
||||||
|
recyclerView.setAdapter(new MyAdapter(new String[]{
|
||||||
|
"Counter.js",
|
||||||
|
"EffectsDemo.js",
|
||||||
|
"FlowLayoutDemo.js",
|
||||||
|
"Gobang.js",
|
||||||
|
"HelloDoric.js",
|
||||||
|
"LayoutDemo.js",
|
||||||
|
"TextAnimationDemo.js",
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||||
|
|
||||||
|
private final String[] data;
|
||||||
|
private final Map<Integer, DoricPanel> panels = new HashMap<>();
|
||||||
|
private static final int PANEL_HEIGHT = 300;
|
||||||
|
final long pefStart = System.currentTimeMillis();
|
||||||
|
|
||||||
|
public MyAdapter(String[] demos) {
|
||||||
|
this.data = demos;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
DoricPanel doricPanel = new DoricPanel(parent.getContext());
|
||||||
|
doricPanel.setLayoutParams(new ViewGroup.LayoutParams(
|
||||||
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
|
DoricUtils.dp2px(PANEL_HEIGHT)));
|
||||||
|
return new RecyclerView.ViewHolder(doricPanel) {
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return super.toString();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemViewType(int position) {
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SetTextI18n")
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
|
||||||
|
if (panels.containsKey(position)) {
|
||||||
|
//TODO at here to handle on bind
|
||||||
|
} else {
|
||||||
|
panels.put(position, (DoricPanel) holder.itemView);
|
||||||
|
String source = "assets://src/" + data[position];
|
||||||
|
final String alias = "__dev__";
|
||||||
|
final String extra = "{}";
|
||||||
|
|
||||||
|
final DoricPanel doricPanel = (DoricPanel) holder.itemView;
|
||||||
|
DoricSingleton.getInstance().getJSLoaderManager().loadJSBundle(source).setCallback(new AsyncResult.Callback<String>() {
|
||||||
|
@Override
|
||||||
|
public void onResult(String result) {
|
||||||
|
doricPanel.config(result, alias, extra);
|
||||||
|
DoricContext context = doricPanel.getDoricContext();
|
||||||
|
context.setDoricNavigator(new IDoricNavigator() {
|
||||||
|
@Override
|
||||||
|
public void push(String source, String alias, String extra) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pop() {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
doricPanel.getDoricContext().getPerformanceProfile().addAnchorHook(new DoricPerformanceProfile.AnchorHook() {
|
||||||
|
@Override
|
||||||
|
public void onAnchor(String name, long prepare, long start, long end) {
|
||||||
|
if (name.equals(DoricPerformanceProfile.STEP_RENDER)) {
|
||||||
|
long cost = end - pefStart;
|
||||||
|
Log.d("Timing", "Cost " + cost + "ms");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(Throwable t) {
|
||||||
|
DoricLog.e("Doric load JS error:" + t.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFinish() {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return data.length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -34,13 +34,13 @@ import java.io.IOException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import pub.doric.DoricActivity;
|
|
||||||
import pub.doric.devkit.DoricDev;
|
import pub.doric.devkit.DoricDev;
|
||||||
import pub.doric.refresh.DoricSwipeLayout;
|
import pub.doric.refresh.DoricSwipeLayout;
|
||||||
import pub.doric.utils.DoricUtils;
|
import pub.doric.utils.DoricUtils;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity {
|
public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
@SuppressLint("SetTextI18n")
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@ -77,7 +77,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
public static class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||||
|
|
||||||
private final String[] data;
|
private final String[] data;
|
||||||
|
|
||||||
@ -95,6 +95,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
DoricUtils.dp2px(50)));
|
DoricUtils.dp2px(50)));
|
||||||
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
|
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
|
||||||
return new RecyclerView.ViewHolder(textView) {
|
return new RecyclerView.ViewHolder(textView) {
|
||||||
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return super.toString();
|
return super.toString();
|
||||||
@ -102,6 +103,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SetTextI18n")
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
|
||||||
final TextView tv = (TextView) holder.itemView;
|
final TextView tv = (TextView) holder.itemView;
|
||||||
@ -113,13 +115,22 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
DoricDev.getInstance().openDevMode();
|
DoricDev.getInstance().openDevMode();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} else if (position == 1) {
|
||||||
|
tv.setText("Doric Panel List");
|
||||||
|
tv.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent intent = new Intent(tv.getContext(), DoricPanelListActivity.class);
|
||||||
|
tv.getContext().startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
tv.setText(data[position - 1]);
|
tv.setText(data[position - 2]);
|
||||||
tv.setOnClickListener(new View.OnClickListener() {
|
tv.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Intent intent = new Intent(tv.getContext(), DoricDebugTimingActivity.class);
|
Intent intent = new Intent(tv.getContext(), DoricDebugTimingActivity.class);
|
||||||
intent.putExtra("source", "assets://src/" + data[position - 1]);
|
intent.putExtra("source", "assets://src/" + data[position - 2]);
|
||||||
//intent.putExtra("alias", data[position - 1].replace(".js", ""));
|
//intent.putExtra("alias", data[position - 1].replace(".js", ""));
|
||||||
intent.putExtra("alias", "__dev__");
|
intent.putExtra("alias", "__dev__");
|
||||||
tv.getContext().startActivity(intent);
|
tv.getContext().startActivity(intent);
|
||||||
@ -130,7 +141,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return data.length + 1;
|
return data.length + 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/doric_panel_rv"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" />
|
||||||
|
</LinearLayout>
|
Reference in New Issue
Block a user