diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bc2d37ec..55e1a072d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +## [2.2.18+318] - 2020-09-04 +### Fixed +- Phone verification / Shibboleth login fails after multiple logins. [#29] (https://github.com/rokwire/illinois-app/issues/29) +- Fix events filtering.[#49](https://github.com/rokwire/illinois-app/issues/49) +- Make events date format consistent.[#33](https://github.com/rokwire/illinois-app/issues/33) + +## [2.2.17] - 2020-09-03 +### Changed +- Show debug panel only for debug managers.[#51](https://github.com/rokwire/illinois-app/issues/51) +- Update es and zh strings.[#55](https://github.com/rokwire/illinois-app/issues/55) + +## [2.2.16] - 2020-09-02 +### Removed Save buttons from Profile Informations panels + +## [2.2.15] - 2020-09-01 +### Exposed Strings for localisation + +## [2.2.14] - 2020-08-31 + +### Improved VO features [#24] + ## [2.2.13] - 2020-08-28 ### Fixed diff --git a/assets/assets.json b/assets/assets.json index ba2e8ea33..78061fb2d 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -434,11 +434,11 @@ "privacy_new":{ "description":[ - {"level":1, "key": "com.illinois.description.1", "text": "You may not be able to use all features, but you are anonymous and we don't ask for anything or store any data. Anonymous data will be collected and used to optimize app performance."}, - {"level":2, "key": "com.illinois.description.1", "text": "See what's happening around you. We use Wifi and Bluetooth location services to improve your experience, but we never store that data."}, - {"level":3, "key": "com.illinois.description.2", "text": "You can personalize and customize the app. Wifi and Bluetooth location data is stored over time to make recommendations and improve your overall app experience."}, - {"level":4, "key": "com.illinois.description.3", "text": "Let the app work for you. \nYou can access your iCard, save credit cards to make future purchases easier, access health information, and get notifications based on your specific interests."}, - {"level":5, "key": "com.illinois.description.4", "text": "Access all features, get connected to campus, and let the app suggest tailored experiences that you and your friends all enjoy."} + {"level":1, "key": "privacy.category.description.1", "text": "You may not be able to use all features, but you are anonymous and we don't ask for anything or store any data. Anonymous data will be collected and used to optimize app performance."}, + {"level":2, "key": "privacy.category.description.2", "text": "See what's happening around you. We use Wifi and Bluetooth location services to improve your experience, but we never store that data."}, + {"level":3, "key": "privacy.category.description.3", "text": "You can personalize and customize the app. Wifi and Bluetooth location data is stored over time to make recommendations and improve your overall app experience."}, + {"level":4, "key": "privacy.category.description.4", "text": "Let the app work for you. \nYou can access your iCard, save credit cards to make future purchases easier, access health information, and get notifications based on your specific interests."}, + {"level":5, "key": "privacy.category.description.5", "text": "Access all features, get connected to campus, and let the app suggest tailored experiences that you and your friends all enjoy."} ], "categories":[ { diff --git a/assets/strings.en.json b/assets/strings.en.json index 896586cb9..c34427688 100644 --- a/assets/strings.en.json +++ b/assets/strings.en.json @@ -159,6 +159,7 @@ "panel.browse.button.groups.hint":"", "panel.browse.button.safer.title":"Safer Illinois", "panel.browse.button.safer.hint":"", + "panel.browse.button.privacy_center.title": "Privacy Center", "panel.browse.label.browse_all": "Browse all", "panel.browse.label.offline.sign_in": "Sign In not available while offline.", @@ -590,6 +591,8 @@ "panel.settings.manage_interests.search.cancel.hint":"clear the search filter", "panel.settings.manage_interests.search.search_button.title":"Search", "panel.settings.manage_interests.search.search_button.hint": "filter tags", + "panel.settings.manage_interests.button.save.title": "Save Changes", + "panel.settings.manage_interests.button.save.hint": "", "panel.settings.illini_cash.label.title": "Illini Cash", "panel.settings.illini_cash.label.history": "History", @@ -732,6 +735,8 @@ "panel.food_filters.label.exclude_ingredients.hint": "", "panel.food_filters.value.on": "On", "panel.food_filters.value.off": "Off", + "panel.food_filters.button.save.title": "Save Changes", + "panel.food_filters.button.save.hint": "", "panel.food_special_offers.title.text": "Specials", "panel.food_special_offers.available.text": "Available at these locations", @@ -811,8 +816,114 @@ "panel.settings.home.button.feedback.title": "Submit Feedback", "panel.settings.home.button.feedback.hint": "", + "panel.settings.privacy_center.label.title":"Privacy Center", + "panel.settings.privacy_center.label.description":"Personalize your privacy and data preferences.", + "panel.settings.privacy_center.label.finish_setup":"Finish setup", + "panel.settings.privacy_center.label.finish_setup_description":"Log in with your NetID or Telephone number to get the full Illinois experience.", + "panel.settings.privacy_center.button.verify_identity.title":"Verify your Identity", + "panel.settings.privacy_center.button.manage_privacy.title":"Manage and Understand Your Privacy", + "panel.settings.privacy_center.button.manage_privacy.hint":"", + "panel.settings.privacy_center.button.personal_information.title":"Personal Information", + "panel.settings.privacy_center.button.personal_information.hint":"", + "panel.settings.privacy_center.button.notifications.title":"Notification Preferences", + "panel.settings.privacy_center.button.notifications.":"", + "panel.settings.privacy_center.button.privacy_policy.title":"Privacy Statement", + "panel.settings.privacy_center.button.delete_data.title":"Forget all of my information", + "panel.settings.privacy_center.label.delete.description":"This will delete all of your personal information that was shared and stored within the app.", + "panel.settings.privacy_center.label.delete_message.title":"Forget all of your information?", + "panel.settings.privacy_center.label.delete_message.description1":"This will ", + "panel.settings.privacy_center.label.delete_message.description2":"Permanently ", + "panel.settings.privacy_center.label.delete_message.description3":"delete all of your information. You will not be able to retrieve your data after you have deleted it. Are you sure you want to continue?", + "panel.settings.privacy_center.button.forget_info.title": "Forget My Information", + + "panel.settings.verify_identity.label.title":"Verify your Identity", + "panel.settings.verify_identity.label.description":"Connect to Illinois", + "panel.settings.verify_identity.label.connect_id.desription1":"Are you a ", + "panel.settings.verify_identity.label.connect_id.desription2":"Student ", + "panel.settings.verify_identity.label.connect_id.desription3":"or ", + "panel.settings.verify_identity.label.connect_id.desription4":"faculty member ", + "panel.settings.verify_identity.label.connect_id.desription5":"? Log in with your NetID to see Illinois information specific to you, like your Illini Cash and meal plan.", + "panel.settings.verify_identity.button.connect_net_id.title":"Connect Your NetID", + "panel.settings.verify_identity.label.verify_phone.desription1":"Don’t have a NetID", + "panel.settings.verify_identity.label.verify_phone.desription2":"? Verify your phone number to save your preferences and have the same experience on more than one device. ", + "panel.settings.verify_identity.button.verify_phone.title":"Verify Your Phone Number", + + "panel.settings.login.netid.label.title":"Connect your NetID", + "panel.settings.login.netid.button.dont_continue.title":"Not right now", + "panel.settings.login.netid.label.title.hint":"", + "panel.settings.login.netid.label.description":"Log in with your NetID to use academic and dorm specific features.", + "panel.settings.login.netid.button.continue.title":"Log in with NetID", + "panel.settings.login.netid.button.continue.hint":"", + "panel.settings.login.netid.button.dont_continue.hint":"Skip verification", + "panel.settings.login.label.login_failed":"Unable to login. Please try again later", + + "panel.settings.login.phone.label.title":"Verify your phone number", + "panel.settings.login.phone.button.dont_continue.title":"Not right now", + "panel.settings.login.phone.label.title.hint":"", + "panel.settings.login.phone.label.description":"This saves your preferences so you can have the same experience on more than one device.", + "panel.settings.login.phone.button.continue.title":"Verify My Phone Number", + "panel.settings.login.phone.button.continue.hint":"", + "panel.settings.login.phone.button.dont_continue.hint":"Skip verification", "panel.settings.label.offline.phone_ver":"Verify Your Phone Number is not available while offline.", + "widget.settings.dialog.button.cancel.title": "Cancel", + + "panel.settings.notifications.label.title":"Notifications", + "panel.settings.notifications.label.desctiption":"Don’t miss an event or campus update.", + "panel.settings.notifications.label.notifications":"Notifications", + "panel.settings.notifications.label.info":"To receive notifications enable in your device's settings.", + "panel.settings.notifications.reminders":"Event reminders", + "panel.settings.notifications.athletics_updates":"Athletics updates", + "panel.settings.notifications.dining":"Dining specials", + "panel.settings.notifications.label.status.enabled":"Enabled", + "panel.settings.notifications.label.status.disabled":"Disabled", + + "panel.settings.personal_information.label.title":"Personal Information", + "panel.settings.personal_information.button.delete_data.title":"Delete my personal data", + "panel.settings.personal_information.label.description":"Delete your location history, your tags and categories, and saved events and dining locations.", + "panel.settings.personal_information.button.personal_information.title":"Personal Information", + "panel.settings.personal_information.button.personal_information.description":"Your name and contact info you’ve shared", + "panel.settings.personal_information.button.who_you_are.title":"Who You Are", + "panel.settings.personal_information.button.who_you_are.description":"Your status as a student, faculty, resident, etc.", + "panel.settings.personal_information.button.interest.title":"Your Interests", + "panel.settings.personal_information.button.interest.description":"Categories, teams, and tags you follow", + "panel.settings.personal_information.button.food_filters.title":"Food Filters", + "panel.settings.personal_information.button.food_filters.description":"Add or edit your food preferences", + "panel.settings.personal_information.label.delete_message.title":"Delete your personal data?", + "panel.settings.personal_information.label.delete_message.description1":"Select all that you would like to ", + "panel.settings.personal_information.label.delete_message.description2":"Permanently ", + "panel.settings.personal_information.label.delete_message.description3":"delete:", + "panel.settings.personal_information.button.forget_info.title": "Delete My Data", + + "panel.settings.new_privacy.privacy.label.title": "Choose Your Privacy Level", + "panel.settings.new_privacy.privacy.label.slider_help": "Adjust slider to change your privacy level", + "panel.settings.new_privacy.privacy.button.set_privacy.disabled.title": "Scroll to Review", + "panel.settings.new_privacy.privacy.button.set_privacy.title": "Set my Privacy", + "panel.settings.new_privacy.privacy.button.set_privacy.disabled.hint": "", + "panel.settings.new_privacy.privacy.button.set_privacy.hint": "", + "panel.settings.new_privacy.privacy.dialog.update_privacy.title": "Your new \nprivacy level", + "panel.settings.new_privacy.privacy.dialog.update_privacy.button.back.title": "Back", + "panel.settings.new_privacy.privacy.dialog.label.new_privacy": "Privacy Level: ", + "panel.settings.new_privacy.privacy.dialog.update_privacy.label2": "This change requires us to make the following changes:", + "panel.settings.new_privacy.privacy.dialog.update_privacy.confirm": "Are you sure?", + "panel.settings.new_privacy.privacy.dialog.update_privacy.yes": "Yes", + "panel.settings.new_privacy.privacy.dialog.update_privacy.no": "No", + "panel.settings.new_privacy.privacy.label.set_your_privacy_level": "Set your privacy level", + "panel.settings.new_privacy.privacy.label.update_your_privacy_level": "Update your privacy level", + "panel.settings.new_privacy.privacy.label.set_your_privacy_level.hint": "Header 1", + "panel.settings.new_privacy.privacy.label.update_your_privacy_level.hint": "Header 1", + "panel.settings.new_privacy.privacy.label.some_details_have_changed": "Some details have changed", + "panel.settings.new_privacy.privacy.label.some_details_have_changed.hint": "Header 2", + "panel.settings.new_privacy.label.description.title": "Features and Data Collection", + "panel.settings.new_privacy.label.description.info": "Learn more about specific features, and use dropdown for more information about how data is being used.", + "panel.settings.new_privacy.button.close_all.title": "Close All", + "panel.settings.new_privacy.button.expand_all.title": "Expand All", + "panel.settings.new_privacy.label.hint": "Double tap to ", + "panel.settings.new_privacy.button.expand_data.title": "See Data Usage", + "panel.settings.new_privacy.privacy.button.set_privacy.slider.hint": "Privacy Level", + "panel.settings.new_privacy.privacy.button.set_privacy.slider.increase": "increased to", + "panel.settings.new_privacy.privacy.button.set_privacy.slider.decrease": "decreased to", + "panel.create_event.header.title":"Create An Event", "panel.create_event.title":"Create an Event", "panel.create_event.add_image":"Add event image", @@ -880,7 +991,17 @@ "panel.profile_info.dialog.remove_my_information.subtitle": "Are you sure?", "panel.profile_info.dialog.remove_my_information.yes.title": "Yes", "panel.profile_info.dialog.remove_my_information.no.title": "No", - + "panel.profile_info.phone_number.name.title": "Full Name", + "panel.profile_info.phone_number.name.hint": "", + "panel.profile_info.phone_number.email.title": "Email", + "panel.profile_info.phone_number.email.hint": "", + "panel.profile_info.button.save.title":"Save Changes", + "panel.profile_info.button.save.hint":"", + "panel.profile_info.logout.title":"Illinois", + "panel.profile_info.logout.message":"Are you sure you want to sign out?", + "panel.profile_info.logout.button.yes":"Yes", + "panel.profile_info.logout.no":"No", + "panel.create_poll.header.title": "Create a Quick Poll", "panel.create_poll.description": "People within 100 ft of you with bluetooth on and with the app running will be notified and can vote through the Illinois app.", "panel.create_poll.text.wants_to_know": "wants to know…", @@ -1455,5 +1576,79 @@ "com.illinois.features2.entry.log_out":"Log you off system", "com.illinois.features2.entry.disable_notifications":"Turn off notifications", "com.illinois.features2.entry.remove_credit_card":"Remove your credit card info", - "com.illinois.features2.entry.dont_share_location":"Don’t share your data with other users" + "com.illinois.features2.entry.dont_share_location":"Don’t share your data with other users", + + "privacy.category.description.1": "You may not be able to use all features, but you are anonymous and we don't ask for anything or store any data. Anonymous data will be collected and used to optimize app performance.", + "privacy.category.description.2": "See what's happening around you. We use Wifi and Bluetooth location services to improve your experience, but we never store that data.", + "privacy.category.description.3": "You can personalize and customize the app. Wifi and Bluetooth location data is stored over time to make recommendations and improve your overall app experience.", + "privacy.category.description.4": "Let the app work for you. \nYou can access your iCard, save credit cards to make future purchases easier, access health information, and get notifications based on your specific interests.", + "privacy.category.description.5": "Access all features, get connected to campus, and let the app suggest tailored experiences that you and your friends all enjoy.", + "privacy.category.event_and_dining.title": "Events and Dining \nAround Campus", + "privacy.entry.event_and_dining.view.only.title": "View Only", + "privacy.entry.event_and_dining.view.only.description": "View events and dining locations around campus.", + "privacy.entry.event_and_dining.view.only.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.event_and_dining.location.sharing.title": "Location Sharing", + "privacy.entry.event_and_dining.location.sharing.description": "View events and dining locations near you.", + "privacy.entry.event_and_dining.location.sharing.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.event_and_dining.personalizations.title": "Personalizations", + "privacy.entry.event_and_dining.personalizations.description": "View events and dining locations near you.", + "privacy.entry.event_and_dining.personalizations.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.event_and_dining.notifications.title": "Notificaitons", + "privacy.entry.event_and_dining.notifications.description": "Get various notifications & receive reminders of items you have starred in the app.", + "privacy.entry.event_and_dining.notifications.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.event_and_dining.sharing.title": "Sharing", + "privacy.entry.event_and_dining.sharing.description": "Use the SMARTS of the CONVERGE service to help yourself or a group pick events.", + "privacy.entry.event_and_dining.sharing.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + + "privacy.category.athletics.title": "Athletics", + "privacy.entry.athletics.view.only.title": "View Only", + "privacy.entry.athletics.view.only.description": "See all upcoming schedules for athletic events, real-time scoring, rosters and athletic news.", + "privacy.entry.athletics.view.only.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.athletics.location.sharing.title": "Location Sharing", + "privacy.entry.athletics.location.sharing.description": "Find seats, nearby restrooms & concession stands. See real-time parking availability and directions.", + "privacy.entry.athletics.location.sharing.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.athletics.personalizations.title": "Personalizations", + "privacy.entry.athletics.personalizations.description": "Customize your experience to see schedules, rosters, scores and news for your favorite Illini teams.", + "privacy.entry.athletics.personalizations.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.athletics.notifications.title": "Notificaitons", + "privacy.entry.athletics.notifications.description": "Receive notifications of event start and final scores for your favorite teams.", + "privacy.entry.athletics.notifications.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.athletics.sharing.title": "Identity", + "privacy.entry.athletics.sharing.description": "Store credit card information to buy tickets for athletic events.", + "privacy.entry.athletics.sharing.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + + "privacy.category.wallet.title": "Wallet", + "privacy.entry.wallet.personalizations.title": "Personalizations", + "privacy.entry.wallet.personalizations.description": "Customize your experience to see schedules, rosters, scores and news for your favorite Illini teams.", + "privacy.entry.wallet.personalizations.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.wallet.personalizations.additional_description": "Check your Illini Cash & Meal Plan balances and see past transactions.", + "privacy.entry.wallet.personalizations.additional_data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.wallet.sharing.title": "Identity", + "privacy.entry.wallet.sharing.description": "Store credit card information to buy tickets for athletic events.", + "privacy.entry.wallet.sharing.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + + "privacy.category.health.title": "Health and Wellness", + "privacy.entry.health.view.only.title": "View Only", + "privacy.entry.health.view.only.description": "Locate and connect to resources to assist you with your EIGHT DIMENSIONS of health and wellness.", + "privacy.entry.health.view.only.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.health.location.sharing.title": "Location Sharing", + "privacy.entry.health.location.sharing.description": "Provide you wayfinding assistance to locating health and wellness resources on campus.", + "privacy.entry.health.location.sharing.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + + "privacy.category.involvement.title": "Student and Community Involvement", + "privacy.entry.involvement.view.only.title": "View Only", + "privacy.entry.involvement.view.only.description": "Show campus dining locations and see menus for up to 2 weeks in the future..", + "privacy.entry.involvement.view.only.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.involvement.location.sharing.title": "Location Sharing", + "privacy.entry.involvement.location.sharing.description": "Show event and dining locations near you. Allow you to create a quick poll and receive results from people nearby or far away.", + "privacy.entry.involvement.location.sharing.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.involvement.personalizations.title": "Personalizations", + "privacy.entry.involvement.personalizations.description": "Store your dining location preferences, including food allergies, and see current and future menus. See events, dining locations and news articles that interest you.", + "privacy.entry.involvement.personalizations.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.involvement.notifications.title": "Notificaitons", + "privacy.entry.involvement.notifications.description": "Receive notifications that might interest you based on your preferences or location.", + "privacy.entry.involvement.notifications.data_usage": "This features uses your phone’s Wifi and Bluetooth.", + "privacy.entry.involvement.sharing.title": "Identity", + "privacy.entry.involvement.sharing.description": "Provide assistance in registering to vote, voting by mail and finding voting locations on election day.", + "privacy.entry.involvement.sharing.data_usage": "This features uses your phone’s Wifi and Bluetooth." } diff --git a/assets/strings.es.json b/assets/strings.es.json index 2747affc5..1e20780a4 100644 --- a/assets/strings.es.json +++ b/assets/strings.es.json @@ -159,6 +159,7 @@ "panel.browse.button.groups.hint":"", "panel.browse.button.safer.title":"Safer Illinois", "panel.browse.button.safer.hint":"", + "panel.browse.button.privacy_center.title": "Centro de privacidad", "panel.browse.label.browse_all": "Explorar todo", "panel.browse.label.offline.sign_in": "Iniciar sesión no disponible sin conexión.", @@ -205,7 +206,7 @@ "panel.athletics.button.see_more_events.hint": "", "panel.athletics.button.see_less_events.title": "Muestra menos", "panel.athletics.button.see_less_events.hint": "", - "panel.athletics.label.explore_athletics.title": "Explore Athletics", + "panel.athletics.label.explore_athletics.title": "Explore el atletismo", "panel.athletics.button.upcoming_events.title": "Próximos eventos", "panel.athletics.button.upcoming_events.hint": "Ver los próximos eventos", "panel.athletics.button.news.title": "Noticias", @@ -236,7 +237,7 @@ "panel.athletics_team.label.away.hint": "", "panel.athletics_team.label.neutral.title": "Neutral", "panel.athletics_team.label.neutral.hint": "", - "panel.athletics_team.label.streak.title": "Streak", + "panel.athletics_team.label.streak.title": "Racha", "panel.athletics_team.label.streak.hint": "", "panel.athletics_team.label.schedule.title": "Agenda", "panel.athletics_team.label.schedule.hint": "", @@ -362,7 +363,7 @@ "panel.onboarding.notifications.button.allow.hint":"", "panel.onboarding.notifications.button.dont_allow.title":"No en este momento", "panel.onboarding.notifications.button.dont_allow.hint":"Omitir recibir notificaciones", - "panel.onboarding.notifications.label.access_granted":"Your settings have been changed.", + "panel.onboarding.notifications.label.access_granted":"Su configuración ha sido cambiada.", "panel.onboarding.roles.label.title":"Quién eres", "panel.onboarding.roles.label.title.hint":"Encabezado 1", @@ -422,7 +423,7 @@ "panel.onboarding.verify_phone.button.next.hint":"Toque para continuar", "panel.onboarding.verify_phone.validation.phone_number.text":"Por favor, escriba su número de teléfono", "panel.onboarding.verify_phone.validation.channel_selection.text":"Por favor, seleccione el método de verificación", - "panel.onboarding.verify_phone.validation.server_error.text":"Please enter a valid phone number", + "panel.onboarding.verify_phone.validation.server_error.text":"Por favor ingrese un número de teléfono válido", "panel.onboarding.confirm_phone.title":"Confirme su código", "panel.onboarding.confirm_phone.title.hint":"", @@ -590,6 +591,8 @@ "panel.settings.manage_interests.search.cancel.hint":"borra el filtro de búsqueda", "panel.settings.manage_interests.search.search_button.title":"Buscar", "panel.settings.manage_interests.search.search_button.hint": "filtrar etiquetas", + "panel.settings.manage_interests.button.save.title": "Guardar cambios", + "panel.settings.manage_interests.button.save.hint": "", "panel.settings.illini_cash.label.title": "Illini Cash", "panel.settings.illini_cash.label.history": "Historia", @@ -702,7 +705,7 @@ "panel.saved.label.dining": "Comida", "panel.saved.label.news": "Noticias", "panel.saved.label.laundry": "Lavandería", - "panel.saved.notifications.label": "¡No te pierdas un evento! Reciba recordatorios de los próximos eventos.", + "panel.saved.notifications.label": "¡No te pierdas un evento! Reciba recordatorios de los próximos eventos!", "panel.saved.notifications.enable.label": "Permitir notificaciones", "panel.saved.notifications.skip.label": "No en este momento", "panel.saved.events.button.less": "Mostrar menos", @@ -732,6 +735,8 @@ "panel.food_filters.label.exclude_ingredients.hint": "", "panel.food_filters.value.on": "Activado", "panel.food_filters.value.off": "Desactivado", + "panel.food_filters.button.save.title": "Save Changes", + "panel.food_filters.button.save.hint": "", "panel.food_special_offers.title.text": "Especiales", "panel.food_special_offers.available.text": "Disponible en estos lugares", @@ -811,8 +816,114 @@ "panel.settings.home.button.feedback.title": "Enviar comentarios", "panel.settings.home.button.feedback.hint": "", + "panel.settings.privacy_center.label.title":"Centro de privacidad", + "panel.settings.privacy_center.label.description":"Personalice sus preferencias de privacidad y datos.", + "panel.settings.privacy_center.label.finish_setup":"Finalizar configuración", + "panel.settings.privacy_center.label.finish_setup_description":"Inicie sesión con su NetID o número de teléfono para obtener la experiencia completa de Illinois.", + "panel.settings.privacy_center.button.verify_identity.title":"Verifica tu identidad", + "panel.settings.privacy_center.button.manage_privacy.title":"Administre y comprenda su privacidad", + "panel.settings.privacy_center.button.manage_privacy.hint":"", + "panel.settings.privacy_center.button.personal_information.title":"Informacion personal", + "panel.settings.privacy_center.button.personal_information.hint":"", + "panel.settings.privacy_center.button.notifications.title":"Preferencias de notificación", + "panel.settings.privacy_center.button.notifications.":"", + "panel.settings.privacy_center.button.privacy_policy.title":"Declaracion de privacidad", + "panel.settings.privacy_center.button.delete_data.title":"Olvida toda mi información", + "panel.settings.privacy_center.label.delete.description":"Esto eliminará toda su información personal que se compartió y almacenó dentro de la aplicación.", + "panel.settings.privacy_center.label.delete_message.title":"¿Olvidaste toda tu información?", + "panel.settings.privacy_center.label.delete_message.description1":"Esta voluntad", + "panel.settings.privacy_center.label.delete_message.description2":"Permanentemente ", + "panel.settings.privacy_center.label.delete_message.description3":"borre toda su información. No podrá recuperar sus datos después de haberlos eliminado. Estás seguro de que quieres continuar?", + "panel.settings.privacy_center.button.forget_info.title": "Olvidar mi información", + + "panel.settings.verify_identity.label.title":"Verifica tu identidad", + "panel.settings.verify_identity.label.description":"Conéctese a Illinois", + "panel.settings.verify_identity.label.connect_id.desription1":"Eres un", + "panel.settings.verify_identity.label.connect_id.desription2":"Alumno ", + "panel.settings.verify_identity.label.connect_id.desription3":"o ", + "panel.settings.verify_identity.label.connect_id.desription4":"Miembro de facultad ", + "panel.settings.verify_identity.label.connect_id.desription5":"? Inicie sesión con su NetID para ver información de Illinois específica para usted, como su Illini Cash y su plan de comidas.", + "panel.settings.verify_identity.button.connect_net_id.title":"Conecte su NetID", + "panel.settings.verify_identity.label.verify_phone.desription1":"No tienes un NetID", + "panel.settings.verify_identity.label.verify_phone.desription2":"? Verifique su número de teléfono para guardar sus preferencias y tener la misma experiencia en más de un dispositivo. ", + "panel.settings.verify_identity.button.verify_phone.title":"Verifica tu numero de telefono", + + "panel.settings.login.netid.label.title":"Conecte su NetID", + "panel.settings.login.netid.button.dont_continue.title":"No ahora", + "panel.settings.login.netid.label.title.hint":"", + "panel.settings.login.netid.label.description":"Inicie sesión con su NetID para utilizar funciones académicas y específicas de los dormitorios.", + "panel.settings.login.netid.button.continue.title":"Iniciar sesión con NetID", + "panel.settings.login.netid.button.continue.hint":"", + "panel.settings.login.netid.button.dont_continue.hint":"Omitir verificación", + "panel.settings.login.label.login_failed":"Incapaz de iniciar sesión. Por favor, inténtelo de nuevo más tarde", + + "panel.settings.login.phone.label.title":"verifica tu numero de telefono", + "panel.settings.login.phone.button.dont_continue.title":"No ahora", + "panel.settings.login.phone.label.title.hint":"", + "panel.settings.login.phone.label.description":"Esto guarda sus preferencias para que pueda tener la misma experiencia en más de un dispositivo.", + "panel.settings.login.phone.button.continue.title":"Verificar mi número de teléfono", + "panel.settings.login.phone.button.continue.hint":"", + "panel.settings.login.phone.button.dont_continue.hint":"Omitir verificación", "panel.settings.label.offline.phone_ver":"Verifique que su número de teléfono no esté disponible sin conexión.", + "widget.settings.dialog.button.cancel.title": "Cancelar", + + "panel.settings.notifications.label.title":"Notificaciones", + "panel.settings.notifications.label.desctiption":"No se pierda ningún evento o actualización del campus.", + "panel.settings.notifications.label.notifications":"Notificaciones", + "panel.settings.notifications.label.info":"Para recibir notificaciones, habilite en la configuración de su dispositivo.", + "panel.settings.notifications.reminders":"Recordatorios de eventos", + "panel.settings.notifications.athletics_updates":"Actualizaciones de atletismo", + "panel.settings.notifications.dining":"Especiales gastronómicos", + "panel.settings.notifications.label.status.enabled":"Habilitado", + "panel.settings.notifications.label.status.disabled":"Dishabilitado", + + "panel.settings.personal_information.label.title":"Informacion personal", + "panel.settings.personal_information.button.delete_data.title":"Borrar mis datos personales", + "panel.settings.personal_information.label.description":"Elimina tu historial de ubicaciones, tus etiquetas y categorías, y los eventos guardados y los lugares para comer.", + "panel.settings.personal_information.button.personal_information.title":"Informacion personal", + "panel.settings.personal_information.button.personal_information.description":"Tu nombre e información de contacto que has compartido", + "panel.settings.personal_information.button.who_you_are.title":"Quien eres", + "panel.settings.personal_information.button.who_you_are.description":"Tu condición de estudiante, profesor, residente, etc.", + "panel.settings.personal_information.button.interest.title":"Tus intereses", + "panel.settings.personal_information.button.interest.description":"Categorías, equipos y etiquetas que sigues", + "panel.settings.personal_information.button.food_filters.title":"Filtro de alimentos", + "panel.settings.personal_information.button.food_filters.description":"Agrega o edita tus preferencias de comida", + "panel.settings.personal_information.label.delete_message.title":"¿Eliminar sus datos personales?", + "panel.settings.personal_information.label.delete_message.description1":"Seleccione todo lo que le gustaría ", + "panel.settings.personal_information.label.delete_message.description2":"Permanentemente ", + "panel.settings.personal_information.label.delete_message.description3":"Eliminar:", + "panel.settings.personal_information.button.forget_info.title": "Eliminar mis datos", + + "panel.settings.new_privacy.privacy.label.title": "Elija su nivel de privacidad", + "panel.settings.new_privacy.privacy.label.slider_help": "Ajuste el control deslizante para cambiar su nivel de privacidad", + "panel.settings.new_privacy.privacy.button.set_privacy.disabled.title": "Desplácese para revisar", + "panel.settings.new_privacy.privacy.button.set_privacy.title": "Establecer mi privacidad", + "panel.settings.new_privacy.privacy.button.set_privacy.disabled.hint": "", + "panel.settings.new_privacy.privacy.button.set_privacy.hint": "", + "panel.settings.new_privacy.privacy.dialog.update_privacy.title": "Tu nuevo \ nnivel de privacidad", + "panel.settings.new_privacy.privacy.dialog.update_privacy.button.back.title": "Atras", + "panel.settings.new_privacy.privacy.dialog.label.new_privacy": "Nivel de privacidad: ", + "panel.settings.new_privacy.privacy.dialog.update_privacy.label2": "Este cambio requiere que realicemos los siguientes cambios:", + "panel.settings.new_privacy.privacy.dialog.update_privacy.confirm": "Estas seguro?", + "panel.settings.new_privacy.privacy.dialog.update_privacy.yes": "Si", + "panel.settings.new_privacy.privacy.dialog.update_privacy.no": "No", + "panel.settings.new_privacy.privacy.label.set_your_privacy_level": "Establezca su nivel de privacidad", + "panel.settings.new_privacy.privacy.label.update_your_privacy_level": "Actualice su nivel de privacidad", + "panel.settings.new_privacy.privacy.label.set_your_privacy_level.hint": "Encabezado 1", + "panel.settings.new_privacy.privacy.label.update_your_privacy_level.hint": "Encabezado 1", + "panel.settings.new_privacy.privacy.label.some_details_have_changed": "Algunos detalles han cambiado", + "panel.settings.new_privacy.privacy.label.some_details_have_changed.hint": "Encabezado 2", + "panel.settings.new_privacy.label.description.title": "Funciones y recopilación de datos", + "panel.settings.new_privacy.label.description.info": "Obtenga más información sobre funciones específicas y utilice el menú desplegable para obtener más información sobre cómo se utilizan los datos.", + "panel.settings.new_privacy.button.close_all.title": "Cierra todo", + "panel.settings.new_privacy.button.expand_all.title": "Expandir todo", + "panel.settings.new_privacy.label.hint": "Toca dos veces para ", + "panel.settings.new_privacy.button.expand_data.title": "Ver uso de datos", + "panel.settings.new_privacy.privacy.button.set_privacy.slider.hint": "Nivel de privacidad", + "panel.settings.new_privacy.privacy.button.set_privacy.slider.increase": "aumentado a", + "panel.settings.new_privacy.privacy.button.set_privacy.slider.decrease": "disminuido a", + "panel.create_event.header.title":"Crea Un Evento", "panel.create_event.title":"Crear un evento", "panel.create_event.add_image":"Agregar imagen de evento", @@ -870,7 +981,7 @@ "panel.profile_info.middle_name.title":"Segundo nombre", "panel.profile_info.last_name.title":"Apellido", "panel.profile_info.email_address.title":"Correo Electrónico", - "panel.profile_info.phone_number.title":"Phone Number", + "panel.profile_info.phone_number.title":"Número de teléfono", "panel.profile_info.button.sign_out.title":"Cerrar sesión", "panel.profile_info.button.sign_out.hint":"", "panel.profile_info.label.remove_my_info.title":"Eliminar mi información", @@ -880,6 +991,16 @@ "panel.profile_info.dialog.remove_my_information.subtitle":"¿Está seguro?", "panel.profile_info.dialog.remove_my_information.yes.title":"Sí", "panel.profile_info.dialog.remove_my_information.no.title": "No", + "panel.profile_info.phone_number.name.title": "Nombre completo", + "panel.profile_info.phone_number.name.hint": "", + "panel.profile_info.phone_number.email.title": "Email", + "panel.profile_info.phone_number.email.hint": "", + "panel.profile_info.button.save.title":"Guardar cambios", + "panel.profile_info.button.save.hint":"", + "panel.profile_info.logout.title":"Illinois", + "panel.profile_info.logout.message":"¿Estás seguro de que quieres cerrar sesión?", + "panel.profile_info.logout.button.yes":"Si", + "panel.profile_info.logout.no":"No", "panel.create_poll.header.title": "Crear una encuesta rápida", "panel.create_poll.description": "Las personas que se encuentren a menos de 100 pies de usted con Bluetooth activado y con la aplicación en ejecución serán notificadas y podrán votar a través de la aplicación de Illinois.", @@ -1447,7 +1568,7 @@ "app.common.label.cancelled":"Cancelado", "app.common.label.other": "Otro", "app.common.label.county": "Condado", - "app.common.label.read_more": "Read more", + "app.common.label.read_more": "Leer mas", "com.illinois.features2.entry.disable_location_awareness":"Deshabilitar reconocimiento de ubicación", "com.illinois.features2.entry.dont_store_location":"No guardes tu ubicación", @@ -1455,5 +1576,80 @@ "com.illinois.features2.entry.log_out":"Cerrar sesión en el sistema", "com.illinois.features2.entry.disable_notifications":"Desactivar las notificaciones", "com.illinois.features2.entry.remove_credit_card":"Eliminar la información de su tarjeta de crédito", - "com.illinois.features2.entry.dont_share_location":"No comparta sus datos con otros usuarios." + "com.illinois.features2.entry.dont_share_location":"No comparta sus datos con otros usuarios.", + + "privacy.category.description.1": "Es posible que no pueda utilizar todas las funciones, pero es anónimo y no le pedimos nada ni almacenamos ningún dato. Se recopilarán y utilizarán datos anónimos para optimizar el rendimiento de la aplicación.", + "privacy.category.description.2": "Vea lo que sucede a su alrededor. Usamos servicios de ubicación Wifi y Bluetooth para mejorar su experiencia, pero nunca almacenamos esos datos.", + "privacy.category.description.3": "Puede personalizar y personalizar la aplicación. Los datos de ubicación de Wifi y Bluetooth se almacenan a lo largo del tiempo para hacer recomendaciones y mejorar la experiencia general de la aplicación.", + "privacy.category.description.4": "Deje que la aplicación funcione para usted. \ nPuede acceder a su iCard, guardar tarjetas de crédito para facilitar las compras futuras, acceder a información médica y recibir notificaciones basadas en sus intereses específicos.", + "privacy.category.description.5": "Acceda a todas las funciones, conéctese al campus y deje que la aplicación sugiera experiencias personalizadas que usted y sus amigos disfruten.", + "privacy.category.event_and_dining.title": "Events and Dining \nAround Campus", + "privacy.entry.event_and_dining.view.only.title": "Sólo vista", + "privacy.entry.event_and_dining.view.only.description": "Ver eventos y lugares para cenar en el campus.", + "privacy.entry.event_and_dining.view.only.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.event_and_dining.location.sharing.title": "Compartir ubicación", + "privacy.entry.event_and_dining.location.sharing.description": "Vea eventos y lugares para cenar cerca de usted.", + "privacy.entry.event_and_dining.location.sharing.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.event_and_dining.personalizations.title": "Personalizaciones", + "privacy.entry.event_and_dining.personalizations.description": "Vea eventos y lugares para cenar cerca de usted.", + "privacy.entry.event_and_dining.personalizations.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.event_and_dining.notifications.title": "Notifications", + "privacy.entry.event_and_dining.notifications.description": "Reciba varias notificaciones y reciba recordatorios de los elementos que ha destacado en la aplicación.", + "privacy.entry.event_and_dining.notifications.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.event_and_dining.sharing.title": "Compartiendo", + "privacy.entry.event_and_dining.sharing.description": "Utilice los SMARTS del servicio CONVERGE para ayudarse a sí mismo oa un grupo a elegir eventos.", + "privacy.entry.event_and_dining.sharing.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + + "privacy.category.athletics.title": "Atletismo", + "privacy.entry.athletics.view.only.title": "Sólo vista", + "privacy.entry.athletics.view.only.description": "Vea todos los próximos horarios de eventos deportivos, puntuación en tiempo real, listas y noticias deportivas.", + "privacy.entry.athletics.view.only.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.athletics.location.sharing.title": "Compartir ubicación", + "privacy.entry.athletics.location.sharing.description": "Encuentra asientos, baños cercanos y puestos de comida. Vea la disponibilidad y las direcciones de estacionamiento en tiempo real.", + "privacy.entry.athletics.location.sharing.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.athletics.personalizations.title": "Personalizaciones", + "privacy.entry.athletics.personalizations.description": "Personalice su experiencia para ver horarios, listas, resultados y noticias de sus equipos Illini favoritos.", + "privacy.entry.athletics.personalizations.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.athletics.notifications.title": "Notificaitons", + "privacy.entry.athletics.notifications.description": "Reciba notificaciones del inicio del evento y las puntuaciones finales de sus equipos favoritos.", + "privacy.entry.athletics.notifications.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.athletics.sharing.title": "Identidad", + "privacy.entry.athletics.sharing.description": "Almacene la información de la tarjeta de crédito para comprar boletos para eventos deportivos.", + "privacy.entry.athletics.sharing.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + + "privacy.category.wallet.title": "Billetera", + "privacy.entry.wallet.personalizations.title": "Personalizaciones", + "privacy.entry.wallet.personalizations.description": "Personalice su experiencia para ver horarios, listas, resultados y noticias de sus equipos Illini favoritos.", + "privacy.entry.wallet.personalizations.data_usage": "Esta función utiliza la conexión Wifi y Bluetooth de su teléfono.", + "privacy.entry.wallet.personalizations.additional_description": "Verifique los saldos de su Plan Illini Cash & Meal y vea las transacciones pasadas.", + "privacy.entry.wallet.personalizations.additional_data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.wallet.sharing.title": "Identidad", + "privacy.entry.wallet.sharing.description": "Almacene la información de la tarjeta de crédito para comprar boletos para eventos deportivos.", + "privacy.entry.wallet.sharing.data_usage": "Esta función utiliza la conexión Wifi y Bluetooth de su teléfono +.", + + "privacy.category.health.title": "Salud y Bienestar", + "privacy.entry.health.view.only.title": "Sólo vista", + "privacy.entry.health.view.only.description": "Ubique y conéctese a recursos que lo ayudarán con sus OCHO DIMENSIONES de salud y bienestar.", + "privacy.entry.health.view.only.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.health.location.sharing.title": "Compartir ubicación", + "privacy.entry.health.location.sharing.description": "Brindarle asistencia para encontrar el camino para encontrar recursos de salud y bienestar en el campus.", + "privacy.entry.health.location.sharing.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + + "privacy.category.involvement.title": "Participación de los estudiantes y la comunidad ", + "privacy.entry.involvement.view.only.title": "Sólo vista", + "privacy.entry.involvement.view.only.description": "Muestre las ubicaciones de los restaurantes del campus y vea los menús de hasta 2 semanas en el futuro ..", + "privacy.entry.involvement.view.only.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.involvement.location.sharing.title": "Compartir ubicación", + "privacy.entry.involvement.location.sharing.description": "Muestre las ubicaciones de eventos y restaurantes cerca de usted Le permite crear una encuesta rápida y recibir resultados de personas cercanas o lejanas.", + "privacy.entry.involvement.location.sharing.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.involvement.personalizations.title": "Personalizaciones", + "privacy.entry.involvement.personalizations.description": "Guarde sus preferencias de ubicación para cenar, incluidas las alergias alimentarias, y vea los menús actuales y futuros. Vea eventos, lugares para cenar y artículos de noticias que le interesen.", + "privacy.entry.involvement.personalizations.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.involvement.notifications.title": "Notificaciones", + "privacy.entry.involvement.notifications.description": "Reciba notificaciones que puedan interesarle según sus preferencias o ubicación.", + "privacy.entry.involvement.notifications.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono.", + "privacy.entry.involvement.sharing.title": "Identidad", + "privacy.entry.involvement.sharing.description": "Brindar asistencia para registrarse para votar, votar por correo y encontrar lugares para votar el día de las elecciones.", + "privacy.entry.involvement.sharing.data_usage": "Esta función utiliza la conexión Wi-Fi y Bluetooth de su teléfono." } diff --git a/assets/strings.zh.json b/assets/strings.zh.json index 44dbfc098..02ae47e66 100644 --- a/assets/strings.zh.json +++ b/assets/strings.zh.json @@ -155,10 +155,11 @@ "panel.browse.button.create_stadium_poll.hint":"", "panel.browse.button.state_farm_wayfinding.title":"state farm寻路", "panel.browse.button.state_farm_wayfinding.hint":"", - "panel.browse.button.groups.title":"Groups", + "panel.browse.button.groups.title":"组", "panel.browse.button.groups.hint":"", "panel.browse.button.safer.title":"Safer Illinois", "panel.browse.button.safer.hint":"", + "panel.browse.button.privacy_center.title": "Privacy Center", "panel.browse.label.browse_all": "浏览全部", "panel.browse.label.offline.sign_in":"离线时无法登录", @@ -293,8 +294,8 @@ "panel.athletics_roster_list.label.htwt.title":"高/重。", "panel.athletics_roster_list.label.year.title":"年", - "panel.athletics_coach_list.label.heading.title":"2019-2020教练", - "panel.athletics_coach_list.label.heading.title": "2019-2020 Coach", + "panel.athletics_coach_list.header.title": "Staff", + "panel.athletics_coach_list.label.heading.title": "2019-2020教练", "panel.athletics_coach_list.label.position.title":"位置", "panel.athletics_coach_detail.header.title":"员工", @@ -362,7 +363,7 @@ "panel.onboarding.notifications.button.allow.hint":"", "panel.onboarding.notifications.button.dont_allow.title":"暂时不", "panel.onboarding.notifications.button.dont_allow.hint":"跳过接收通知", - "panel.onboarding.notifications.label.access_granted":"Your settings have been changed.", + "panel.onboarding.notifications.label.access_granted":"您的设置已更改.", "panel.onboarding.roles.label.title":"你是", "panel.onboarding.roles.label.title.hint":"标题1", @@ -422,7 +423,7 @@ "panel.onboarding.verify_phone.button.next.hint":"点击以继续", "panel.onboarding.verify_phone.validation.phone_number.text":"请输入您的电话号码", "panel.onboarding.verify_phone.validation.channel_selection.text":"请选择验证方法", - "panel.onboarding.verify_phone.validation.server_error.text":"Please enter a valid phone number", + "panel.onboarding.verify_phone.validation.server_error.text":"请输入有效的电话号码", "panel.onboarding.confirm_phone.title":"确认您的代码", "panel.onboarding.confirm_phone.title.hint":"", @@ -590,6 +591,8 @@ "panel.settings.manage_interests.search.cancel.hint":"清除搜索过滤器", "panel.settings.manage_interests.search.search_button.title":"搜索", "panel.settings.manage_interests.search.search_button.hint":"过滤器标签", + "panel.settings.manage_interests.button.save.title": "保存更改", + "panel.settings.manage_interests.button.save.hint": "", "panel.settings.illini_cash.label.title":"Illini现金", "panel.settings.illini_cash.label.history":"历史", @@ -732,6 +735,8 @@ "panel.food_filters.label.exclude_ingredients.hint":"", "panel.food_filters.value.on":"开", "panel.food_filters.value.off":"关", + "panel.food_filters.button.save.title": "Save Changes", + "panel.food_filters.button.save.hint": "", "panel.food_special_offers.title.text": "特别", "panel.food_special_offers.available.text": "在这些地点提供", @@ -789,7 +794,7 @@ "panel.settings.home.net_id.button.connect":"连接您的NetID", "panel.settings.home.phone_ver.message":"已验证为", "panel.settings.home.phone_ver.button.connect":"验证您的电话号码", - "panel.settings.home.phone_ver.button.disconnect":"Disconnect your Phone", + "panel.settings.home.phone_ver.button.disconnect":"断开你的电话", "panel.settings.home.logout.title":"伊利诺伊州", "panel.settings.home.logout.message":"确定要退出吗?", "panel.settings.home.logout.button.yes":"是的", @@ -804,14 +809,120 @@ "panel.settings.home.privacy.privacy_statement.title":"隐私声明", "panel.settings.home.button.debug.title":"调试", "panel.settings.home.button.debug.hint":"", - "panel.settings.home.button.test.title":"测试", + "panel.settings.home.button.test.title":"测试", "panel.settings.home.button.test.hint":"", "panel.settings.home.feedback.title": " 我们需要你的主意!", "panel.settings.home.feedback.description": " 喜欢这个应用程序吗?我们遗漏了什么?点击底部提交您的想法。", "panel.settings.home.button.feedback.title": "提交反馈", "panel.settings.home.button.feedback.hint": "", - "panel.settings.label.offline.phone_ver":"离线时无法验证电话号码。", + "panel.settings.privacy_center.label.title":"隐私中心", + "panel.settings.privacy_center.label.description":"个性化您的隐私和数据偏好.", + "panel.settings.privacy_center.label.finish_setup":"完成安装", + "panel.settings.privacy_center.label.finish_setup_description":"使用您的NETID或电话号码登录以获得完整的体验.", + "panel.settings.privacy_center.button.verify_identity.title":"验证你的身份", + "panel.settings.privacy_center.button.manage_privacy.title":"管理并了解您的隐私", + "panel.settings.privacy_center.button.manage_privacy.hint":"", + "panel.settings.privacy_center.button.personal_information.title":"个人信息", + "panel.settings.privacy_center.button.personal_information.hint":"", + "panel.settings.privacy_center.button.notifications.title":"通知首选项", + "panel.settings.privacy_center.button.notifications.":"", + "panel.settings.privacy_center.button.privacy_policy.title":"隐私声明", + "panel.settings.privacy_center.button.delete_data.title":"忘记我所有的信息", + "panel.settings.privacy_center.label.delete.description":"这将删除应用程序中共享和存储的所有个人信息.", + "panel.settings.privacy_center.label.delete_message.title":"忘记你所有的信息?", + "panel.settings.privacy_center.label.delete_message.description1":"这会 ", + "panel.settings.privacy_center.label.delete_message.description2":"永远 ", + "panel.settings.privacy_center.label.delete_message.description3":"删除所有信息。删除数据后,您将无法恢复数据。确定要继续吗?", + "panel.settings.privacy_center.button.forget_info.title": "忘记我的信息", + + "panel.settings.verify_identity.label.title":"验证你的身份", + "panel.settings.verify_identity.label.description":"连接到伊利诺伊", + "panel.settings.verify_identity.label.connect_id.desription1":"你是 ", + "panel.settings.verify_identity.label.connect_id.desription2":"学生 ", + "panel.settings.verify_identity.label.connect_id.desription3":"或者 ", + "panel.settings.verify_identity.label.connect_id.desription4":"教员 ", + "panel.settings.verify_identity.label.connect_id.desription5":"? 用你的NetID登陆查看伊利诺伊的具体信息,比如你的Illini现金和膳食计划.", + "panel.settings.verify_identity.button.connect_net_id.title":"连接您的NETID", + "panel.settings.verify_identity.label.verify_phone.desription1":"没有NETID", + "panel.settings.verify_identity.label.verify_phone.desription2":"? 验证您的电话号码以保存您的首选项,并在多个设备上拥有相同的体验. ", + "panel.settings.verify_identity.button.verify_phone.title":"验证您的电话号码", + + "panel.settings.login.netid.label.title":"连接您的NETID", + "panel.settings.login.netid.button.dont_continue.title":"现在不行", + "panel.settings.login.netid.label.title.hint":"", + "panel.settings.login.netid.label.description":"使用你的NETID登录,使用学术和宿舍的特定功能.", + "panel.settings.login.netid.button.continue.title":"使用NETID登录", + "panel.settings.login.netid.button.continue.hint":"", + "panel.settings.login.netid.button.dont_continue.hint":"跳过验证", + "panel.settings.login.label.login_failed":"无法登录。请稍后再试", + + "panel.settings.login.phone.label.title":"验证您的电话号码", + "panel.settings.login.phone.button.dont_continue.title":"现在不行", + "panel.settings.login.phone.label.title.hint":"", + "panel.settings.login.phone.label.description":"这将保存您的首选项,以便您可以在多个设备上获得相同的体验.", + "panel.settings.login.phone.button.continue.title":"验证我的电话号码", + "panel.settings.login.phone.button.continue.hint":"", + "panel.settings.login.phone.button.dont_continue.hint":"跳过验证", + "panel.settings.label.offline.phone_ver":"确认您的电话号码在脱机时不可用.", + + "widget.settings.dialog.button.cancel.title": "取消", + + "panel.settings.notifications.label.title":"通知", + "panel.settings.notifications.label.desctiption":"不要错过活动或校园更新.", + "panel.settings.notifications.label.notifications":"通知", + "panel.settings.notifications.label.info":"在设备设置中启用接收通知.", + "panel.settings.notifications.reminders":"事件提醒", + "panel.settings.notifications.athletics_updates":"体育更新", + "panel.settings.notifications.dining":"特色餐饮", + "panel.settings.notifications.label.status.enabled":"启用", + "panel.settings.notifications.label.status.disabled":"禁用", + + "panel.settings.personal_information.label.title":"个人信息", + "panel.settings.personal_information.button.delete_data.title":"删除我的个人资料", + "panel.settings.personal_information.label.description":"删除您的位置历史记录、标签和类别以及保存的活动和就餐地点.", + "panel.settings.personal_information.button.personal_information.title":"个人信息", + "panel.settings.personal_information.button.personal_information.description":"您的姓名和您共享的联系信息", + "panel.settings.personal_information.button.who_you_are.title":"你是谁", + "panel.settings.personal_information.button.who_you_are.description":"你的学生、教师、居民等身份.", + "panel.settings.personal_information.button.interest.title":"你的兴趣", + "panel.settings.personal_information.button.interest.description":"您所标注的类别、团队和标记", + "panel.settings.personal_information.button.food_filters.title":"食物过滤器", + "panel.settings.personal_information.button.food_filters.description":"添加或编辑您的食物偏好", + "panel.settings.personal_information.label.delete_message.title":"删除您的个人数据?", + "panel.settings.personal_information.label.delete_message.description1":"选择所有您想要的 ", + "panel.settings.personal_information.label.delete_message.description2":"永远 ", + "panel.settings.personal_information.label.delete_message.description3":"删除:", + "panel.settings.personal_information.button.forget_info.title": "删除我的数据", + + "panel.settings.new_privacy.privacy.label.title": "选择您的隐私级别", + "panel.settings.new_privacy.privacy.label.slider_help": "调整滑块以更改您的隐私级别", + "panel.settings.new_privacy.privacy.button.set_privacy.disabled.title": "滚动查看", + "panel.settings.new_privacy.privacy.button.set_privacy.title": "设置我的隐私", + "panel.settings.new_privacy.privacy.button.set_privacy.disabled.hint": "", + "panel.settings.new_privacy.privacy.button.set_privacy.hint": "", + "panel.settings.new_privacy.privacy.dialog.update_privacy.title": "你最新的 \n隐私级别", + "panel.settings.new_privacy.privacy.dialog.update_privacy.button.back.title": "后退", + "panel.settings.new_privacy.privacy.dialog.label.new_privacy": "隐私级别: ", + "panel.settings.new_privacy.privacy.dialog.update_privacy.label2": "这一变化要求我们做出以下改变:", + "panel.settings.new_privacy.privacy.dialog.update_privacy.confirm": "你确定吗?", + "panel.settings.new_privacy.privacy.dialog.update_privacy.yes": "是", + "panel.settings.new_privacy.privacy.dialog.update_privacy.no": "否", + "panel.settings.new_privacy.privacy.label.set_your_privacy_level": "设置您的隐私级别", + "panel.settings.new_privacy.privacy.label.update_your_privacy_level": "更新您的隐私级别", + "panel.settings.new_privacy.privacy.label.set_your_privacy_level.hint": "标题 1", + "panel.settings.new_privacy.privacy.label.update_your_privacy_level.hint": "标题 1", + "panel.settings.new_privacy.privacy.label.some_details_have_changed": "一些细节已经改变", + "panel.settings.new_privacy.privacy.label.some_details_have_changed.hint": "标题 2", + "panel.settings.new_privacy.label.description.title": "特性和数据收集", + "panel.settings.new_privacy.label.description.info": "了解有关特定功能的更多信息,并使用下拉菜单获取有关如何使用数据的更多信息.", + "panel.settings.new_privacy.button.close_all.title": "全部关闭", + "panel.settings.new_privacy.button.expand_all.title": "全部展开", + "panel.settings.new_privacy.label.hint": "双击以 ", + "panel.settings.new_privacy.button.expand_data.title": "查看数据使用", + "panel.settings.new_privacy.privacy.button.set_privacy.slider.hint": "隐私级别", + "panel.settings.new_privacy.privacy.button.set_privacy.slider.increase": "增加到", + "panel.settings.new_privacy.privacy.button.set_privacy.slider.decrease": "减少到", "panel.create_event.header.title":"创建活动", "panel.create_event.title":"创建活动", @@ -880,6 +991,16 @@ "panel.profile_info.dialog.remove_my_information.subtitle":"确定吗?", "panel.profile_info.dialog.remove_my_information.yes.title":"是的", "panel.profile_info.dialog.remove_my_information.no.title":"不", + "panel.profile_info.phone_number.name.title": "全名", + "panel.profile_info.phone_number.name.hint": "", + "panel.profile_info.phone_number.email.title": "电子邮件", + "panel.profile_info.phone_number.email.hint": "", + "panel.profile_info.button.save.title":"保存更改", + "panel.profile_info.button.save.hint":"", + "panel.profile_info.logout.title":"伊利诺伊", + "panel.profile_info.logout.message":"是否确定要注销?", + "panel.profile_info.logout.button.yes":"是", + "panel.profile_info.logout.no":"否", "panel.create_poll.header.title": "创建快速投票", "panel.create_poll.description": "距离您100英尺以内、蓝牙开启且应用程序正在运行的用户将收到通知,并可以通过伊利诺伊应用程序投票.", @@ -898,7 +1019,7 @@ "panel.create_poll.cancel_dialog.message": " 是否确实要取消此快速投票 ", "panel.create_poll.cancel_dialog.button.yes": "是", "panel.create_poll.cancel_dialog.button.no": "否", - "panel.create_poll_panel.counter.hint": "maximum, %s, characters", + "panel.create_poll_panel.counter.hint": "最多, %s, 字符", "panel.create_poll.message.error.default": "創建投票失敗. 請填寫所有字段, 然後重試.", "panel.create_stadium_poll.header.title": " 创建体育场投票 ", @@ -1455,5 +1576,79 @@ "com.illinois.features2.entry.log_out":"登出", "com.illinois.features2.entry.disable_notifications":"关闭提示", "com.illinois.features2.entry.remove_credit_card":"删除信用卡信息", - "com.illinois.features2.entry.dont_share_location":"不和其他人分享我的数据" + "com.illinois.features2.entry.dont_share_location":"不和其他人分享我的数据", + + "privacy.category.description.1": "您可能无法使用所有功能,但您是匿名的,我们不要求任何东西或存储任何数据。匿名数据将被收集并用于优化应用程序性能.", + "privacy.category.description.2": "看看你周围发生了什么。我们使用Wifi和蓝牙定位服务来改善您的体验,但我们从不存储这些数据.", + "privacy.category.description.3": "您可以个性化和自定义应用程序。Wifi和蓝牙位置数据会随着时间的推移而存储,以提供建议并改善您的整体应用体验.", + "privacy.category.description.4": "让应用程序为你工作. \n您可以访问您的iCard,保存信用卡以方便将来购买,访问健康信息,并根据您的特定兴趣获取通知.", + "privacy.category.description.5": "访问所有功能,连接到校园,并让应用程序建议你和你的朋友都喜欢定制的体验.", + "privacy.category.event_and_dining.title": "活动和餐饮 \n校园周围", + "privacy.entry.event_and_dining.view.only.title": "仅查看", + "privacy.entry.event_and_dining.view.only.description": "查看校园周围的活动和就餐地点.", + "privacy.entry.event_and_dining.view.only.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.event_and_dining.location.sharing.title": "位置共享", + "privacy.entry.event_and_dining.location.sharing.description": "查看您附近的活动和就餐地点.", + "privacy.entry.event_and_dining.location.sharing.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.event_and_dining.personalizations.title": "个性化", + "privacy.entry.event_and_dining.personalizations.description": "查看您附近的活动和就餐地点.", + "privacy.entry.event_and_dining.personalizations.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.event_and_dining.notifications.title": "通知获取各种通知,并接收你在应用程序中的星级项目提醒", + "privacy.entry.event_and_dining.notifications.description": "获取各种通知,并接收你在应用程序中的标注的项目提醒.", + "privacy.entry.event_and_dining.notifications.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.event_and_dining.sharing.title": "分享", + "privacy.entry.event_and_dining.sharing.description": "使用CONVERGE服务的智能帮助您自己或团队选择事件.", + "privacy.entry.event_and_dining.sharing.data_usage": "此功能使用手机的Wifi和蓝牙.", + + "privacy.category.athletics.title": "运动", + "privacy.entry.athletics.view.only.title": "仅查看", + "privacy.entry.athletics.view.only.description": "看到所有即将到来的体育赛事时间表,实时得分,名册和体育新闻.", + "privacy.entry.athletics.view.only.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.athletics.location.sharing.title": "位置共享", + "privacy.entry.athletics.location.sharing.description": "找到座位,附近的洗手间和特许看台。查看实时停车可用性和方向.", + "privacy.entry.athletics.location.sharing.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.athletics.personalizations.title": "个性化", + "privacy.entry.athletics.personalizations.description": "定制您的体验,查看您最喜爱的Illni队的时间表,名册,得分和新闻.", + "privacy.entry.athletics.personalizations.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.athletics.notifications.title": "通知", + "privacy.entry.athletics.notifications.description": "接收您最喜欢的球队的比赛开始和最终得分通知.", + "privacy.entry.athletics.notifications.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.athletics.sharing.title": "身份", + "privacy.entry.athletics.sharing.description": "储存信用卡信息以购买体育赛事门票.", + "privacy.entry.athletics.sharing.data_usage": "此功能使用手机的Wifi和蓝牙.", + + "privacy.category.wallet.title": "钱包", + "privacy.entry.wallet.personalizations.title": "个性化", + "privacy.entry.wallet.personalizations.description": "制您的体验,查看您最喜爱的Illni队的时间表,名册,得分和新闻.", + "privacy.entry.wallet.personalizations.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.wallet.personalizations.additional_description": "检查您的Illini现金和膳食计划余额,并查看过去的交易.", + "privacy.entry.wallet.personalizations.additional_data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.wallet.sharing.title": "身份", + "privacy.entry.wallet.sharing.description": "储存信用卡信息以购买体育赛事门票.", + "privacy.entry.wallet.sharing.data_usage": "此功能使用手机的Wifi和蓝牙.", + + "privacy.category.health.title": "卫生与健康", + "privacy.entry.health.view.only.title": "仅查看", + "privacy.entry.health.view.only.description": "找到并连接资源,以帮助您实现健康的八个维度.", + "privacy.entry.health.view.only.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.health.location.sharing.title": "位置共享", + "privacy.entry.health.location.sharing.description": "为您寻找校园内的健康资源提供指路帮助.", + "privacy.entry.health.location.sharing.data_usage": "此功能使用手机的Wifi和蓝牙.", + + "privacy.category.involvement.title": "学生和社区参与", + "privacy.entry.involvement.view.only.title": "仅查看", + "privacy.entry.involvement.view.only.description": "展示校园就餐地点,并查看未来2周内的菜单..", + "privacy.entry.involvement.view.only.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.involvement.location.sharing.title": "位置共享", + "privacy.entry.involvement.location.sharing.description": "展示您附近的活动和就餐地点。允许您创建快速投票并从附近或远处的人接收结果.", + "privacy.entry.involvement.location.sharing.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.involvement.personalizations.title": "个性化", + "privacy.entry.involvement.personalizations.description": "存储您的就餐地点偏好,包括食物过敏,并查看当前和未来的菜单。查看您感兴趣的活动、就餐地点和新闻文章.", + "privacy.entry.involvement.personalizations.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.involvement.notifications.title": "通知", + "privacy.entry.involvement.notifications.description": "根据您的偏好或位置接收您可能感兴趣的通知.", + "privacy.entry.involvement.notifications.data_usage": "此功能使用手机的Wifi和蓝牙.", + "privacy.entry.involvement.sharing.title": "身份", + "privacy.entry.involvement.sharing.description": "协助登记投票、邮寄投票和在选举日找到投票地点.", + "privacy.entry.involvement.sharing.data_usage": "此功能使用手机的Wifi和蓝牙." } diff --git a/images/2.0x/group-6.png b/images/2.0x/group-6.png new file mode 100644 index 000000000..dd5f38515 Binary files /dev/null and b/images/2.0x/group-6.png differ diff --git a/images/3.0x/group-6.png b/images/3.0x/group-6.png new file mode 100644 index 000000000..15e816557 Binary files /dev/null and b/images/3.0x/group-6.png differ diff --git a/images/group-6.png b/images/group-6.png new file mode 100644 index 000000000..fd3710c50 Binary files /dev/null and b/images/group-6.png differ diff --git a/lib/model/Event.dart b/lib/model/Event.dart index dc9e058ae..e7afb917b 100644 --- a/lib/model/Event.dart +++ b/lib/model/Event.dart @@ -72,6 +72,7 @@ class Event with Explore implements Favorite { List recurringEvents; bool isSuperEvent; + bool isVirtual; List> subEventsMap; String track; List _subEvents; @@ -141,6 +142,7 @@ class Event with Explore implements Favorite { isSuperEvent = json['isSuperEvent'] ?? false; this.subEventsMap = subEventsMap; track = json['track']; + isVirtual = json['isVirtual']; } void _initFromOther(Event other) { @@ -181,6 +183,7 @@ class Event with Explore implements Favorite { isSuperEvent = other?.isSuperEvent; subEventsMap = other?.subEventsMap; track = other?.track; + isVirtual = other?.isVirtual; } factory Event.fromJson(Map json) { @@ -235,7 +238,8 @@ class Event with Explore implements Favorite { "converge_url": convergeUrl, "isSuperEvent": isSuperEvent, "subEvents": subEventsMap, - "track": track + "track": track, + 'isVirtual': isVirtual, }; } diff --git a/lib/model/PrivacyData.dart b/lib/model/PrivacyData.dart index 380ce2fc2..d4afadfd3 100644 --- a/lib/model/PrivacyData.dart +++ b/lib/model/PrivacyData.dart @@ -86,11 +86,12 @@ class PrivacyData{ class PrivacyCategory{ String title; + String titleKey; Map description; List entries; List entries2; - PrivacyCategory({this.title,this.description,this.entries, this.entries2}); + PrivacyCategory({this.title, this.titleKey, this.description,this.entries, this.entries2}); factory PrivacyCategory.fromJson(Map json) { List entriesJson = json['entries']; @@ -104,6 +105,7 @@ class PrivacyCategory{ return PrivacyCategory( title:PrivacyData().getLocalizedString(json["title"]), + titleKey:PrivacyData().getLocalizedString(json["title_key"]), description:json['description'], entries: entries, entries2: entries2 diff --git a/lib/model/UserData.dart b/lib/model/UserData.dart index bdb034c28..f836fb68b 100644 --- a/lib/model/UserData.dart +++ b/lib/model/UserData.dart @@ -20,7 +20,7 @@ class UserData { final String uuid; - final bool overThirteen; + bool overThirteen; static const analyticsUuid = 'UUIDxxxxxx'; @@ -56,6 +56,21 @@ class UserData { ) : null; } + void loadFromUserData(UserData data){ + overThirteen = data.overThirteen; + privacySettings = data.privacySettings; + roles = data.roles; + interests = data.interests; + favorites = data.favorites; + positiveTags = data.positiveTags; + negativeTags = data.negativeTags; + fcmTokens = data.fcmTokens; + registeredVoter = data.registeredVoter; + votePlace = data.votePlace; + voterByMail = data.voterByMail; + voted = data.voted; + } + toJson() { return { "uuid": uuid, diff --git a/lib/service/AppDateTime.dart b/lib/service/AppDateTime.dart index 49d1994bd..6812fbf3e 100644 --- a/lib/service/AppDateTime.dart +++ b/lib/service/AppDateTime.dart @@ -184,9 +184,6 @@ class AppDateTime with Service { displayDay += " ${Localization().getStringEx('model.explore.time.at', 'at')}"; } } - else if ((1 < timeDaysDiff) && (timeDaysDiff < 7)) { - displayDay = formatDateTime(dateTimeToCompare, format: "EEEE", ignoreTimeZone: true, showTzSuffix: false); - } else { displayDay = formatDateTime(dateTimeToCompare, format: "MMM dd", ignoreTimeZone: true, showTzSuffix: false); } diff --git a/lib/service/Auth.dart b/lib/service/Auth.dart index 79cc996db..399842bc6 100644 --- a/lib/service/Auth.dart +++ b/lib/service/Auth.dart @@ -156,6 +156,10 @@ class Auth with Service implements NotificationsListener { return authInfo?.userGroupMembership?.contains('urn:mace:uiuc.edu:urbana:authman:app-rokwire-service-policy-rokwire stadium poll manager') ?? false; } + bool get isDebugManager { + return authInfo?.userGroupMembership?.contains('urn:mace:uiuc.edu:urbana:authman:app-rokwire-service-policy-rokwire debug') ?? false; + } + bool isMemberOf(String groupName) { return authInfo?.userGroupMembership?.contains(groupName) ?? false; } diff --git a/lib/service/ExploreService.dart b/lib/service/ExploreService.dart index da630df85..482973bf8 100644 --- a/lib/service/ExploreService.dart +++ b/lib/service/ExploreService.dart @@ -41,19 +41,21 @@ class ExploreService /* with Service */ { ExploreService._internal(); - Future> loadEvents({String searchText, Core.LocationData locationData, Set categories, DateTime startDate, DateTime endDate, Set< - String> tags, bool excludeRecurring = true, int recurrenceId, int limit = 0}) async { + Future> loadEvents({String searchText, Core.LocationData locationData, Set categories, DateTime startDate, DateTime startDateLimit, + DateTime endDate, Set tags, bool excludeRecurring = true, int recurrenceId, int limit = 0}) async { if(_enabled) { if (startDate == null) { startDate = DateTime.now(); } http.Response response; DateTime startDateInGmt = AppDateTime().getUtcTimeFromDeviceTime(startDate); + DateTime startDateLimitInGmt = AppDateTime().getUtcTimeFromDeviceTime(startDateLimit); DateTime endDateInGmt = AppDateTime().getUtcTimeFromDeviceTime(endDate); String queryParameters = _buildEventsQueryParameters( searchText, locationData, startDateInGmt, + startDateLimitInGmt, endDateInGmt, categories, tags, @@ -265,7 +267,7 @@ class ExploreService /* with Service */ { } String _buildEventsQueryParameters(String searchText, Core.LocationData locationData, - DateTime startDate, DateTime endDate, Set categories, Set tags, + DateTime startDate, DateTime startDateLimit, DateTime endDate, Set categories, Set tags, int recurrenceId, int limit) { String queryParameters = ""; @@ -290,6 +292,13 @@ class ExploreService /* with Service */ { queryParameters += 'startDate=$startDateFormatted&'; } + ///StartDateLimit + if (startDateLimit != null) { + String startDateLimitFormatted = AppDateTime().formatDateTime( + startDateLimit, ignoreTimeZone: true); + queryParameters += 'startDateLimit=$startDateLimitFormatted&'; + } + ///End Date if (endDate != null) { String endDateFormatted = AppDateTime().formatDateTime( diff --git a/lib/service/Storage.dart b/lib/service/Storage.dart index 608a08dca..6e19e10af 100644 --- a/lib/service/Storage.dart +++ b/lib/service/Storage.dart @@ -181,16 +181,6 @@ class Storage with Service { _setStringWithName(phoneNumberKey, phoneNumber); } - static const String localUserUuidKey = 'user_local_uuid'; - - String get localUserUuid { - return _getStringWithName(localUserUuidKey); - } - - set localUserUuid(String value) { - _setStringWithName(localUserUuidKey, value); - } - ///////////// // UserPII diff --git a/lib/service/User.dart b/lib/service/User.dart index 6c89e2757..c0d02cdbd 100644 --- a/lib/service/User.dart +++ b/lib/service/User.dart @@ -67,6 +67,7 @@ class User with Service implements NotificationsListener { AppLivecycle.notifyStateChanged, FirebaseMessaging.notifyToken, User.notifyPrivacyLevelChanged, + Auth.notifyLoggedOut, ]); } @@ -103,6 +104,9 @@ class User with Service implements NotificationsListener { else if(name == AppLivecycle.notifyStateChanged && param == AppLifecycleState.resumed){ //_loadUser(); } + else if(name == Auth.notifyLoggedOut){ + _recreateUser(); // Always create userData on logout. // https://github.com/rokwire/illinois-app/issues/29 + } } // User @@ -119,10 +123,14 @@ class User with Service implements NotificationsListener { return UserData.analyticsUuid; } - Future _createUser() async { + Future _createUser() async { UserData userData = await _requestCreateUser(); applyUserData(userData); - Storage().localUserUuid = userData?.uuid; + } + + Future _recreateUser() async { + UserData userData = await _requestCreateUser(); + applyUserData(userData, migrateData: true); } Future _loadUser() async { @@ -223,37 +231,16 @@ class User with Service implements NotificationsListener { _clearStoredUserData(); _notifyUserDeleted(); - try { - _userData = await requestUser(Storage().localUserUuid); - } on UserNotFoundException catch (_) { - _userData = await _requestCreateUser(); - if (_userData?.uuid != null) { - Storage().localUserUuid = _userData?.uuid; - } - } + _userData = await _requestCreateUser(); + if (_userData != null) { Storage().userData = _userData; _notifyUserUpdated(); } } - - } - - void initLocalUser() { - String localUserUuid = Storage().localUserUuid; - String currentUserUuid = _userData?.uuid; - if ((localUserUuid != null) && (currentUserUuid == null) || (currentUserUuid != localUserUuid)) { - requestUser(localUserUuid).then((UserData userData){ - if (userData != null) { - applyUserData(userData); - } - //clearStoredPiiAccount(); - }).catchError((_){ - }); - } } - void applyUserData(UserData userData, { bool applyCachedSettings = false }) { + void applyUserData(UserData userData, { bool applyCachedSettings = false, bool migrateData = false }) { // 1. We might need to remove FCM token from current user String applyUserUuid = userData?.uuid; @@ -272,6 +259,11 @@ class User with Service implements NotificationsListener { applyUserUpdated = _updateUserSettingsFromStorage(userData) || applyUserUpdated; } + if(migrateData && _userData != null){ + userData.loadFromUserData(_userData); + applyCachedSettings = true; + } + _userData = userData; Storage().userData = _userData; Storage().userRoles = userData?.roles; diff --git a/lib/ui/dining/FoodFiltersPanel.dart b/lib/ui/dining/FoodFiltersPanel.dart index 2c078c27f..bb46f3dca 100644 --- a/lib/ui/dining/FoodFiltersPanel.dart +++ b/lib/ui/dining/FoodFiltersPanel.dart @@ -148,7 +148,7 @@ class _FoodFiltersPanelState extends State { ), ), ), - _buildSaveButton() +// _buildSaveButton() ], ), backgroundColor: Styles().colors.background, @@ -202,7 +202,7 @@ class _FoodFiltersPanelState extends State { else{ _selectedTypesPrefs.add(foodOption); } - + DiningService().setIncludedFoodTypesPrefs(_selectedTypesPrefs.toList()); setState((){}); } @@ -215,6 +215,7 @@ class _FoodFiltersPanelState extends State { else{ _selectedIngredientsPrefs.add(foodOption); } + DiningService().setExcludedFoodIngredientsPrefs(_selectedIngredientsPrefs.toList()); setState((){}); } @@ -225,8 +226,8 @@ class _FoodFiltersPanelState extends State { Padding( padding: EdgeInsets.symmetric( vertical: 20,horizontal: 16), child: RoundedButton( - label: Localization().getStringEx("panel.profile_info.button.save.title", "Save Changes"), - hint: Localization().getStringEx("panel.profile_info.button.save.hint", ""), + label: Localization().getStringEx("panel.food_filters.button.save.title", "Save Changes"), + hint: Localization().getStringEx("panel.food_filters.button.save.hint", ""), enabled: _canSave, fontFamily: Styles().fontFamilies.bold, backgroundColor: Styles().colors.white, diff --git a/lib/ui/events/CompositeEventsDetailPanel.dart b/lib/ui/events/CompositeEventsDetailPanel.dart index fadb09772..1b09b2481 100644 --- a/lib/ui/events/CompositeEventsDetailPanel.dart +++ b/lib/ui/events/CompositeEventsDetailPanel.dart @@ -325,7 +325,7 @@ class _CompositeEventsDetailPanelState extends State Widget _exploreLocationDetail() { String locationText = ExploreHelper.getLongDisplayLocation(widget.parentEvent, _locationData); - if ((locationText != null) && locationText.isNotEmpty) { + if (!(widget?.parentEvent?.isVirtual ?? false) && widget?.parentEvent?.location != null && (locationText != null) && locationText.isNotEmpty) { return GestureDetector( onTap: _onLocationDetailTapped, child: Semantics( @@ -549,8 +549,10 @@ class _CompositeEventsDetailPanelState extends State } void _onLocationDetailTapped(){ - Analytics.instance.logSelect(target: "Location Detail"); - NativeCommunicator().launchExploreMapDirections(target: widget.parentEvent); + if(widget?.parentEvent?.location?.latitude != null && widget?.parentEvent?.location?.longitude != null) { + Analytics.instance.logSelect(target: "Location Detail"); + NativeCommunicator().launchExploreMapDirections(target: widget.parentEvent); + } } void _onTapHeaderStar() { diff --git a/lib/ui/explore/ExploreEventDetailPanel.dart b/lib/ui/explore/ExploreEventDetailPanel.dart index 63ef50522..61c49f4af 100644 --- a/lib/ui/explore/ExploreEventDetailPanel.dart +++ b/lib/ui/explore/ExploreEventDetailPanel.dart @@ -329,7 +329,7 @@ class _EventDetailPanelState extends State Widget _exploreLocationDetail() { String locationText = ExploreHelper.getLongDisplayLocation(widget.event, _locationData); - if ((locationText != null) && locationText.isNotEmpty) { + if (!(widget?.event?.isVirtual ?? false) && widget?.event?.location != null && (locationText != null) && locationText.isNotEmpty) { return GestureDetector( onTap: _onLocationDetailTapped, child: Semantics( @@ -623,8 +623,10 @@ class _EventDetailPanelState extends State } void _onLocationDetailTapped() { - Analytics.instance.logSelect(target: "Location Detail"); - NativeCommunicator().launchExploreMapDirections(target: widget.event); + if(widget?.event?.location?.latitude != null && widget?.event?.location?.longitude != null) { + Analytics.instance.logSelect(target: "Location Detail"); + NativeCommunicator().launchExploreMapDirections(target: widget.event); + } } void _onTapModify() { diff --git a/lib/ui/explore/ExplorePanel.dart b/lib/ui/explore/ExplorePanel.dart index 36ac393e1..f02dc6ba9 100644 --- a/lib/ui/explore/ExplorePanel.dart +++ b/lib/ui/explore/ExplorePanel.dart @@ -537,14 +537,14 @@ class ExplorePanelState extends State List tags = _getSelectedEventTags(selectedFilterList); Map period = _getSelectedEventTimePeriod(selectedFilterList); _locationData = _userLocationEnabled() ? await LocationServices.instance.location : null; - return (_locationData != null) ? ExploreService().loadEvents(locationData: _locationData, categories: categories, tags: tags?.toSet(), startDate: period['start_date'], endDate: period['end_date']) : null; + return (_locationData != null) ? ExploreService().loadEvents(locationData: _locationData, categories: categories, tags: tags?.toSet(), startDate: period['start_date'], startDateLimit: period['end_date']) : null; } Future> _loadEvents(List selectedFilterList) async { Set categories = _getSelectedCategories(selectedFilterList); List tags = _getSelectedEventTags(selectedFilterList); Map period = _getSelectedEventTimePeriod(selectedFilterList); - return ExploreService().loadEvents(categories: categories, tags: tags?.toSet(), startDate: period['start_date'], endDate: period['end_date']); + return ExploreService().loadEvents(categories: categories, tags: tags?.toSet(), startDate: period['start_date'], startDateLimit: period['end_date']); } Future> _loadDining(List selectedFilterList) async { diff --git a/lib/ui/onboarding/OnboardingLoginPhoneVerifyPanel.dart b/lib/ui/onboarding/OnboardingLoginPhoneVerifyPanel.dart index 1a4fd467a..b75449003 100644 --- a/lib/ui/onboarding/OnboardingLoginPhoneVerifyPanel.dart +++ b/lib/ui/onboarding/OnboardingLoginPhoneVerifyPanel.dart @@ -159,13 +159,14 @@ class _OnboardingLoginPhoneVerifyPanelState onChanged: _onMethodChanged, ), ), - Text( - Localization().getStringEx( - "panel.onboarding.verify_phone.text_me.label", - "Text me"), - style: TextStyle( - fontSize: 16, fontFamily: Styles().fontFamilies.regular), - ) + ExcludeSemantics(child: + Text( + Localization().getStringEx( + "panel.onboarding.verify_phone.text_me.label", + "Text me"), + style: TextStyle( + fontSize: 16, fontFamily: Styles().fontFamilies.regular), + )) ], ), ], diff --git a/lib/ui/settings/SettingsHomePanel.dart b/lib/ui/settings/SettingsHomePanel.dart index e8e167bac..5d7dc24a8 100644 --- a/lib/ui/settings/SettingsHomePanel.dart +++ b/lib/ui/settings/SettingsHomePanel.dart @@ -32,6 +32,7 @@ import 'package:illinois/service/NotificationService.dart'; import 'package:illinois/ui/WebPanel.dart'; import 'package:illinois/ui/dining/FoodFiltersPanel.dart'; import 'package:illinois/ui/onboarding/OnboardingLoginPhoneVerifyPanel.dart'; +import 'package:illinois/ui/settings/SettingsPrivacyCenterPanel.dart'; import 'package:illinois/ui/settings/SettingsRolesPanel.dart'; import 'package:illinois/ui/widgets/HeaderBar.dart'; import 'package:illinois/ui/widgets/TabBarWidget.dart'; @@ -125,6 +126,9 @@ class _SettingsHomePanelState extends State implements Notifi else if (code == 'feedback') { contentList.add(_buildFeedback(),); } + else if (code == 'privacy_center') { + contentList.add(_buildPrivacyCenterButton(),); + } } if (!kReleaseMode) { @@ -176,6 +180,42 @@ class _SettingsHomePanelState extends State implements Notifi bottomNavigationBar: TabBarWidget(), ); } + //Privacy Center + Widget _buildPrivacyCenterButton(){ + return GestureDetector( + onTap: (){ + Analytics.instance.logSelect(target: "Privacy Center"); + Navigator.push(context, CupertinoPageRoute(builder: (context) =>SettingsPrivacyCenterPanel())); + }, + child: Semantics( + button: true, + child:Container( + padding: EdgeInsets.only(left: 16, right: 16, top: 10), + child:Container( + padding: EdgeInsets.symmetric(horizontal: 12, vertical: 12), + decoration: BoxDecoration( + color: UiColors.fromHex("9318bb"), + //border: Border.all(color: Colors.grey, width: 1), + borderRadius: BorderRadius.circular(6), + boxShadow: [BoxShadow(color: Styles().colors.blackTransparent018, spreadRadius: 2.0, blurRadius: 6.0, offset: Offset(2, 2))] + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + Localization().getStringEx("panel.browse.button.privacy_center.title","Privacy Center"), + textAlign: TextAlign.start, + style: TextStyle( + color: Styles().colors.white, + fontSize: 20, + fontFamily: Styles().fontFamilies.bold), + ), + Image.asset("images/group-8.png", excludeFromSemantics: true,), + ],), + ), + ))); + } + // User Info @@ -834,74 +874,12 @@ class _DebugContainerState extends State<_DebugContainer> { _clickedCount++; if (_clickedCount == 7) { - _showPinDialog(); + if (Auth().isDebugManager) { + Navigator.push(context, CupertinoPageRoute(builder: (context) => SettingsDebugPanel())); + } _clickedCount = 0; } }, ); } - - void _showPinDialog(){ - TextEditingController pinController = TextEditingController(text: (!kReleaseMode || (Config().configEnvironment == ConfigEnvironment.dev)) ? this.pinOfTheDay : ''); - showDialog(context: context, barrierDismissible: false, builder: (context) => Dialog( - child: Padding( - padding: EdgeInsets.all(18), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - Localization().getStringEx('app.title', 'Illinois'), - style: TextStyle(fontSize: 24, color: Colors.black), - ), - Padding( - padding: EdgeInsets.symmetric(vertical: 26), - child: Text( - Localization().getStringEx('panel.debug.label.pin', 'Please enter pin'), - textAlign: TextAlign.left, - style: TextStyle(fontFamily: Styles().fontFamilies.medium, fontSize: 16, color: Colors.black), - ), - ), - Container(height: 6,), - TextField(controller: pinController, autofocus: true, keyboardType: TextInputType.number, obscureText: true, - onSubmitted:(String value){ - _onEnterPin(value); - } - ,), - Container(height: 6,), - Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - FlatButton( - onPressed: () { - Navigator.pop(context); - //_finish(); - }, - child: Text(Localization().getStringEx('dialog.cancel.title', 'Cancel'))), - Container(width: 6), - FlatButton( - onPressed: () { - _onEnterPin(pinController?.text); - //_finish(); - }, - child: Text(Localization().getStringEx('dialog.ok.title', 'OK'))) - ], - ) - ], - ), - ), - )); - } - - String get pinOfTheDay { - return AppDateTime().formatUniLocalTimeFromUtcTime(DateTime.now(), "MMdd"); - } - - void _onEnterPin(String pin){ - if (this.pinOfTheDay == pin) { - Navigator.pop(context); - Navigator.push(context, CupertinoPageRoute(builder: (context) => SettingsDebugPanel())); - } else { - AppToast.show("Invalid pin"); - } - } } \ No newline at end of file diff --git a/lib/ui/settings/SettingsManageInterestsPanel.dart b/lib/ui/settings/SettingsManageInterestsPanel.dart index 006af4187..086246851 100644 --- a/lib/ui/settings/SettingsManageInterestsPanel.dart +++ b/lib/ui/settings/SettingsManageInterestsPanel.dart @@ -53,8 +53,8 @@ class _SettingsManageInterestsState extends State List _followingTags; bool _tagSearchMode = false; - //Athletics sports - List _preferredSports; +// //Athletics sports +// List _preferredSports; //Search TextEditingController _textEditingController = TextEditingController(); @@ -66,7 +66,7 @@ class _SettingsManageInterestsState extends State _initTabs(); _initCategories(); _initTags(); - _loadPreferredSports(); +// _loadPreferredSports(); //_stopProgress(); super.initState(); } @@ -143,7 +143,7 @@ class _SettingsManageInterestsState extends State _buildTabContent(), ])), )), - _buildSaveButton() +// _buildSaveButton() ]), _progress ? Container( @@ -164,7 +164,7 @@ class _SettingsManageInterestsState extends State case _InterestTab.Athletics: return Padding( padding: EdgeInsets.all(16), - child: AthleticsTeamsWidget(preferredSports: _preferredSports ?? List(), onSportTaped: (String sport){switchSport(sport);}), + child: AthleticsTeamsWidget(), //TBD pass _preferredSpords and tapListener if using save button ); } } @@ -186,10 +186,11 @@ class _SettingsManageInterestsState extends State } void _loadPreferences() { - _preferredCategories = List(); - if(User()?.getInterestsCategories()?.isNotEmpty??false){ - _preferredCategories.addAll(User()?.getInterestsCategories()); - } +// _preferredCategories = List(); +// if(User().getInterestsCategories()?.isNotEmpty??false){ +// _preferredCategories.addAll(User().getInterestsCategories()); +// } + _preferredCategories = User().getInterestsCategories() ?? new List(); setState(() {}); } @@ -231,17 +232,17 @@ class _SettingsManageInterestsState extends State selected: _preferredCategories.contains(categoryName), onTap: () { Analytics.instance.logSelect(target: "Category: $categoryName"); -// _startProgress(); -// User().switchInterestCategory(categoryName).then((_) { -// setState(() { -// _preferredCategories = User().getInterestsCategories(); -// -// _stopProgress(); -// AppSemantics.announceCheckBoxStateChange(context, _preferredCategories.contains(categoryName), categoryName); -// }); -// }); - switchCategory(categoryName); - setState(() {}); + _startProgress(); + User().switchInterestCategory(categoryName).then((_) { + setState(() { + _preferredCategories = User().getInterestsCategories(); + + _stopProgress(); + AppSemantics.announceCheckBoxStateChange(context, _preferredCategories.contains(categoryName), categoryName); + }); + }); +// switchCategory(categoryName); +// setState(() {}); })); } } @@ -261,11 +262,11 @@ class _SettingsManageInterestsState extends State //Tags void _initTags() { - _followingTags = List(); - if(User()?.getTags()?.isNotEmpty?? false) { - _followingTags.addAll(User()?.getTags()); - } - +// _followingTags = List(); +// if(User()?.getTags()?.isNotEmpty?? false) { +// _followingTags.addAll(User()?.getTags()); +// } + _followingTags = User().getTags(); ExploreService().loadEventTags().then((List tagList) { setState(() { _tags = tagList; @@ -431,13 +432,14 @@ class _SettingsManageInterestsState extends State } bool _isTagSelected(String tag) { - return _followingTags.contains(tag); //If we support positive/negative tags +// return _followingTags.contains(tag); + return User().isTagged(tag, true); } void _onTagTaped(String tag) { Analytics.instance.logSelect(target: "Tag: $tag"); -// User().switchTag(tag); - switchTag(tag); + User().switchTag(tag); +// switchTag(tag); AppSemantics.announceCheckBoxStateChange(context, _isTagSelected(tag), tag); } @@ -452,7 +454,7 @@ class _SettingsManageInterestsState extends State } //Athletics - void _loadPreferredSports() { +/* void _loadPreferredSports() { _preferredSports = List(); if(User()?.getSportsInterestSubCategories()?.isNotEmpty ?? false) { _preferredSports.addAll(User()?.getSportsInterestSubCategories()); @@ -469,7 +471,7 @@ class _SettingsManageInterestsState extends State } } setState(() {}); - } + }*/ // NotificationsListener @@ -517,13 +519,13 @@ class _SettingsManageInterestsState extends State //// //SaveButton - Widget _buildSaveButton(){ +/* Widget _buildSaveButton(){ return Padding( padding: EdgeInsets.symmetric( vertical: 20,horizontal: 16), child: RoundedButton( - label: Localization().getStringEx("panel.profile_info.button.save.title", "Save Changes"), - hint: Localization().getStringEx("panel.profile_info.button.save.hint", ""), + label: Localization().getStringEx("panel.settings.manage_interests.button.save.title", "Save Changes"), + hint: Localization().getStringEx("panel.settings.manage_interests.button.save.hint", ""), enabled: _canSave, fontFamily: Styles().fontFamilies.bold, backgroundColor: _canSave? Styles().colors.white: Styles().colors.background, @@ -573,13 +575,13 @@ class _SettingsManageInterestsState extends State return false; } return !IterableEquality().equals(_preferredSports, User().getSportsInterestSubCategories()); - } + }*/ //// //Progress -/*void _startProgress() { +void _startProgress() { setState(() { _progress = true; }); @@ -590,7 +592,7 @@ class _SettingsManageInterestsState extends State _progress = false; }); } -*/////// +////// static String _interestTabName(_InterestTab tab) { switch (tab) { diff --git a/lib/ui/settings/SettingsNewPrivacyPanel.dart b/lib/ui/settings/SettingsNewPrivacyPanel.dart index ea09ab88a..985414d1e 100644 --- a/lib/ui/settings/SettingsNewPrivacyPanel.dart +++ b/lib/ui/settings/SettingsNewPrivacyPanel.dart @@ -133,7 +133,7 @@ class SettingsNewPrivacyPanelState extends State implem ? SimpleHeaderBarWithBack( context: context, titleWidget: Text( - Localization().getStringEx("panel.settings_new.privacy.label.title", "Choose Your Privacy Level"), + Localization().getStringEx("panel.settings.new_privacy.privacy.label.title", "Choose Your Privacy Level"), style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w900, letterSpacing: 1.0), ), ) @@ -187,7 +187,7 @@ class SettingsNewPrivacyPanelState extends State implem Row(children: [ Expanded(child: Text( - Localization().getStringEx("panel.settings_new.privacy.label.slider_help", "Adjust slider to change your privacy level"), + Localization().getStringEx("panel.settings.new_privacy.privacy.label.slider_help", "Adjust slider to change your privacy level"), style: TextStyle(color: Styles().colors.textSurface, fontSize: 18, fontFamily:Styles().fontFamilies.bold), textAlign: TextAlign.center, ), @@ -220,11 +220,11 @@ class SettingsNewPrivacyPanelState extends State implem child: Stack(children: [ RoundedButton( label: _disabled - ? Localization().getStringEx("panel.settings_new.privacy.button.set_privacy.disabled.title", "Scroll to Review") - : Localization().getStringEx("panel.settings_new.privacy.button.set_privacy.title", "Set my Privacy"), + ? Localization().getStringEx("panel.settings.new_privacy.privacy.button.set_privacy.disabled.title", "Scroll to Review") + : Localization().getStringEx("panel.settings.new_privacy.privacy.button.set_privacy.title", "Set my Privacy"), hint: _disabled - ? Localization().getStringEx("panel.settings_new.privacy.button.set_privacy.disabled.hint", "") - : Localization().getStringEx("panel.settings_new.privacy.button.set_privacy.hint", ""), + ? Localization().getStringEx("panel.settings.new_privacy.privacy.button.set_privacy.disabled.hint", "") + : Localization().getStringEx("panel.settings.new_privacy.privacy.button.set_privacy.hint", ""), height: 48, borderColor: _disabled ? Styles().colors.disabledTextColorTwo : Styles().colors.fillColorSecondary, backgroundColor: Styles().colors.fillColorPrimaryVariant, @@ -260,38 +260,49 @@ class SettingsNewPrivacyPanelState extends State implem padding: EdgeInsets.all(8), child: Row( children: [ - Expanded( - child: Center( - child: Container( - padding: EdgeInsets.only(top: 42, bottom: 10, left: 40, right: 40), - child: Text( - Localization().getStringEx("panel.settings_new.privacy.dialog.update_privacy.title", "Your new \nprivacy level"), - style: TextStyle(fontSize: 24, color: Colors.white, fontFamily: Styles().fontFamilies.bold), - textAlign: TextAlign.center, - ), - ) - ), - ), - GestureDetector( - onTap: () => Navigator.pop(context), - child: Container( - height: 30, - width: 30, - decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(15)), - border: Border.all(color: Styles().colors.white, width: 2), + Expanded( + child: Center( child: + Container( + padding: EdgeInsets.only(top: 42, bottom: 10, left: 40, right: 40), + child: + Semantics(button:false, hint: "${_sliderValue?.round()?.toString() ?? ""}", + child: Text( + Localization().getStringEx("panel.settings.new_privacy.privacy.dialog.update_privacy.title", "Your new \nprivacy level"), + style: TextStyle(fontSize: 24, color: Colors.white, fontFamily: Styles().fontFamilies.bold), + textAlign: TextAlign.center, + ), + ) + ) ), - child: Center( - child: Text( - "\u00D7", - style: TextStyle( - fontSize: 24, - color: Colors.white, + ), + Semantics( + explicitChildNodes: true, + child: + GestureDetector( + onTap: () => Navigator.pop(context), + child: Container( + height: 30, + width: 30, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(15)), + border: Border.all(color: Styles().colors.white, width: 2), + ), + child: Semantics( button: true, label: Localization().getStringEx("panel.settings.new_privacy.privacy.dialog.update_privacy.button.back.title", "Back"),child: + Center(child: + ExcludeSemantics( child: + Text( + "\u00D7", + style: TextStyle( + fontSize: 24, + color: Colors.white, + ), + ) + ), ), ), ), - ), - ), + ) + ) ], ), ), @@ -337,10 +348,13 @@ class SettingsNewPrivacyPanelState extends State implem border: Border.all(width:2, color: Styles().colors.fillColorSecondary,) ), child: Center( - child: Text( - _sliderValue?.round()?.toString() ?? "", - style: TextStyle(color: Styles().colors.fillColorPrimary, fontSize: 24, fontFamily: Styles().fontFamilies.extraBold), - ), + child: Semantics( + label: Localization().getStringEx("panel.settings.new_privacy.privacy.dialog.label.new_privacy", "Privacy Level: "), + child: Text( + _sliderValue?.round()?.toString() ?? "", + style: TextStyle(color: Styles().colors.fillColorPrimary, fontSize: 24, fontFamily: Styles().fontFamilies.extraBold), + ), + ) ), ),)) ), @@ -352,7 +366,7 @@ class SettingsNewPrivacyPanelState extends State implem Padding( padding: const EdgeInsets.symmetric(horizontal: 26), child: Text( - Localization().getStringEx("panel.settings_new.privacy.dialog.update_privacy.label2", "This change requires us to make the following changes:"), + Localization().getStringEx("panel.settings.new_privacy.privacy.dialog.update_privacy.label2", "This change requires us to make the following changes:"), textAlign: TextAlign.center, style: TextStyle(fontFamily: Styles().fontFamilies.bold, fontSize: 16, color: Styles().colors.fillColorPrimaryVariant), ), @@ -362,7 +376,7 @@ class SettingsNewPrivacyPanelState extends State implem height: 10, ), Text( - Localization().getStringEx("panel.settings_new.privacy.dialog.update_privacy.confirm", "Are you sure?"), + Localization().getStringEx("panel.settings.new_privacy.privacy.dialog.update_privacy.confirm", "Are you sure?"), textAlign: TextAlign.center, style: TextStyle(fontFamily: Styles().fontFamilies.bold, fontSize: 16, color: Styles().colors.fillColorPrimaryVariant), ), @@ -384,7 +398,7 @@ class SettingsNewPrivacyPanelState extends State implem backgroundColor: Colors.transparent, borderColor: Styles().colors.fillColorSecondary, textColor: Styles().colors.fillColorPrimary, - label: Localization().getStringEx("panel.settings_new.privacy.dialog.update_privacy.yes", "Yes")), + label: Localization().getStringEx("panel.settings.new_privacy.privacy.dialog.update_privacy.yes", "Yes")), ), Container( width: 10, @@ -398,7 +412,7 @@ class SettingsNewPrivacyPanelState extends State implem backgroundColor: Colors.transparent, borderColor: Styles().colors.fillColorSecondary, textColor: Styles().colors.fillColorPrimary, - label: Localization().getStringEx("panel.settings_new.privacy.dialog.update_privacy.no", "No")) + label: Localization().getStringEx("panel.settings.new_privacy.privacy.dialog.update_privacy.no", "No")) ) ], ), @@ -493,11 +507,11 @@ class SettingsNewPrivacyPanelState extends State implem Widget _titleLayout() { String title = (widget.mode != SettingsPrivacyPanelMode.update) - ? Localization().getStringEx("panel.settings_new.privacy.label.set_your_privacy_level", "Set your privacy level") - : Localization().getStringEx("panel.settings_new.privacy.label.update_your_privacy_level", "Update your privacy level"); + ? Localization().getStringEx("panel.settings.new_privacy.privacy.label.set_your_privacy_level", "Set your privacy level") + : Localization().getStringEx("panel.settings.new_privacy.privacy.label.update_your_privacy_level", "Update your privacy level"); String hint = (widget.mode != SettingsPrivacyPanelMode.update) - ? Localization().getStringEx("panel.settings_new.privacy.label.set_your_privacy_level.hint", "Header 1") - : Localization().getStringEx("panel.settings_new.privacy.label.update_your_privacy_level.hint", "Header 1"); + ? Localization().getStringEx("panel.settings.new_privacy.privacy.label.set_your_privacy_level.hint", "Header 1") + : Localization().getStringEx("panel.settings.new_privacy.privacy.label.update_your_privacy_level.hint", "Header 1"); Widget titleWidget = Semantics( label: title, hint: hint, @@ -516,8 +530,8 @@ class SettingsNewPrivacyPanelState extends State implem Widget subTitleWidget; if (widget.mode == SettingsPrivacyPanelMode.update) { - String subTitle = Localization().getStringEx("panel.settings_new.privacy.label.some_details_have_changed", "Some details have changed"); - String subTitleHint = Localization().getStringEx("panel.settings_new.privacy.label.some_details_have_changed.hint", "Header 2"); + String subTitle = Localization().getStringEx("panel.settings.new_privacy.privacy.label.some_details_have_changed", "Some details have changed"); + String subTitleHint = Localization().getStringEx("panel.settings.new_privacy.privacy.label.some_details_have_changed.hint", "Header 2"); subTitleWidget = Semantics( label: subTitle, hint: subTitleHint, @@ -576,7 +590,7 @@ class SettingsNewPrivacyPanelState extends State implem color: Styles().colors.white, borderRadius: BorderRadius.all(Radius.circular(100)), ), - child: Semantics( label:Localization().getStringEx("panel.settings_new.label.privacy_level.title", "Privacy Level: "), + child: Semantics( label:Localization().getStringEx("panel.settings.new_privacy.label.privacy_level.title", "Privacy Level: "), child: Text(level.toString(), style: TextStyle(fontFamily: Styles().fontFamilies.extraBold, fontSize: 24, color: Styles().colors.fillColorPrimary)), ), @@ -634,13 +648,13 @@ class PrivacyEntriesListState extends State<_PrivacyEntriesListWidget> with Tic children: [ Container( padding: EdgeInsets.symmetric(horizontal: 22), - child: Text(Localization().getStringEx("panel.settings_new.label.description.title", "Features and Data Collection"), + child: Text(Localization().getStringEx("panel.settings.new_privacy.label.description.title", "Features and Data Collection"), style: TextStyle(fontFamily: Styles().fontFamilies.bold, color: Styles().colors.fillColorPrimary, fontSize: 20)), ), Container(height: 7,), Container( padding: EdgeInsets.symmetric(horizontal: 22), - child: Text(Localization().getStringEx("panel.settings_new.label.description.info", "Learn more about specific features, and use dropdown for more information about how data is being used."), + child: Text(Localization().getStringEx("panel.settings.new_privacy.label.description.info", "Learn more about specific features, and use dropdown for more information about how data is being used."), style: TextStyle(fontFamily: Styles().fontFamilies.regular, color: Styles().colors.textSurface, fontSize: 16)), ), Container(height: 12,), @@ -648,14 +662,17 @@ class PrivacyEntriesListState extends State<_PrivacyEntriesListWidget> with Tic alignment: Alignment.centerRight, padding: EdgeInsets.symmetric(horizontal: 18), child: - Container( - decoration: BoxDecoration(border: Border(bottom: BorderSide(width: 1, color: Styles().colors.fillColorSecondary))), - child: GestureDetector( - onTap: _onTapExpandAll, - child: Text( - _canClose? Localization().getStringEx("panel.settings_new.button.close_all.title","Close All") : Localization().getStringEx("panel.settings_new.button.expand_all.title","Expand All"), - style: TextStyle(fontFamily: Styles().fontFamilies.regular, color: Styles().colors.textSurface, fontSize: 16) - ), + Semantics( + button: true, + child: Container( + decoration: BoxDecoration(border: Border(bottom: BorderSide(width: 1, color: Styles().colors.fillColorSecondary))), + child: GestureDetector( + onTap: _onTapExpandAll, + child: Text( + _canClose? Localization().getStringEx("panel.settings.new_privacy.button.close_all.title","Close All") : Localization().getStringEx("panel.settings.new_privacy.button.expand_all.title","Expand All"), + style: TextStyle(fontFamily: Styles().fontFamilies.regular, color: Styles().colors.textSurface, fontSize: 16) + ), + ) ) ) ), @@ -701,10 +718,10 @@ class PrivacyEntriesListState extends State<_PrivacyEntriesListWidget> with Tic key: expansionTileKey, initiallyExpanded: expanded, title: - Semantics(label: category.title, - hint: Localization().getStringEx("panel.settings_new.label.hint","Double tap to ") +(expanded?"Hide" : "Show ")+" information", + Semantics(label: Localization().getStringEx(category.titleKey??"",category.title), + hint: Localization().getStringEx("panel.settings.new_privacy.label.hint","Double tap to ") +(expanded?"Hide" : "Show ")+" information", excludeSemantics:true,child: - Container(child: Text(category.title, style: TextStyle(color: Styles().colors.white, fontFamily: Styles().fontFamilies.bold, fontSize: 16),))), + Container(child: Text(Localization().getStringEx(category.titleKey??"",category.title), style: TextStyle(color: Styles().colors.white, fontFamily: Styles().fontFamilies.bold, fontSize: 16),))), backgroundColor: Styles().colors.fillColorPrimary, children: _buildCategoryEntries(category), trailing: RotationTransition( @@ -872,13 +889,13 @@ class _PrivacyEntryState extends State<_PrivacyEntry> with TickerProviderStateMi padding: EdgeInsets.only(top: 8), child: Row( children: [ - Text(Localization().getStringEx("panel.settings_new.button.expand_data.title","See Data Usage"), + Text(Localization().getStringEx("panel.settings.new_privacy.button.expand_data.title","See Data Usage"), style: TextStyle(fontSize: 14, fontFamily: Styles().fontFamilies.regular, color: isEnabled? Styles().colors.fillColorPrimary: Styles().colors.fillColorPrimaryTransparent015), ), Container(width: 9,), RotationTransition( turns: _iconTurns, - child: Image.asset(isEnabled? "images/down-arrow-orange.png": "images/down-arrow-orange-off.png")), + child: Image.asset(isEnabled? "images/down-arrow-orange.png": "images/down-arrow-orange-off.png", excludeFromSemantics: true,)), ], )))), !infoExpanded? Container(): @@ -962,11 +979,11 @@ class _PrivacyLevelSliderState extends State<_PrivacyLevelSlider> { valueIndicatorTextStyle: TextStyle(fontSize: 20, fontFamily: Styles().fontFamilies.extraBold, color: Styles().colors.fillColorPrimary)), child: MergeSemantics( child: Semantics( - label: Localization().getStringEx("panel.settings_new.privacy.button.set_privacy.slider.hint", "Privacy Level"), + label: Localization().getStringEx("panel.settings.new_privacy.privacy.button.set_privacy.slider.hint", "Privacy Level"), enabled: true, - increasedValue: Localization().getStringEx("panel.settings_new.privacy.button.set_privacy.slider.increase", "increased to") + + increasedValue: Localization().getStringEx("panel.settings.new_privacy.privacy.button.set_privacy.slider.increase", "increased to") + (_roundedValue + 1).toString(), - decreasedValue: Localization().getStringEx("panel.settings_new.privacy.button.set_privacy.slider.decrease", "decreased to") + + decreasedValue: Localization().getStringEx("panel.settings.new_privacy.privacy.button.set_privacy.slider.decrease", "decreased to") + (_roundedValue - 1).toString(), child: Padding( diff --git a/lib/ui/settings/SettingsPrivacyCenterPanel.dart b/lib/ui/settings/SettingsPrivacyCenterPanel.dart index adb1e7c03..ea56fcf7c 100644 --- a/lib/ui/settings/SettingsPrivacyCenterPanel.dart +++ b/lib/ui/settings/SettingsPrivacyCenterPanel.dart @@ -87,7 +87,7 @@ class _SettingsPrivacyCenterPanelState extends State onPressed: _onTapBack))), Expanded(child:Container()), Container(height: 90, - child: Image.asset("images/group-3.png",excludeFromSemantics: true,), + child: Image.asset("images/group-6.png",excludeFromSemantics: true,), ), Expanded(child:Container()), Container(width: 42,) @@ -98,11 +98,12 @@ class _SettingsPrivacyCenterPanelState extends State Container(height: 10,), Row(children: [ Expanded(child: - Text( - Localization().getStringEx("panel.settings.privacy_center.label.title", "Privacy Center"), - textAlign: TextAlign.center, - style: TextStyle(color: Colors.white, fontSize: 24, fontFamily: Styles().fontFamilies.extraBold), - ), + Semantics(header: true, child: + Text( + Localization().getStringEx("panel.settings.privacy_center.label.title", "Privacy Center"), + textAlign: TextAlign.center, + style: TextStyle(color: Colors.white, fontSize: 24, fontFamily: Styles().fontFamilies.extraBold), + ),) ), ],), Container(height: 24,) @@ -365,13 +366,13 @@ class _SettingsPrivacyCenterPanelState extends State fontSize: 16, fontFamily: Styles().fontFamilies.regular, label: Localization().getStringEx("panel.settings.privacy_center.button.delete_data.title", "Forget all of my information"), - hint: Localization().getStringEx("panel.settings.privacy_center.label.description", "This will delete all of your personal information that was shared and stored within the app."), + hint: Localization().getStringEx("panel.settings.privacy_center.label.delete.description", "This will delete all of your personal information that was shared and stored within the app."), shadow: [BoxShadow(color: Color.fromRGBO(19, 41, 75, 0.3), spreadRadius: 2.0, blurRadius: 8.0, offset: Offset(0, 2))], onTap: _onTapDeleteData, ), Container(height: 16,), ExcludeSemantics( - child: Text(Localization().getStringEx("panel.settings.privacy_center.label.description", "This will delete all of your personal information that was shared and stored within the app."), + child: Text(Localization().getStringEx("panel.settings.privacy_center.label.delete.description", "This will delete all of your personal information that was shared and stored within the app."), textAlign: TextAlign.center, style: TextStyle(fontFamily: Styles().fontFamilies.regular, fontSize: 12, color: Styles().colors.textSurface),)), ],); diff --git a/lib/ui/settings/SettingsRolesPanel.dart b/lib/ui/settings/SettingsRolesPanel.dart index 9da158717..83b01a534 100644 --- a/lib/ui/settings/SettingsRolesPanel.dart +++ b/lib/ui/settings/SettingsRolesPanel.dart @@ -15,6 +15,8 @@ */ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:illinois/service/Localization.dart'; import 'package:illinois/service/Analytics.dart'; @@ -36,22 +38,22 @@ class _SettingsRolesPanelState extends State implements Noti //User _user; Set _selectedRoles = Set(); - //Timer _saveRolesTimer; + Timer _saveRolesTimer; @override void initState() { NotificationService().subscribe(this, User.notifyRolesUpdated); - _selectedRoles =UserRole.userRolesFromList(User().roles?.map((role) => role?.toJson())?.toList()) ?? Set(); + _selectedRoles = User().roles ?? Set(); super.initState(); } @override void dispose() { NotificationService().unsubscribe(this); - /*if (_saveRolesTimer != null) { + if (_saveRolesTimer != null) { _stopSaveRolesTimer(); _saveSelectedRoles(); - }*/ + } super.dispose(); } @@ -193,7 +195,7 @@ class _SettingsRolesPanelState extends State implements Noti ), ), )), - _buildSaveButton() +// _buildSaveButton() ],) ; } @@ -234,12 +236,12 @@ class _SettingsRolesPanelState extends State implements Noti setState(() {}); -// _startSaveRolesTimer(); + _startSaveRolesTimer(); } } //TBD clear up when sure that timer saving approach won't be needed - /*void _startSaveRolesTimer() { + void _startSaveRolesTimer() { _stopSaveRolesTimer(); _saveRolesTimer = Timer(Duration(seconds: 3), _saveSelectedRoles); } @@ -249,7 +251,7 @@ class _SettingsRolesPanelState extends State implements Noti _saveRolesTimer.cancel(); _saveRolesTimer = null; } - }*/ + } void _saveSelectedRoles() { User().roles = _selectedRoles; diff --git a/lib/ui/settings/SettingsVerifyIdentityPanel.dart b/lib/ui/settings/SettingsVerifyIdentityPanel.dart index 263236ad7..242fea9bf 100644 --- a/lib/ui/settings/SettingsVerifyIdentityPanel.dart +++ b/lib/ui/settings/SettingsVerifyIdentityPanel.dart @@ -76,7 +76,7 @@ class _SettingsVerifyIdentityPanelState extends State{ } _buildConfirmButton(){ return - Semantics( button: true, + Semantics( button: true, enabled: _getIsContinueEnabled, child: Stack(children: [ GestureDetector( onTap: (){ widget?.onContinue(selectedOptions, ({bool loading})=>setState((){_loading = loading;}));}, diff --git a/pubspec.yaml b/pubspec.yaml index 0b826f0d2..4acf0c043 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,7 +11,7 @@ description: Illinois client application. # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 2.2.13+313 +version: 2.2.18+318 environment: sdk: ">=2.2.0 <3.0.0"