Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
ivynya committed Jul 19, 2020
2 parents 46d9872 + 04dcef6 commit d596148
Show file tree
Hide file tree
Showing 10 changed files with 270 additions and 37 deletions.
2 changes: 1 addition & 1 deletion backend/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
download('stopwords')
download('punkt')

pytesseract.pytesseract.tesseract_cmd = "/usr/bin/tesseract"
pytesseract.pytesseract.tesseract_cmd = "/usr/local/bin/tesseract"


def _create_frequency_matrix(sentences):
Expand Down
Binary file modified flutter/assets/file_icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions flutter/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,8 @@ PODS:
- nanopb/decode (1.30905.0)
- nanopb/encode (1.30905.0)
- PromisesObjC (1.2.9)
- shared_preferences (0.0.1):
- Flutter

DEPENDENCIES:
- cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`)
Expand All @@ -382,6 +384,7 @@ DEPENDENCIES:
- Flutter (from `Flutter`)
- google_sign_in (from `.symlinks/plugins/google_sign_in/ios`)
- multi_image_picker (from `.symlinks/plugins/multi_image_picker/ios`)
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)

SPEC REPOS:
trunk:
Expand Down Expand Up @@ -425,6 +428,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/google_sign_in/ios"
multi_image_picker:
:path: ".symlinks/plugins/multi_image_picker/ios"
shared_preferences:
:path: ".symlinks/plugins/shared_preferences/ios"

SPEC CHECKSUMS:
abseil: 6c8eb7892aefa08d929b39f9bb108e5367e3228f
Expand Down Expand Up @@ -458,6 +463,7 @@ SPEC CHECKSUMS:
multi_image_picker: 7968ace12b658a9ee51be6514473f5ee5501ea80
nanopb: c43f40fadfe79e8b8db116583945847910cbabc9
PromisesObjC: b48e0338dbbac2207e611750777895f7a5811b75
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d

PODFILE CHECKSUM: a75497545d4391e2d394c3668e20cfb1c2bbd4aa

Expand Down
88 changes: 61 additions & 27 deletions flutter/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,60 @@ import 'package:Kami/src/login.dart';
import 'package:Kami/src/photo.dart';
import 'package:Kami/src/provider_api.dart';
import 'package:Kami/src/signup.dart';
import 'package:Kami/src/theme_switcher.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

void main() {
WidgetsFlutterBinding.ensureInitialized();
final provider = FirebaseProvider();
runApp(MyApp(provider: provider));
runApp(ChangeNotifierProvider(
create: (_) => ThemeSwitcher(),
child: MyApp(provider: provider),
));
}

final lightTheme = ThemeData.light().copyWith(
primaryColor: const Color(0xff3A6EA5),
accentColor: const Color(0xff243F5F),
backgroundColor: const Color(0xffFFFFF2),
textTheme: ThemeData.light().textTheme.apply(
bodyColor: const Color(0xff0E0F19),
displayColor: const Color(0xff0E0F19),
),
buttonTheme: ThemeData.light().buttonTheme.copyWith(
buttonColor: const Color(0xff243F5F),
colorScheme: ThemeData.light()
.buttonTheme
.colorScheme
.copyWith(brightness: Brightness.dark),
),
visualDensity: VisualDensity.adaptivePlatformDensity,
brightness: Brightness.light,
primaryColorBrightness: Brightness.dark,
accentColorBrightness: Brightness.dark,
);
final darkTheme = ThemeData.dark().copyWith(
primaryColor: const Color(0xff243F5F),
accentColor: const Color(0xff3A6EA5),
backgroundColor: const Color(0xff0E0F19),
textTheme: ThemeData.dark().textTheme.apply(
bodyColor: const Color(0xffFFFFF2),
displayColor: const Color(0xffFFFFF2),
),
buttonTheme: ThemeData.dark().buttonTheme.copyWith(
buttonColor: const Color(0xff243F5F),
colorScheme: ThemeData.dark()
.buttonTheme
.colorScheme
.copyWith(brightness: Brightness.dark),
),
visualDensity: VisualDensity.adaptivePlatformDensity,
brightness: Brightness.dark,
primaryColorBrightness: Brightness.dark,
accentColorBrightness: Brightness.dark,
);

class MyApp extends StatelessWidget {
final ProviderAPI provider;

Expand All @@ -25,33 +70,22 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return ChangeNotifierProvider.value(
value: provider,
child: MaterialApp(
title: 'Kami',
theme: ThemeData(
primaryColor: const Color(0xff3A6EA5),
accentColor: const Color(0xff243F5F),
backgroundColor: const Color(0xffFFFFF2),
textTheme: ThemeData.light().textTheme.apply(
bodyColor: const Color(0xff0E0F19),
displayColor: const Color(0xff0E0F19),
),
buttonTheme: ThemeData.light().buttonTheme.copyWith(
buttonColor: const Color(0xff243F5F),
colorScheme: ThemeData.light()
.buttonTheme
.colorScheme
.copyWith(brightness: Brightness.dark),
),
visualDensity: VisualDensity.adaptivePlatformDensity,
child: Consumer<ThemeSwitcher>(
builder: (context, api, child) => MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Kami',
theme: lightTheme,
darkTheme: darkTheme,
themeMode: api.themeMode,
home: Home(),
routes: {
'/photo': (_) => PhotoView(),
'/input': (_) => InputView(),
'/itemDetail': (_) => ItemDetailView(),
'/login': (_) => LoginView(),
'/signup': (_) => SignupView(),
},
),
home: Home(),
routes: {
'/photo': (_) => PhotoView(),
'/input': (_) => InputView(),
'/itemDetail': (_) => ItemDetailView(),
'/login': (_) => LoginView(),
'/signup': (_) => SignupView(),
},
),
);
}
Expand Down
32 changes: 25 additions & 7 deletions flutter/lib/src/firebase_provider.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'dart:async';
import 'dart:convert';
import 'dart:typed_data';

Expand All @@ -18,6 +19,7 @@ class FirebaseProvider extends ChangeNotifier
implements ProviderAPI<FirebaseItem> {
List<FirebaseItem> _storedTexts = [];
FirebaseUser _user;
StreamSubscription _listener;
final GoogleSignIn _googleSignIn = GoogleSignIn();
final FirebaseAuth _auth = FirebaseAuth.instance;
final Firestore _store = Firestore.instance;
Expand All @@ -26,25 +28,36 @@ class FirebaseProvider extends ChangeNotifier
_fetchUser();
}

void _setupListener() {
if (!isLoggedIn) return;
_listener = _store.collection(_user.uid).snapshots().listen((event) {
_storedTexts = event.documents.map(_documentToItem).toList();
notifyListeners();
});
}

Future<void> _fetchUser() async {
_user = await _auth.currentUser();
if (isLoggedIn) _setupListener();
notifyListeners();
}

@override
Future<void> fetchStoredTexts() async {
if (!isLoggedIn) return;
final texts =
(await _store.collection(_user.uid).getDocuments()).documents.map(
(e) {
var item = FirebaseItem.fromJson(e.data);
return item._hydrate(e.documentID, this);
},
).toList();
final texts = (await _store.collection(_user.uid).getDocuments())
.documents
.map(_documentToItem)
.toList();
_storedTexts = texts;
notifyListeners();
}

FirebaseItem _documentToItem(DocumentSnapshot snapshot) {
var item = FirebaseItem.fromJson(snapshot.data);
return item._hydrate(snapshot.documentID, this);
}

@override
bool get isLoggedIn => _user != null;

Expand All @@ -57,6 +70,7 @@ class FirebaseProvider extends ChangeNotifier
))
.user;

_setupListener();
notifyListeners();
return true;
} catch (e) {
Expand All @@ -77,6 +91,7 @@ class FirebaseProvider extends ChangeNotifier

_user = (await _auth.signInWithCredential(cred)).user;

_setupListener();
notifyListeners();
return true;
} catch (e) {
Expand All @@ -89,6 +104,7 @@ class FirebaseProvider extends ChangeNotifier
Future<void> logout() async {
await _auth.signOut();
_user = null;
await _listener.cancel();
notifyListeners();
}

Expand All @@ -101,6 +117,7 @@ class FirebaseProvider extends ChangeNotifier
headers: {
'Origin': 'kamiapp.ml',
'Accept': 'application/json',
'Content-Type': 'application/octet-stream',
},
body: image,
))
Expand All @@ -124,6 +141,7 @@ class FirebaseProvider extends ChangeNotifier
summary: "This is the text file's summary.",
));

_setupListener();
notifyListeners();
return true;
} catch (e) {
Expand Down
21 changes: 20 additions & 1 deletion flutter/lib/src/home.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:Kami/src/firebase_provider.dart';
import 'package:Kami/src/provider_api.dart';
import 'package:Kami/src/theme_switcher.dart';
import 'package:flutter/material.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
import 'package:provider/provider.dart';
Expand All @@ -10,14 +11,15 @@ class Home extends StatefulWidget {
}

class HomeState extends State<Home> {
final GlobalKey<ScaffoldState> k = GlobalKey(debugLabel: 'scaffold');

@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {
GlobalKey<ScaffoldState> k = GlobalKey(debugLabel: 'scaffold');
final iconColor =
Theme.of(context).brightness == Brightness.light ? 'dark' : 'light';
final iconAsset = 'assets/kami_$iconColor.png';
Expand All @@ -35,6 +37,23 @@ class HomeState extends State<Home> {
semanticLabel: 'Kami logo',
),
actions: [
GestureDetector(
child: IconButton(
icon: const Icon(Icons.brightness_medium),
onPressed: () {
final api = Provider.of<ThemeSwitcher>(context, listen: false);
api.switchTheme();
},
),
onLongPress: () {
final api = Provider.of<ThemeSwitcher>(context, listen: false);
api.resetTheme();
k.currentState.showSnackBar(SnackBar(
content: const Text('Reset theme to system default'),
duration: const Duration(seconds: 2),
));
},
),
if (api.isLoggedIn)
IconButton(
icon: const Icon(Icons.add),
Expand Down
1 change: 0 additions & 1 deletion flutter/lib/src/item_detail.dart
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ class _ItemDetailViewState extends State<ItemDetailView> {
final api = Provider.of<ProviderAPI>(context,
listen: false);
setState(() => _loadingSummary = true);
await Future.delayed(Duration(seconds: 3));
final summary = await api.summarize(item.text);
setState(() => item.summary = summary);
await item.update();
Expand Down
72 changes: 72 additions & 0 deletions flutter/lib/src/theme_switcher.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:shared_preferences/shared_preferences.dart';

class ThemeSwitcher with ChangeNotifier {
ThemeMode _themeMode = ThemeMode.system;
bool _didChangeTheme = false;

ThemeSwitcher() {
_fetchTheme();
}

Future<void> _fetchTheme() async {
final instance = await SharedPreferences.getInstance();
final theme = instance.getString('theme');
if (theme == null) return;
switch (theme) {
case 'dark':
_themeMode = ThemeMode.dark;
break;
case 'light':
_themeMode = ThemeMode.light;
break;
}
notifyListeners();
}

Future<void> _saveTheme(ThemeMode theme) async {
if (!_didChangeTheme) return;
final instance = await SharedPreferences.getInstance();
await instance.setString(
'theme', theme == ThemeMode.dark ? 'dark' : 'light');
}

ThemeMode get themeMode => _themeMode;

void switchTheme() {
var newTheme;
if (_themeMode == ThemeMode.system)
_themeMode =
SchedulerBinding.instance.window.platformBrightness == Brightness.dark
? ThemeMode.dark
: ThemeMode.light;
switch (_themeMode) {
case ThemeMode.dark:
newTheme = ThemeMode.light;
break;
case ThemeMode.light:
newTheme = ThemeMode.dark;
break;
default:
newTheme = _themeMode;
}
_themeMode = newTheme;
_didChangeTheme = true;
_saveTheme(_themeMode);
notifyListeners();
}

void resetTheme() {
_themeMode = ThemeMode.system;
_didChangeTheme = false;
_deleteTheme();
notifyListeners();
}

Future<void> _deleteTheme() async {
final instance = await SharedPreferences.getInstance();
await instance.remove('theme');
}
}
Loading

0 comments on commit d596148

Please sign in to comment.