mirror of
https://github.com/MinimalBible/MinimalBible-Legacy
synced 2024-12-22 14:48:25 -05:00
Split out DL fragments, give them D/L responsibility
This commit is contained in:
parent
4c3a2ba5b5
commit
4dc920186f
@ -0,0 +1,150 @@
|
|||||||
|
package org.bspeice.minimalbible.activities.downloader;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bspeice.minimalbible.MinimalBibleConstants;
|
||||||
|
import org.bspeice.minimalbible.R;
|
||||||
|
import org.crosswire.jsword.book.Book;
|
||||||
|
import org.crosswire.jsword.book.BookCategory;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.ProgressDialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A placeholder fragment containing a simple view.
|
||||||
|
*/
|
||||||
|
public class BookListFragment extends Fragment {
|
||||||
|
/**
|
||||||
|
* The fragment argument representing the section number for this fragment.
|
||||||
|
*/
|
||||||
|
private static final String ARG_BOOK_CATEGORY = "book_category";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a new instance of this fragment for the given section number.
|
||||||
|
*/
|
||||||
|
public static BookListFragment newInstance(BookCategory c) {
|
||||||
|
BookListFragment fragment = new BookListFragment();
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putString(ARG_BOOK_CATEGORY, c.toString());
|
||||||
|
fragment.setArguments(args);
|
||||||
|
return fragment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BookListFragment() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
Bundle savedInstanceState) {
|
||||||
|
View rootView = inflater.inflate(R.layout.fragment_download, container,
|
||||||
|
false);
|
||||||
|
TextView textView = (TextView) rootView
|
||||||
|
.findViewById(R.id.section_label);
|
||||||
|
textView.setText(getArguments().getString(ARG_BOOK_CATEGORY));
|
||||||
|
return rootView;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttach(Activity activity) {
|
||||||
|
super.onAttach(activity);
|
||||||
|
((DownloadActivity) activity).onSectionAttached(getArguments()
|
||||||
|
.getString(ARG_BOOK_CATEGORY));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void displayModules() {
|
||||||
|
DownloadManager dm = new DownloadManager();
|
||||||
|
|
||||||
|
if (dm.willRefresh()) {
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||||
|
DownloadDialogListener dialogListener = new DownloadDialogListener();
|
||||||
|
builder.setMessage(
|
||||||
|
"About to contact servers to download content. Continue?")
|
||||||
|
.setPositiveButton("Yes", dialogListener)
|
||||||
|
.setNegativeButton("No", dialogListener)
|
||||||
|
.setCancelable(false).show();
|
||||||
|
} else {
|
||||||
|
refreshModules();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void refreshModules() {
|
||||||
|
DownloadManager dm = new DownloadManager();
|
||||||
|
|
||||||
|
if (dm.willRefresh()) {
|
||||||
|
ProgressDialog refreshDialog = new ProgressDialog(getActivity());
|
||||||
|
refreshDialog.setMessage("Refreshing available modules...");
|
||||||
|
refreshDialog.setCancelable(false);
|
||||||
|
refreshDialog.show();
|
||||||
|
dm.fetchAvailableBooks(new DlBookRefreshListener(refreshDialog));
|
||||||
|
} else {
|
||||||
|
dm.fetchAvailableBooks(new DlBookRefreshListener());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class DlBookRefreshListener implements
|
||||||
|
BookRefreshTask.BookRefreshListener {
|
||||||
|
// TODO: Figure out why I need to pass in the ProgressDialog, and can't
|
||||||
|
// cancel it from onRefreshComplete.
|
||||||
|
ProgressDialog dl;
|
||||||
|
|
||||||
|
public DlBookRefreshListener(ProgressDialog dl) {
|
||||||
|
this.dl = dl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DlBookRefreshListener() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRefreshComplete(List<Book> results) {
|
||||||
|
if (dl != null) {
|
||||||
|
dl.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Book b : results) {
|
||||||
|
Log.d("DlBookRefreshListener", b.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class DownloadDialogListener implements
|
||||||
|
DialogInterface.OnClickListener {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
switch (which) {
|
||||||
|
case DialogInterface.BUTTON_POSITIVE:
|
||||||
|
// Clicked ready to continue - allow downloading in the future
|
||||||
|
SharedPreferences prefs = getActivity().getSharedPreferences(
|
||||||
|
MinimalBibleConstants.DOWNLOAD_PREFS_FILE, Context.MODE_PRIVATE);
|
||||||
|
prefs.edit()
|
||||||
|
.putBoolean(MinimalBibleConstants.KEY_DOWNLOAD_ENABLED,
|
||||||
|
true).commit();
|
||||||
|
|
||||||
|
// And warn them that it has been enabled in the future.
|
||||||
|
Toast.makeText(getActivity(),
|
||||||
|
"Downloading now enabled. Disable in settings.",
|
||||||
|
Toast.LENGTH_SHORT).show();
|
||||||
|
refreshModules();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DialogInterface.BUTTON_NEGATIVE:
|
||||||
|
// Not going to continue, still show what has
|
||||||
|
// already been downloaded.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,31 +1,15 @@
|
|||||||
package org.bspeice.minimalbible.activities.downloader;
|
package org.bspeice.minimalbible.activities.downloader;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bspeice.minimalbible.MinimalBibleConstants;
|
|
||||||
import org.bspeice.minimalbible.R;
|
import org.bspeice.minimalbible.R;
|
||||||
import org.bspeice.minimalbible.activities.BaseActivity;
|
import org.bspeice.minimalbible.activities.BaseActivity;
|
||||||
import org.bspeice.minimalbible.activities.BaseNavigationDrawerFragment;
|
import org.bspeice.minimalbible.activities.BaseNavigationDrawerFragment;
|
||||||
import org.crosswire.jsword.book.Book;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.AlertDialog;
|
|
||||||
import android.app.ProgressDialog;
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
import android.support.v4.widget.DrawerLayout;
|
import android.support.v4.widget.DrawerLayout;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
public class DownloadActivity extends BaseActivity implements
|
public class DownloadActivity extends BaseActivity implements
|
||||||
BaseNavigationDrawerFragment.NavigationDrawerCallbacks {
|
BaseNavigationDrawerFragment.NavigationDrawerCallbacks {
|
||||||
@ -54,10 +38,6 @@ public class DownloadActivity extends BaseActivity implements
|
|||||||
// Set up the drawer.
|
// Set up the drawer.
|
||||||
mNavigationDrawerFragment.setUp(R.id.navigation_drawer,
|
mNavigationDrawerFragment.setUp(R.id.navigation_drawer,
|
||||||
(DrawerLayout) findViewById(R.id.drawer_layout));
|
(DrawerLayout) findViewById(R.id.drawer_layout));
|
||||||
|
|
||||||
// Refresh our modules - prompts user if they do actually want to
|
|
||||||
// connect to the internet
|
|
||||||
doRefreshModules();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -67,21 +47,11 @@ public class DownloadActivity extends BaseActivity implements
|
|||||||
fragmentManager
|
fragmentManager
|
||||||
.beginTransaction()
|
.beginTransaction()
|
||||||
.replace(R.id.container,
|
.replace(R.id.container,
|
||||||
PlaceholderFragment.newInstance(position + 1)).commit();
|
BookListFragment.newInstance(DownloadManager.VALID_CATEGORIES[position])).commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onSectionAttached(int number) {
|
public void onSectionAttached(String category) {
|
||||||
switch (number) {
|
mTitle = category;
|
||||||
case 1:
|
|
||||||
mTitle = getString(R.string.title_section1);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
mTitle = getString(R.string.title_section2);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
mTitle = getString(R.string.title_section3);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void restoreActionBar() {
|
public void restoreActionBar() {
|
||||||
@ -115,126 +85,4 @@ public class DownloadActivity extends BaseActivity implements
|
|||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A placeholder fragment containing a simple view.
|
|
||||||
*/
|
|
||||||
public static class PlaceholderFragment extends Fragment {
|
|
||||||
/**
|
|
||||||
* The fragment argument representing the section number for this
|
|
||||||
* fragment.
|
|
||||||
*/
|
|
||||||
private static final String ARG_SECTION_NUMBER = "section_number";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a new instance of this fragment for the given section number.
|
|
||||||
*/
|
|
||||||
public static PlaceholderFragment newInstance(int sectionNumber) {
|
|
||||||
PlaceholderFragment fragment = new PlaceholderFragment();
|
|
||||||
Bundle args = new Bundle();
|
|
||||||
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
|
|
||||||
fragment.setArguments(args);
|
|
||||||
return fragment;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlaceholderFragment() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
|
||||||
Bundle savedInstanceState) {
|
|
||||||
View rootView = inflater.inflate(R.layout.fragment_download,
|
|
||||||
container, false);
|
|
||||||
TextView textView = (TextView) rootView
|
|
||||||
.findViewById(R.id.section_label);
|
|
||||||
textView.setText(Integer.toString(getArguments().getInt(
|
|
||||||
ARG_SECTION_NUMBER)));
|
|
||||||
return rootView;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttach(Activity activity) {
|
|
||||||
super.onAttach(activity);
|
|
||||||
((DownloadActivity) activity).onSectionAttached(getArguments()
|
|
||||||
.getInt(ARG_SECTION_NUMBER));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void doRefreshModules() {
|
|
||||||
SharedPreferences prefs = getSharedPreferences(
|
|
||||||
MinimalBibleConstants.DOWNLOAD_PREFS_FILE, MODE_PRIVATE);
|
|
||||||
|
|
||||||
// If downloading has not been enabled, or user has permanently disabled
|
|
||||||
// downloading, WARN THEM!
|
|
||||||
if (!prefs
|
|
||||||
.getBoolean(MinimalBibleConstants.KEY_DOWNLOAD_ENABLED, false)
|
|
||||||
|| prefs.getBoolean(
|
|
||||||
MinimalBibleConstants.KEY_PERM_DISABLE_DOWNLOAD, false)) {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
|
||||||
DownloadDialogListener dialogListener = new DownloadDialogListener();
|
|
||||||
builder.setMessage(
|
|
||||||
"About to contact servers to download content. Continue?")
|
|
||||||
.setPositiveButton("Yes", dialogListener)
|
|
||||||
.setNegativeButton("No", dialogListener)
|
|
||||||
.setCancelable(false).show();
|
|
||||||
} else {
|
|
||||||
refreshModules();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void refreshModules() {
|
|
||||||
// TODO: Discover if we need to refresh over Internet, or use a cached copy
|
|
||||||
// Fun fact - jSword handles the caching for us.
|
|
||||||
ProgressDialog refreshDialog = new ProgressDialog(this);
|
|
||||||
refreshDialog.setMessage("Refreshing available modules...");
|
|
||||||
refreshDialog.setCancelable(false);
|
|
||||||
refreshDialog.show();
|
|
||||||
DownloadManager dm = new DownloadManager();
|
|
||||||
dm.fetchAvailableBooks(true, new DlBookRefreshListener(refreshDialog));
|
|
||||||
}
|
|
||||||
|
|
||||||
private class DownloadDialogListener implements
|
|
||||||
DialogInterface.OnClickListener {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
switch (which) {
|
|
||||||
case DialogInterface.BUTTON_POSITIVE:
|
|
||||||
// Clicked ready to continue - allow downloading in the future
|
|
||||||
SharedPreferences prefs = getSharedPreferences(
|
|
||||||
MinimalBibleConstants.DOWNLOAD_PREFS_FILE, MODE_PRIVATE);
|
|
||||||
prefs.edit()
|
|
||||||
.putBoolean(MinimalBibleConstants.KEY_DOWNLOAD_ENABLED,
|
|
||||||
true).commit();
|
|
||||||
|
|
||||||
// And warn them that it has been enabled in the future.
|
|
||||||
Toast.makeText(DownloadActivity.this,
|
|
||||||
"Downloading now enabled. Disable in settings.",
|
|
||||||
Toast.LENGTH_SHORT).show();
|
|
||||||
refreshModules();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DialogInterface.BUTTON_NEGATIVE:
|
|
||||||
// Not going to continue, still show what has
|
|
||||||
// already been downloaded.
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class DlBookRefreshListener implements BookRefreshTask.BookRefreshListener {
|
|
||||||
// TODO: Figure out why I need to pass in the ProgressDialog, and can't cancel it from onRefreshComplete.
|
|
||||||
ProgressDialog dl;
|
|
||||||
public DlBookRefreshListener(ProgressDialog dl) {
|
|
||||||
this.dl = dl;
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public void onRefreshComplete(List<Book> results) {
|
|
||||||
dl.cancel();
|
|
||||||
for (Book b : results) {
|
|
||||||
Log.d("DlBookRefreshListener", b.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,13 @@ package org.bspeice.minimalbible.activities.downloader;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.bspeice.minimalbible.MinimalBible;
|
import org.bspeice.minimalbible.MinimalBible;
|
||||||
|
import org.bspeice.minimalbible.MinimalBibleConstants;
|
||||||
import org.crosswire.jsword.book.BookCategory;
|
import org.crosswire.jsword.book.BookCategory;
|
||||||
import org.crosswire.jsword.book.install.InstallManager;
|
import org.crosswire.jsword.book.install.InstallManager;
|
||||||
import org.crosswire.jsword.book.install.Installer;
|
import org.crosswire.jsword.book.install.Installer;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
public class DownloadManager {
|
public class DownloadManager {
|
||||||
@ -21,16 +24,33 @@ public class DownloadManager {
|
|||||||
setDownloadDir();
|
setDownloadDir();
|
||||||
}
|
}
|
||||||
|
|
||||||
public BookRefreshTask fetchAvailableBooks(boolean refresh,
|
public BookRefreshTask fetchAvailableBooks(
|
||||||
BookRefreshTask.BookRefreshListener bookRefreshListener) {
|
BookRefreshTask.BookRefreshListener bookRefreshListener) {
|
||||||
|
|
||||||
Map<String, Installer> installers = getInstallers();
|
Map<String, Installer> installers = getInstallers();
|
||||||
|
|
||||||
return (BookRefreshTask) new BookRefreshTask(refresh,
|
return (BookRefreshTask) new BookRefreshTask(willRefresh(),
|
||||||
bookRefreshListener).execute(installers.values().toArray(
|
bookRefreshListener).execute(installers.values().toArray(
|
||||||
new Installer[installers.size()]));
|
new Installer[installers.size()]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean willRefresh() {
|
||||||
|
// Method to determine if we need a refresh
|
||||||
|
// Public, so other modules can predict and take action accordingly.
|
||||||
|
// TODO: Discover if we need to refresh over Internet, or use a cached
|
||||||
|
// copy
|
||||||
|
// Fun fact - jSword handles the caching for us.
|
||||||
|
|
||||||
|
SharedPreferences prefs = MinimalBible.getAppContext()
|
||||||
|
.getSharedPreferences(
|
||||||
|
MinimalBibleConstants.DOWNLOAD_PREFS_FILE,
|
||||||
|
Context.MODE_PRIVATE);
|
||||||
|
|
||||||
|
return (!prefs.getBoolean(MinimalBibleConstants.KEY_DOWNLOAD_ENABLED,
|
||||||
|
false) || prefs.getBoolean(
|
||||||
|
MinimalBibleConstants.KEY_PERM_DISABLE_DOWNLOAD, false));
|
||||||
|
}
|
||||||
|
|
||||||
public Map<String, Installer> getInstallers() {
|
public Map<String, Installer> getInstallers() {
|
||||||
return new InstallManager().getInstallers();
|
return new InstallManager().getInstallers();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user