diff --git a/app/build.gradle b/app/build.gradle index 79b0aa34b..c7992469e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -43,11 +43,15 @@ dependencies { compile project(":kiwixlib") apt "com.google.dagger:dagger-compiler:2.0.2" + androidTestApt "com.google.dagger:dagger-compiler:2.0.2" compile 'com.yahoo.squidb:squidb:2.0.0' compile 'com.yahoo.squidb:squidb-annotations:2.0.0' apt 'com.yahoo.squidb:squidb-processor:2.0.0' + compile 'commons-io:commons-io:2.5' + + compile 'com.squareup.okhttp3:okhttp:3.4.1' compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' diff --git a/app/src/androidTestKiwix/java/org/kiwix/kiwixmobile/di/components/TestComponent.java b/app/src/androidTestKiwix/java/org/kiwix/kiwixmobile/di/components/TestComponent.java new file mode 100644 index 000000000..959d31cd4 --- /dev/null +++ b/app/src/androidTestKiwix/java/org/kiwix/kiwixmobile/di/components/TestComponent.java @@ -0,0 +1,24 @@ +package org.kiwix.kiwixmobile.di.components; + +import android.support.test.espresso.core.deps.dagger.Module; +import dagger.Component; +import javax.inject.Singleton; +import org.kiwix.kiwixmobile.di.modules.ApplicationModule; +import org.kiwix.kiwixmobile.di.modules.NetworkModule; +import org.kiwix.kiwixmobile.di.modules.TestModule; +import org.kiwix.kiwixmobile.utils.ZimTest; + +/** + * Created by mhutti1 on 13/04/17. + */ + +@Singleton +@Component(modules = { + ApplicationModule.class, + NetworkModule.class, + TestModule.class, +}) +public interface TestComponent extends ApplicationComponent { + + void inject(ZimTest zimTest); +} diff --git a/app/src/androidTestKiwix/java/org/kiwix/kiwixmobile/di/modules/TestModule.java b/app/src/androidTestKiwix/java/org/kiwix/kiwixmobile/di/modules/TestModule.java new file mode 100644 index 000000000..d27b46ea3 --- /dev/null +++ b/app/src/androidTestKiwix/java/org/kiwix/kiwixmobile/di/modules/TestModule.java @@ -0,0 +1,46 @@ +package org.kiwix.kiwixmobile.di.modules; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; + +import android.content.Context; +import dagger.Module; +import dagger.Provides; +import java.io.IOException; +import java.io.InputStream; +import javax.inject.Singleton; +import org.apache.commons.io.IOUtils; +import org.kiwix.kiwixlib.JNIKiwix; +import org.mockito.Mockito; + +/** + * Created by mhutti1 on 13/04/17. + */ + +@Module +public class TestModule{ + + @Provides + @Singleton + public JNIKiwix providesJNIKiwix(Context context) { + JNIKiwix jniKiwix = Mockito.mock(JNIKiwix.class); + try { + InputStream inStream = TestModule.class.getClassLoader().getResourceAsStream("summary"); + byte[] summary = IOUtils.toByteArray(inStream); + InputStream inStream2 = TestModule.class.getClassLoader().getResourceAsStream("testpage"); + byte[] fool = IOUtils.toByteArray(inStream2); + doReturn(summary).when(jniKiwix).getContent(eq("A/index.htm"),any(),any()); + doReturn(fool).when(jniKiwix).getContent(eq("A/A_Fool_for_You.html"),any(),any()); + doReturn("A/index.htm").when(jniKiwix).getMainPage(); + doReturn(true).when(jniKiwix).loadZIM(any()); + doReturn(true).when(jniKiwix).loadFulltextIndex(any()); + doReturn("mockid").when(jniKiwix).getId(); + doReturn("mockname").when(jniKiwix).getName(); + } catch (IOException e) { + e.printStackTrace(); + } + return jniKiwix; + } + +} diff --git a/app/src/androidTestKiwix/java/org/kiwix/kiwixmobile/utils/ZimTest.java b/app/src/androidTestKiwix/java/org/kiwix/kiwixmobile/utils/ZimTest.java index 3190efaf8..6ee98db5d 100644 --- a/app/src/androidTestKiwix/java/org/kiwix/kiwixmobile/utils/ZimTest.java +++ b/app/src/androidTestKiwix/java/org/kiwix/kiwixmobile/utils/ZimTest.java @@ -22,8 +22,11 @@ import static org.hamcrest.Matchers.allOf; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.hasToString; import static org.hamcrest.core.StringStartsWith.startsWith; -import static org.kiwix.kiwixmobile.library.LibraryAdapter.parseURL; +import static org.kiwix.kiwixmobile.utils.NetworkUtils.parseURL; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; import android.support.test.espresso.ViewInteraction; import android.support.test.espresso.action.ViewActions; import android.support.test.espresso.contrib.DrawerActions; @@ -36,7 +39,10 @@ import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; +import java.io.File; +import java.io.IOException; import java.util.Map; +import javax.inject.Inject; import net.bytebuddy.matcher.StringMatcher; import org.hamcrest.Description; import org.hamcrest.Matcher; @@ -45,7 +51,15 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.kiwix.kiwixmobile.KiwixApplication; +import org.kiwix.kiwixmobile.KiwixMobileActivity; import org.kiwix.kiwixmobile.R; +import org.kiwix.kiwixmobile.ZimContentProvider; +import org.kiwix.kiwixmobile.di.components.DaggerApplicationComponent; +import org.kiwix.kiwixmobile.di.components.DaggerTestComponent; +import org.kiwix.kiwixmobile.di.components.TestComponent; +import org.kiwix.kiwixmobile.di.modules.ApplicationModule; +import org.kiwix.kiwixmobile.di.modules.TestModule; import org.kiwix.kiwixmobile.library.LibraryAdapter; import org.kiwix.kiwixmobile.library.entity.LibraryNetworkEntity.Book; import org.kiwix.kiwixmobile.testutils.TestUtils; @@ -54,13 +68,44 @@ import org.kiwix.kiwixmobile.testutils.TestUtils; @RunWith(AndroidJUnit4.class) public class ZimTest { + @Inject + Context context; + @Rule - public ActivityTestRule mActivityTestRule = new ActivityTestRule<>( - SplashActivity.class); + public ActivityTestRule mActivityTestRule = new ActivityTestRule<>( + KiwixMobileActivity.class, false, false); + + @Before public void setUp() { + TestComponent component = DaggerTestComponent.builder().applicationModule + (new ApplicationModule( + (KiwixApplication) getInstrumentation().getTargetContext().getApplicationContext())).build(); + + ((KiwixApplication) getInstrumentation().getTargetContext().getApplicationContext()).setApplicationComponent(component); + + component.inject(this); + new ZimContentProvider().setupDagger(); + } + @Test public void zimTest() { - ViewInteraction appCompatButton = onView( + Intent intent = new Intent(); + File file = new File(context.getFilesDir(), "test.zim"); + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + intent.setData(Uri.fromFile(file)); + + mActivityTestRule.launchActivity(intent); + + openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext()); + + onView(withText("Home")) + .perform(click()); + + /*ViewInteraction appCompatButton = onView( allOf(withId(R.id.get_content_card), withText("Get Content"))); appCompatButton.perform(scrollTo(), click()); @@ -76,7 +121,9 @@ public class ZimTest { e.printStackTrace(); } - onData(withContent("ray charles")).inAdapterView(withId(R.id.zimfilelist)).perform(click()); + onData(withContent("ray charles")).inAdapterView(withId(R.id.zimfilelist)).perform(click());*/ + + onWebView().withElement(findElement(Locator.LINK_TEXT, "A Fool for You")); @@ -157,7 +204,7 @@ public class ZimTest { return new BoundedMatcher(Book.class) { @Override public boolean matchesSafely(Book myObj) { - return parseURL(myObj.file.getPath()).equals(content); + return parseURL(getInstrumentation().getTargetContext(), myObj.file.getPath()).equals(content); } @Override diff --git a/app/src/androidTestKiwix/resources/summary b/app/src/androidTestKiwix/resources/summary new file mode 100644 index 000000000..b792e3c4c --- /dev/null +++ b/app/src/androidTestKiwix/resources/summary @@ -0,0 +1,102 @@ + + + Summary + + + + +
+ +

Summary

+
+
+
+ + + + \ No newline at end of file diff --git a/app/src/androidTestKiwix/resources/testpage b/app/src/androidTestKiwix/resources/testpage new file mode 100644 index 000000000..fef7017de --- /dev/null +++ b/app/src/androidTestKiwix/resources/testpage @@ -0,0 +1,179 @@ + + + A Fool for You + + + + +
+ +

A Fool for You

+
+
"A Fool for You"
Single by Ray Charles
from the album Ray Charles (or, Hallelujah I Love Her So)
Released +1955
Recorded +1954-1955
Genre +Soul blues
Length +3:03
Label +Atlantic
Writer(s) +Ray Charles
Producer(s) +Jerry Wexler
Ray Charles singles chronology
+ + + + + +
"Greenbacks"
(1955)
"A Fool for You"
(1955)
"Hallelujah I Love Her So"
(1956)
+

"A Fool for You" is a bluesy, proto-soul single recording written by Ray Charles and released by him in 1955 on the Atlantic label.

+ +

Personnel

+ +
  • Lead vocal and piano by Ray Charles
  • +
  • Instrumentation by the Ray Charles band
  • +
  • Produced by Jerry Wexler
+ +

Covers

+
  • Otis Redding on The Immortal Otis Redding
  • +
  • Van Morrison on A Night in San Francisco
  • +
  • Michael Jackson on Soulsation!
+ + + + + + + + + + + + + +
This article is issued from Wikipedia - version of the Friday, October 31, 2014. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.
+
+ + + + \ No newline at end of file diff --git a/app/src/main/java/org/kiwix/kiwixmobile/KiwixApplication.java b/app/src/main/java/org/kiwix/kiwixmobile/KiwixApplication.java index caa20b99a..39c21615f 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/KiwixApplication.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/KiwixApplication.java @@ -2,6 +2,8 @@ package org.kiwix.kiwixmobile; import android.app.Application; +import android.content.Context; +import android.util.Log; import org.kiwix.kiwixmobile.di.components.ApplicationComponent; import org.kiwix.kiwixmobile.di.components.DaggerApplicationComponent; import org.kiwix.kiwixmobile.di.modules.ApplicationModule; @@ -16,19 +18,30 @@ public class KiwixApplication extends Application { } @Override - public void onCreate() { - super.onCreate(); + protected void attachBaseContext(Context base) { + super.attachBaseContext(base); application = this; initializeInjector(); } + @Override + public void onCreate() { + super.onCreate(); + + } + private void initializeInjector() { - this.applicationComponent = DaggerApplicationComponent.builder() + setApplicationComponent(DaggerApplicationComponent.builder() .applicationModule(new ApplicationModule(this)) - .build(); + .build()); } public ApplicationComponent getApplicationComponent() { return this.applicationComponent; } + + public void setApplicationComponent(ApplicationComponent applicationComponent) { + Log.d("test", applicationComponent.toString()); + this.applicationComponent = applicationComponent; + } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/ZimContentProvider.java b/app/src/main/java/org/kiwix/kiwixmobile/ZimContentProvider.java index d0d0c6198..36d0deab8 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/ZimContentProvider.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/ZimContentProvider.java @@ -37,6 +37,7 @@ import java.io.OutputStream; import java.nio.charset.Charset; import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.inject.Inject; import org.kiwix.kiwixmobile.utils.files.FileUtils; import org.kiwix.kiwixlib.JNIKiwix; import org.kiwix.kiwixlib.JNIKiwixString; @@ -60,7 +61,15 @@ public class ZimContentProvider extends ContentProvider { public static String zimFileName; - private static JNIKiwix jniKiwix; + @Inject public static JNIKiwix jniKiwix; + + @Inject public static Context context; + + public void setupDagger() { + KiwixApplication.getInstance().getApplicationComponent().inject(this); + setIcuDataDirectory(); + } + private static String getFulltextIndexPath(String file){ String[] names = {file, file}; @@ -313,12 +322,9 @@ public class ZimContentProvider extends ContentProvider { return filePath; } - - @Override public boolean onCreate() { - jniKiwix = new JNIKiwix(); - setIcuDataDirectory(); + setupDagger(); return true; } @@ -425,8 +431,8 @@ public class ZimContentProvider extends ContentProvider { } private void setIcuDataDirectory() { - File workingDir = this.getContext().getFilesDir(); - String icuDirPath = loadICUData(this.getContext(), workingDir); + File workingDir = context.getFilesDir(); + String icuDirPath = loadICUData(context, workingDir); if (icuDirPath != null) { Log.d(TAG_KIWIX, "Setting the ICU directory path to " + icuDirPath); @@ -461,7 +467,7 @@ public class ZimContentProvider extends ContentProvider { JNIKiwixString mime = new JNIKiwixString(); JNIKiwixInt size = new JNIKiwixInt(); byte[] data = jniKiwix.getContent(articleZimUrl, mime, size); - if (mime.value.equals("text/css") && KiwixMobileActivity.nightMode) { + if (mime.value != null && mime.value.equals("text/css") && KiwixMobileActivity.nightMode) { out.write(("img { \n" + " -webkit-filter: invert(1); \n" + " filter: invert(1); \n" + diff --git a/app/src/main/java/org/kiwix/kiwixmobile/di/components/ApplicationComponent.java b/app/src/main/java/org/kiwix/kiwixmobile/di/components/ApplicationComponent.java index 132552650..f4055e6ac 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/di/components/ApplicationComponent.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/di/components/ApplicationComponent.java @@ -5,6 +5,8 @@ import dagger.Component; import javax.inject.Singleton; import org.kiwix.kiwixmobile.KiwixMobileActivity; +import org.kiwix.kiwixmobile.ZimContentProvider; +import org.kiwix.kiwixmobile.di.modules.JNIModule; import org.kiwix.kiwixmobile.zim_manager.fileselect_view.ZimFileSelectFragment; import org.kiwix.kiwixmobile.bookmarks_view.BookmarksActivity; import org.kiwix.kiwixmobile.di.modules.ApplicationModule; @@ -16,6 +18,7 @@ import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryFragment; @Component(modules = { ApplicationModule.class, NetworkModule.class, + JNIModule.class, }) public interface ApplicationComponent { void inject(KiwixMobileActivity activity); @@ -27,4 +30,6 @@ public interface ApplicationComponent { void inject(BookmarksActivity bookmarksActivity); void inject(ZimFileSelectFragment zimFileSelectFragment); + + void inject(ZimContentProvider zimContentProvider); } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/di/modules/ApplicationModule.java b/app/src/main/java/org/kiwix/kiwixmobile/di/modules/ApplicationModule.java index 51eef4af1..6782c21d1 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/di/modules/ApplicationModule.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/di/modules/ApplicationModule.java @@ -5,6 +5,7 @@ import android.content.Context; import dagger.Module; import dagger.Provides; import javax.inject.Singleton; +import org.kiwix.kiwixlib.JNIKiwix; import org.kiwix.kiwixmobile.KiwixApplication; @Module public class ApplicationModule { diff --git a/app/src/main/java/org/kiwix/kiwixmobile/di/modules/JNIModule.java b/app/src/main/java/org/kiwix/kiwixmobile/di/modules/JNIModule.java new file mode 100644 index 000000000..2f4900a6d --- /dev/null +++ b/app/src/main/java/org/kiwix/kiwixmobile/di/modules/JNIModule.java @@ -0,0 +1,20 @@ +package org.kiwix.kiwixmobile.di.modules; + +import dagger.Module; +import dagger.Provides; +import javax.inject.Singleton; +import org.kiwix.kiwixlib.JNIKiwix; + +/** + * Created by mhutti1 on 14/04/17. + */ + +@Module public class JNIModule { + @Provides + @Singleton + public JNIKiwix providesJNIKiwix() { + return new JNIKiwix(); + } + + +} diff --git a/app/src/main/java/org/kiwix/kiwixmobile/views/AutoCompleteAdapter.java b/app/src/main/java/org/kiwix/kiwixmobile/views/AutoCompleteAdapter.java index 8954c6e05..f48ad907e 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/views/AutoCompleteAdapter.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/views/AutoCompleteAdapter.java @@ -11,6 +11,7 @@ import android.widget.Filter; import android.widget.Filterable; import android.widget.TextView; +import javax.inject.Inject; import org.kiwix.kiwixlib.JNIKiwix; import java.util.ArrayList; @@ -27,6 +28,8 @@ public class AutoCompleteAdapter extends ArrayAdapter implements Filtera private Context context; + @Inject JNIKiwix jniKiwix; + public AutoCompleteAdapter(Context context) { super(context, android.R.layout.simple_list_item_1); this.context = context; @@ -84,7 +87,7 @@ public class AutoCompleteAdapter extends ArrayAdapter implements Filtera /* Fulltex search */ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); if (sharedPreferences.getBoolean(KiwixMobileActivity.PREF_FULL_TEXT_SEARCH, false)) { - String[] results = JNIKiwix.indexedQuery(query, 200).split("\n"); + String[] results = jniKiwix.indexedQuery(query, 200).split("\n"); for (String result : results) { if (!result.trim().isEmpty()) data.add(result); diff --git a/kiwixlib/src/main/java/org/kiwix/kiwixlib/JNIKiwix.java b/kiwixlib/src/main/java/org/kiwix/kiwixlib/JNIKiwix.java index e925d65a0..5e0ef7aed 100644 --- a/kiwixlib/src/main/java/org/kiwix/kiwixlib/JNIKiwix.java +++ b/kiwixlib/src/main/java/org/kiwix/kiwixlib/JNIKiwix.java @@ -39,7 +39,7 @@ public class JNIKiwix { public native boolean loadZIM(String path); - public native boolean loadFulltextIndex(String path); + public native boolean loadFulltextIndex(String path); public native byte[] getContent(String url, JNIKiwixString mimeType, JNIKiwixInt size); @@ -73,5 +73,5 @@ public class JNIKiwix { public native void setDataDirectory(String icuDataDir); - public static native String indexedQuery(String db, int count); + public native String indexedQuery(String db, int count); }