From 4a73fae3b33cbe189f40359dbf6ea0d4d31f56cb Mon Sep 17 00:00:00 2001 From: mhutti1 Date: Fri, 19 May 2017 13:03:56 +0100 Subject: [PATCH 1/9] New Library URL #105 --- .../main/java/org/kiwix/kiwixmobile/network/KiwixService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/network/KiwixService.java b/app/src/main/java/org/kiwix/kiwixmobile/network/KiwixService.java index 5ac2ccee0..b5929fd07 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/network/KiwixService.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/network/KiwixService.java @@ -13,7 +13,7 @@ import rx.Observable; import rx.schedulers.Schedulers; public interface KiwixService { - @GET("/library/library.xml") Observable getLibrary(); + @GET("/library/library_zim.xml") Observable getLibrary(); @GET Observable getMetaLinks(@Url String url); From 7d221be620b2806445cb06f75bc62a7886fa287b Mon Sep 17 00:00:00 2001 From: fba Date: Fri, 19 May 2017 16:12:23 +0200 Subject: [PATCH 2/9] WiFi only preference added --- .../kiwixmobile/KiwixMobileActivity.java | 3 +++ .../downloader/DownloadFragment.java | 4 +-- .../downloader/DownloadService.java | 15 ++++++++++- .../settings/KiwixSettingsActivity.java | 5 ++++ .../kiwix/kiwixmobile/utils/NetworkUtils.java | 16 ++++++++++++ .../library_view/LibraryFragment.java | 25 ++++++------------- app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/preferences.xml | 5 ++++ 8 files changed, 55 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/KiwixMobileActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/KiwixMobileActivity.java index 9b95c3862..e79611759 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/KiwixMobileActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/KiwixMobileActivity.java @@ -181,6 +181,8 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback public static boolean refresh; + public static boolean wifiOnly; + private static Uri KIWIX_LOCAL_MARKET_URI; private static Uri KIWIX_BROWSER_MARKET_URI; @@ -303,6 +305,7 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback public void onCreate(Bundle savedInstanceState) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); nightMode = sharedPreferences.getBoolean(PREF_NIGHT_MODE, false); + wifiOnly = sharedPreferences.getBoolean(KiwixSettingsActivity.PREF_WIFI_ONLY, true); if (nightMode) { setTheme(R.style.AppTheme_Night); } 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 f78b4290d..7461c3823 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadFragment.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadFragment.java @@ -141,8 +141,8 @@ public class DownloadFragment extends Fragment { private void setPlayState(ImageView pauseButton, int position, int newPlayState) { if(newPlayState == DownloadService.PLAY) { //Playing - LibraryFragment.mService.playDownload(mKeys[position]); - pauseButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_pause_black_24dp)); + 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)); diff --git a/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java b/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java index 4edb69f80..c7b17fe58 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java @@ -12,6 +12,7 @@ import android.os.IBinder; import android.os.Looper; import android.preference.PreferenceManager; import android.support.v4.app.NotificationCompat; +import android.util.Log; import android.util.Pair; import android.util.SparseArray; import android.util.SparseIntArray; @@ -28,6 +29,7 @@ import okhttp3.Response; import okio.BufferedSource; import org.kiwix.kiwixmobile.KiwixApplication; import org.kiwix.kiwixmobile.KiwixMobileActivity; +import org.kiwix.kiwixmobile.utils.NetworkUtils; import org.kiwix.kiwixmobile.utils.TestingUtils; import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryFragment; import org.kiwix.kiwixmobile.R; @@ -197,7 +199,12 @@ public class DownloadService extends Service { downloadFragment.listView.invalidateViews(); } - public void playDownload(int notificationID) { + public boolean playDownload(int notificationID) { + if (KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getApplicationContext())) { + Toast.makeText(this, getString(R.string.wifi_only_warning), Toast.LENGTH_LONG).show(); + return false; + } + downloadStatus.put(notificationID, PLAY); synchronized (pauseLock) { pauseLock.notify(); @@ -207,6 +214,8 @@ public class DownloadService extends Service { notificationManager.notify(notificationID, notification.get(notificationID).build()); downloadFragment.downloadAdapter.notifyDataSetChanged(); downloadFragment.listView.invalidateViews(); + + return true; } private void downloadBook(String url, int notificationID, LibraryNetworkEntity.Book book) { @@ -350,6 +359,10 @@ public class DownloadService extends Service { attempts = timeout; break; } + + if (KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getApplicationContext())) + pauseDownload(chunk.getNotificationID()); + if (downloadStatus.get(chunk.getNotificationID()) == PAUSE) { synchronized (pauseLock) { try { diff --git a/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java index 617cc4ba8..6ac140b07 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java @@ -81,6 +81,8 @@ public class KiwixSettingsActivity extends AppCompatActivity { public static final String PREF_HIDETOOLBAR = "pref_hidetoolbar"; + public static final String PREF_WIFI_ONLY = "pref_wifi_only"; + public static String zimFile; public static boolean allHistoryCleared = false; @@ -266,6 +268,9 @@ public class KiwixSettingsActivity extends AppCompatActivity { KiwixMobileActivity.nightMode = sharedPreferences.getBoolean(PREF_NIGHTMODE, false); getActivity().recreate(); } + if (key.equals(PREF_WIFI_ONLY)) { + KiwixMobileActivity.wifiOnly = sharedPreferences.getBoolean(PREF_WIFI_ONLY, true); + } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/utils/NetworkUtils.java b/app/src/main/java/org/kiwix/kiwixmobile/utils/NetworkUtils.java index 83c2c052b..467bac5f6 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/utils/NetworkUtils.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/utils/NetworkUtils.java @@ -3,6 +3,7 @@ package org.kiwix.kiwixmobile.utils; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import android.os.Build; import android.util.Log; import java.util.UUID; import org.kiwix.kiwixmobile.KiwixMobileActivity; @@ -29,6 +30,21 @@ public class NetworkUtils { return false; } + public static boolean isWiFi(Context context) { + ConnectivityManager connectivity = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivity == null) + return false; + + if (Build.VERSION.SDK_INT >= 23) { + NetworkInfo network = connectivity.getActiveNetworkInfo(); + return network.getType() == ConnectivityManager.TYPE_WIFI; + } else { + NetworkInfo wifi = connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI); + return wifi.isConnected(); + } + } + public static String getFileNameFromUrl(String url) { int index = url.lastIndexOf('?'); 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 928a149a1..4d1b22e23 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 @@ -52,6 +52,7 @@ import org.kiwix.kiwixmobile.downloader.DownloadIntent; import org.kiwix.kiwixmobile.downloader.DownloadService; import org.kiwix.kiwixmobile.library.LibraryAdapter; import org.kiwix.kiwixmobile.network.KiwixService; +import org.kiwix.kiwixmobile.utils.NetworkUtils; import org.kiwix.kiwixmobile.utils.StorageUtils; import org.kiwix.kiwixmobile.utils.StyleUtils; import org.kiwix.kiwixmobile.utils.TestingUtils; @@ -259,24 +260,14 @@ public class LibraryFragment extends Fragment return; } - if (isWiFi()) { - downloadFile((Book) parent.getAdapter().getItem(position)); + if (KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getContext())) { + Toast.makeText(getContext(), getString(R.string.wifi_only_warning), Toast.LENGTH_LONG).show(); } else { - mobileDownloadDialog(position, parent); + downloadFile((Book) parent.getAdapter().getItem(position)); } } } - public boolean isWiFi() { - if (Build.VERSION.SDK_INT >= 23) { - NetworkInfo network = conMan.getActiveNetworkInfo(); - return network.getType() == ConnectivityManager.TYPE_WIFI; - } else { - NetworkInfo wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI); - return wifi.isConnected(); - } - } - public void mobileDownloadDialog(int position, AdapterView parent) { new AlertDialog.Builder(super.getActivity(), dialogStyle()) @@ -296,7 +287,7 @@ public class LibraryFragment extends Fragment @Override public void downloadFile(Book book) { downloadingBooks.add(book); - if (libraryAdapter != null) { + if (libraryAdapter != null && faActivity != null && faActivity.searchView != null) { libraryAdapter.getFilter().filter(faActivity.searchView.getQuery()); } Toast.makeText(super.getActivity(), getString(R.string.download_started_library), Toast.LENGTH_LONG) @@ -365,10 +356,10 @@ public class LibraryFragment extends Fragment NetworkInfo network = conMan.getActiveNetworkInfo(); if ((books == null || books.isEmpty()) && network != null && network.isConnected()) { - if (isWiFi()) { - presenter.loadBooks(); - } else { + if (KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getContext())) { displayNetworkConfirmation(); + } else { + presenter.loadBooks(); } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9ee5a7423..b562cddf8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -165,4 +165,6 @@ Delete Tab Next Previous + Downloading via mobile network is not allowed (This behaviour can be changed in Settings) + Download content only via WiFi diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 524e12c95..7f07a911c 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -38,6 +38,11 @@ android:key="pref_full_text_search" android:title="@string/pref_full_text_search_title" android:summary="@string/pref_full_text_search_summary"/> + + Date: Fri, 19 May 2017 15:37:09 +0100 Subject: [PATCH 3/9] Content bar updates on resume if not downloading #20 --- .../downloader/DownloadService.java | 37 +++++++++++++------ .../kiwixmobile/utils/files/FileUtils.java | 37 +++++++++++++++++++ .../library_view/LibraryFragment.java | 2 +- 3 files changed, 64 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java b/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java index c7b17fe58..728fbfe9e 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java @@ -1,5 +1,7 @@ package org.kiwix.kiwixmobile.downloader; +import static org.kiwix.kiwixmobile.utils.files.FileUtils.getCurrentSize; + import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; @@ -49,6 +51,8 @@ public class DownloadService extends Service { @Inject NotificationManager notificationManager; private static String SD_CARD; + // 1024 / 100 + private static double BOOK_SIZE_OFFSET = 10.24; public static String KIWIX_ROOT; public static final int PLAY = 1; public static final int PAUSE = 2; @@ -220,7 +224,14 @@ public class DownloadService extends Service { private void downloadBook(String url, int notificationID, LibraryNetworkEntity.Book book) { downloadFragment.addDownload(notificationID, book, KIWIX_ROOT + StorageUtils.getFileNameFromUrl(book.getUrl())); - TestingUtils.bindResource(DownloadService.class); + if (book.file != null && (book.file.exists() || new File(book.file.getPath() + ".part").exists())) { + // Calculate initial download progress + int initial = (int) (getCurrentSize(book) / (Long.valueOf(book.getSize()) * BOOK_SIZE_OFFSET)); + TestingUtils.bindResource(DownloadService.class); + notification.get(notificationID).setProgress(100, initial, false); + updateDownloadFragmentProgress(initial, notificationID); + notificationManager.notify(notificationID, notification.get(notificationID).build()); + } kiwixService.getMetaLinks(url).retryWhen(errors -> errors.flatMap(error -> Observable.timer(5, TimeUnit.SECONDS))) .subscribeOn(AndroidSchedulers.mainThread()) .flatMap(metaLink -> getMetaLinkContentLength(metaLink.getRelevantUrl().getValue())) @@ -249,19 +260,23 @@ public class DownloadService extends Service { // Tells android to not kill the service updateForeground(); } - if (DownloadFragment.mDownloads != null && DownloadFragment.mDownloads.get(notificationID) != null) { - handler.post(new Runnable() { - @Override - public void run() { - if (DownloadFragment.mDownloads.get(notificationID) != null) { - DownloadFragment.downloadAdapter.updateProgress(progress, notificationID); - } - } - }); - } + updateDownloadFragmentProgress(progress, notificationID); }, Throwable::printStackTrace); } + private void updateDownloadFragmentProgress(int progress, int notificationID) { + if (DownloadFragment.mDownloads != null && DownloadFragment.mDownloads.get(notificationID) != null) { + handler.post(new Runnable() { + @Override + public void run() { + if (DownloadFragment.mDownloads.get(notificationID) != null) { + DownloadFragment.downloadAdapter.updateProgress(progress, notificationID); + } + } + }); + } + } + private void updateForeground() { // Allow notification to be dismissible while ensuring integrity of service if active downloads stopForeground(true); diff --git a/app/src/main/java/org/kiwix/kiwixmobile/utils/files/FileUtils.java b/app/src/main/java/org/kiwix/kiwixmobile/utils/files/FileUtils.java index 509deeeab..c6b0a2b88 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/utils/files/FileUtils.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/utils/files/FileUtils.java @@ -13,7 +13,9 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import org.kiwix.kiwixmobile.BuildConfig; +import org.kiwix.kiwixmobile.library.entity.LibraryNetworkEntity.Book; public class FileUtils { @@ -189,6 +191,32 @@ public class FileUtils { return readCsv(content); } + private static List getAllZimParts(Book book) { + List files = new ArrayList<>(); + if(book.file.getPath().endsWith(".zim") || book.file.getPath().endsWith(".zim.part")) { + if(book.file.exists()) { + files.add(book.file); + } else { + files.add(new File(book.file + ".part")); + } + return files; + } + String path = book.file.getPath(); + for(char alphabetFirst = 'a'; alphabetFirst <= 'z'; alphabetFirst++) { + for(char alphabetSecond = 'a'; alphabetSecond <= 'z'; alphabetSecond++) { + path = path.substring(0, path.length() - 2) + alphabetFirst + alphabetSecond; + if(new File(path).exists()) { + files.add(new File(path)); + } else if(new File(path + ".part").exists()) { + files.add(new File(path + ".part")); + } else { + return files; + } + } + } + return files; + } + private static ArrayList readCsv(String csv) { String[] csvArray = csv.split(","); @@ -229,4 +257,13 @@ public class FileUtils { } } + public static long getCurrentSize(Book book) { + long size = 0; + List files = getAllZimParts(book); + for (File file : files) { + size += file.length(); + } + return size; + } + } 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 4d1b22e23..d3f492e17 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 @@ -359,7 +359,7 @@ public class LibraryFragment extends Fragment if (KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getContext())) { displayNetworkConfirmation(); } else { - presenter.loadBooks(); + displayNetworkConfirmation(); } } } From a3a6b1d2f0f0b605cbbaaf064ab17847893faae9 Mon Sep 17 00:00:00 2001 From: mhutti1 Date: Fri, 19 May 2017 16:23:57 +0100 Subject: [PATCH 4/9] Fixed test failure --- .../java/org/kiwix/kiwixmobile/downloader/DownloadService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java b/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java index 728fbfe9e..4dad91116 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java @@ -224,10 +224,10 @@ public class DownloadService extends Service { private void downloadBook(String url, int notificationID, LibraryNetworkEntity.Book book) { downloadFragment.addDownload(notificationID, book, KIWIX_ROOT + StorageUtils.getFileNameFromUrl(book.getUrl())); + TestingUtils.bindResource(DownloadService.class); if (book.file != null && (book.file.exists() || new File(book.file.getPath() + ".part").exists())) { // Calculate initial download progress int initial = (int) (getCurrentSize(book) / (Long.valueOf(book.getSize()) * BOOK_SIZE_OFFSET)); - TestingUtils.bindResource(DownloadService.class); notification.get(notificationID).setProgress(100, initial, false); updateDownloadFragmentProgress(initial, notificationID); notificationManager.notify(notificationID, notification.get(notificationID).build()); From 8cc305e08e600cdb90ff5d1c874e68aac40152dc Mon Sep 17 00:00:00 2001 From: mhutti1 Date: Sat, 20 May 2017 09:10:53 +0100 Subject: [PATCH 5/9] Pass current local in as user agent to webview #25 --- .../java/org/kiwix/kiwixmobile/views/web/KiwixWebView.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/views/web/KiwixWebView.java b/app/src/main/java/org/kiwix/kiwixmobile/views/web/KiwixWebView.java index cda1221d9..2686de629 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/views/web/KiwixWebView.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/views/web/KiwixWebView.java @@ -47,6 +47,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import org.kiwix.kiwixmobile.utils.LanguageUtils; public class KiwixWebView extends WebView { @@ -125,6 +126,8 @@ public class KiwixWebView extends WebView { public KiwixWebView(Context context, WebViewCallback callback, AttributeSet attrs) { super(context, attrs); this.callback = callback; + // Set the user agent to the current locale so it can be read with navigator.userAgent + getSettings().setUserAgentString(LanguageUtils.getCurrentLocale(context).toString()); setWebViewClient(new KiwixWebViewClient(callback)); setWebChromeClient(new KiwixWebChromeClient(callback)); getSettings().setDomStorageEnabled(true); From dbbb4d1cdcfeef5321b475a7fa4ab9c002ffad98 Mon Sep 17 00:00:00 2001 From: fba Date: Sat, 20 May 2017 11:57:36 +0200 Subject: [PATCH 6/9] Show warning dialog instead of toast --- .../downloader/DownloadFragment.java | 27 +++++++++++++++++++ .../downloader/DownloadService.java | 14 +++++----- .../zim_manager/ZimManageActivity.java | 5 ++++ .../library_view/LibraryFragment.java | 2 +- app/src/main/res/values/strings.xml | 3 ++- 5 files changed, 43 insertions(+), 8 deletions(-) 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 7461c3823..6a8992e3e 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadFragment.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadFragment.java @@ -3,9 +3,12 @@ package org.kiwix.kiwixmobile.downloader; import android.app.Activity; import android.app.AlertDialog; +import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; +import android.preference.PreferenceManager; import android.support.annotation.Nullable; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.Snackbar; @@ -25,6 +28,9 @@ import android.widget.TextView; import java.util.Arrays; import java.util.LinkedHashMap; +import org.kiwix.kiwixmobile.KiwixMobileActivity; +import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity; +import org.kiwix.kiwixmobile.utils.NetworkUtils; import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryFragment; import org.kiwix.kiwixmobile.R; import org.kiwix.kiwixmobile.zim_manager.fileselect_view.ZimFileSelectFragment; @@ -76,6 +82,21 @@ public class DownloadFragment extends Fragment { } } + public static void showNoWiFiWarning(Context context) { + new AlertDialog.Builder(context) + .setTitle(R.string.wifi_only_title) + .setMessage(R.string.wifi_only_msg) + .setPositiveButton(R.string.yes, (dialog, i) -> { + PreferenceManager.getDefaultSharedPreferences(context) + .edit() + .putBoolean(KiwixSettingsActivity.PREF_WIFI_ONLY, false) + .apply(); + KiwixMobileActivity.wifiOnly = false; + }) + .setNegativeButton(R.string.no, (dialog, i) -> {}) + .show(); + } + public class DownloadAdapter extends BaseAdapter { private LinkedHashMap mData = new LinkedHashMap(); @@ -185,6 +206,12 @@ public class DownloadFragment extends Fragment { pause.setOnClickListener(v -> { 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()); + return; + } + setPlayState(pause, position, newPlayPauseState); }); diff --git a/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java b/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java index 4dad91116..cf269e5cd 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadService.java @@ -2,6 +2,7 @@ package org.kiwix.kiwixmobile.downloader; import static org.kiwix.kiwixmobile.utils.files.FileUtils.getCurrentSize; +import android.app.AlertDialog; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; @@ -33,6 +34,7 @@ import org.kiwix.kiwixmobile.KiwixApplication; import org.kiwix.kiwixmobile.KiwixMobileActivity; import org.kiwix.kiwixmobile.utils.NetworkUtils; import org.kiwix.kiwixmobile.utils.TestingUtils; +import org.kiwix.kiwixmobile.zim_manager.ZimManageActivity; import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryFragment; import org.kiwix.kiwixmobile.R; import org.kiwix.kiwixmobile.database.BookDao; @@ -60,6 +62,7 @@ public class DownloadService extends Service { public static final int CANCEL = 4; public static final String ACTION_PAUSE = "PAUSE"; public static final String ACTION_STOP = "STOP"; + public static final String ACTION_NO_WIFI = "NO_WIFI"; public static final String NOTIFICATION_ID = "NOTIFICATION_ID"; public static int notificationCount = 1; public static ArrayList notifications = new ArrayList<>(); @@ -105,7 +108,11 @@ public class DownloadService extends Service { return START_NOT_STICKY; } if (intent.hasExtra(NOTIFICATION_ID) && intent.getAction().equals(ACTION_PAUSE)) { - toggleDownload(intent.getIntExtra(NOTIFICATION_ID, 0)); + if (KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getApplicationContext())) { + startActivity(new Intent(this, ZimManageActivity.class).setAction(ACTION_NO_WIFI).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); + this.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)); + } else + toggleDownload(intent.getIntExtra(NOTIFICATION_ID, 0)); return START_NOT_STICKY; } @@ -204,11 +211,6 @@ public class DownloadService extends Service { } public boolean playDownload(int notificationID) { - if (KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getApplicationContext())) { - Toast.makeText(this, getString(R.string.wifi_only_warning), Toast.LENGTH_LONG).show(); - return false; - } - downloadStatus.put(notificationID, PLAY); synchronized (pauseLock) { pauseLock.notify(); diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageActivity.java index b168fa7f7..5b020c51c 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageActivity.java @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.List; import org.kiwix.kiwixmobile.KiwixMobileActivity; +import org.kiwix.kiwixmobile.downloader.DownloadService; import org.kiwix.kiwixmobile.library.LibraryAdapter.Language; import org.kiwix.kiwixmobile.utils.TestingUtils; import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryFragment; @@ -81,6 +82,10 @@ public class ZimManageActivity extends AppCompatActivity { setUpToolbar(); + if (DownloadService.ACTION_NO_WIFI.equals(getIntent().getAction())) { + DownloadFragment.showNoWiFiWarning(this); + } + // Create the adapter that will return a fragment for each of the three // primary sections of the activity. mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 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 d3f492e17..09eb262e8 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 @@ -261,7 +261,7 @@ public class LibraryFragment extends Fragment } if (KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getContext())) { - Toast.makeText(getContext(), getString(R.string.wifi_only_warning), Toast.LENGTH_LONG).show(); + DownloadFragment.showNoWiFiWarning(getContext()); } else { downloadFile((Book) parent.getAdapter().getItem(position)); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b562cddf8..63c716f38 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -165,6 +165,7 @@ Delete Tab Next Previous - Downloading via mobile network is not allowed (This behaviour can be changed in Settings) + Allow downloading content via mobile network? + If you choose "Yes" you won\'t be warned in future. However, you can always change this in Settings Download content only via WiFi From 58055acce3505bc790c2330c73dcd495e4cc3224 Mon Sep 17 00:00:00 2001 From: fba Date: Sat, 20 May 2017 16:42:24 +0200 Subject: [PATCH 7/9] Few fixes --- .../org/kiwix/kiwixmobile/downloader/DownloadFragment.java | 5 +++-- .../org/kiwix/kiwixmobile/zim_manager/ZimManageActivity.java | 2 +- .../zim_manager/library_view/LibraryFragment.java | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) 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 6a8992e3e..7fa771762 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadFragment.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/downloader/DownloadFragment.java @@ -82,7 +82,7 @@ public class DownloadFragment extends Fragment { } } - public static void showNoWiFiWarning(Context context) { + public static void showNoWiFiWarning(Context context, Runnable yesAction) { new AlertDialog.Builder(context) .setTitle(R.string.wifi_only_title) .setMessage(R.string.wifi_only_msg) @@ -92,6 +92,7 @@ public class DownloadFragment extends Fragment { .putBoolean(KiwixSettingsActivity.PREF_WIFI_ONLY, false) .apply(); KiwixMobileActivity.wifiOnly = false; + yesAction.run(); }) .setNegativeButton(R.string.no, (dialog, i) -> {}) .show(); @@ -208,7 +209,7 @@ 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()); + showNoWiFiWarning(getContext(), () -> {setPlayState(pause, position, newPlayPauseState);}); return; } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageActivity.java index 5b020c51c..7d7843b14 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageActivity.java @@ -83,7 +83,7 @@ public class ZimManageActivity extends AppCompatActivity { setUpToolbar(); if (DownloadService.ACTION_NO_WIFI.equals(getIntent().getAction())) { - DownloadFragment.showNoWiFiWarning(this); + DownloadFragment.showNoWiFiWarning(this, () -> {}); } // Create the adapter that will return a fragment for each of the three 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 09eb262e8..007696c70 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 @@ -261,7 +261,7 @@ public class LibraryFragment extends Fragment } if (KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getContext())) { - DownloadFragment.showNoWiFiWarning(getContext()); + DownloadFragment.showNoWiFiWarning(getContext(), () -> {downloadFile((Book) parent.getAdapter().getItem(position));}); } else { downloadFile((Book) parent.getAdapter().getItem(position)); } From a619b6fcb86f8fa07dc66f7f573e7c99ff586174 Mon Sep 17 00:00:00 2001 From: fba Date: Sat, 20 May 2017 17:16:00 +0200 Subject: [PATCH 8/9] Clean up --- app/src/main/res/values/strings.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 63c716f38..77d99398f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -111,7 +111,6 @@ No downloads here No files here Download complete - Are you sure you want to start the download without WiFi? Insufficient space to download this file. Space Available: Simple From f8ec5e5f3d5b20ddb6d19af273c36ec79c30baca Mon Sep 17 00:00:00 2001 From: fba Date: Sat, 20 May 2017 17:35:50 +0200 Subject: [PATCH 9/9] Clean up --- .../library_view/LibraryFragment.java | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) 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 007696c70..d8afada5f 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 @@ -191,20 +191,6 @@ public class LibraryFragment extends Fragment TestingUtils.unbindResource(LibraryFragment.class); } - - public void displayNetworkConfirmation() { - libraryList.removeFooterView(progressBar); - networkText.setText(R.string.download_over_network); - networkText.setVisibility(View.VISIBLE); - permissionButton.setVisibility(View.VISIBLE); - permissionButton.setOnClickListener(view -> { - presenter.loadBooks(); - permissionButton.setVisibility(View.GONE); - networkText.setVisibility(View.GONE); - }); - TestingUtils.unbindResource(LibraryFragment.class); - } - public void noNetworkConnection() { displayNoNetworkConnection(); } @@ -356,11 +342,9 @@ public class LibraryFragment extends Fragment NetworkInfo network = conMan.getActiveNetworkInfo(); if ((books == null || books.isEmpty()) && network != null && network.isConnected()) { - if (KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getContext())) { - displayNetworkConfirmation(); - } else { - displayNetworkConfirmation(); - } + presenter.loadBooks(); + permissionButton.setVisibility(View.GONE); + networkText.setVisibility(View.GONE); } } }