package org.itsnat.itsnatdroidtest.testact.local; import android.content.Context; import android.content.res.AssetManager; import android.util.DisplayMetrics; import android.view.View; import android.widget.Toast; import org.itsnat.droid.InflateLayoutRequest; import org.itsnat.droid.InflatedLayout; import org.itsnat.droid.ItsNatDroidException; import org.itsnat.droid.ItsNatDroidRoot; import org.itsnat.itsnatdroidtest.R; import org.itsnat.itsnatdroidtest.testact.TestActivity; import org.itsnat.itsnatdroidtest.testact.TestActivityTabFragment; import org.itsnat.itsnatdroidtest.testact.TestSetupBase; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; /** * Created by jmarranz on 16/07/14. */ public abstract class TestSetupLocalLayoutBase extends TestSetupBase { public static final String internLocationBase = "intern"; protected final TestActivityTabFragment fragment; public TestSetupLocalLayoutBase(final TestActivityTabFragment fragment) { this.fragment = fragment; } protected TestActivity getTestActivity() { return fragment.getTestActivity(); } protected InflatedLayout loadAssetAndBindBackReloadButtons(String layoutAssetPath) { return loadDynamicAndBindBackReloadButtons(layoutAssetPath,true); } protected InflatedLayout loadInternAndBindBackReloadButtons(String layoutInternPath) { return loadDynamicAndBindBackReloadButtons(layoutInternPath,false); } protected InflatedLayout loadDynamicAndBindBackReloadButtons(String layoutAssetOrInternPath,boolean asset) { // Sólo para testear carga local TestActivity act = getTestActivity(); AssetManager am = act.getResources().getAssets(); InputStream input; try { if (asset) { input = am.open(layoutAssetOrInternPath); } else // intern { File rootDir = act.getDir(internLocationBase, Context.MODE_PRIVATE); File locationFile = new File(rootDir.getAbsolutePath(),layoutAssetOrInternPath); input = new FileInputStream(locationFile); } } catch (IOException e) { throw new ItsNatDroidException(e); } // Alternativa es poner los layout root en raw: InputStream input = act.getResources().openRawResource(rawResId); // el problema es que raw no deja formar árboles de recursos con directorios, es mejor assets InflateLayoutRequest inflateRequest = ItsNatDroidRoot.get().createInflateLayoutRequest(); InflatedLayout layout = inflateRequest .setEncoding("UTF-8") .setBitmapDensityReference(DisplayMetrics.DENSITY_XHIGH) // 320 .setAttrResourceInflaterListener(this) .setContext(act) .inflate(input,null); View dynamicRootView = layout.getRootView(); changeLayout(fragment, dynamicRootView); Toast.makeText(act, "OK XML DYNAMIC", Toast.LENGTH_SHORT).show(); bindBackButton(dynamicRootView); bindReloadButtonDynamic(dynamicRootView); return layout; } protected void bindBackButton(View rootView) { View backButton = rootView.findViewById(R.id.back); backButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { fragment.gotoLayoutIndex(); } }); } protected void bindReloadButtonDynamic(View dynamicRootView) { View buttonReload = dynamicRootView.findViewById(R.id.buttonReload); buttonReload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { test(); } }); } protected static void changeLayout(TestActivityTabFragment fragment,View rootView) { fragment.setRootView(rootView); fragment.updateFragmentLayout(); } public abstract void test(); }