package com.masterofcode.android.magreader.fragments; import java.util.ConcurrentModificationException; import java.util.List; import org.kroz.activerecord.ActiveRecordBase; import org.kroz.activerecord.ActiveRecordException; import android.app.Fragment; import android.app.FragmentTransaction; import android.content.res.Configuration; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.LinearLayout; import android.widget.ProgressBar; import com.masterofcode.android.magreader.MainShopActivity; import com.masterofcode.android.magreader.adapters.GridOfIssuesAdapter; import com.masterofcode.android.magreader.application.JtjApplication; import com.masterofcode.android.magreader.db.entity.IssueItem; import com.masterofcode.android.magreader.utils.ApplicationUtils; import com.masterofcode.android.magreader.utils.constants.Constants; import com.sandsmedia.apps.mobile.android.epub.lib.R; public class ShopGridForViewFragment extends Fragment { private static final String DB_INITIALIZED = "db_initialized"; private GridOfIssuesAdapter issueAdapter; private List<IssueItem> mIssues; private ActiveRecordBase _db; private int mCurCheckPosition = -1; private View detailsFrameLand; private View detailsFramePort; private GridView gridView; public static boolean isLandDetailShow = false; public static boolean isPortDetailShow = false; private ProgressBar shopProgressBar; private LinearLayout shoploadingLayout; private Handler mHandler; private static ShopGridForViewFragment Instance = null; public static ShopGridForViewFragment getInstance(){ return Instance; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Constants.Debug) Log.d("purchase_test", "in onCreate() "); mHandler = new Handler(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View returnView = inflater.inflate(R.layout.shop_issues_grid, container, false); return returnView; } @SuppressWarnings("unchecked") @Override public void onActivityCreated(Bundle savedInstance) { super.onActivityCreated(savedInstance); // Check to see if we have a frame in which to embed the details // fragment directly in the containing UI. detailsFrameLand = getActivity().findViewById(R.id.issue_details_container); detailsFramePort = getActivity().findViewById(R.id.issue_details_container_port); shoploadingLayout = (LinearLayout) getActivity().findViewById(R.id.shoploadingLayout); if (Constants.Debug) Log.d("purchase_test", "in onActivityCreated() mIssues size: "); if (getmCurCheckPosition() != -1) { showDetails(getmCurCheckPosition()); } } @Override public void onResume(){ super.onResume(); if (Constants.Debug) Log.d("purchase_test", "in Resume() " ); gridView = (GridView) getView(); gridView.setAdapter(null); getIssueList(); Instance = this; if (mIssues != null && mIssues.size() >= 0) shoploadingLayout.setVisibility(View.GONE); } private void prepareShopGrid(){ View view = getView(); gridView = (GridView) getView(); if (gridView != null){ gridView.setAdapter(null); if (mIssues.size() == 0) gridView.setAdapter(null); else{ issueAdapter = new GridOfIssuesAdapter(getActivity().getApplicationContext(), mIssues, getActivity()); gridView.setAdapter(issueAdapter); gridView.setOnItemClickListener(gridViewItemClickListener); } } shoploadingLayout.setVisibility(View.GONE); } public void updateAdapter(List<IssueItem> mIssues){ if (Constants.Debug) Log.d("purchase_test", "purchase_test updateAdapter" + mIssues.toString()); gridView.setAdapter(null); issueAdapter = new GridOfIssuesAdapter(getActivity().getApplicationContext(), mIssues, getActivity()); gridView.setAdapter(issueAdapter); gridView.setOnItemClickListener(gridViewItemClickListener); shoploadingLayout.setVisibility(View.GONE); } public GridOfIssuesAdapter getIssueAdapter() { return issueAdapter; } private OnItemClickListener gridViewItemClickListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { generateArrayListToAdapter(); if (Constants.Debug) Log.d("purchase_test", "in onItemClick() mIssues size: " + mIssues.size() + " position = " + position); if (position < mIssues.size()){ showDetails(position); } } }; public int getmCurCheckPosition() { return mCurCheckPosition; } public void setmCurCheckPosition(int mCurCheckPosition) { this.mCurCheckPosition = mCurCheckPosition; } /** * Helper function to show the details of a selected item, either by * displaying a fragment in-place in the current UI, or starting a * whole new activity in which it is displayed. */ public void showDetails(int index) { ((MainShopActivity) getActivity()).setmCurrentItemPosition(index); ((MainShopActivity) getActivity()).setClicedItem(true); mCurCheckPosition = index; if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){ isLandDetailShow = false; isPortDetailShow = detailsFramePort != null; //isPortDetailShow = true; } else { isLandDetailShow = detailsFrameLand != null; //isLandDetailShow = true; isPortDetailShow = false; } // Check what fragment is currently shown, replace if needed. IssueDetailsFragment issueDetailsFragment = (IssueDetailsFragment) getFragmentManager().findFragmentById(R.id.issue_details_fragment); if (issueDetailsFragment == null || issueDetailsFragment.getShownIndex() != index) { // Make new fragment to show this selection. issueDetailsFragment = IssueDetailsFragment.newInstance(index); // Execute a transaction, replacing any existing fragment // with this one inside the frame. FragmentTransaction ft = getFragmentManager().beginTransaction(); if (detailsFrameLand != null){ detailsFrameLand.setVisibility(View.VISIBLE); ft.replace(R.id.issue_details_container, issueDetailsFragment); } else if (detailsFramePort != null){ detailsFramePort.setVisibility(View.VISIBLE); //gridView.setColumnWidth(1200); ShopGalleryForViewFragment shopGalleryForViewFragment = (ShopGalleryForViewFragment)getFragmentManager().findFragmentById(R.id.issue_details_gallery_fragment); shopGalleryForViewFragment = ShopGalleryForViewFragment.newInstance(index); ft.replace(R.id.issue_container_port, shopGalleryForViewFragment); ft.replace(R.id.issue_details_container_port, issueDetailsFragment); } ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } } public void getIssueList(){ if(ApplicationUtils.getPrefProperty(getActivity(), DB_INITIALIZED)){ if (Constants.Debug) Log.d("purchase_test", "DB_INITIALIZED is true... "); generateArrayListToAdapter(); prepareShopGrid(); }else{ if (Constants.Debug) Log.d("purchase_test", "DB_INITIALIZED is false... "); shoploadingLayout.setVisibility(View.VISIBLE); mHandler.postDelayed(new Runnable() { public void run() { if (Constants.Debug) Log.d("purchase_test", "Start for generating list of issues... "); generateArrayListToAdapter(); prepareShopGrid(); } }, 7000); } } private void generateArrayListToAdapter(){ try { _db = ((JtjApplication)getActivity().getApplication()).getDatabase(); _db.open(); mIssues = _db.find(IssueItem.class, false, "_id>?", new String[] { String.valueOf("0") }, null, null, null, null); } catch (ActiveRecordException exc) { exc.printStackTrace(); } catch (ConcurrentModificationException exc) { exc.printStackTrace(); } catch (Exception exc) { exc.printStackTrace(); } } }