package com.commonsware.empublite; import android.app.Activity; import android.app.Fragment; import android.content.res.AssetManager; import android.os.Bundle; import android.os.Process; import android.util.Log; import com.google.gson.Gson; import org.greenrobot.eventbus.EventBus; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.concurrent.atomic.AtomicReference; public class ModelFragment extends Fragment { final private AtomicReference<BookContents> contents= new AtomicReference<>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } @Override public void onAttach(Activity host) { super.onAttach(host); if (contents.get()==null) { new LoadThread(host.getAssets()).start(); } } public BookContents getBook() { return(contents.get()); } private class LoadThread extends Thread { private AssetManager assets=null; LoadThread(AssetManager assets) { super(); this.assets=assets; } @Override public void run() { Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); Gson gson=new Gson(); try { InputStream is=assets.open("book/contents.json"); BufferedReader reader= new BufferedReader(new InputStreamReader(is)); contents.set(gson.fromJson(reader, BookContents.class)); EventBus.getDefault().post(new BookLoadedEvent(getBook())); } catch (IOException e) { Log.e(getClass().getSimpleName(), "Exception parsing JSON", e); } } } }