diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 70268b8b0..406ced277 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -30,7 +30,6 @@
android:label="@string/app_name">
-
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadFragment.java b/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadFragment.java
index 67742f918..7270f3009 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadFragment.java
+++ b/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadFragment.java
@@ -5,6 +5,7 @@ import android.app.Activity;
import android.app.AlertDialog;
import android.app.Application;
import android.content.Context;
+import android.database.DataSetObserver;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
@@ -26,6 +27,7 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.Locale;
+
import org.kiwix.kiwixmobile.KiwixApplication;
import org.kiwix.kiwixmobile.KiwixMobileActivity;
import org.kiwix.kiwixmobile.R;
@@ -64,6 +66,7 @@ public class DownloadFragment extends Fragment {
zimManageActivity = (ZimManageActivity) super.getActivity();
listView = (ListView) relLayout.findViewById(R.id.zim_downloader_list);
downloadAdapter = new DownloadAdapter(mDownloads);
+ downloadAdapter.registerDataSetObserver(this);
listView.setAdapter(downloadAdapter);
mainLayout = (CoordinatorLayout) faActivity.findViewById(R.id.zim_manager_main_activity);
return relLayout;
@@ -88,6 +91,12 @@ public class DownloadFragment extends Fragment {
}
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ downloadAdapter.unRegisterDataSetObserver();
+ }
+
public static void showNoWiFiWarning(Context context, Runnable yesAction) {
new AlertDialog.Builder(context)
.setTitle(R.string.wifi_only_title)
@@ -123,13 +132,14 @@ public class DownloadFragment extends Fragment {
KiwixApplication.getInstance().getResources().getString(R.string.time_left));
return String.format(Locale.getDefault(), "%d %s %s", seconds,
KiwixApplication.getInstance().getResources().getString(R.string.time_second),
- KiwixApplication.getInstance().getResources().getString(R.string.time_left));
+ KiwixApplication.getInstance().getResources().getString(R.string.time_left));
}
public class DownloadAdapter extends BaseAdapter {
private LinkedHashMap mData = new LinkedHashMap<>();
private Integer[] mKeys;
+ private DataSetObserver dataSetObserver;
public DownloadAdapter(LinkedHashMap data) {
mData = data;
@@ -158,10 +168,10 @@ public class DownloadFragment extends Fragment {
int position = Arrays.asList(mKeys).indexOf(notificationID);
ViewGroup viewGroup = (ViewGroup) listView.getChildAt(position - listView.getFirstVisiblePosition());
if (viewGroup == null) {
- mDownloads.remove(mKeys[position]);
- mDownloadFiles.remove(mKeys[position]);
- downloadAdapter.notifyDataSetChanged();
- updateNoDownloads();
+ mDownloads.remove(mKeys[position]);
+ mDownloadFiles.remove(mKeys[position]);
+ downloadAdapter.notifyDataSetChanged();
+ updateNoDownloads();
}
ImageView pause = (ImageView) viewGroup.findViewById(R.id.pause);
pause.setEnabled(false);
@@ -195,13 +205,13 @@ public class DownloadFragment extends Fragment {
}
private void setPlayState(ImageView pauseButton, int position, int newPlayState) {
- if(newPlayState == DownloadService.PLAY) { //Playing
- if (LibraryFragment.mService.playDownload(mKeys[position]))
- pauseButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_pause_black_24dp));
- } else { //Pausing
- LibraryFragment.mService.pauseDownload(mKeys[position]);
- pauseButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_play_arrow_black_24dp));
- }
+ if (newPlayState == DownloadService.PLAY) { //Playing
+ if (LibraryFragment.mService.playDownload(mKeys[position]))
+ pauseButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_pause_black_24dp));
+ } else { //Pausing
+ LibraryFragment.mService.pauseDownload(mKeys[position]);
+ pauseButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_play_arrow_black_24dp));
+ }
}
@Override
@@ -243,7 +253,9 @@ public class DownloadFragment extends Fragment {
int newPlayPauseState = LibraryFragment.mService.downloadStatus.get(mKeys[position]) == DownloadService.PLAY ? DownloadService.PAUSE : DownloadService.PLAY;
if (newPlayPauseState == DownloadService.PLAY && KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getContext())) {
- showNoWiFiWarning(getContext(), () -> {setPlayState(pause, position, newPlayPauseState);});
+ showNoWiFiWarning(getContext(), () -> {
+ setPlayState(pause, position, newPlayPauseState);
+ });
return;
}
@@ -258,30 +270,56 @@ public class DownloadFragment extends Fragment {
hasArtificiallyPaused = LibraryFragment.mService.downloadStatus.get(mKeys[position]) == DownloadService.PLAY;
setPlayState(pause, position, DownloadService.PAUSE);
new AlertDialog.Builder(faActivity, dialogStyle())
- .setTitle(R.string.confirm_stop_download_title)
- .setMessage(R.string.confirm_stop_download_msg)
- .setPositiveButton(R.string.yes, (dialog, i) -> {
- LibraryFragment.mService.stopDownload(mKeys[position]);
- mDownloads.remove(mKeys[position]);
- mDownloadFiles.remove(mKeys[position]);
- downloadAdapter.notifyDataSetChanged();
- updateNoDownloads();
- if (zimManageActivity.mSectionsPagerAdapter.libraryFragment.libraryAdapter != null) {
- zimManageActivity .mSectionsPagerAdapter.libraryFragment.libraryAdapter.getFilter().filter(((ZimManageActivity) getActivity()).searchView.getQuery());
- }
- })
- .setNegativeButton(R.string.no, (dialog, i) -> {
- if(hasArtificiallyPaused) {
- hasArtificiallyPaused = false;
- setPlayState(pause, position, DownloadService.PLAY);
- }
- })
- .show();
+ .setTitle(R.string.confirm_stop_download_title)
+ .setMessage(R.string.confirm_stop_download_msg)
+ .setPositiveButton(R.string.yes, (dialog, i) -> {
+ LibraryFragment.mService.stopDownload(mKeys[position]);
+ mDownloads.remove(mKeys[position]);
+ mDownloadFiles.remove(mKeys[position]);
+ downloadAdapter.notifyDataSetChanged();
+ updateNoDownloads();
+ if (zimManageActivity.mSectionsPagerAdapter.libraryFragment.libraryAdapter != null) {
+ zimManageActivity.mSectionsPagerAdapter.libraryFragment.libraryAdapter.getFilter().filter(((ZimManageActivity) getActivity()).searchView.getQuery());
+ }
+ })
+ .setNegativeButton(R.string.no, (dialog, i) -> {
+ if (hasArtificiallyPaused) {
+ hasArtificiallyPaused = false;
+ setPlayState(pause, position, DownloadService.PLAY);
+ }
+ })
+ .show();
});
// Return the completed view to render on screen
return convertView;
}
+
+ public void registerDataSetObserver(DownloadFragment downloadFragment) {
+ if (dataSetObserver == null) {
+ dataSetObserver = new DataSetObserver() {
+ @Override
+ public void onChanged() {
+ super.onChanged();
+ downloadFragment.updateNoDownloads();
+ }
+
+ @Override
+ public void onInvalidated() {
+ super.onInvalidated();
+ downloadFragment.updateNoDownloads();
+ }
+ };
+
+ registerDataSetObserver(dataSetObserver);
+ }
+ }
+
+ public void unRegisterDataSetObserver() {
+ if (dataSetObserver != null) {
+ unregisterDataSetObserver(dataSetObserver);
+ }
+ }
}
public void addDownload(int position, LibraryNetworkEntity.Book book, String fileName) {
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/LibraryFragment.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/LibraryFragment.java
index 448d36282..ce9a1c269 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/LibraryFragment.java
+++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/LibraryFragment.java
@@ -58,6 +58,7 @@ import butterknife.ButterKnife;
import eu.mhutti1.utils.storage.StorageDevice;
import eu.mhutti1.utils.storage.support.StorageSelectDialog;
+import static android.view.View.GONE;
import static org.kiwix.kiwixmobile.downloader.DownloadService.KIWIX_ROOT;
import static org.kiwix.kiwixmobile.library.entity.LibraryNetworkEntity.Book;
import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_BOOK;
@@ -81,7 +82,8 @@ public class LibraryFragment extends Fragment
public LinearLayout llLayout;
- public SwipeRefreshLayout swipeRefreshLayout;
+ @BindView(R.id.library_swiperefresh)
+ SwipeRefreshLayout swipeRefreshLayout;
private ArrayList books = new ArrayList<>();
@@ -93,7 +95,8 @@ public class LibraryFragment extends Fragment
private DownloadServiceConnection mConnection = new DownloadServiceConnection();
- @Inject ConnectivityManager conMan;
+ @Inject
+ ConnectivityManager conMan;
private ZimManageActivity faActivity;
@@ -114,31 +117,20 @@ public class LibraryFragment extends Fragment
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
-
setupDagger();
TestingUtils.bindResource(LibraryFragment.class);
- faActivity = (ZimManageActivity) super.getActivity();
-
- // Replace LinearLayout by the type of the root element of the layout you're trying to load
llLayout = (LinearLayout) inflater.inflate(R.layout.activity_library, container, false);
ButterKnife.bind(this, llLayout);
-
- // SwipeRefreshLayout for the list view
- swipeRefreshLayout = (SwipeRefreshLayout) llLayout.findViewById(R.id.library_swiperefresh);
- swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
- @Override
- public void onRefresh() {
- refreshFragment();
- }
- });
-
- displayScanningContent();
- libraryAdapter = new LibraryAdapter(super.getContext());
- libraryList.setAdapter(libraryAdapter);
presenter.attachView(this);
+ faActivity = (ZimManageActivity) super.getActivity();
+ swipeRefreshLayout.setOnRefreshListener(() -> refreshFragment());
+ libraryAdapter = new LibraryAdapter(super.getContext());
+ libraryList.setAdapter(libraryAdapter);
+
DownloadService.setDownloadFragment(faActivity.mSectionsPagerAdapter.getDownloadFragment());
+
NetworkInfo network = conMan.getActiveNetworkInfo();
if (network == null || !network.isConnected()) {
displayNoNetworkConnection();
@@ -150,11 +142,7 @@ public class LibraryFragment extends Fragment
presenter.loadRunningDownloadsFromDb(getActivity());
- // The FragmentActivity doesn't contain the layout directly so we must use our instance of LinearLayout :
- // llLayout.findViewById(R.id.someGuiElement);
- // Instead of :
- // findViewById(R.id.someGuiElement);
- return llLayout; // We must return the loaded Layout
+ return llLayout;
}
@@ -172,7 +160,7 @@ public class LibraryFragment extends Fragment
faActivity.searchView.getQuery(),
i -> stopScanningContent());
} else {
- libraryAdapter.getFilter().filter("", i -> stopScanningContent() );
+ libraryAdapter.getFilter().filter("", i -> stopScanningContent());
}
libraryAdapter.notifyDataSetChanged();
libraryList.setOnItemClickListener(this);
@@ -187,9 +175,19 @@ public class LibraryFragment extends Fragment
networkText.setText(R.string.no_network_connection);
networkText.setVisibility(View.VISIBLE);
- permissionButton.setVisibility(View.GONE);
+ permissionButton.setVisibility(GONE);
swipeRefreshLayout.setRefreshing(false);
swipeRefreshLayout.setEnabled(false);
+ libraryList.setVisibility(View.INVISIBLE);
+ TestingUtils.unbindResource(LibraryFragment.class);
+ }
+
+ @Override
+ public void displayNoItemsFound() {
+ networkText.setText(R.string.no_items_msg);
+ networkText.setVisibility(View.VISIBLE);
+ permissionButton.setVisibility(GONE);
+ swipeRefreshLayout.setRefreshing(false);
TestingUtils.unbindResource(LibraryFragment.class);
}
@@ -210,8 +208,8 @@ public class LibraryFragment extends Fragment
@Override
public void displayScanningContent() {
if (!swipeRefreshLayout.isRefreshing()) {
- networkText.setVisibility(View.GONE);
- permissionButton.setVisibility(View.GONE);
+ networkText.setVisibility(GONE);
+ permissionButton.setVisibility(GONE);
swipeRefreshLayout.setEnabled(true);
swipeRefreshLayout.setRefreshing(true);
TestingUtils.bindResource(LibraryFragment.class);
@@ -221,8 +219,8 @@ public class LibraryFragment extends Fragment
@Override
public void stopScanningContent() {
- networkText.setVisibility(View.GONE);
- permissionButton.setVisibility(View.GONE);
+ networkText.setVisibility(GONE);
+ permissionButton.setVisibility(GONE);
swipeRefreshLayout.setRefreshing(false);
TestingUtils.unbindResource(LibraryFragment.class);
}
@@ -234,14 +232,13 @@ public class LibraryFragment extends Fragment
swipeRefreshLayout.setRefreshing(false);
return;
}
-
networkBroadcastReceiver.onReceive(super.getActivity(), null);
}
@Override
public void onDestroyView() {
super.onDestroyView();
- if (mBound) {
+ if (mBound && super.getActivity() != null) {
super.getActivity().unbindService(mConnection.downloadServiceInterface);
mBound = false;
}
@@ -289,7 +286,9 @@ public class LibraryFragment extends Fragment
}
if (KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getContext())) {
- DownloadFragment.showNoWiFiWarning(getContext(), () -> {downloadFile((Book) parent.getAdapter().getItem(position));});
+ DownloadFragment.showNoWiFiWarning(getContext(), () -> {
+ downloadFile((Book) parent.getAdapter().getItem(position));
+ });
} else {
downloadFile((Book) parent.getAdapter().getItem(position));
}
@@ -337,7 +336,6 @@ public class LibraryFragment extends Fragment
editor.apply();
}
-
public class DownloadServiceConnection {
public DownloadServiceInterface downloadServiceInterface;
@@ -356,7 +354,8 @@ public class LibraryFragment extends Fragment
}
@Override
- public void onServiceDisconnected(ComponentName arg0) { }
+ public void onServiceDisconnected(ComponentName arg0) {
+ }
}
}
@@ -365,11 +364,17 @@ public class LibraryFragment extends Fragment
public void onReceive(Context context, Intent intent) {
NetworkInfo network = conMan.getActiveNetworkInfo();
+ if (network == null || !network.isConnected()) {
+ displayNoNetworkConnection();
+ }
+
if ((books == null || books.isEmpty()) && network != null && network.isConnected()) {
presenter.loadBooks();
- permissionButton.setVisibility(View.GONE);
- networkText.setVisibility(View.GONE);
+ permissionButton.setVisibility(GONE);
+ networkText.setVisibility(GONE);
+ libraryList.setVisibility(View.VISIBLE);
}
+
}
}
}
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/LibraryPresenter.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/LibraryPresenter.java
index 5db26d0e5..151775290 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/LibraryPresenter.java
+++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/LibraryPresenter.java
@@ -36,7 +36,7 @@ public class LibraryPresenter extends BasePresenter {
}, error -> {
String msg = error.getLocalizedMessage();
Log.w("kiwixLibrary", "Error loading books:" + (msg != null ? msg : "(null)"));
- getMvpView().displayNoNetworkConnection();
+ getMvpView().displayNoItemsFound();
});
}
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/LibraryViewCallback.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/LibraryViewCallback.java
index b9efba994..675c61f85 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/LibraryViewCallback.java
+++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/library_view/LibraryViewCallback.java
@@ -16,6 +16,8 @@ public interface LibraryViewCallback extends ViewCallback {
void displayNoNetworkConnection();
+ void displayNoItemsFound();
+
void displayNoItemsAvailable();
void displayScanningContent();
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 848957f93..58172ab4f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -190,4 +190,5 @@
Do not ask anymore
Selected languages:
Other languages:
+ No items available