khalid-hussain / hisnulmuslim Goto Github PK
View Code? Open in Web Editor NEWThis repository is about an Android app which would include all the dua from Hisnul Muslim.
This repository is about an Android app which would include all the dua from Hisnul Muslim.
To reproduce:
You shall be presented with something like this:
Possible Solutions (found in the wild):
It is desirable to go for the second.
To reproduce:
The app crashes upon starting up. The following is from Logcat:
2019-04-14 04:31:25.820 31823-31823/? E/id.defcontaine: Not starting debugger since process cannot load the jdwp agent.
--------- beginning of system
2019-04-14 04:31:28.159 2174-3442/? E/installd: Failed to delete /data/app/vmdl1957957443.tmp: No such file or directory
2019-04-14 04:31:28.252 31917-31917/? E/com.miui.spock: Not starting debugger since process cannot load the jdwp agent.
2019-04-14 04:31:28.355 2921-5869/? E/ANDR-PERF-JNI: com_qualcomm_qtiperformance_native_perf_io_prefetch_start
2019-04-14 04:31:28.355 585-639/? E/ANDR-PERF-MPCTL: Invalid profile no. 0, total profiles 0 only
2019-04-14 04:31:28.368 2921-5869/? E/ActivityTrigger: activityStartTrigger: not whiteListedcom.khalid.hisnulmuslim/com.khalid.hisnulmuslim.DuaGroupActivity/1
2019-04-14 04:31:28.369 2921-5869/? E/ActivityTrigger: activityResumeTrigger: not whiteListedcom.khalid.hisnulmuslim/com.khalid.hisnulmuslim.DuaGroupActivity/1
2019-04-14 04:31:28.377 2921-8305/? E/ActivityTrigger: activityResumeTrigger: not whiteListedcom.khalid.hisnulmuslim/com.khalid.hisnulmuslim.DuaGroupActivity/1
2019-04-14 04:31:28.574 31955-31967/? E/id.hisnulmusli: Failed to send DDMS packet REAQ to debugger (-1 of 20): Broken pipe
2019-04-14 04:31:29.202 31955-31955/? E/SQLiteLog: (14) cannot open file at line 36667 of [c255889bd9]
2019-04-14 04:31:29.202 31955-31955/? E/SQLiteLog: (14) os_unix.c:36667: (2) open(//data//data//com.khalid.hisnulmuslim//databases//hisnul.sqlite3) -
2019-04-14 04:31:29.206 31955-31955/? E/SQLiteDatabase: Failed to open database '//data//data//com.khalid.hisnulmuslim//databases//hisnul.sqlite3'.
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14 SQLITE_CANTOPEN): Could not open database
at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:211)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:195)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:503)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:204)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:196)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:880)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:865)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:766)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:714)
at com.khalid.hisnulmuslim.database.ExternalDbOpenHelper.checkDataBase(ExternalDbOpenHelper.java:74)
at com.khalid.hisnulmuslim.database.ExternalDbOpenHelper.createDataBase(ExternalDbOpenHelper.java:55)
at com.khalid.hisnulmuslim.database.ExternalDbOpenHelper.openDataBase(ExternalDbOpenHelper.java:113)
at com.khalid.hisnulmuslim.database.ExternalDbOpenHelper.<init>(ExternalDbOpenHelper.java:46)
at com.khalid.hisnulmuslim.database.ExternalDbOpenHelper.getInstance(ExternalDbOpenHelper.java:31)
at com.khalid.hisnulmuslim.loader.AbstractQueryLoader.<init>(AbstractQueryLoader.java:13)
at com.khalid.hisnulmuslim.loader.DuaGroupLoader.<init>(DuaGroupLoader.java:17)
at com.khalid.hisnulmuslim.DuaGroupActivity.onCreateLoader(DuaGroupActivity.java:126)
at androidx.loader.app.LoaderManagerImpl.createAndInstallLoader(LoaderManagerImpl.java:383)
at androidx.loader.app.LoaderManagerImpl.initLoader(LoaderManagerImpl.java:421)
at com.khalid.hisnulmuslim.DuaGroupActivity.onCreate(DuaGroupActivity.java:76)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2905)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3060)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1818)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6762)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
2019-04-14 04:31:29.206 31955-31955/? E/class com.khalid.hisnulmuslim.database.ExternalDbOpenHelper: Error while checking db
2019-04-14 04:31:29.272 31955-31998/? E/SQLiteLog: (1) no such table: dua_title
2019-04-14 04:31:29.276 31955-31998/? E/AndroidRuntime: FATAL EXCEPTION: ModernAsyncTask #1
Process: com.khalid.hisnulmuslim, PID: 31955
java.lang.RuntimeException: An error occurred while executing doInBackground()
at androidx.loader.content.ModernAsyncTask$3.done(ModernAsyncTask.java:164)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: android.database.sqlite.SQLiteException: no such table: dua_title (code 1 SQLITE_ERROR): , while compiling: SELECT _id, en_title FROM dua_title ORDER BY _id
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:903)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:514)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1408)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1347)
at com.khalid.hisnulmuslim.loader.DuaGroupLoader.loadInBackground(DuaGroupLoader.java:39)
at com.khalid.hisnulmuslim.loader.DuaGroupLoader.loadInBackground(DuaGroupLoader.java:14)
at androidx.loader.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:307)
at androidx.loader.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:60)
at androidx.loader.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:48)
at androidx.loader.content.ModernAsyncTask$2.call(ModernAsyncTask.java:141)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
2019-04-14 04:31:29.297 601-601/? E/lowmemorykiller: Error writing /proc/31955/oom_score_adj; errno=22
2019-04-14 04:31:29.325 2921-4601/? E/ActivityTrigger: activityResumeTrigger: not whiteListedcom.teslacoilsw.launcher/com.teslacoilsw.launcher.NovaLauncher/61156
2019-04-14 04:31:29.335 585-639/? E/ANDR-PERF-OPTSHANDLER: Perflock resource /sys/class/devfreq/soc:qcom,llccbw/min_freq not supported
2019-04-14 04:31:29.335 585-639/? E/ANDR-PERF-RESOURCEQS: Failed to apply optimization [12, 0]
2019-04-14 04:31:29.336 585-639/? E/ANDR-PERF-OPTSHANDLER: Failed to read /sys/class/kgsl/kgsl-3d0/force_no_nap
2019-04-14 04:31:29.336 585-639/? E/ANDR-PERF-RESOURCEQS: Failed to apply optimization [10, 7]
The main cause of the problem is probably the following line:
2019-04-14 04:31:29.206 31955-31955/? E/SQLiteDatabase: Failed to open database '//data//data//com.khalid.hisnulmuslim//databases//hisnul.sqlite3'.
This can be resolved by changing the line to:
DB_PATH = String.format("/data/data/%s/databases/", packageName);
This leaves us with the following:
2019-04-14 04:58:53.546 2183-2379/? E/storaged: getDiskStats failed with result NOT_SUPPORTED and size 0
2019-04-14 04:59:21.198 2174-3411/? E/installd: Failed to delete /data/app/vmdl1765973611.tmp: No such file or directory
2019-04-14 04:59:21.492 585-639/? E/ANDR-PERF-MPCTL: Invalid profile no. 0, total profiles 0 only
2019-04-14 04:59:21.493 2921-8305/? E/ANDR-PERF-JNI: com_qualcomm_qtiperformance_native_perf_io_prefetch_start
2019-04-14 04:59:21.502 2921-8305/? E/ActivityTrigger: activityStartTrigger: not whiteListedcom.khalid.hisnulmuslim/com.khalid.hisnulmuslim.DuaGroupActivity/1
2019-04-14 04:59:21.502 2921-8305/? E/ActivityTrigger: activityResumeTrigger: not whiteListedcom.khalid.hisnulmuslim/com.khalid.hisnulmuslim.DuaGroupActivity/1
2019-04-14 04:59:21.507 2921-2948/? E/ActivityTrigger: activityResumeTrigger: not whiteListedcom.khalid.hisnulmuslim/com.khalid.hisnulmuslim.DuaGroupActivity/1
2019-04-14 04:59:21.604 6451-6459/? E/id.hisnulmusli: Failed to send DDMS packet REAQ to debugger (-1 of 20): Broken pipe
2019-04-14 04:59:21.768 2921-2921/? E/LoadedApk: Unable to instantiate appComponentFactory
java.lang.ClassNotFoundException: Didn't find class "androidx.core.app.CoreComponentFactory" on path: DexPathList[[],nativeLibraryDirectories=[/data/app/com.khalid.hisnulmuslim-HjTsgk-PNDyV8JtEaiZMqg==/lib/arm64, /system/lib64, /system/vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.LoadedApk.createAppFactory(LoadedApk.java:217)
at android.app.LoadedApk.updateApplicationInfo(LoadedApk.java:329)
at android.app.ActivityThread.handleDispatchPackageBroadcast(ActivityThread.java:5410)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1743)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at com.android.server.SystemServer.run(SystemServer.java:460)
at com.android.server.SystemServer.main(SystemServer.java:300)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:838)
2019-04-14 04:59:21.769 2921-2921/? E/LoadedApk: Unable to instantiate appComponentFactory
java.lang.ClassNotFoundException: Didn't find class "androidx.core.app.CoreComponentFactory" on path: DexPathList[[],nativeLibraryDirectories=[/data/app/com.khalid.hisnulmuslim-HjTsgk-PNDyV8JtEaiZMqg==/lib/arm64, /system/lib64, /system/vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.LoadedApk.createAppFactory(LoadedApk.java:217)
at android.app.LoadedApk.updateApplicationInfo(LoadedApk.java:329)
at android.app.ActivityThread.handleDispatchPackageBroadcast(ActivityThread.java:5410)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1743)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at com.android.server.SystemServer.run(SystemServer.java:460)
at com.android.server.SystemServer.main(SystemServer.java:300)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:838)
2019-04-14 04:59:22.198 6451-6491/? E/SQLiteLog: (1) no such table: dua_group
2019-04-14 04:59:22.202 6451-6491/? E/AndroidRuntime: FATAL EXCEPTION: ModernAsyncTask #1
Process: com.khalid.hisnulmuslim, PID: 6451
java.lang.RuntimeException: An error occurred while executing doInBackground()
at androidx.loader.content.ModernAsyncTask$3.done(ModernAsyncTask.java:164)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: android.database.sqlite.SQLiteException: no such table: dua_group (code 1 SQLITE_ERROR): , while compiling: SELECT _id, en_title FROM dua_group ORDER BY _id
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:903)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:514)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1408)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1255)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1126)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1294)
at com.khalid.hisnulmuslim.loader.DuaGroupLoader.loadInBackground(DuaGroupLoader.java:39)
at com.khalid.hisnulmuslim.loader.DuaGroupLoader.loadInBackground(DuaGroupLoader.java:14)
at androidx.loader.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:307)
at androidx.loader.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:60)
at androidx.loader.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:48)
at androidx.loader.content.ModernAsyncTask$2.call(ModernAsyncTask.java:141)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
2019-04-14 04:59:22.221 601-601/? E/lowmemorykiller: Error writing /proc/6451/oom_score_adj; errno=22
2019-04-14 04:59:22.252 2921-3400/? E/ActivityTrigger: activityResumeTrigger: not whiteListedcom.teslacoilsw.launcher/com.teslacoilsw.launcher.NovaLauncher/61156
2019-04-14 04:59:22.261 585-639/? E/ANDR-PERF-OPTSHANDLER: Perflock resource /sys/class/devfreq/soc:qcom,llccbw/min_freq not supported
2019-04-14 04:59:22.262 585-639/? E/ANDR-PERF-RESOURCEQS: Failed to apply optimization [12, 0]
2019-04-14 04:59:22.262 585-639/? E/ANDR-PERF-OPTSHANDLER: Failed to read /sys/class/kgsl/kgsl-3d0/force_no_nap
2019-04-14 04:59:22.262 585-639/? E/ANDR-PERF-RESOURCEQS: Failed to apply optimization [10, 7]
Now it can't find the table required.
As title says. Suffers from the same problem mentioned in issue #18 .
In the latest version of the app, the search query text is not highlighted in the results List View.
NOTE
This is a duplicate of Add bold effect to user filter text in Dua Group listView. Please refer to that issue as deleting issues is not possible.
Assalamualaikum
What is the license for this project ?
The app should re-install (update) its database every time it updates (increase in version number). Currently this has to be done manually. The reason for this is to enable the adding of other languages dynamically and to make the user experience more refined so that they don't have to look for deleting the said database manually.
This would also help in correcting any mistakes found by users in the current database.
As the title says. Issue in the relevant repository has been posted. Check here.
Users should be allowed to bookmark individual Dua'. This involves:
These details are up for discussion and may change but the basic functionality must remain i.e. Users should be able to 'return' to dua' they 'marked', easily.
When a user changes font from settings, the change is not seen until the app is restarted.
Assalamu Alaikum Wa Rahmatullahi Wa Barakatuh,
Sir,
I want to publish this application on Google Play Store.
I live in Bangladesh
, so I want to make this application for Bangladeshis people.
For some reason, the app crashes when scrolling a long list.
Tested on
Possible definition of error from logcat
06-05 00:48:26.116 16045-16045/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.khalid.hisnulmuslim, PID: 16045
java.lang.IndexOutOfBoundsException
at android.view.GLES20Canvas.drawText(GLES20Canvas.java:888)
at com.bluejamesbond.text.Styled.drawUniformRun(Styled.java:156)
at com.bluejamesbond.text.Styled.drawDirectionalRun(Styled.java:319)
at com.bluejamesbond.text.Styled.drawText(Styled.java:383)
at com.bluejamesbond.text.SpannableDocumentLayout.onDraw(SpannableDocumentLayout.java:512)
at com.bluejamesbond.text.IDocumentLayout.draw(IDocumentLayout.java:143)
at com.bluejamesbond.text.DocumentView.drawLayout(DocumentView.java:184)
at com.bluejamesbond.text.DocumentView.onDraw(DocumentView.java:620)
at android.view.View.draw(View.java:15239)
at android.widget.FrameLayout.draw(FrameLayout.java:598)
at android.widget.ScrollView.draw(ScrollView.java:1689)
at android.view.View.updateDisplayListIfDirty(View.java:14175)
at android.view.View.getDisplayList(View.java:14197)
at android.view.View.draw(View.java:14967)
at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
at android.view.View.updateDisplayListIfDirty(View.java:14170)
at android.view.View.getDisplayList(View.java:14197)
at android.view.View.draw(View.java:14967)
at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
at android.view.View.draw(View.java:15242)
at android.widget.FrameLayout.draw(FrameLayout.java:598)
at android.view.View.updateDisplayListIfDirty(View.java:14175)
at android.view.View.getDisplayList(View.java:14197)
at android.view.View.draw(View.java:14967)
at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
at android.view.View.updateDisplayListIfDirty(View.java:14170)
at android.view.View.getDisplayList(View.java:14197)
at android.view.View.draw(View.java:14967)
at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
at android.widget.ListView.drawChild(ListView.java:3396)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
at android.widget.AbsListView.dispatchDraw(AbsListView.java:2605)
at android.widget.ListView.dispatchDraw(ListView.java:3391)
at android.view.View.draw(View.java:15242)
at android.widget.AbsListView.draw(AbsListView.java:4116)
at android.view.View.updateDisplayListIfDirty(View.java:14175)
at android.view.View.getDisplayList(View.java:14197)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
at android.view.View.updateDisplayListIfDirty(View.java:14135)
at android.view.View.getDisplayList(View.java:14197)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
at android.view.View.updateDisplayListIfDirty(View.java:14135)
at android.view.View.getDisplayList(View.java:14197)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
at android.view.View.updateDisplayListIfDirty(View.java:14135)
at android.view.View.getDisplayList(View.java:14197)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
at android.view.View.updateDisplayListIfDirty(View.java:14135)
at android.view.View.getDisplayList(View.java:14197)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
at android.view.View.updateDisplayListIfDirty(View.java:14135)
at android.view.View.getDisplayList(View.java:14197)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
at android.view.View.updateDisplayListIfDirty(View.java:14135)
at android.view.View.getDisplayList(View.java:14197)
at android.view.Threade
Some ideas
Steps to reproduce
I noticed in the screenshots that the date on your phone is displayed in Hijri, how did you do that ?
I've compiled to apk this project and installed on my handheld. I try to search some dua (pray) and when I tap the result I get error and force close. I use Android Studio.
The Toolbar (action bar) in the Dua Detail activity does not show the Dua Group number and if the Dua Group title is long, it does not fully display.
Possible solutions
Advice and comments are welcome.
Layout mirroring should be applied if the user locale is Arabic and Android version is above 4.2 (see here). Also find out how to use Eastern numerals instead of the Arabic ones when using Arabic as the app language. Some translated Arabic strings have been added in commit 3a22a64.
UPDATE
The layout is now mirrored, however the content is not. This is related to issue #59.
السلام عليكم،
I was hoping to add your project to F-Droid. But I cannot find the license for your project. I hope you would use an open source license for that project.
وجزاك الله خيراً
Could you please update the files, dependencies and other things so that it runs smoothly with the latest Android?
This is a very nice app. I would appreciate if you please update it to avoid
Thanks in advance for the hardworking.
Escape character for all the text fields using DocumentView in the app need to be reviewed to ensure justification of all lines is achieved except for the last line if it is less than full width. The correct justification can be seen from the dua group "Upon waking up". The solution was figured out due to commit 1a401c8.
Screenshot of incorrect justification:
The status bar color doesn't change to the colorPrimaryDark value defined when running the app on Android Lollipop.
The Settings (Preferences) activity has inconsistent looks between Jellybean and Lollipop. The following screenshot makes this obvious:
Using the App Support compat library (which is already used in the project), this should be fixable. To be clear: The look of lollipop is what needs to be achieved in Jellybean and the ActionBar text in Lollipop needs to be made white.
The following links may be useful:
Should users be allowed to change the Primary, Primary-Dark and Accent? This is after all a dua app; something users would use often.
All three should not _exactly_ be user-defined. Certain color palettes could be offered. It could be limited, around the same number of colors Google Keep has for its notes, for example.
It should also be noted that I have yet to see an app which allows users to do this.
Filtered Search list items don't open their corresponding dua details according to the reference number in the list but rather according to the assumed number in the filtered list when inflated.
Therefore the first search result will always open the details for the "Upon waking up" dua group.
Dua which are basically just ayaat of the Quran need to be considered for removal and replaced with just the reference to the respective ayaat, i.e. "Surah Baqarah: 1-4".
This is because having Quraanic ayaat in the app poses several issues which are as follows:
This issue may be revisited in the future.
imho, you should keep your packaging somewhat consistent.
some thoughts:
com.khalid.hisnulmuslim
.adapter
instead of .adapters
, etc).classes
package (contains Dua
right now) - classes
isn't a good name for a package.database
and loader
packages under com.khalid.hisnulmuslim
Settings in the Preferences and in the menus of both activities have been added. Just the implementation is left. Night Mode should:
UPDATE:
Not adding a typeface to the adapter as in ad3957d makes the text appear fine. Screenshot is as follows:
This bug can be replicated on a GenyMotion Emulator running Android 4.1.1 as shown in the following screenshot (the adapter has been changed to a RecyclerView adapter but it persists):
As the title. This has to do with the code for "elevation" doing absolutely nothing pre-Lollipop. This is with using the Support Library. Ironically, it doesn't "support" this. We need to find a way around this which is not too "hacky".
They must be moved to a/the worker thread.
The title is quite clear. There are no unit tests developed for the app at all.
As per the title.
This may be related to: https://developers.facebook.com/docs/sharing/android#prereqs
Relevant links:
To overcome this, the user can choose 'Copy to Clipboard' and then paste it into Facebook but we're going for convenience here.
The problem can be seen clearly from the screenshot. The 'reference' text view has both a bottom and top padding whereas the 'translation' does not. This is probably because of it being not a regular text view but rather an older implementation of the TextJustify-Android library.
Possible culprits:
The problem may also solve itself if Issue #6 is solved.
This issue will list all the problems with the dua in the app and the status of updates respectively. I will update this post as I go through the dua in the app. Feel free to post issues here.
The following is the list:
To Do
To Do
Dua no.3 is a duplicate of Dua no.1 under group no.1. I have no idea what is wrong, I've looked at the database but nothing seems out of place.
This is due to the activity not having been properly implemented. Its skeleton has been added but the details are to be worked on. Options to be provided will be discussed once we get an empty Settings activity up and running.
The new version of TextJustify-Android now extends the View class instead of the TextView class. Implementing it directly poses some issues due the way the adapter is currently programmed.
The project must be updated with the latest version so as to benefit from bug fixes the author may publish as well.
I'm wondering what potential benefits are there by switching from a ListView to a RecyclerView and whether the benefits outweigh the effort required to perform the conversion.
New projects seem to have a slightly different project from what is in this app. It could be due to the different versions of Android Studio used.
To do: Cleanup directory to mirror new projects.
The content of the dua group list and dua detail list should change depending on the phone's locale. Currently, the interface of the app changes when Arabic is the phone's locale but the content doesn't. This functionality should be changed to ensure interface and content changes depending on the locale of the user's phone.
Arabic may have to be delayed as it will require editing the content and references significantly. This should still be taken into consideration.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.