package in.sahildave.gazetti.homescreen; import android.app.Activity; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.view.*; import android.view.ContextMenu.ContextMenuInfo; import android.view.View.OnClickListener; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.ImageView; import com.crashlytics.android.Crashlytics; import com.flaviofaria.kenburnsview.KenBurnsView; import com.nhaarman.listviewanimations.appearance.simple.AlphaInAnimationAdapter; import com.nhaarman.listviewanimations.appearance.simple.SwingBottomInAnimationAdapter; import com.squareup.picasso.Picasso; import com.squareup.picasso.RequestCreator; import in.sahildave.gazetti.R; import in.sahildave.gazetti.homescreen.adapter.CellModel; import in.sahildave.gazetti.homescreen.adapter.GridAdapter; import in.sahildave.gazetti.news_activities.WebsiteListActivity; import in.sahildave.gazetti.util.BitmapTransform; import in.sahildave.gazetti.util.NewsCatFileUtil; import in.sahildave.gazetti.util.UserPrefUtil; import in.sahildave.gazetti.widget.fab.PlusFloatingActionButton; import in.sahildave.gazetti.widget.fab.FloatingActionButton; import in.sahildave.gazetti.widget.fab.FloatingActionsMenu; import java.util.List; import java.util.Random; public class HomeScreenFragment extends Fragment { private Callbacks activityCallback; private GridView gridview; private List<CellModel> cellList; private GridAdapter adapter; private String LOG_TAG = HomeScreenFragment.class.getName(); private boolean phoneMode; private View actionBarCustomView; private ImageView phoneBackgroundImage; private KenBurnsView kenBurnsView; private Activity activity; private PlusFloatingActionButton fabAddNew; private FloatingActionButton fabBookmark; private FloatingActionButton fabEditFeeds; private FloatingActionsMenu fabMenu; public HomeScreenFragment() { } public void refreshCellGrid() { if (NewsCatFileUtil.getInstance(getActivity()).isUserPrefChanged()) { NewsCatFileUtil.getInstance(getActivity()).setUserPrefChanged(false); if(cellList!=null){ cellList.clear(); } setupCellGrid(); } } public interface Callbacks { public void showAddNewCellDialog(List<CellModel> cellList, GridAdapter adapter); public void showEditCellDialog(int position, String newspaper, String category, List<CellModel> cellList, GridAdapter adapter); public void openEditFeedSettings(); public void startBookmarkActivity(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); try { activityCallback = (Callbacks) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement ToolbarListener"); } this.activity = activity; } @Override public void onResume() { super.onResume(); refreshCellGrid(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.homescreen_fragment, container, false); ActionBar actionBar = ((AppCompatActivity) activity).getSupportActionBar(); actionBarCustomView = actionBar.getCustomView(); gridview = (GridView) rootView.findViewById(R.id.gridview); phoneBackgroundImage = (ImageView) rootView.findViewById(R.id.phone_homescreen_background); fabMenu = (FloatingActionsMenu) rootView.findViewById(R.id.floating_action_menu); fabAddNew = (PlusFloatingActionButton) rootView.findViewById(R.id.fab_add_new_cell); fabBookmark = (FloatingActionButton) rootView.findViewById(R.id.fab_bookmark); fabEditFeeds = (FloatingActionButton) rootView.findViewById(R.id.fab_edit_feeds); return rootView; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setupImageBackground(view); setupCellGrid(); registerForContextMenu(gridview); setupFab(); gridview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { CellModel clickedObject = cellList.get(position); String npId = clickedObject.getNewspaperId(); String catId = clickedObject.getCategoryId(); String npName = clickedObject.getNewspaperTitle(); String catName = clickedObject.getCategoryTitle(); npId = String.valueOf(Integer.parseInt(npId) + 1); Intent headlinesIntent = new Intent(getActivity(), WebsiteListActivity.class); headlinesIntent.putExtra("npId", npId); headlinesIntent.putExtra("catId", catId); headlinesIntent.putExtra("npName", npName); headlinesIntent.putExtra("catName", catName); startActivity(headlinesIntent); } }); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (phoneMode) { gridview.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) {} @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem != 0) { return; } if (null != gridview.getChildAt(0)) { int actionBarTopMargin = gridview.getChildAt(0).getTop() - actionBarCustomView.getHeight(); if (actionBarTopMargin < ((-1) * actionBarCustomView.getHeight())) { actionBarTopMargin = ((-1) * actionBarCustomView.getHeight()); } actionBarCustomView.setTranslationY(actionBarTopMargin); } } }); } } private void setupFab() { fabAddNew.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { fabMenu.collapse(); activityCallback.showAddNewCellDialog(cellList, adapter); } }); fabBookmark.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { fabMenu.collapse(); activityCallback.startBookmarkActivity(); } }); fabEditFeeds.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { fabMenu.collapse(); activityCallback.openEditFeedSettings(); } }); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { fabMenu.setVisibility(View.VISIBLE); } }, 500); } private void setupCellGrid() { // Log.d(LOG_TAG, "Setting up cell grid"); cellList = UserPrefUtil.getInstance(getActivity()).getUserPrefCellList(); adapter = new GridAdapter(getActivity(), cellList); SwingBottomInAnimationAdapter animAdapter = new SwingBottomInAnimationAdapter(adapter); AlphaInAnimationAdapter animAdapterMultiple = new AlphaInAnimationAdapter(animAdapter); animAdapterMultiple.setAbsListView(gridview); gridview.setAdapter(animAdapterMultiple); } private void setupImageBackground(View view) { kenBurnsView = (KenBurnsView) view.findViewById(R.id.kenBurnsView_Background); phoneMode = (kenBurnsView == null); //height and width of screen final int MAX_HEIGHT = getResources().getDisplayMetrics().heightPixels; final int MAX_WIDTH = getResources().getDisplayMetrics().widthPixels; try { new AsyncTask<Void, Void, Integer>(){ @Override protected Integer doInBackground(Void... params) { if (phoneMode) { return getPhoneBackground(); } else { return getTabletBackground(); } } @Override protected void onPostExecute(Integer resID) { RequestCreator requestCreator = Picasso.with(getActivity()) .load(resID) .transform(new BitmapTransform(MAX_WIDTH, MAX_HEIGHT)); if(phoneMode){ requestCreator.into(phoneBackgroundImage); } else { requestCreator.into(kenBurnsView); } } }.execute(); } catch (Exception e) { Crashlytics.logException(e); } } private int getTabletBackground() { Random rand = new Random(); int n = rand.nextInt(3); String backgroundImageUri = "land_" + n; int resID = getResources().getIdentifier(backgroundImageUri, "drawable", getActivity().getPackageName()); if (resID == 0) { resID = getResources().getIdentifier("land_0", "drawable", getActivity().getPackageName()); } // Log.d(LOG_TAG, "returning "+resID+" for "+n); return resID; } private int getPhoneBackground() { // get a random image, if null then get image_0 Random rand = new Random(); int n = rand.nextInt(3); String backgroundImageUri = "port_" + n; int resID = getResources().getIdentifier(backgroundImageUri, "drawable", getActivity().getPackageName()); if (resID == 0) { resID = getResources().getIdentifier("port_0", "drawable", getActivity().getPackageName()); } // Log.d(LOG_TAG, "returning "+resID+" for "+n); return resID; } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getActivity().getMenuInflater(); inflater.inflate(R.menu.gridview_context_menu, menu); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); int position = info.position; String newspaper = cellList.get(position).getNewspaperImage(); String category = cellList.get(position).getCategoryTitle(); switch (item.getItemId()) { case R.id.edit: activityCallback.showEditCellDialog(position, newspaper, category, cellList, adapter); return true; case R.id.delete: UserPrefUtil.getInstance(getActivity()).deleteUserPref(cellList.get(position)); cellList.remove(position); adapter.notifyDataSetChanged(); return true; default: return super.onContextItemSelected(item); } } }