GithubHelp home page GithubHelp logo

hisnulmuslim's People

Contributors

ahmedre avatar aymandf avatar hussaini avatar khalid-hussain avatar mehranq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hisnulmuslim's Issues

In-app Search is ugly and disfunctional

To reproduce:

  1. Enable the button for in-app search if your phone does not have a dedicated search button. On Cyanogenmod, this is accomplished via Settings->Buttons-> and selecting one of the buttons to perform the in-app search function.
  2. Open the app and press the button you had set.
  3. Witness the search bar do nothing.

You shall be presented with something like this:
screenshot_2015-08-20-08-10-52

Possible Solutions (found in the wild):

  1. Telegram - disable this functionality as it is not well known.
  2. WhatsApp - acts exactly like as if the user hit the 'Search' button.

It is desirable to go for the second.

Font choice preference bug

Details of Device:
Samsung Galaxy Note II running Cynanogenmod 5.1.1

See screenshot:

To Do:

  1. Test on other devices
  2. Find out the root cause
  3. Solve accordingly

Invalid SQL query: table not found

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.

Different Layout views on different devices

The following screenshots should suffice, insha'Allah. The first screenshot is from a Moto G device:

And the following is from a Galaxy Note II:

These two devices have the same resolution but different ppi. We need to find the cause of this difference and to modify the layout accordingly.

Automatically updating database

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.

Bookmarking Dua

Users should be allowed to bookmark individual Dua'. This involves:

  • Brainstorming a layout which would work with the way the dua' are presented currently (as cards). This is to include controls for enabling the user to 'bookmark' and 'un-bookmark' dua' with ease.
  • Creating the implementation for aforementioned controls.
  • Displaying bookmarked dua' in the Bookmarks activity with reverse controls i.e. buttons/icons to 'un-bookmark' the dua'.
  • The possibility for the user to mass edit his/her bookmarks i.e. Mass delete bookmarks.
  • App crashes if user un-bookmarks in a certain random orders. See June 7 reply to this comment.

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.

App crashes when scrolling long list

For some reason, the app crashes when scrolling a long list.

Tested on

  1. Nexus 7 2013 running 5.1.1.
  2. Samsung Galaxy Note 2 N7100 running Cyanogenmod unofficial 5.1.1.

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

  1. Could be due to Android L 5.1.1.
  2. Might be related to TextJustify library.

Steps to reproduce

  1. Scroll to a section with a number of dua to necessitate scrolling, e.g. Category 16: Supplications at the start of Salah.
  2. Scroll down and it should crash. If it doesn't, try scrolling back up and repeat until you are met with the crash.

Filtered List extra divider at end of results

See the screenshot:

The problem is that if the results end there, the user thinks that there may be more entries. We have to find a way to remove the last divider in the filtered list view.

Dua Group number and Dua Group title in Toolbar

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

  1. Make Dua Title scroll in the toolbar. This has the disadvantage of distracting users.
    2a) The Dua Group title font size could shrink according to the length of the title and display accordingly.
    2b) Adding the Dua group number should not be a big issue.

Advice and comments are welcome.

Add layout mirroring for Android > 4.2.2 (Arabic)

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.

What is the license for this project ?

السلام عليكم،

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.

وجزاك الله خيراً

Any update?

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

  1. app crashes
  2. database needs to be dropped and updated when the database is updated.
  3. clashes with the new Android builds.

Thanks in advance for the hardworking.

Escape character in Sqlite database

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:

Inconsistent Settings Activity Theme

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:

  1. Material design for pre-Lollipop devices
  2. Google I/O app source code

User-defined Material theme color

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 inconsistency

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.

Issues with Quran ayaat and Arabic font(s)

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:

  1. Quraanic ayaat are typeset in a specific way which is not the same as conventional Arabic. The fonts available need to be specially tailored to enable all required diacritics/vowels to appear exactly like they do in the mushaf. This is overhead which does not over-weigh the benefits.
  2. The ayaat do not appear in arrangement like in a mushaf and thus may introduce unconventional 'waqf' points for the beginner.
  3. Quraanic ayaat for certain dua tend to be long and Arabic justification is not available at this point in time which results in large segments of the dua card looking unprofessional.

This issue may be revisited in the future.

Repackaging

imho, you should keep your packaging somewhat consistent.

some thoughts:

  1. let's remove 'example' from your package name - i.e. com.khalid.hisnulmuslim
  2. make package names singular (.adapter instead of .adapters, etc).
  3. rename classes package (contains Dua right now) - classes isn't a good name for a package.
  4. move database and loader packages under com.khalid.hisnulmuslim

Night Mode

Settings in the Preferences and in the menus of both activities have been added. Just the implementation is left. Night Mode should:

  1. Turn the Action Bar black. In essence, this means colorPrimary and colorPrimaryDark would be black or the former complete black and the latter a little less black.
  2. The ListView in DuaGroup activity should be inverted and the circle around the numbers should disappear or become a really dark gray/black.
  3. The above would apply to the DuaDetail activity but a dark gray should be used as well to be able to identify the cards.

Arabic tashkeel not appearing properly on 4.1.2

As in the screenshot:
photo_2015-08-13_22-32-36

UPDATE:
Not adding a typeface to the adapter as in ad3957d makes the text appear fine. Screenshot is as follows:

photo_2015-08-19_02-29-06

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):
device-2015-08-20-020508

Actionbar/toolbar has no drop shadow pre-Lollipop

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".

Dua Content list

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.

  • This means that it is yet to be corrected.
  • This means it has been corrected.

The following is the list:

English

  • Group 7
    • Dua 11 Missing reference
  • Group 12
    • Dua 19 (translation is incomplete)
  • Group 13
    • Dua 20 (translation is incomplete)
  • Group 14
    • Dua 21 (translation lacks footnote numbers)
  • Group 15
    • Dua 25 (translation lacks footnote numbers)
  • Group 17
    • Dua 33 (harakaat of "Rabbaya" should be "Rabbiya")
  • Group 24
    • Dua 62 (whether in secret OR in public)
  • Group 25
    • Dua 66 (html space should be removed)
    • Dua 69 (html space should be removed)
  • Group 26
    • Dua 74 (html space should be removed)
    • Dua 74 (incomplete translation)
  • Group 27
    • Dua 79 (the arabic says zunoob but the translation is "sin"
    • Dua 80 (the translation is missing "four times" at the end
    • Dua 84 (translation should be "i seek refuge in your greatness"
    • Dua 87 (missing "three times" at the end)
    • Dua 92 (needs spacing)
    • Dua 93 (missing "hundred times in the morning" at the end
    • Dua 94 (missing (three times in the morning) at the end
    • Dua 95 (missing "in the morning")
    • Dua 96 (missing "hundred times per day")
  • Group 28
    • Dua 110 ("تنزيل الكتاب" is correct arabic)
    • Dua 110 (Beginning of Surah Sajdah does not have mudood)
  • Group 32
    • Dua 116 (the translation should be "surely" not "surety")
    • Dua 118 (Double check translation)
  • Group 37
    • [x] Dua 129 (translation says "honoured is your protected")
    • [x] Dua 130 (the translation says "djinns")
  • Group 40
    • Dua 135 (surah. Hadith no. is not mentioned)
  • Group 51
    • Dua 151 (the arabic should be "لسكرات" with extra ل)
  • Group 53
    • Dua 154 (tashkeel problem in the beginning)
  • Group 56
    • Dua 160 (the translation mentions protection from grave while no such thing is mentioned in dua)
  • Group 62 (angles -> angels)
  • Group 92 the dua is wrongly placed
  • Group 94
    • Dua 205 to do
  • Dua 213 should be in group 101
  • Group 107
    • Dua 222 (the translation is missing the word "said")
  • Group 121
    • Dua 239 to do
  • Group 130
    • Dua 255 (translation and Arabic do not match. Recheck)
    • " " " 260 (incomplete translation)
    • " " " 261 (incomplete translation)
    • " " " 262 (incomplete translation)
    • " " " 263 (incomplete translation)
    • " " " 265 (somewhat incomplete translation)
    • " " " 262 (incomplete reference)

French

To Do

Arabic

To Do

Credits

  1. Abū ʿAbdullah Luqmān
  2. Ḥamzah Peer
  3. Aḥmed Al-Ḥaddād

Settings Activity crashes the application.

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.

TextJustify-Android library update

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.

Update ListView to RecyclerView

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.

Directory Structure

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.

Settings Activity Inconsistencies

See the screenshot:

  1. The layout overlaps the action bar.
  2. The theme is inconsistent.

Note: This occurred after using Toolbar instead of the default action bar implementation.

Change dua language depending on phone's locale

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.