/* * Copyright 2016 Flipkart Internet Pvt. Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.flipkart.android.proteus.demo.performance; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.view.PagerAdapter; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.Adapter; import android.widget.FrameLayout; import com.flipkart.android.proteus.EventType; import com.flipkart.android.proteus.ImageLoaderCallback; import com.flipkart.android.proteus.builder.DataAndViewParsingLayoutBuilder; import com.flipkart.android.proteus.builder.LayoutBuilderCallback; import com.flipkart.android.proteus.builder.LayoutBuilderFactory; import com.flipkart.android.proteus.demo.R; import com.flipkart.android.proteus.toolbox.BitmapLoader; import com.flipkart.android.proteus.toolbox.Styles; import com.flipkart.android.proteus.view.ProteusView; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.util.List; import java.util.Map; import java.util.concurrent.Future; public class ProteusActivity extends BaseActivity { private ProteusView proteusView; private Gson gson; private DataAndViewParsingLayoutBuilder builder; private FrameLayout container; private JsonObject pageLayout; private JsonObject data; private ViewGroup.LayoutParams layoutParams; private Styles styles; private BitmapLoader bitmapLoader = new BitmapLoader() { @Override public Future<Bitmap> getBitmap(String imageUrl, View view) { return null; } @Override public void getBitmap(String imageUrl, final ImageLoaderCallback callback, View view, JsonObject layout) { URL url; try { url = new URL(imageUrl); } catch (MalformedURLException e) { e.printStackTrace(); return; } new AsyncTask<URL, Integer, Bitmap>() { @Override protected Bitmap doInBackground(URL... params) { try { return BitmapFactory.decodeStream(params[0].openConnection().getInputStream()); } catch (IOException e) { e.printStackTrace(); } return null; } protected void onPostExecute(Bitmap result) { callback.onResponse(result); } }.execute(url); } }; private LayoutBuilderCallback callback = new LayoutBuilderCallback() { @Override public void onUnknownAttribute(String attribute, JsonElement value, ProteusView view) { Log.i("unknown-attribute", attribute + " in " + view.getViewManager().getLayout().toString()); } @Nullable @Override public ProteusView onUnknownViewType(String type, View parent, JsonObject layout, JsonObject data, int index, Styles styles) { return null; } @Override public JsonObject onLayoutRequired(String type, ProteusView parent) { return null; } @Override public void onViewBuiltFromViewProvider(ProteusView view, View parent, String type, int index) { } @Override public View onEvent(ProteusView view, JsonElement value, EventType eventType) { Log.d("event", value.toString()); return (View) view; } @Override public PagerAdapter onPagerAdapterRequired(ProteusView parent, List<ProteusView> children, JsonObject layout) { return null; } @Override public Adapter onAdapterRequired(ProteusView parent, List<ProteusView> children, JsonObject layout) { return null; } }; @Override protected void onCreate(Bundle savedInstanceState) { gson = new Gson(); styles = gson.fromJson(getJsonFromFile(R.raw.styles).getAsJsonObject(), Styles.class); Map<String, JsonObject> layoutProvider = getProviderFromFile(R.raw.layout_provider); pageLayout = getJsonFromFile(R.raw.page_layout).getAsJsonObject(); data = getJsonFromFile(R.raw.data_init).getAsJsonObject(); builder = new LayoutBuilderFactory().getDataAndViewParsingLayoutBuilder(layoutProvider); builder.setListener(callback); builder.setBitmapLoader(bitmapLoader); container = new FrameLayout(ProteusActivity.this); layoutParams = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ); super.onCreate(savedInstanceState); } @Override View createAndBindView() { proteusView = builder.build(container, pageLayout, data, 0, styles); return (View) proteusView; } @Override void attachView(View view) { container.addView((View) proteusView, layoutParams); setContentView(container); } @Override void onBuildComplete(long time) { com.flipkart.android.proteus.demo.performance.PerformanceTracker.instance(this).updateProteusRenderTime(time); } private JsonElement getJsonFromFile(int resId) { InputStream inputStream = getResources().openRawResource(resId); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); return gson.fromJson(reader, JsonElement.class); } private Map<String, JsonObject> getProviderFromFile(int resId) { InputStream inputStream = getResources().openRawResource(resId); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); return gson.fromJson(reader, (new TypeToken<Map<String, JsonObject>>() { }).getType()); } }