Update to Dagger 2.15

This commit is contained in:
Abdul Wadood 2018-03-27 23:36:32 +05:30 committed by Isaac Hutt
parent fba4adf0f1
commit 300b3818a0
18 changed files with 242 additions and 240 deletions

View File

@ -76,11 +76,13 @@ dependencies {
implementation group: 'com.google.guava', name: 'guava', version: '21.0'
// Dagger
implementation 'com.google.dagger:dagger:2.0.2'
annotationProcessor "com.google.dagger:dagger-compiler:2.0.2"
androidTestAnnotationProcessor "com.google.dagger:dagger-compiler:2.0.2"
compileOnly "javax.annotation:javax.annotation-api:$javaxAnnotationVersion"
androidTestCompileOnly "javax.annotation:javax.annotation-api:$javaxAnnotationVersion"
implementation "com.google.dagger:dagger:$daggerVersion"
implementation "com.google.dagger:dagger-android:$daggerVersion"
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
annotationProcessor "com.google.dagger:dagger-android-processor:$daggerVersion"
androidTestAnnotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
// SquiDB
implementation 'com.yahoo.squidb:squidb:2.0.0'

View File

@ -17,6 +17,7 @@
*/
package org.kiwix.kiwixmobile;
import android.app.Activity;
import android.content.Context;
import android.support.multidex.MultiDexApplication;
import android.support.v7.app.AppCompatDelegate;
@ -27,23 +28,49 @@ import org.kiwix.kiwixmobile.di.components.ApplicationComponent;
import org.kiwix.kiwixmobile.di.components.DaggerApplicationComponent;
import org.kiwix.kiwixmobile.di.modules.ApplicationModule;
public class KiwixApplication extends MultiDexApplication {
import javax.inject.Inject;
import dagger.android.AndroidInjector;
import dagger.android.DispatchingAndroidInjector;
import dagger.android.HasActivityInjector;
public class KiwixApplication extends MultiDexApplication implements HasActivityInjector {
private static KiwixApplication application;
private static ApplicationComponent applicationComponent;
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
private ApplicationComponent applicationComponent;
@Inject
DispatchingAndroidInjector<Activity> activityInjector;
public static KiwixApplication getInstance() {
return application;
}
public static ApplicationComponent getApplicationComponent() {
return applicationComponent;
}
public static void setApplicationComponent(ApplicationComponent applicationComponent) {
KiwixApplication.applicationComponent = applicationComponent;
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
application = this;
setApplicationComponent(DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(this))
.build());
}
@Override
public void onCreate() {
super.onCreate();
applicationComponent.inject(this);
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
@ -53,23 +80,7 @@ public class KiwixApplication extends MultiDexApplication {
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
application = this;
initializeInjector();
}
private void initializeInjector() {
setApplicationComponent(DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(this))
.build());
}
public ApplicationComponent getApplicationComponent() {
return this.applicationComponent;
}
public void setApplicationComponent(ApplicationComponent applicationComponent) {
this.applicationComponent = applicationComponent;
public AndroidInjector<Activity> activityInjector() {
return activityInjector;
}
}

View File

@ -81,7 +81,6 @@ import org.kiwix.kiwixmobile.base.BaseActivity;
import org.kiwix.kiwixmobile.bookmarks_view.BookmarksActivity;
import org.kiwix.kiwixmobile.database.BookmarksDao;
import org.kiwix.kiwixmobile.database.KiwixDatabase;
import org.kiwix.kiwixmobile.di.components.ApplicationComponent;
import org.kiwix.kiwixmobile.search.SearchActivity;
import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity;
import org.kiwix.kiwixmobile.utils.DimenUtils;
@ -115,6 +114,8 @@ import butterknife.ButterKnife;
import okhttp3.OkHttpClient;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.os.Build.VERSION.SDK_INT;
import static android.os.Build.VERSION_CODES;
import static org.kiwix.kiwixmobile.TableDrawerAdapter.DocumentSection;
import static org.kiwix.kiwixmobile.TableDrawerAdapter.TableClickListener;
import static org.kiwix.kiwixmobile.search.SearchActivity.EXTRA_SEARCH_IN_TEXT;
@ -147,8 +148,6 @@ import static org.kiwix.kiwixmobile.utils.Constants.TAG_CURRENT_TAB;
import static org.kiwix.kiwixmobile.utils.Constants.TAG_FILE_SEARCHED;
import static org.kiwix.kiwixmobile.utils.Constants.TAG_KIWIX;
import static org.kiwix.kiwixmobile.utils.StyleUtils.dialogStyle;
import static android.os.Build.VERSION.SDK_INT;
import static android.os.Build.VERSION_CODES;
public class KiwixMobileActivity extends BaseActivity implements WebViewCallback {
@ -686,10 +685,6 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
tts.shutdown();
}
@Override protected void setupDagger(ApplicationComponent appComponent) {
appComponent.inject(this);
}
private void updateTableOfContents() {
getCurrentWebView().loadUrl("javascript:(" + documentParserJs + ")()");
}
@ -1382,12 +1377,9 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
int[] ids = widgetManager.getAppWidgetIds(new ComponentName(context, KiwixSearchWidget.class));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
widgetManager.notifyAppWidgetViewDataChanged(ids, android.R.id.list);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
context.sendBroadcast(intent);
}
widgetManager.notifyAppWidgetViewDataChanged(ids, android.R.id.list);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
context.sendBroadcast(intent);
}
private void setUpWebView() {

View File

@ -29,7 +29,6 @@ import android.os.ParcelFileDescriptor.AutoCloseOutputStream;
import android.util.Log;
import android.webkit.MimeTypeMap;
import java.io.RandomAccessFile;
import org.kiwix.kiwixlib.JNIKiwix;
import org.kiwix.kiwixlib.JNIKiwixException;
import org.kiwix.kiwixlib.JNIKiwixInt;
@ -37,6 +36,7 @@ import org.kiwix.kiwixlib.JNIKiwixReader;
import org.kiwix.kiwixlib.JNIKiwixSearcher;
import org.kiwix.kiwixlib.JNIKiwixString;
import org.kiwix.kiwixlib.Pair;
import org.kiwix.kiwixmobile.utils.files.FileUtils;
import java.io.File;
import java.io.FileNotFoundException;
@ -44,13 +44,13 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.inject.Inject;
import org.kiwix.kiwixmobile.utils.files.FileUtils;
import static org.kiwix.kiwixmobile.utils.Constants.TAG_KIWIX;
@ -70,18 +70,17 @@ public class ZimContentProvider extends ContentProvider {
public static String zimFileName;
@Inject public static JNIKiwix jniKiwix;
@Inject
public JNIKiwix jniKiwix;
public static JNIKiwixReader currentJNIReader;
public static JNIKiwixSearcher jniSearcher;
@Inject public static Context context;
private static ArrayList<String> listedEntries;
public void setupDagger() {
KiwixApplication.getInstance().getApplicationComponent().inject(this);
KiwixApplication.getApplicationComponent().inject(this);
setIcuDataDirectory();
jniSearcher = new JNIKiwixSearcher();
listedEntries = new ArrayList<>();
@ -109,7 +108,7 @@ public class ZimContentProvider extends ContentProvider {
* file path itself (embedded fulltext index) */
return file;
}
public synchronized static String setZimFile(String fileName) {
if (!new File(fileName).exists()) {
Log.e(TAG_KIWIX, "Unable to find the ZIM file " + fileName);
@ -445,8 +444,8 @@ public class ZimContentProvider extends ContentProvider {
}
private void setIcuDataDirectory() {
File workingDir = context.getFilesDir();
String icuDirPath = loadICUData(context, workingDir);
File workingDir = KiwixApplication.getInstance().getFilesDir();
String icuDirPath = loadICUData(KiwixApplication.getInstance(), workingDir);
if (icuDirPath != null) {
Log.d(TAG_KIWIX, "Setting the ICU directory path to " + icuDirPath);

View File

@ -21,48 +21,13 @@ import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import org.kiwix.kiwixmobile.KiwixApplication;
import org.kiwix.kiwixmobile.di.components.ApplicationComponent;
import dagger.android.AndroidInjection;
public abstract class BaseActivity extends AppCompatActivity {
@Override protected void onCreate(@Nullable Bundle savedInstanceState) {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
AndroidInjection.inject(this);
super.onCreate(savedInstanceState);
setupDagger(KiwixApplication.getInstance().getApplicationComponent());
//attachPresenter();
}
@Override protected void onStart() {
super.onStart();
//presenter.onStart();
}
@Override protected void onResume() {
super.onResume();
//presenter.onResume();
}
@Override protected void onPause() {
super.onPause();
//presenter.onPause();
}
@Override protected void onStop() {
super.onStop();
//presenter.onStop();
}
@Override protected void onDestroy() {
super.onDestroy();
//presenter.onDestroy();
}
//protected void attachPresenter(Presenter presenter) {
// this.presenter = presenter;
//}
protected abstract void setupDagger(ApplicationComponent appComponent);
//public abstract void attachPresenter();
}

View File

@ -0,0 +1,32 @@
package org.kiwix.kiwixmobile.base;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.support.v4.app.Fragment;
import org.kiwix.kiwixmobile.KiwixApplication;
/**
* All fragments should inherit from this fragment.
*/
public abstract class BaseFragment extends Fragment {
@Override
public void onAttach(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
KiwixApplication.getApplicationComponent().inject(this);
}
super.onAttach(context);
}
@SuppressWarnings("deprecation")
@Override
public void onAttach(Activity activity) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
KiwixApplication.getApplicationComponent().inject(this);
}
super.onAttach(activity);
}
}

View File

@ -22,9 +22,7 @@ package org.kiwix.kiwixmobile.bookmarks_view;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.design.widget.CoordinatorLayout;
@ -48,7 +46,6 @@ import android.widget.ListView;
import org.kiwix.kiwixmobile.KiwixMobileActivity;
import org.kiwix.kiwixmobile.R;
import org.kiwix.kiwixmobile.base.BaseActivity;
import org.kiwix.kiwixmobile.di.components.ApplicationComponent;
import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity;
import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil;
@ -108,12 +105,6 @@ public class BookmarksActivity extends BaseActivity
presenter.loadBookmarks(this);
}
@Override
protected void setupDagger(ApplicationComponent appComponent) {
appComponent.inject(this);
}
private void setNoBookmarksState() {
if (bookmarksList.getCount() == 0) {
noBookmarksLayout.setVisibility(View.VISIBLE);

View File

@ -17,20 +17,17 @@
*/
package org.kiwix.kiwixmobile.di.components;
import org.kiwix.kiwixmobile.KiwixMobileActivity;
import org.kiwix.kiwixmobile.KiwixApplication;
import org.kiwix.kiwixmobile.ZimContentProvider;
import org.kiwix.kiwixmobile.bookmarks_view.BookmarksActivity;
import org.kiwix.kiwixmobile.base.BaseFragment;
import org.kiwix.kiwixmobile.di.modules.ApplicationModule;
import org.kiwix.kiwixmobile.di.modules.JNIModule;
import org.kiwix.kiwixmobile.di.modules.NetworkModule;
import org.kiwix.kiwixmobile.downloader.DownloadFragment;
import org.kiwix.kiwixmobile.downloader.DownloadService;
import org.kiwix.kiwixmobile.library.LibraryAdapter;
import org.kiwix.kiwixmobile.search.SearchActivity;
import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity;
import org.kiwix.kiwixmobile.views.AutoCompleteAdapter;
import org.kiwix.kiwixmobile.views.web.KiwixWebView;
import org.kiwix.kiwixmobile.zim_manager.ZimManageActivity;
import org.kiwix.kiwixmobile.zim_manager.fileselect_view.ZimFileSelectFragment;
import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryFragment;
@ -45,13 +42,13 @@ import dagger.Component;
JNIModule.class,
})
public interface ApplicationComponent {
void inject(KiwixMobileActivity activity);
void inject(KiwixApplication application);
void inject(DownloadService service);
void inject(LibraryFragment libraryFragment);
void inject(BookmarksActivity bookmarksActivity);
void inject(BaseFragment baseFragment);
void inject(ZimFileSelectFragment zimFileSelectFragment);
@ -59,17 +56,9 @@ public interface ApplicationComponent {
void inject(LibraryAdapter libraryAdapter);
void inject(SearchActivity searchActivity);
void inject(ZimManageActivity zimManageActivity);
void inject(KiwixWebView kiwixWebView);
void inject(KiwixSettingsActivity kiwixSettingsActivity);
void inject(KiwixSettingsActivity.PrefsFragment prefsFragment);
void inject(DownloadFragment downloadFragment);
void inject(AutoCompleteAdapter autoCompleteAdapter);
}

View File

@ -0,0 +1,40 @@
package org.kiwix.kiwixmobile.di.modules;
import org.kiwix.kiwixmobile.KiwixMobileActivity;
import org.kiwix.kiwixmobile.bookmarks_view.BookmarksActivity;
import org.kiwix.kiwixmobile.di.PerActivity;
import org.kiwix.kiwixmobile.search.SearchActivity;
import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity;
import org.kiwix.kiwixmobile.zim_manager.ZimManageActivity;
import dagger.Module;
import dagger.android.ContributesAndroidInjector;
/**
* Dagger.Android annotation processor will create the sub-components. We also specify the modules
* to be used by each sub-components and make Dagger.Android aware of a scope annotation
* {@link PerActivity}.
*/
@Module
public abstract class ActivityBindingModule {
@PerActivity
@ContributesAndroidInjector
public abstract KiwixMobileActivity provideKiwixMobileActivity();
@PerActivity
@ContributesAndroidInjector
public abstract KiwixSettingsActivity provideKiwixSettingsActivity();
@PerActivity
@ContributesAndroidInjector
public abstract ZimManageActivity provideZimManageActivity();
@PerActivity
@ContributesAndroidInjector
public abstract SearchActivity provideSearchActivity();
@PerActivity
@ContributesAndroidInjector
public abstract BookmarksActivity provideBookmarksActivity();
}

View File

@ -27,8 +27,10 @@ import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import dagger.android.AndroidInjectionModule;
@Module public class ApplicationModule {
@Module(includes = {ActivityBindingModule.class, AndroidInjectionModule.class})
public class ApplicationModule {
private final KiwixApplication application;
public ApplicationModule(KiwixApplication application) {

View File

@ -25,11 +25,9 @@ import android.database.DataSetObserver;
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;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.util.Base64;
import android.view.LayoutInflater;
@ -42,11 +40,10 @@ import android.widget.ProgressBar;
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;
import org.kiwix.kiwixmobile.base.BaseFragment;
import org.kiwix.kiwixmobile.library.entity.LibraryNetworkEntity;
import org.kiwix.kiwixmobile.utils.NetworkUtils;
import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil;
@ -57,14 +54,13 @@ import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryFragment;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Locale;
import javax.inject.Inject;
import static org.kiwix.kiwixmobile.utils.Constants.PREF_WIFI_ONLY;
import static org.kiwix.kiwixmobile.utils.StyleUtils.dialogStyle;
public class DownloadFragment extends Fragment {
public class DownloadFragment extends BaseFragment {
public static LinkedHashMap<Integer, LibraryNetworkEntity.Book> mDownloads = new LinkedHashMap<>();
public static LinkedHashMap<Integer, String> mDownloadFiles = new LinkedHashMap<>();
@ -76,15 +72,11 @@ public class DownloadFragment extends Fragment {
private Activity faActivity;
private boolean hasArtificiallyPaused;
@Inject static SharedPreferenceUtil sharedPreferenceUtil;
private void setupDagger() {
KiwixApplication.getInstance().getApplicationComponent().inject(this);
}
@Inject
SharedPreferenceUtil sharedPreferenceUtil;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setupDagger();
faActivity = super.getActivity();
relLayout = (RelativeLayout) inflater.inflate(R.layout.download_management, container, false);
@ -122,7 +114,7 @@ public class DownloadFragment extends Fragment {
downloadAdapter.unRegisterDataSetObserver();
}
public static void showNoWiFiWarning(Context context, Runnable yesAction) {
public void showNoWiFiWarning(Context context, Runnable yesAction) {
new AlertDialog.Builder(context)
.setTitle(R.string.wifi_only_title)
.setMessage(R.string.wifi_only_msg)
@ -200,7 +192,7 @@ public class DownloadFragment extends Fragment {
String fileName = FileUtils.getFileName(mDownloadFiles.get(mKeys[position]));
{
Snackbar completeSnack = Snackbar.make(mainLayout, getResources().getString(R.string.download_complete_snackbar), Snackbar.LENGTH_LONG);
completeSnack.setAction(getResources().getString(R.string.open), v -> ZimFileSelectFragment.finishResult(fileName)).setActionTextColor(getResources().getColor(R.color.white)).show();
completeSnack.setAction(getResources().getString(R.string.open), v -> zimManageActivity.finishResult(fileName)).setActionTextColor(getResources().getColor(R.color.white)).show();
}
ZimFileSelectFragment zimFileSelectFragment = (ZimFileSelectFragment) zimManageActivity.mSectionsPagerAdapter.getItem(0);
zimFileSelectFragment.addBook(fileName);

View File

@ -19,16 +19,13 @@ package org.kiwix.kiwixmobile.search;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.speech.RecognizerIntent;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.text.Html;
@ -44,9 +41,9 @@ import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import org.kiwix.kiwixmobile.KiwixApplication;
import org.kiwix.kiwixmobile.KiwixMobileActivity;
import org.kiwix.kiwixmobile.R;
import org.kiwix.kiwixmobile.base.BaseActivity;
import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil;
import org.kiwix.kiwixmobile.views.AutoCompleteAdapter;
@ -58,11 +55,11 @@ import javax.inject.Inject;
import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_IS_WIDGET_VOICE;
import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_SEARCH;
import static org.kiwix.kiwixmobile.utils.Constants.TAG_FILE_SEARCHED;
import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_SEARCH_TEXT;
import static org.kiwix.kiwixmobile.utils.Constants.TAG_FILE_SEARCHED;
import static org.kiwix.kiwixmobile.utils.StyleUtils.dialogStyle;
public class SearchActivity extends AppCompatActivity
public class SearchActivity extends BaseActivity
implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener, SearchViewCallback {
public static final String EXTRA_SEARCH_IN_TEXT = "bool_searchintext";
@ -79,19 +76,13 @@ public class SearchActivity extends AppCompatActivity
@Inject
SharedPreferenceUtil sharedPreferenceUtil;
private void setupDagger() {
KiwixApplication.getInstance().getApplicationComponent().inject(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
setupDagger();
super.onCreate(savedInstanceState);
if (sharedPreferenceUtil.getPrefNightMode()) {
setTheme(R.style.AppTheme_Night);
}
super.onCreate(savedInstanceState);
View contentView = LayoutInflater.from(this).inflate(R.layout.search, null);
setContentView(contentView);
setContentView(R.layout.search);
if (savedInstanceState != null) {
searchText = savedInstanceState.getString(EXTRA_SEARCH_TEXT);

View File

@ -31,7 +31,6 @@ import android.preference.PreferenceCategory;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.webkit.WebView;
@ -42,12 +41,12 @@ import org.kiwix.kiwixmobile.BuildConfig;
import org.kiwix.kiwixmobile.KiwixApplication;
import org.kiwix.kiwixmobile.KiwixMobileActivity;
import org.kiwix.kiwixmobile.R;
import org.kiwix.kiwixmobile.base.BaseActivity;
import org.kiwix.kiwixmobile.database.KiwixDatabase;
import org.kiwix.kiwixmobile.database.RecentSearchDao;
import org.kiwix.kiwixmobile.utils.LanguageUtils;
import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil;
import org.kiwix.kiwixmobile.utils.StyleUtils;
import org.kiwix.kiwixmobile.views.LanguageSelectDialog;
import org.kiwix.kiwixmobile.views.SliderPreference;
import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryUtils;
@ -76,7 +75,7 @@ import static org.kiwix.kiwixmobile.utils.Constants.RESULT_HISTORY_CLEARED;
import static org.kiwix.kiwixmobile.utils.Constants.RESULT_RESTART;
import static org.kiwix.kiwixmobile.utils.StyleUtils.dialogStyle;
public class KiwixSettingsActivity extends AppCompatActivity {
public class KiwixSettingsActivity extends BaseActivity {
public static boolean allHistoryCleared = false;
@ -86,18 +85,13 @@ public class KiwixSettingsActivity extends AppCompatActivity {
@Inject
SharedPreferenceUtil sharedPreferenceUtil;
private void setupDagger() {
KiwixApplication.getInstance().getApplicationComponent().inject(this);
}
@Override
public void onCreate(Bundle savedInstanceState) {
setupDagger();
if(nightMode(sharedPreferenceUtil)){
setTheme(R.style.AppTheme_Night);
}
getWindow().setWindowAnimations(R.style.WindowAnimationTransition);
super.onCreate(savedInstanceState);
if (nightMode(sharedPreferenceUtil)) {
setTheme(R.style.AppTheme_Night);
}
setContentView(R.layout.settings);
allHistoryCleared = false;
@ -152,7 +146,7 @@ public class KiwixSettingsActivity extends AppCompatActivity {
@Inject SharedPreferenceUtil sharedPreferenceUtil;
void setupDagger() {
KiwixApplication.getInstance().getApplicationComponent().inject(this);
KiwixApplication.getApplicationComponent().inject(this);
}
@Override
@ -200,7 +194,7 @@ public class KiwixSettingsActivity extends AppCompatActivity {
} else {
findPreference(PREF_STORAGE).setTitle(sharedPreferenceUtil.getPrefStorageTitle("External"));
}
findPreference(PREF_STORAGE).setSummary(LibraryUtils.bytesToHuman( new File(sharedPreferenceUtil.getPrefStorage()).getFreeSpace()));
findPreference(PREF_STORAGE).setSummary(LibraryUtils.bytesToHuman(new File(sharedPreferenceUtil.getPrefStorage()).getFreeSpace()));
}
}

View File

@ -17,7 +17,9 @@
*/
package org.kiwix.kiwixmobile.zim_manager;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.NonNull;
@ -26,7 +28,6 @@ import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
@ -34,19 +35,22 @@ import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import org.kiwix.kiwixmobile.KiwixApplication;
import org.kiwix.kiwixmobile.KiwixMobileActivity;
import org.kiwix.kiwixmobile.R;
import org.kiwix.kiwixmobile.base.BaseActivity;
import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity;
import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil;
import org.kiwix.kiwixmobile.views.LanguageSelectDialog;
import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryFragment;
import java.io.File;
import javax.inject.Inject;
import static org.kiwix.kiwixmobile.utils.Constants.TAG_KIWIX;
import static org.kiwix.kiwixmobile.utils.StyleUtils.dialogStyle;
public class ZimManageActivity extends AppCompatActivity implements ZimManageViewCallback {
public class ZimManageActivity extends BaseActivity implements ZimManageViewCallback {
public static final String TAB_EXTRA = "TAB";
/**
@ -81,17 +85,12 @@ public class ZimManageActivity extends AppCompatActivity implements ZimManageVie
@Inject
SharedPreferenceUtil sharedPreferenceUtil;
private void setupDagger() {
KiwixApplication.getInstance().getApplicationComponent().inject(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
setupDagger();
super.onCreate(savedInstanceState);
if (KiwixSettingsActivity.nightMode(sharedPreferenceUtil)) {
setTheme(R.style.AppTheme_Night);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.zim_manager);
setUpToolbar();
@ -131,7 +130,7 @@ public class ZimManageActivity extends AppCompatActivity implements ZimManageVie
// Disable scrolling for the AppBarLayout on top of the screen
// User can only scroll the PageViewer component
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appbar);
AppBarLayout appBarLayout = findViewById(R.id.appbar);
if (appBarLayout.getLayoutParams() != null) {
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
AppBarLayout.Behavior appBarLayoutBehaviour = new AppBarLayout.Behavior();
@ -257,6 +256,20 @@ public class ZimManageActivity extends AppCompatActivity implements ZimManageVie
}
}
// Set zim file and return
public void finishResult(String path) {
if (path != null) {
File file = new File(path);
Uri uri = Uri.fromFile(file);
Log.i(TAG_KIWIX, "Opening Zim File: " + uri);
setResult(Activity.RESULT_OK, new Intent().setData(uri));
finish();
} else {
setResult(Activity.RESULT_CANCELED);
finish();
}
}
private void showLanguageSelect() {
new LanguageSelectDialog.Builder(this, dialogStyle())
.setLanguages(mSectionsPagerAdapter.libraryFragment.libraryAdapter.languages)

View File

@ -17,30 +17,46 @@
*/
package org.kiwix.kiwixmobile.zim_manager;
import android.app.AlertDialog;
import android.content.Context;
import android.util.Log;
import org.kiwix.kiwixmobile.KiwixMobileActivity;
import org.kiwix.kiwixmobile.R;
import org.kiwix.kiwixmobile.base.BasePresenter;
import org.kiwix.kiwixmobile.downloader.DownloadFragment;
import org.kiwix.kiwixmobile.downloader.DownloadService;
import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil;
import javax.inject.Inject;
import static org.kiwix.kiwixmobile.zim_manager.ZimManageActivity.KIWIX_TAG;
/**
* Created by srv_twry on 15/2/18.
* Presenter for {@link ZimManageActivity}
*/
public class ZimManagePresenter extends BasePresenter<ZimManageViewCallback> {
class ZimManagePresenter extends BasePresenter<ZimManageViewCallback> {
@Inject
public ZimManagePresenter() {}
@Inject
SharedPreferenceUtil mSharedPreferenceUtil;
void showNoWifiWarning(Context context, String action) {
if (DownloadService.ACTION_NO_WIFI.equals(action)) {
DownloadFragment.showNoWiFiWarning(context, () -> {});
Log.i(KIWIX_TAG, "No WiFi, showing warning");
}
@Inject
ZimManagePresenter() {
}
void showNoWifiWarning(Context context, String action) {
if (DownloadService.ACTION_NO_WIFI.equals(action)) {
new AlertDialog.Builder(context)
.setTitle(R.string.wifi_only_title)
.setMessage(R.string.wifi_only_msg)
.setPositiveButton(R.string.yes, (dialog, i) -> {
mSharedPreferenceUtil.putPrefWifiOnly(false);
KiwixMobileActivity.wifiOnly = false;
})
.setNegativeButton(R.string.no, (dialog, i) -> {
})
.show();
Log.i(KIWIX_TAG, "No WiFi, showing warning");
}
}
}

View File

@ -20,14 +20,10 @@
package org.kiwix.kiwixmobile.zim_manager.fileselect_view;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AlertDialog;
@ -47,6 +43,7 @@ import android.widget.Toast;
import org.kiwix.kiwixmobile.KiwixApplication;
import org.kiwix.kiwixmobile.R;
import org.kiwix.kiwixmobile.ZimContentProvider;
import org.kiwix.kiwixmobile.base.BaseFragment;
import org.kiwix.kiwixmobile.database.BookDao;
import org.kiwix.kiwixmobile.database.KiwixDatabase;
import org.kiwix.kiwixmobile.library.LibraryAdapter;
@ -68,17 +65,16 @@ import java.util.List;
import javax.inject.Inject;
import static org.kiwix.kiwixmobile.utils.Constants.REQUEST_STORAGE_PERMISSION;
import static org.kiwix.kiwixmobile.utils.Constants.TAG_KIWIX;
import static org.kiwix.kiwixmobile.utils.NetworkUtils.parseURL;
import static org.kiwix.kiwixmobile.utils.StyleUtils.dialogStyle;
public class ZimFileSelectFragment extends Fragment
public class ZimFileSelectFragment extends BaseFragment
implements OnItemClickListener, AdapterView.OnItemLongClickListener, ZimFileSelectViewCallback{
public static ZimManageActivity context;
public RelativeLayout llLayout;
public SwipeRefreshLayout swipeRefreshLayout;
private ZimManageActivity zimManageActivity;
private RescanDataAdapter mRescanAdapter;
private ArrayList<LibraryNetworkEntity.Book> mFiles;
private ListView mZimFileList;
@ -91,14 +87,10 @@ public class ZimFileSelectFragment extends Fragment
@Inject BookUtils bookUtils;
@Inject SharedPreferenceUtil sharedPreferenceUtil;
private void setupDagger() {
KiwixApplication.getInstance().getApplicationComponent().inject(this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
context = (ZimManageActivity) super.getActivity();
setupDagger();
KiwixApplication.getApplicationComponent().inject(this);
zimManageActivity = (ZimManageActivity) super.getActivity();
presenter.attachView(this);
// Replace LinearLayout by the type of the root element of the layout you're trying to load
llLayout = (RelativeLayout) inflater.inflate(R.layout.zim_list, container, false);
@ -111,45 +103,25 @@ public class ZimFileSelectFragment extends Fragment
// SwipeRefreshLayout for the list view
swipeRefreshLayout = llLayout.findViewById(R.id.zim_swiperefresh);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refreshFragment();
}
});
swipeRefreshLayout.setOnRefreshListener(this::refreshFragment);
// A boolean to distinguish between a user refresh and a normal loading
mHasRefresh = false;
mRescanAdapter = new RescanDataAdapter(ZimFileSelectFragment.context, 0, mFiles);
mRescanAdapter = new RescanDataAdapter(zimManageActivity, 0, mFiles);
// Allow temporary use of ZimContentProvider to query books
ZimContentProvider.canIterate = true;
presenter.loadLocalZimFileFromDb(context);
bookDao = new BookDao(KiwixDatabase.getInstance(context));
presenter.loadLocalZimFileFromDb(zimManageActivity);
bookDao = new BookDao(KiwixDatabase.getInstance(zimManageActivity));
return llLayout; // We must return the loaded Layout
}
// Set zim file and return
public static void finishResult(String path) {
ZimManageActivity zimManageActivity = context;
if (path != null) {
File file = new File(path);
Uri uri = Uri.fromFile(file);
Log.i(TAG_KIWIX, "Opening Zim File: " + uri);
zimManageActivity.setResult(Activity.RESULT_OK, new Intent().setData(uri));
zimManageActivity.finish();
} else {
zimManageActivity.setResult(Activity.RESULT_CANCELED);
zimManageActivity.finish();
}
}
@Override
public void onResume() {
presenter.loadLocalZimFileFromDb(context);
presenter.loadLocalZimFileFromDb(zimManageActivity);
super.onResume();
}
@ -178,7 +150,7 @@ public class ZimFileSelectFragment extends Fragment
}
mHasRefresh = true;
presenter.loadLocalZimFileFromDb(context);
presenter.loadLocalZimFileFromDb(zimManageActivity);
}
// Add book after download
@ -225,11 +197,11 @@ public class ZimFileSelectFragment extends Fragment
checkEmpty();
new FileSearch(context, new FileSearch.ResultListener() {
new FileSearch(zimManageActivity, new FileSearch.ResultListener() {
@Override
public void onBookFound(LibraryNetworkEntity.Book book) {
if (!mFiles.contains(book)) {
context.runOnUiThread(() -> {
zimManageActivity.runOnUiThread(() -> {
Log.i("Scanner", "File Search: Found Book " + book.title);
mFiles.add(book);
mRescanAdapter.notifyDataSetChanged();
@ -251,12 +223,12 @@ public class ZimFileSelectFragment extends Fragment
boolean cached = mFiles.containsAll(bookDao.getBooks()) && bookDao.getBooks().containsAll(mFiles);
// If content changed then update the list of downloadable books
if (!cached && context.mSectionsPagerAdapter.libraryFragment.libraryAdapter != null && context.searchView != null) {
context.mSectionsPagerAdapter.libraryFragment.libraryAdapter.getFilter().filter(context.searchView.getQuery());
if (!cached && zimManageActivity.mSectionsPagerAdapter.libraryFragment.libraryAdapter != null && zimManageActivity.searchView != null) {
zimManageActivity.mSectionsPagerAdapter.libraryFragment.libraryAdapter.getFilter().filter(zimManageActivity.searchView.getQuery());
}
// Save the current list of books
context.runOnUiThread(() -> {
zimManageActivity.runOnUiThread(() -> {
mRescanAdapter.notifyDataSetChanged();
bookDao.saveBooks(mFiles);
checkEmpty();
@ -278,7 +250,7 @@ public class ZimFileSelectFragment extends Fragment
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
getFiles();
} else if (grantResults.length != 0) {
super.getActivity().finish();
zimManageActivity.finish();
}
}
@ -296,11 +268,11 @@ public class ZimFileSelectFragment extends Fragment
file = data.file.getPath();
if (!data.file.canRead()) {
Toast.makeText(context, getString(R.string.error_filenotfound), Toast.LENGTH_LONG).show();
Toast.makeText(zimManageActivity, getString(R.string.error_filenotfound), Toast.LENGTH_LONG).show();
return;
}
finishResult(file);
zimManageActivity.finishResult(file);
}
@Override
@ -310,13 +282,13 @@ public class ZimFileSelectFragment extends Fragment
}
public void deleteSpecificZimDialog(int position) {
new AlertDialog.Builder(super.getActivity(), dialogStyle())
new AlertDialog.Builder(zimManageActivity, dialogStyle())
.setMessage(getString(R.string.delete_specific_zim))
.setPositiveButton(getResources().getString(R.string.delete), (dialog, which) -> {
if (deleteSpecificZimFile(position)) {
Toast.makeText(context, getResources().getString(R.string.delete_specific_zim_toast), Toast.LENGTH_SHORT).show();
Toast.makeText(zimManageActivity, getResources().getString(R.string.delete_specific_zim_toast), Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, getResources().getString(R.string.delete_zim_failed), Toast.LENGTH_SHORT).show();
Toast.makeText(zimManageActivity, getResources().getString(R.string.delete_zim_failed), Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton(android.R.string.no, (dialog, which) -> {
@ -335,8 +307,8 @@ public class ZimFileSelectFragment extends Fragment
mFiles.remove(position);
mRescanAdapter.notifyDataSetChanged();
checkEmpty();
if (context.mSectionsPagerAdapter.libraryFragment.libraryAdapter != null) {
context.mSectionsPagerAdapter.libraryFragment.libraryAdapter.getFilter().filter(context.searchView.getQuery());
if (zimManageActivity.mSectionsPagerAdapter.libraryFragment.libraryAdapter != null) {
zimManageActivity.mSectionsPagerAdapter.libraryFragment.libraryAdapter.getFilter().filter(zimManageActivity.searchView.getQuery());
}
return true;
}
@ -361,7 +333,7 @@ public class ZimFileSelectFragment extends Fragment
ViewHolder holder;
LibraryNetworkEntity.Book book = getItem(position);
if (convertView == null) {
convertView = View.inflate(context, R.layout.library_item, null);
convertView = View.inflate(zimManageActivity, R.layout.library_item, null);
holder = new ViewHolder();
holder.title = convertView.findViewById(R.id.title);
holder.description = convertView.findViewById(R.id.description);
@ -389,7 +361,7 @@ public class ZimFileSelectFragment extends Fragment
holder.date.setText(book.getDate());
holder.size.setText(LibraryAdapter.createGbString(book.getSize()));
holder.fileName.setText(parseURL(getActivity(), book.file.getPath()));
holder.favicon.setImageBitmap(LibraryAdapter.createBitmapFromEncodedString(book.getFavicon(), context));
holder.favicon.setImageBitmap(LibraryAdapter.createBitmapFromEncodedString(book.getFavicon(), zimManageActivity));
//// Check if no value is empty. Set the view to View.GONE, if it is. To View.VISIBLE, if not.

View File

@ -17,6 +17,7 @@
*/
package org.kiwix.kiwixmobile.zim_manager.library_view;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@ -29,7 +30,6 @@ import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.IBinder;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.Log;
@ -46,11 +46,11 @@ import android.widget.Toast;
import org.kiwix.kiwixmobile.KiwixApplication;
import org.kiwix.kiwixmobile.KiwixMobileActivity;
import org.kiwix.kiwixmobile.R;
import org.kiwix.kiwixmobile.base.BaseFragment;
import org.kiwix.kiwixmobile.downloader.DownloadFragment;
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.SharedPreferenceUtil;
import org.kiwix.kiwixmobile.utils.StorageUtils;
@ -75,7 +75,7 @@ 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;
public class LibraryFragment extends Fragment
public class LibraryFragment extends BaseFragment
implements AdapterView.OnItemClickListener, StorageSelectDialog.OnSelectListener, LibraryViewCallback {
@ -86,9 +86,6 @@ public class LibraryFragment extends Fragment
@BindView(R.id.network_permission_button)
Button permissionButton;
@Inject
KiwixService kiwixService;
public LinearLayout llLayout;
@BindView(R.id.library_swiperefresh)
@ -121,15 +118,10 @@ public class LibraryFragment extends Fragment
@Inject
SharedPreferenceUtil sharedPreferenceUtil;
private void setupDagger() {
KiwixApplication.getInstance().getApplicationComponent().inject(this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setupDagger();
KiwixApplication.getApplicationComponent().inject(this);
TestingUtils.bindResource(LibraryFragment.class);
llLayout = (LinearLayout) inflater.inflate(R.layout.activity_library, container, false);
ButterKnife.bind(this, llLayout);
@ -299,9 +291,17 @@ public class LibraryFragment extends Fragment
}
if (KiwixMobileActivity.wifiOnly && !NetworkUtils.isWiFi(getContext())) {
DownloadFragment.showNoWiFiWarning(getContext(), () -> {
downloadFile((Book) parent.getAdapter().getItem(position));
});
new AlertDialog.Builder(getContext())
.setTitle(R.string.wifi_only_title)
.setMessage(R.string.wifi_only_msg)
.setPositiveButton(R.string.yes, (dialog, i) -> {
sharedPreferenceUtil.putPrefWifiOnly(false);
KiwixMobileActivity.wifiOnly = false;
downloadFile((Book) parent.getAdapter().getItem(position));
})
.setNegativeButton(R.string.no, (dialog, i) -> {
})
.show();
} else {
downloadFile((Book) parent.getAdapter().getItem(position));
}

View File

@ -22,6 +22,7 @@ ext {
okHttpVersion = '3.9.1'
retrofitVersion = '2.3.0'
javaxAnnotationVersion = '1.3.2'
daggerVersion = '2.15'
}
allprojects {