diff --git a/Privacy Policy.md b/Privacy Policy.md index fb1241d..04f5bf8 100644 --- a/Privacy Policy.md +++ b/Privacy Policy.md @@ -1,12 +1,12 @@ **Privacy Policy** -Aldrin Zigmund Cortez Velasco built the Digilog TV app as an Open Source app. This SERVICE is provided by Aldrin Zigmund Cortez Velasco at no cost and is intended for use as is. +Aldrin Zigmund C. Velasco built the Digilog TV (Google Play version) app as an Ad Supported app. This SERVICE is provided by Aldrin Zigmund C. Velasco at no cost and is intended for use as is. This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal Information if anyone decided to use my Service. If you choose to use my Service, then you agree to the collection and use of information in relation to this policy. The Personal Information that I collect is used for providing and improving the Service. I will not use or share your information with anyone except as described in this Privacy Policy. -The terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, which are accessible at Digilog TV unless otherwise defined in this Privacy Policy. +The terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, which are accessible at Digilog TV (Google Play version) unless otherwise defined in this Privacy Policy. **Information Collection and Use** @@ -17,6 +17,7 @@ The app does use third-party services that may collect information used to ident Link to the privacy policy of third-party service providers used by the app * [Google Play Services](https://www.google.com/policies/privacy/) +* [AdMob](https://support.google.com/admob/answer/6128543?hl=en) **Log Data** @@ -55,10 +56,10 @@ These Services do not address anyone under the age of 13. I do not knowingly col I may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. I will notify you of any changes by posting the new Privacy Policy on this page. -This policy is effective as of 2023-09-01 +This policy is effective as of 2023-09-28 **Contact Us** If you have any questions or suggestions about my Privacy Policy, do not hesitate to contact me at aldrinzigmund@tutamail.com. -This privacy policy page was created at [privacypolicytemplate.net](https://privacypolicytemplate.net) and modified/generated by [App Privacy Policy Generator](https://app-privacy-policy-generator.nisrulz.com/) +This privacy policy page was created at [privacypolicytemplate.net](https://privacypolicytemplate.net) and modified/generated by [App Privacy Policy Generator](https://app-privacy-policy-generator.nisrulz.com/) \ No newline at end of file diff --git a/README.md b/README.md index 87cea59..6d0bf32 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ alt="Get it on Google Play" height="93">](https://play.google.com/store/apps/details?id=io.github.aldrinzigmundv.digilogtv) -Or download the latest APK from the [Releases Section](https://github.com/aldrinzigmundv/thirdbank/releases/latest) +Or download the latest ad-free APK version from the [Releases Section](https://github.com/aldrinzigmundv/thirdbank/releases/latest) ## What is Digilog TV? diff --git a/android/app/build.gradle b/android/app/build.gradle index d7650ea..2cd2ebd 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -58,8 +58,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion 20 targetSdkVersion 33 - versionCode 5 - versionName "1.6.1" + versionCode 6 + versionName "1.8.0" multiDexEnabled true } signingConfigs { diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 3860318..3ab2c8b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -32,5 +32,9 @@ android:name="flutterEmbedding" android:value="2" /> + + diff --git a/lib/main.dart b/lib/main.dart index b5c8bf2..b5e443a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,12 +1,18 @@ import 'package:flutter/material.dart'; +//import 'package:google_mobile_ads/google_mobile_ads.dart'; + import 'package:digilogtv/pages/loadingpage.dart'; -void main() => runApp( - MaterialApp( +void main() { + // WidgetsFlutterBinding.ensureInitialized(); + // MobileAds.instance.initialize(); + + runApp(MaterialApp( title: "Digilog TV", initialRoute: '/', routes: { '/': (context) => const LoadingPage(), }, -)); \ No newline at end of file + )); +} diff --git a/lib/pages/home pages/channellistpage.dart b/lib/pages/home pages/channellistpage.dart index dd6f2cb..7113bd3 100644 --- a/lib/pages/home pages/channellistpage.dart +++ b/lib/pages/home pages/channellistpage.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; +//import 'package:google_mobile_ads/google_mobile_ads.dart'; + import 'package:digilogtv/services/storage.dart'; import 'package:digilogtv/services/formatting.dart'; import 'package:digilogtv/services/channels.dart'; @@ -25,6 +27,30 @@ class _ChannelListPageState extends State { late StorageProvider storage; late FormattingProvider formattingProvider; + //Google Admob + // BannerAd? _bannerAd; + // bool _isLoaded = false; + // final adUnitId = "XXX"; + // void loadAd() { + // _bannerAd = BannerAd( + // adUnitId: adUnitId, + // request: const AdRequest(), + // size: AdSize.banner, + // listener: BannerAdListener( + // onAdLoaded: (ad) { + // debugPrint('$ad loaded.'); + // setState(() { + // _isLoaded = true; + // }); + // }, + // onAdFailedToLoad: (ad, err) { + // debugPrint('BannerAd failed to load: $err'); + // ad.dispose(); + // }, + // ), + // )..load(); + // } + favoriteIcon(String channelName) { if (!storage.favoritedChannels.contains(channelName)) { return Icon( @@ -68,10 +94,12 @@ class _ChannelListPageState extends State { super.initState(); storage = widget.storage; formattingProvider = widget.formattingProvider; + //loadAd(); } @override - void dispose() { + void dispose() async { + //await _bannerAd?.dispose(); super.dispose(); } @@ -81,6 +109,17 @@ class _ChannelListPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ + // if (_bannerAd != null) + // Container( + // alignment: Alignment.bottomCenter, + // child: SafeArea( + // child: SizedBox( + // width: _bannerAd!.size.width.toDouble(), + // height: _bannerAd!.size.height.toDouble(), + // child: AdWidget(ad: _bannerAd!), + // ), + // ), + // ), ListView.builder( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), @@ -125,7 +164,7 @@ class _ChannelListPageState extends State { )), ), ); - }) + }), ], )); } diff --git a/lib/pages/home pages/contactpage.dart b/lib/pages/home pages/contactpage.dart index e8496aa..3d405d8 100644 --- a/lib/pages/home pages/contactpage.dart +++ b/lib/pages/home pages/contactpage.dart @@ -25,87 +25,38 @@ class ContactPage extends StatelessWidget { @override Widget build(BuildContext context) { - return SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(18.0, 36.0, 18.0, 18.0), - child: Image.asset( - 'assets/icons/icon.png', - height: 180.0, - width: 180.0, - fit: BoxFit.contain, + return Center( + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(18.0, 36.0, 18.0, 18.0), + child: Image.asset( + 'assets/icons/icon.png', + height: 180.0, + width: 180.0, + fit: BoxFit.contain, + ), ), - ), - const Padding( - padding: EdgeInsets.fromLTRB(18.0, 36.0, 18.0, 18.0), - child: Text( - 'You can reach me at aldrinzigmund@tutamail.com', - style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold), - textAlign: TextAlign.center, - ), - ), - const Padding( - padding: EdgeInsets.all(18.0), - child: Text( - 'Due to the added workload of maintaining this app on the Google Play Store – where they recently required me to include the websites of each TV news channel, although I personally think it\'s not necessary as I trust my users\' ability to distinguish quality news from bad ones, and find the contact information of these TV news networks easily via a simple web search – and the rejection of my recent app update that was intended to promptly resolve a screen timeout issue during video playback till I comply with the said requirement, I\'m now considering the possibility of introducing ads for users who download my app from Google Play as a means of compensating for my efforts in enhancing the overall user experience.', - style: TextStyle(fontSize: 18.0), - textAlign: TextAlign.center, - ), - ), - const Padding( - padding: EdgeInsets.fromLTRB(9.0, 27.0, 9.0, 18.0), - child: Text( - 'Donate Bitcoin to Help Me Maintain this App', - style: TextStyle(fontSize: 27.0), - textAlign: TextAlign.center, - )), - Padding( - padding: - const EdgeInsets.symmetric(horizontal: 9.0, vertical: 18.0), - child: GestureDetector( - onTap: () => copyBitcoinAddress(context), - child: Image.asset( - 'assets/images/bitcoin.png', - height: 300.0, - width: 300.0, - fit: BoxFit.contain, - ), - )), - const Padding( - padding: EdgeInsets.all(18.0), + const Padding( + padding: EdgeInsets.fromLTRB(18.0, 36.0, 18.0, 18.0), child: Text( - 'Tap the QR Code to Copy the Bitcoin Address to your Clipboard', - style: TextStyle(fontSize: 15.0), + 'You can reach me at aldrinzigmund@tutamail.com', + style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold), textAlign: TextAlign.center, - )), - const Padding( - padding: EdgeInsets.fromLTRB(9.0, 27.0, 9.0, 18.0), - child: Text( - 'Donate Monero to Help Me Maintain this App', - style: TextStyle(fontSize: 27.0), - textAlign: TextAlign.center, - )), - Padding( - padding: const EdgeInsets.all(9.0), - child: GestureDetector( - onTap: () => copyMoneroAddress(context), - child: Image.asset( - 'assets/images/monero.png', - height: 300.0, - width: 300.0, - fit: BoxFit.contain, - ), - )), - const Padding( - padding: EdgeInsets.all(18.0), + ), + ), + const Padding( + padding: EdgeInsets.fromLTRB(18.0, 36.0, 18.0, 18.0), child: Text( - 'Tap the QR Codes to Copy the Monero Address to your Clipboard', - style: TextStyle(fontSize: 15.0), + 'You have downloaded the ad-supported version of this app from Google Play. An ad-free version is available on GitHub. Other ads are provided by their respective TV news channels.', + style: TextStyle(fontSize: 18.0), textAlign: TextAlign.center, - )), - ], + ), + ), + ], + ), ), ); } diff --git a/lib/pages/home pages/favoritespage.dart b/lib/pages/home pages/favoritespage.dart index 3107db8..0631f84 100644 --- a/lib/pages/home pages/favoritespage.dart +++ b/lib/pages/home pages/favoritespage.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; +//import 'package:google_mobile_ads/google_mobile_ads.dart'; + import 'package:digilogtv/services/storage.dart'; import 'package:digilogtv/services/formatting.dart'; import 'package:digilogtv/services/channels.dart'; @@ -25,6 +27,30 @@ class _FavoritesPageState extends State { late StorageProvider storage; late FormattingProvider formattingProvider; + //Google Admob + // BannerAd? _bannerAd; + // bool _isLoaded = false; + // final adUnitId = "XXX"; + // void loadAd() { + // _bannerAd = BannerAd( + // adUnitId: adUnitId, + // request: const AdRequest(), + // size: AdSize.banner, + // listener: BannerAdListener( + // onAdLoaded: (ad) { + // debugPrint('$ad loaded.'); + // setState(() { + // _isLoaded = true; + // }); + // }, + // onAdFailedToLoad: (ad, err) { + // debugPrint('BannerAd failed to load: $err'); + // ad.dispose(); + // }, + // ), + // )..load(); + // } + favoriteChange(int index) async { setState(() { storage.favoritedChannels @@ -44,6 +70,7 @@ class _FavoritesPageState extends State { @override void dispose() { + //await _bannerAd?.dispose(); super.dispose(); } @@ -53,6 +80,7 @@ class _FavoritesPageState extends State { storage = widget.storage; formattingProvider = widget.formattingProvider; storage.initializeFavorites(); + //loadAd(); } @override @@ -62,6 +90,17 @@ class _FavoritesPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ + // if (_bannerAd != null) + // Container( + // alignment: Alignment.bottomCenter, + // child: SafeArea( + // child: SizedBox( + // width: _bannerAd!.size.width.toDouble(), + // height: _bannerAd!.size.height.toDouble(), + // child: AdWidget(ad: _bannerAd!), + // ), + // ), + // ), ListView.builder( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), @@ -110,7 +149,7 @@ class _FavoritesPageState extends State { )), ), ); - }) + }), ], )) : const Center( diff --git a/lib/services/channels.dart b/lib/services/channels.dart index f9f5528..e0d7c64 100644 --- a/lib/services/channels.dart +++ b/lib/services/channels.dart @@ -50,7 +50,7 @@ class Channels { Channel(channelName: "CNBC", link: "https://www.youtube.com/embed/9NyxcX3rhQs?autoplay=1", source: Source.youtube, contactpage: 'https://help.cnbc.com/contact/'), Channel(channelName: "DW English", link: "https://dwamdstream102.akamaized.net/hls/live/2015525/dwstream102/index.m3u8", source: Source.iptv, contactpage: 'https://corporate.dw.com/en/contact/s-30606'), Channel(channelName: "Euronews", link: "https://www.youtube.com/embed/pykpO5kQJ98?autoplay=1", source: Source.youtube, contactpage: 'https://www.euronews.com/contact'), - Channel(channelName: "France 24 English", link: "https://www.youtube.com/embed/h3MuIUNCCzI?autoplay=1", source: Source.youtube, contactpage: 'https://www.francemediasmonde.com/en/contact'), + Channel(channelName: "France 24 English", link: "https://www.youtube.com/embed/tkDUSYHoKxE?autoplay=1", source: Source.youtube, contactpage: 'https://www.francemediasmonde.com/en/contact'), Channel(channelName: "Global News", link: "https://i.mjh.nz/PlutoTV/62cbef9ebb857100072fc187-alt.m3u8", source: Source.iptv, contactpage: 'https://globalnews.ca/pages/contact-us/'), Channel(channelName: "Newsmax TV", link: "https://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8", source: Source.iptv, contactpage: 'https://www.newsmax.com/contact/'), Channel(channelName: "NHK World Japan", link: "https://nhkwlive-ojp.akamaized.net/hls/live/2003459/nhkwlive-ojp-en/index_4M.m3u8", source: Source.iptv, contactpage: 'https://www3.nhk.or.jp/nhkworld/en/contact/'), diff --git a/pubspec.yaml b/pubspec.yaml index 851e4b3..3ce7f57 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: digilogtv description: A free and open-source TV news app, inspired by Linux Mint's Hypnotix. publish_to: 'none' -version: 1.6.1 +version: 1.8.0 environment: sdk: '>=3.1.0 <4.0.0' @@ -13,6 +13,7 @@ dependencies: flutter_inappwebview: ^5.7.2+3 flutter_launcher_icons: ^0.13.1 flutter_mobx: ^2.0.6+5 + #google_mobile_ads: ^3.0.0 mobx: ^2.2.0 mobx_codegen: ^2.3.0 shared_preferences: ^2.2.0