Skip to content

Commit

Permalink
V6.4.0
Browse files Browse the repository at this point in the history
* V6.3.0

Adding the ability to view navigate to the chapter/verse from the search result.

* V6.3.2

Fixing bug in Mushaf screen

* V6.3.3

Upgrading targetSdkVersion

* V6.3.4 - VC18

Just changing the version code

* 6.4.0 - VC19

Co-authored-by: abdlrhman shehata <abdelrahman.shehata@itworx.com>
  • Loading branch information
abdlrhmanshehatamoussa and abdlrhman shehata committed Jan 13, 2021
1 parent 383cdca commit 3d44313
Show file tree
Hide file tree
Showing 22 changed files with 248 additions and 68 deletions.
17 changes: 2 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,3 @@
# yatadabaron
# Yatadabaron

A new Flutter project.

## Getting Started

This project is a starting point for a Flutter application.

A few resources to get you started if this is your first Flutter project:

- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)

For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.
Open source search engine in Holy Quran
Binary file added abdlrhmanshehata.yatadabaron.jks
Binary file not shown.
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
compileSdkVersion 28
compileSdkVersion 29

sourceSets {
main.java.srcDirs += 'src/main/kotlin'
Expand All @@ -44,7 +44,7 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "abdlrhmanshehata.yatadabaron"
minSdkVersion 16
targetSdkVersion 28
targetSdkVersion 29
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
Expand Down
1 change: 1 addition & 0 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,5 @@
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
2 changes: 2 additions & 0 deletions kestore.credentials.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
KeystoreAlias key1
KeystorePassword ilp01bmrIDC!
20 changes: 14 additions & 6 deletions lib/blocs/mushaf-bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,29 @@ import '../repositories/chapters-repository.dart';
import '../repositories/verses-repository.dart';

class MushafBloc {
MushafBloc() {
selectChapter(1);
MushafBloc(int chapterId, int verseId) {
selectChapter(chapterId, verseId);
}

GenericBloc<List<VerseDTO>> _versesBloc = GenericBloc();
GenericBloc<ChapterFullDTO> _selectedChapterBloc = GenericBloc();

Stream<ChapterFullDTO> get selectedChapterStream => _selectedChapterBloc.stream;
Stream<ChapterFullDTO> get selectedChapterStream =>
_selectedChapterBloc.stream;
Stream<List<VerseDTO>> get versesStream => _versesBloc.stream;
Future selectChapter(int id) async{
List<VerseDTO> verses = await VersesRepository.instance.getVersesByChapterId(id,false);
ChapterFullDTO chapter = await ChaptersRepository.instance.getFullChapterById(id);
Future selectChapter(int chapterId, int verseId) async {
chapterId = chapterId ?? 1;
ChapterFullDTO chapter =
await ChaptersRepository.instance.getFullChapterById(chapterId);
List<VerseDTO> verses =
await VersesRepository.instance.getVersesByChapterId(chapterId, false);
_selectedChapterBloc.add(chapter);
if (verseId != null && verseId > 0) {
verses.firstWhere((v) => v.verseID == verseId)?.isSelected = true;
}
_versesBloc.add(verses);
}

Future<List<ChapterSimpleDTO>> get getChaptersSimple async {
return await ChaptersRepository.instance.getChaptersSimple();
}
Expand Down
4 changes: 3 additions & 1 deletion lib/dtos/verse-dto.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ class VerseDTO {
final String verseText;
final String verseTextTashkel;
final int verseID;
final int chapterId;
bool isSelected = false;

VerseDTO(this.chapterName, this.verseText,this.verseTextTashkel, this.verseID);
VerseDTO(this.chapterId,this.chapterName, this.verseText,this.verseTextTashkel, this.verseID);
}
5 changes: 5 additions & 0 deletions lib/helpers/event_types.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class EventTypes{
static const String SEARCH_PAGE_BASMALA = "SEARCH-PAGE:BASMALA BUTTON";
static const String STAT_PAGE_BASMALA = "STAT-PAGE:BASMALA BUTTON";
static const String DRAWER_RATING_BUTTON = "DRAWER:RATING BUTTON";
}
6 changes: 4 additions & 2 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import 'package:Yatadabaron/services/initialization-service.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'blocs/search-session-bloc.dart';
import 'repositories/database-provider.dart';
import 'services/database-provider.dart';
import 'helpers/localization.dart';
import 'helpers/theming.dart';
import 'views/home/home.dart';
import 'views/shared-widgets/loading-widget.dart';
import 'views/splash/splash.dart';
import 'package:wisebay_essentials/analytics/analytics_helper.dart';

void main() {
runApp(App());
Expand All @@ -31,7 +33,7 @@ class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FutureBuilder<bool>(
future: DatabaseProvider.initialize(),
future: InitializationService.instance.initialize(),
builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
if (snapshot.hasData) {
if (snapshot.data) {
Expand Down
2 changes: 1 addition & 1 deletion lib/repositories/generic-repository.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:sqflite/sqflite.dart';
import '../repositories/database-provider.dart';
import '../services/database-provider.dart';

class GenericRepository{
Database database;
Expand Down
7 changes: 4 additions & 3 deletions lib/repositories/verses-repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class VersesRepository extends GenericRepository {

//Prepare Query
String query =
"SELECT ch.arabic as chapter_name,ve.ayah as verse_id,ve.text as verse_text,ve.text_tashkel as verse_text_tashkel "
"SELECT ch.arabic as chapter_name,ve.ayah as verse_id,ve.text as verse_text,ve.text_tashkel as verse_text_tashkel,ch.c0sura as chapter_id "
"FROM $table ve "
"INNER JOIN chapters ch on ve.sura = ch.c0sura "
"WHERE ve.sura $chapterCondition "
Expand All @@ -53,8 +53,9 @@ class VersesRepository extends GenericRepository {
String verseText = verse["verse_text"];
String verseTextTashkel = verse["verse_text_tashkel"];
int verseID = verse["verse_id"];
int chId = verse["chapter_id"];
VerseDTO result =
VerseDTO(chapterName, verseText, verseTextTashkel, verseID);
VerseDTO(chId,chapterName, verseText, verseTextTashkel, verseID);
return result;
}).toList();
return results;
Expand Down Expand Up @@ -82,7 +83,7 @@ class VersesRepository extends GenericRepository {
String verseTextTashkel = verse["verse_text_tashkel"];
int verseID = verse["verse_id"];
VerseDTO result =
VerseDTO(chapterName, verseText, verseTextTashkel, verseID);
VerseDTO(id,chapterName, verseText, verseTextTashkel, verseID);
return result;
}).toList();
return results;
Expand Down
File renamed without changes.
23 changes: 23 additions & 0 deletions lib/services/initialization-service.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import 'package:Yatadabaron/services/database-provider.dart';
import 'package:package_info/package_info.dart';
import 'package:wisebay_essentials/analytics/analytics_helper.dart';

class InitializationService {
static InitializationService instance = InitializationService._();
InitializationService._();
Future<bool> initialize() async {
try {
await DatabaseProvider.initialize();
} catch (e) {
return false;
}
try {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String version = packageInfo.buildNumber;
await AnalyticsHelper.instance.initialize("YATADABARON", version);
await AnalyticsHelper.instance.logEvent(AnalyticsHelper.APP_STARTED);
await AnalyticsHelper.instance.pushEvents();
} catch (e) {}
return true;
}
}
13 changes: 9 additions & 4 deletions lib/views/home/search-form.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import 'package:Yatadabaron/helpers/event_types.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:wisebay_essentials/analytics/analytics_helper.dart';
import '../../blocs/search-session-bloc.dart';
import '../../dtos/chapter-simple-dto.dart';
import '../../dtos/search-settings.dart';
Expand Down Expand Up @@ -52,7 +54,7 @@ class SearchForm extends StatelessWidget {
items: menuItems,
value: settings.mode,
onChanged: (SearchMode s) {
setState((){
setState(() {
settings.mode = s;
});
},
Expand All @@ -77,7 +79,8 @@ class SearchForm extends StatelessWidget {
Expanded(
flex: 1,
child: FutureBuilder(
future: ChaptersRepository.instance.getChaptersSimple(includeWholeQuran: true),
future: ChaptersRepository.instance
.getChaptersSimple(includeWholeQuran: true),
builder: (BuildContext context,
AsyncSnapshot<List<ChapterSimpleDTO>> snapshot) {
if (snapshot.hasData) {
Expand Down Expand Up @@ -128,7 +131,9 @@ class SearchForm extends StatelessWidget {
builder: (context, setState) {
return Switch(
value: settings.basmala,
onChanged: (bool val) {
onChanged: (bool val) async {
AnalyticsHelper.instance.logEvent(
EventTypes.SEARCH_PAGE_BASMALA + "-" + val.toString());
setState(() {
settings.basmala = val;
});
Expand Down Expand Up @@ -183,7 +188,7 @@ class SearchForm extends StatelessWidget {

@override
Widget build(BuildContext context) {
keywordController.addListener((){
keywordController.addListener(() {
settings.keyword = keywordController.text;
});
return SingleChildScrollView(
Expand Down
35 changes: 26 additions & 9 deletions lib/views/home/search-results-list.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import 'package:Yatadabaron/blocs/mushaf-bloc.dart';
import 'package:Yatadabaron/helpers/global-colors.dart';
import 'package:Yatadabaron/views/mushaf/mushaf.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
Expand All @@ -12,6 +15,17 @@ import '../../views/shared-widgets/loading-widget.dart';
class SearchResultsList extends StatelessWidget {
@override
Widget build(BuildContext context) {
void navigateToMushaf(int chapterId, int verseId) {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) {
return Provider(
child: MushafPage(),
create: (_) => MushafBloc(chapterId,verseId),
);
}),
);
}

SearchSessionBloc sessionBloc = Provider.of<SearchSessionBloc>(context);
return StreamBuilder<SearchSessionPayload>(
stream: sessionBloc.payloadStream,
Expand All @@ -33,7 +47,9 @@ class SearchResultsList extends StatelessWidget {
if (collections.length == 1) {
return ListView.separated(
itemCount: results.length,
separatorBuilder: (_, __) => Divider(thickness: 1,),
separatorBuilder: (_, __) => Divider(
thickness: 1,
),
itemBuilder: (_, i) {
VerseDTO verse = results[i];
return ListTile(
Expand All @@ -48,7 +64,7 @@ class SearchResultsList extends StatelessWidget {
"${verse.chapterName}",
style: TextStyle(fontWeight: FontWeight.bold),
),
onTap: (){
onTap: () {
snapshot.data.copyVerse(verse);
},
);
Expand All @@ -70,21 +86,22 @@ class SearchResultsList extends StatelessWidget {
children: <Widget>[
ListTile(
title: Text(
"${verse.verseTextTashkel} {${verse.verseID}}",
"${verse.verseTextTashkel} [${verse.chapterName}-${verse.verseID}]",
style: TextStyle(
fontWeight: FontWeight.normal,
fontSize: 18,
),
),
trailing: Text(
"${verse.chapterName}",
style: TextStyle(fontWeight: FontWeight.bold),
),
onTap: (){
onTap: () {
navigateToMushaf(verse.chapterId, verse.verseID);
},
onLongPress: () {
snapshot.data.copyVerse(verse);
},
),
Divider(thickness: 1,)
Divider(
thickness: 1,
)
],
);
}).toList(),
Expand Down
14 changes: 8 additions & 6 deletions lib/views/mushaf/chapters-dropdown.dart
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../blocs/mushaf-bloc.dart';
import '../../dtos/chapter-simple-dto.dart';
import '../../helpers/localization.dart';
import '../../views/shared-widgets/loading-widget.dart';

class ChaptersDropDown extends StatelessWidget {
final MushafBloc mushafBloc;

const ChaptersDropDown(this.mushafBloc);
final BuildContext parentContext;
const ChaptersDropDown(this.parentContext);

@override
Widget build(BuildContext context) {
MushafBloc mushafBloc = Provider.of<MushafBloc>(this.parentContext);
return FutureBuilder<List<ChapterSimpleDTO>>(
future: mushafBloc.getChaptersSimple,
builder: (BuildContext context,
Expand All @@ -22,6 +23,7 @@ class ChaptersDropDown extends StatelessWidget {
List<ChapterSimpleDTO> chapters = snapshot.data;
return Container(
height: 300,
width: double.maxFinite,
child: ListView.separated(
separatorBuilder: (_,__)=>Divider(),
itemCount: chapters.length,
Expand All @@ -31,7 +33,7 @@ class ChaptersDropDown extends StatelessWidget {
title: Text(chapter.chapterNameAR),
leading: Text("${chapter.chapterID}"),
onTap: () {
mushafBloc.selectChapter(chapter.chapterID);
mushafBloc.selectChapter(chapter.chapterID,null);
Navigator.of(context).pop();
},
);
Expand All @@ -42,7 +44,7 @@ class ChaptersDropDown extends StatelessWidget {
);
}

static show(BuildContext context, MushafBloc bloc) {
static show(BuildContext context) {
showDialog(
context: context,
child: SimpleDialog(
Expand All @@ -52,7 +54,7 @@ class ChaptersDropDown extends StatelessWidget {
),
contentPadding: EdgeInsets.all(5),
children: <Widget>[
ChaptersDropDown(bloc),
ChaptersDropDown(context),
],
),
);
Expand Down
2 changes: 1 addition & 1 deletion lib/views/mushaf/mushaf.dart
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class MushafPage extends StatelessWidget {
],
),
onTap: () {
ChaptersDropDown.show(context, mushafBloc);
ChaptersDropDown.show(context);
},
),
),
Expand Down
Loading

0 comments on commit 3d44313

Please sign in to comment.