mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-08 23:07:26 -04:00
commit
354b34e7c0
@ -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);
|
||||
}
|
||||
|
@ -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,22 @@ public class DownloadFragment extends Fragment {
|
||||
}
|
||||
}
|
||||
|
||||
public static void showNoWiFiWarning(Context context, Runnable yesAction) {
|
||||
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;
|
||||
yesAction.run();
|
||||
})
|
||||
.setNegativeButton(R.string.no, (dialog, i) -> {})
|
||||
.show();
|
||||
}
|
||||
|
||||
public class DownloadAdapter extends BaseAdapter {
|
||||
|
||||
private LinkedHashMap<Integer, LibraryNetworkEntity.Book> mData = new LinkedHashMap<Integer, LibraryNetworkEntity.Book>();
|
||||
@ -141,8 +163,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));
|
||||
@ -185,6 +207,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(), () -> {setPlayState(pause, position, newPlayPauseState);});
|
||||
return;
|
||||
}
|
||||
|
||||
setPlayState(pause, position, newPlayPauseState);
|
||||
});
|
||||
|
||||
|
@ -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;
|
||||
@ -14,6 +15,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;
|
||||
@ -30,7 +32,9 @@ 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.ZimManageActivity;
|
||||
import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryFragment;
|
||||
import org.kiwix.kiwixmobile.R;
|
||||
import org.kiwix.kiwixmobile.database.BookDao;
|
||||
@ -58,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<String> notifications = new ArrayList<>();
|
||||
@ -103,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;
|
||||
}
|
||||
|
||||
@ -201,7 +210,7 @@ public class DownloadService extends Service {
|
||||
downloadFragment.listView.invalidateViews();
|
||||
}
|
||||
|
||||
public void playDownload(int notificationID) {
|
||||
public boolean playDownload(int notificationID) {
|
||||
downloadStatus.put(notificationID, PLAY);
|
||||
synchronized (pauseLock) {
|
||||
pauseLock.notify();
|
||||
@ -211,6 +220,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) {
|
||||
@ -365,6 +376,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 {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -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('?');
|
||||
|
@ -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());
|
||||
|
@ -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;
|
||||
@ -190,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();
|
||||
}
|
||||
@ -259,24 +246,14 @@ public class LibraryFragment extends Fragment
|
||||
return;
|
||||
}
|
||||
|
||||
if (isWiFi()) {
|
||||
downloadFile((Book) parent.getAdapter().getItem(position));
|
||||
if (KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getContext())) {
|
||||
DownloadFragment.showNoWiFiWarning(getContext(), () -> {downloadFile((Book) parent.getAdapter().getItem(position));});
|
||||
} 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 +273,7 @@ public class LibraryFragment extends Fragment
|
||||
@Override
|
||||
public void downloadFile(Book book) {
|
||||
downloadingBooks.add(book);
|
||||
if (libraryAdapter != null && faActivity.searchView != 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,11 +342,9 @@ public class LibraryFragment extends Fragment
|
||||
NetworkInfo network = conMan.getActiveNetworkInfo();
|
||||
|
||||
if ((books == null || books.isEmpty()) && network != null && network.isConnected()) {
|
||||
if (isWiFi()) {
|
||||
presenter.loadBooks();
|
||||
} else {
|
||||
displayNetworkConfirmation();
|
||||
}
|
||||
presenter.loadBooks();
|
||||
permissionButton.setVisibility(View.GONE);
|
||||
networkText.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -111,7 +111,6 @@
|
||||
<string name="no_downloads_here">No downloads here</string>
|
||||
<string name="no_files_here">No files here</string>
|
||||
<string name="download_complete_snackbar">Download complete</string>
|
||||
<string name="download_over_network">Are you sure you want to start the download without WiFi?</string>
|
||||
<string name="download_no_space">Insufficient space to download this file.</string>
|
||||
<string name="space_available">Space Available:</string>
|
||||
<string name="zim_simple">Simple</string>
|
||||
@ -165,4 +164,7 @@
|
||||
<string name="delete_tab">Delete Tab</string>
|
||||
<string name="next">Next</string>
|
||||
<string name="previous">Previous</string>
|
||||
<string name="wifi_only_title">Allow downloading content via mobile network?</string>
|
||||
<string name="wifi_only_msg">If you choose "Yes" you won\'t be warned in future. However, you can always change this in Settings</string>
|
||||
<string name="pref_wifi_only">Download content only via WiFi</string>
|
||||
</resources>
|
||||
|
@ -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"/>
|
||||
|
||||
<org.kiwix.kiwixmobile.settings.CustomSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="pref_wifi_only"
|
||||
android:title="@string/pref_wifi_only"/>
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
|
Loading…
x
Reference in New Issue
Block a user