package com.masterofcode.android.magreader;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.ActionBar;
import android.app.ActionBar.OnNavigationListener;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.FragmentTransaction;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.SearchView;
import com.masterofcode.android.magreader.adapters.GridOfLibraryItemsAdapter;
import com.masterofcode.android.magreader.bookmarks.BookmarksManager;
import com.masterofcode.android.magreader.db.entity.LibraryItem;
import com.masterofcode.android.magreader.library.LibraryManager;
import com.masterofcode.android.magreader.utils.ActionBarView;
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 MainLibraryActivity extends Activity {
private static final int DIALOG_DELETE_ISSUE_ID = 1;
private static final int DIALOG_DOWNLOAD_ISSUE_ID = 2;
private static final int DIALOG_BOOKMARK_ISSUE_ID = 3;
private int RESOURCE_COPYING = 1;
private int THREAD_PROGRESS = 0;
private int THREAD_FINISH = 1;
private Context mContext;
private ProgressDialog copyingProgessDialog;
private boolean isLoadData = false;
private List<LibraryItem> items = null;
private GridView gridView;
private GridOfLibraryItemsAdapter gridAdapter;
private ProgressDialog progressDialog;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.library_view);
mContext = this;
ActionBar actionBar = getActionBar();
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
actionBar.setListNavigationCallbacks(ArrayAdapter.createFromResource(this, R.array.menu_categories,
android.R.layout.simple_dropdown_item_1line), navigationListener);
ActionBarView.setActionBarListView(actionBar, mContext);
actionBar.setSelectedNavigationItem(1);
} else {
actionBar.addTab(actionBar.newTab().setText(R.string.action_bar_feeds).setTabListener(feedsTabListener), false);
actionBar.addTab(actionBar.newTab().setText(R.string.action_bar_library).setTabListener(libraryTabListener), true);
actionBar.addTab(actionBar.newTab().setText(R.string.action_bar_shop).setTabListener(shopTabListener), false);
actionBar.addTab(actionBar.newTab().setText(R.string.action_bar_bookmarks).setTabListener(bookmarkTabListener), false);
ActionBarView.setActionBarTabView(actionBar, mContext);
}
// test
// Log.i("---", "path="+LibraryManager.GetInstance().libraryPath(this));
//copyResourceMagazines();
//new DownloadManager(mContext).downloadCoversPurchasedIssues();
//Moved to MainActivity now since we need to install the issues not only when we
//enter the lib view, we also need to have them installed when entering the shop view
//LibraryManager.GetInstance().copyCoversFromRes(mContext);
gridView = (GridView) findViewById(R.id.issues_gridview);
gridView.setOnItemClickListener(gridViewItemClickListener);
gridView.setOnItemLongClickListener(gridViewItemLongClickListener);
handler = new Handler() {
public void handleMessage(Message msg) {
progressDialog.dismiss();
gridAdapter.notifyDataSetChanged();
}
};
}
private OnItemClickListener gridViewItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
if (position < items.size()){
if(items.get(position).isDownloaded){
Log.i("---", "clicked on="+items.get(position).magazine_filepath);
Intent intent = new Intent(MainLibraryActivity.this, EpubViewerActivity.class);
intent.putExtra(Constants.BUNDLE_KEY_EPUB_FILE_PATH, items.get(position).magazine_filepath);
intent.putExtra(Constants.BUNDLE_KEY_EPUB_COVER_FILE_PATH, items.get(position).magazine_cover_filepath);
startActivity(intent);
} else{
onCreateDialog(DIALOG_DOWNLOAD_ISSUE_ID, position);
}
}
}
};
private OnItemLongClickListener gridViewItemLongClickListener = new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position, long id) {
if(position < items.size() && items.get(position).isDownloaded){
onCreateDialog(DIALOG_DELETE_ISSUE_ID, position);
}
return false;
}
};
private void loadLibrary()
{
if(isLoadData)isLoadData = false;
new getLibraryItemsAsyncTask().execute();
}
@Override
protected void onResume() {
super.onResume();
loadLibrary();
}
private class getLibraryItemsAsyncTask extends AsyncTask<Integer, Void, List<LibraryItem>> {
@Override
protected List<LibraryItem> doInBackground(Integer... params) {
if (!isLoadData) {
List<LibraryItem> libraryItems = null;
libraryItems = LibraryManager.GetInstance().queryLibraryItems();
isLoadData = true;
return libraryItems;
} else {
return items;
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
if(isLoadData)return;
// bookmarksProgressBar.setVisibility(View.VISIBLE);
// bookmarksListView.setAdapter(null);
}
@Override
protected void onPostExecute(List<LibraryItem> libraryItemsList) {
super.onPostExecute(libraryItemsList);
// bookmarksProgressBar.setVisibility(View.GONE);
if(libraryItemsList==null)libraryItemsList = new ArrayList<LibraryItem>();
items = libraryItemsList;
Log.i("---", "post");
for(int i=0; i<items.size();i++)
{
Log.i("---", "path="+items.get(i).magazine_filepath);
}
// bookmarksAdapter = new ListOfBookmarksAdapter(mContext, R.layout.bookmarks_list_item, items, (Activity) mContext);
// bookmarksListView.setAdapter(bookmarksAdapter);
gridAdapter = new GridOfLibraryItemsAdapter(mContext, items, (Activity) mContext);
gridView.setAdapter(gridAdapter);
}
}
OnNavigationListener navigationListener = new OnNavigationListener() {
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
switch (itemPosition) {
case 0:
Intent feedIntent = new Intent();
feedIntent.setClass(mContext, MainActivity.class);
startActivity(feedIntent);
finish();
break;
case 2:
Intent shopIntent = new Intent();
shopIntent.setClass(mContext, MainShopActivity.class);
startActivity(shopIntent);
finish();
break;
case 3:
Intent bookmarkIntent = new Intent();
bookmarkIntent.setClass(mContext, MainBookmarkActivity.class);
startActivity(bookmarkIntent);
finish();
break;
}
return false;
}
};
TabListener feedsTabListener = new TabListener() {
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
Intent feedIntent = new Intent();
feedIntent.setClass(mContext, MainActivity.class);
startActivity(feedIntent);
finish();
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {}
};
TabListener libraryTabListener = new TabListener() { //for this tab we have empty tabListener
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {}
};
TabListener shopTabListener = new TabListener() {
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
Intent shopIntent = new Intent();
shopIntent.setClass(mContext, MainShopActivity.class);
startActivity(shopIntent);
finish();
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {}
};
TabListener bookmarkTabListener = new TabListener() {
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
Intent bookmarkIntent = new Intent();
bookmarkIntent.setClass(mContext, MainBookmarkActivity.class);
startActivity(bookmarkIntent);
finish();
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {}
};
Handler progressHandler = new Handler()
{
public void handleMessage(Message msg)
{
if (msg.what==RESOURCE_COPYING)
{
if(msg.arg1==THREAD_FINISH)
{
copyingProgessDialog.dismiss();
loadLibrary();
} else {
copyingProgessDialog.setProgress(msg.arg2);
}
}
}
};
protected void onCreateDialog(int id, int issuePosition) {
switch (id) {
case DIALOG_DELETE_ISSUE_ID:
createDialog(R.string.delete_issue_dialog_title, R.string.delete_issue_dialog_message, issuePosition, android.R.drawable.stat_sys_warning, id).show();
return;
case DIALOG_DOWNLOAD_ISSUE_ID:
createDialog(R.string.download_issue_dialog_title, R.string.download_issue_dialog_message, issuePosition, android.R.drawable.stat_sys_download, id).show();
return;
case DIALOG_BOOKMARK_ISSUE_ID:
createDialog(R.string.bookmark_issue_dialog_title, R.string.bookmark_issue_dialog_message, issuePosition, android.R.drawable.stat_sys_warning, id).show();
return;
default:
return;
}
}
private Dialog createDialog(final int dialogTitle, final int dialogMessage, final int position, final int dialogIcon, final int dialogId) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainLibraryActivity.this);
builder.setTitle((MainLibraryActivity.this).getString(dialogTitle))
.setIcon(dialogIcon)
.setMessage((MainLibraryActivity.this).getString(dialogMessage))
.setCancelable(false)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(dialogId == DIALOG_DOWNLOAD_ISSUE_ID)
{
//download issue here
if(items.get(position).magazine_type == Constants.MAGAZINE_TYPE_FROM_RESOURCES)
{
LibraryManager.GetInstance().copyMagazineFromResources(MainLibraryActivity.this, items.get(position).magazine_filepath.substring(items.get(position).magazine_filepath.lastIndexOf("/") + 1, items.get(position).magazine_filepath.length()));
} else if(items.get(position).magazine_type == Constants.MAGAZINE_TYPE_NORMAL) {
if(ApplicationUtils.isOnline(MainLibraryActivity.this)){
Log.d("deleteIssue", "download issue="+items.get(position).magazine_url + " items." + items.get(position).magazine_title);
LibraryManager.GetInstance().downloadMagazine(MainLibraryActivity.this, items.get(position));
} else {
ApplicationUtils.createNoInternetDialog(MainLibraryActivity.this).show();
}
}
gridAdapter.notifyDataSetChanged();
} else if(dialogId == DIALOG_DELETE_ISSUE_ID)
{
String magazineName = items.get(position).magazine_filepath;
int pos = magazineName.lastIndexOf(File.separator);
if(pos!=-1)
{
magazineName = magazineName.substring(pos + 1);
}
if(BookmarksManager.GetInstance().isMagazineHasBookmarks(mContext, magazineName))
{
onCreateDialog(DIALOG_BOOKMARK_ISSUE_ID, position);
} else {
//remove issue from sd
Log.d("deleteIssue", "delete issue="+items.get(position).magazine_url + " items." + items.get(position).magazine_title);
progressDialog = ProgressDialog.show(MainLibraryActivity.this, null,
"Deleting. Please wait...", true);
Thread startRemoving = new Thread() {
public void run() {
LibraryManager.GetInstance().deleteMagazine(MainLibraryActivity.this, items.get(position));
handler.sendEmptyMessage(0);
}
};
startRemoving.start();
}
} else if(dialogId == DIALOG_BOOKMARK_ISSUE_ID)
{
String magazineName = items.get(position).magazine_filepath;
int pos = magazineName.lastIndexOf(File.separator);
if(pos!=-1)
{
magazineName = magazineName.substring(pos + 1);
}
BookmarksManager.GetInstance().removeMagazineBookmarks(mContext, magazineName);
Log.d("deleteIssue", "delete issue="+items.get(position).magazine_url + " items." + items.get(position).magazine_title);
progressDialog = ProgressDialog.show(MainLibraryActivity.this, null,
"Deleting. Please wait...", true);
Thread startRemoving = new Thread() {
public void run() {
LibraryManager.GetInstance().deleteMagazine(MainLibraryActivity.this, items.get(position));
handler.sendEmptyMessage(0);
}
};
startRemoving.start();
}
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
return builder.create();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.library_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
super.onPrepareOptionsMenu(menu);
//search
final SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
searchView.setIconified(true);
Intent intent = new Intent(MainLibraryActivity.this, SearchActivity.class);
intent.putExtra(Constants.BUNDLE_KEY_SEARCH_KEYWORD, query);
intent.putExtra(Constants.BUNDLE_KEY_SEARCH_TYPE, Constants.SEARCH_TYPE_LIBRARY);
startActivity(intent);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
return true;
}
}