Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix #4641, #4674, #4579, #4591: Assorted beta fixes #4685

Merged
merged 13 commits into from
Nov 10, 2022
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import org.oppia.android.domain.oppialogger.OppiaLogger
import org.oppia.android.domain.profile.ProfileManagementController
import org.oppia.android.util.data.AsyncResult
import org.oppia.android.util.data.DataProviders.Companion.toLiveData
import org.oppia.android.util.platformparameter.AutomaticUpdateTopicSetting
import org.oppia.android.util.platformparameter.EnableDownloadsSupport
import org.oppia.android.util.platformparameter.EnableEditAccountsOptionsUi
import org.oppia.android.util.platformparameter.LearnerStudyAnalytics
import org.oppia.android.util.platformparameter.PlatformParameterValue
Expand All @@ -36,7 +36,7 @@ class AdministratorControlsViewModel @Inject constructor(
@EnableEditAccountsOptionsUi
private val enableEditAccountsOptionsUi: PlatformParameterValue<Boolean>,
@LearnerStudyAnalytics private val learnerStudyAnalytics: PlatformParameterValue<Boolean>,
@AutomaticUpdateTopicSetting private val automaticallyUpdateTopic: PlatformParameterValue<Boolean>
@EnableDownloadsSupport private val enableDownloadsSupport: PlatformParameterValue<Boolean>
) {
private val routeToProfileListListener = activity as RouteToProfileListListener
private val loadProfileListListener = activity as LoadProfileListListener
Expand Down Expand Up @@ -94,16 +94,17 @@ class AdministratorControlsViewModel @Inject constructor(
itemViewModelList.add(AdministratorControlsProfileAndDeviceIdViewModel(activity))
}

itemViewModelList.add(
AdministratorControlsDownloadPermissionsViewModel(
fragment,
oppiaLogger,
profileManagementController,
userProfileId,
deviceSettings,
automaticallyUpdateTopic.value
if (enableDownloadsSupport.value) {
itemViewModelList.add(
AdministratorControlsDownloadPermissionsViewModel(
fragment,
oppiaLogger,
profileManagementController,
userProfileId,
deviceSettings
)
)
)
}

itemViewModelList.add(AdministratorControlsAppInformationViewModel(activity))
itemViewModelList.add(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,8 @@ class AdministratorControlsDownloadPermissionsViewModel(
private val oppiaLogger: OppiaLogger,
private val profileManagementController: ProfileManagementController,
private val userProfileId: ProfileId,
deviceSettings: DeviceSettings,
private val automaticallyUpdateTopic: Boolean,
deviceSettings: DeviceSettings
) : AdministratorControlsItemViewModel() {

val isVisible = ObservableField(automaticallyUpdateTopic)

val isTopicWifiUpdatePermission =
ObservableField<Boolean>(deviceSettings.allowDownloadAndUpdateOnlyOnWifi)
val isTopicAutoUpdatePermission =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,12 @@ import org.oppia.android.R
import org.oppia.android.app.activity.ActivityScope
import org.oppia.android.app.translation.AppLanguageResourceHandler
import org.oppia.android.app.utility.TextInputEditTextHelper.Companion.onTextChanged
import org.oppia.android.app.viewmodel.ViewModelProvider
import org.oppia.android.databinding.AddProfileActivityBinding
import org.oppia.android.domain.profile.ProfileManagementController
import org.oppia.android.util.data.AsyncResult
import org.oppia.android.util.data.DataProviders.Companion.toLiveData
import org.oppia.android.util.platformparameter.EnableDownloadsSupport
import org.oppia.android.util.platformparameter.PlatformParameterValue
import javax.inject.Inject

const val GALLERY_INTENT_RESULT_CODE = 1
Expand All @@ -40,13 +41,11 @@ const val GALLERY_INTENT_RESULT_CODE = 1
class AddProfileActivityPresenter @Inject constructor(
private val activity: AppCompatActivity,
private val profileManagementController: ProfileManagementController,
private val viewModelProvider: ViewModelProvider<AddProfileViewModel>,
private val resourceHandler: AppLanguageResourceHandler
private val resourceHandler: AppLanguageResourceHandler,
private val profileViewModel: AddProfileViewModel,
@EnableDownloadsSupport private val enableDownloadsSupport: PlatformParameterValue<Boolean>
) {
private lateinit var uploadImageView: ImageView
private val profileViewModel by lazy {
getAddProfileViewModel()
}
private var selectedImage: Uri? = null
private var allowDownloadAccess = false
private var inputtedPin = false
Expand All @@ -55,7 +54,6 @@ class AddProfileActivityPresenter @Inject constructor(
private lateinit var alertDialog: AlertDialog

fun handleOnCreate() {

val binding = DataBindingUtil.setContentView<AddProfileActivityBinding>(
activity,
R.layout.add_profile_activity
Expand All @@ -65,9 +63,11 @@ class AddProfileActivityPresenter @Inject constructor(
lifecycleOwner = activity
viewModel = profileViewModel
}
binding.addProfileActivityAllowDownloadConstraintLayout.setOnClickListener {
allowDownloadAccess = !allowDownloadAccess
binding.addProfileActivityAllowDownloadSwitch.isChecked = allowDownloadAccess
if (!enableDownloadsSupport.value) {
binding.addProfileActivityAllowDownloadConstraintLayout.setOnClickListener {
allowDownloadAccess = !allowDownloadAccess
binding.addProfileActivityAllowDownloadSwitch.isChecked = allowDownloadAccess
}
}
binding.addProfileActivityPinCheckBox.setOnCheckedChangeListener { _, isChecked ->
profileViewModel.createPin.set(isChecked)
Expand Down Expand Up @@ -319,8 +319,4 @@ class AddProfileActivityPresenter @Inject constructor(
alertDialog.dismiss()
}
}

private fun getAddProfileViewModel(): AddProfileViewModel {
return viewModelProvider.getForActivity(activity, AddProfileViewModel::class.java)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,15 @@ package org.oppia.android.app.profile
import androidx.databinding.ObservableField
import org.oppia.android.app.activity.ActivityScope
import org.oppia.android.app.viewmodel.ObservableViewModel
import org.oppia.android.util.platformparameter.EnableDownloadsSupport
import org.oppia.android.util.platformparameter.PlatformParameterValue
import javax.inject.Inject

/** The ViewModel for [AddProfileActivity]. */
@ActivityScope
class AddProfileViewModel @Inject constructor() : ObservableViewModel() {
class AddProfileViewModel @Inject constructor(
@EnableDownloadsSupport private val enableDownloadsSupport: PlatformParameterValue<Boolean>
) : ObservableViewModel() {
val validPin = ObservableField(false)
val pinErrorMsg = ObservableField("")
val confirmPinErrorMsg = ObservableField("")
Expand All @@ -18,6 +22,7 @@ class AddProfileViewModel @Inject constructor() : ObservableViewModel() {
val createPin = ObservableField(false)
val isButtonActive = ObservableField(false)
val showInfoAlertPopup = ObservableField<Boolean>(false)
val showAllowDownloadAccess: Boolean by lazy { enableDownloadsSupport.value }

fun clearAllErrorMessages() {
pinErrorMsg.set("")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@ import org.oppia.android.domain.oppialogger.OppiaLogger
import org.oppia.android.domain.profile.ProfileManagementController
import org.oppia.android.util.data.AsyncResult
import org.oppia.android.util.data.DataProviders.Companion.toLiveData
import org.oppia.android.util.platformparameter.EnableDownloadsSupport
import org.oppia.android.util.platformparameter.PlatformParameterValue
import javax.inject.Inject

/** The ViewModel for [ProfileEditActivity]. */
@FragmentScope
class ProfileEditViewModel @Inject constructor(
private val oppiaLogger: OppiaLogger,
private val profileManagementController: ProfileManagementController
private val profileManagementController: ProfileManagementController,
@EnableDownloadsSupport private val enableDownloadsSupport: PlatformParameterValue<Boolean>
) : ObservableViewModel() {
private lateinit var profileId: ProfileId

Expand All @@ -34,6 +37,13 @@ class ProfileEditViewModel @Inject constructor(
)
}

/** Indicates whether downloads-related settings should be shown for this profile. */
val showEditDownloadAccess: LiveData<Boolean> by lazy {
Transformations.map(profile) { profile ->
enableDownloadsSupport.value && !profile.isAdmin
}
}

/** Whether the user is an admin. */
var isAdmin = false

Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/layout-land/profile_edit_fragment.xml
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@
android:background="@color/component_color_profile_edit_activity_profile_edit_allow_download_container_color"
android:focusable="true"
android:importantForAccessibility="yes"
android:visibility="@{viewModel.profile.isAdmin ? View.GONE : View.VISIBLE}"
android:visibility="@{viewModel.showEditDownloadAccess ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/view4">
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/layout/add_profile_activity.xml
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@
android:clickable="@{viewModel.validPin ? true : false}"
android:focusable="true"
android:importantForAccessibility="yes"
android:visibility="@{viewModel.showAllowDownloadAccess ? View.VISIBLE : View.GONE}"
app:layout_constraintTop_toBottomOf="@+id/add_profile_activity_confirm_pin">

<TextView
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@
android:background="@color/component_color_admin_controls_options_background_color"
android:clickable="true"
android:focusable="true"
android:visibility="@{viewModel.isVisible ? View.VISIBLE: View.GONE}"
android:importantForAccessibility="yes"
android:onClick="@{(view) -> viewModel.onTopicAutoUpdatePermissionChanged()}"
android:paddingStart="@dimen/administrator_controls_download_permissions_view_auto_update_topic_constraint_layout_padding_start"
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/layout/profile_edit_fragment.xml
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@
android:background="@color/component_color_profile_edit_activity_profile_edit_allow_download_container_color"
android:focusable="true"
android:importantForAccessibility="yes"
android:visibility="@{viewModel.profile.isAdmin ? View.GONE : View.VISIBLE}"
android:visibility="@{viewModel.showEditDownloadAccess ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/view4">
Expand Down
2 changes: 0 additions & 2 deletions app/src/main/res/values-ar/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -510,7 +510,6 @@
<string name="faq_question_5">من هو المشرف؟</string>
<string name="faq_question_6">لماذا لا يتم تحميل مشغل الاستكشاف؟</string>
<string name="faq_question_7">لماذا لا يتم تشغيل الصوت الخاص بي؟</string>
<string name="faq_question_8">كيف يمكنني تنزيل موضوع؟</string>
<string name="faq_question_9">لا أجد سؤالي هنا. ماذا الان؟</string>
<string name="faq_answer_1">&lt;p&gt;إذا كانت هذه هي المرة الأولى التي تنشئ فيها ملفًا شخصيًا وليس لديك رقم تعريف شخصي: &lt;/p&gt; &lt;p&gt; 1. من منتقي الملف الشخصي ، اضغط على&lt;strong&gt; قم بإعداد ملفات تعريف متعددة&lt;/strong&gt;&lt;/p&gt;&lt;p&gt; 2. قم بإنشاء رقم تعريف شخصي و&lt;strong&gt;احفظ&lt;/strong&gt;&lt;/p&gt; &lt;p&gt; 3. املأ جميع البيانات للملف الشخصي.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;(اختياري) قم بتحميل صورة.&lt;/li&gt; &lt;li&gt;إدخال اسم.&lt;/li&gt; &lt;li&gt;(اختياري) قم بتعيين رقم تعريف شخصي مكون من 3 أرقام.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt; 4. اضغط&lt;strong&gt;إنشاء&lt;/strong&gt; . تمت إضافة هذا الملف الشخصي إلى منتقي ملف التعريف الخاص بك!&lt;br/&gt; &lt;br/&gt; إذا قمت بإنشاء ملف تعريف من قبل ولديك رقم تعريف شخصي:&lt;/p&gt;&lt;p&gt; 1. من منتقي الملف الشخصي ، اضغط على&lt;strong&gt;إضافة الملف الشخصي&lt;/strong&gt;&lt;/p&gt; &lt;p&gt; 2. أدخل رقم التعريف الشخصي الخاص بك وانقر فوق&lt;strong&gt;إرسال&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;3. املأ جميع الحقول للملف الشخصي.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;(اختياري) قم بتحميل صورة.&lt;/li&gt; &lt;li&gt;إدخال اسم.&lt;/li&gt; &lt;li&gt;(اختياري) قم بتعيين رقم تعريف شخصي مكون من 3 أرقام.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt; 4. اضغط&lt;strong&gt;إنشاء&lt;/strong&gt; . تمت إضافة هذا الملف الشخصي إلى منتقي ملف التعريف الخاص بك!&lt;br/&gt;&lt;br/&gt; ملاحظة: فقط ال&lt;u&gt;مدير&lt;/u&gt; قادر على إدارة الملفات الشخصية.&lt;/p&gt;</string>
<string name="faq_answer_2">&lt;p&gt;بمجرد حذف ملف التعريف:&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;li&gt;لا يمكن استعادة ملف التعريف.&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;سيتم حذف معلومات الملف الشخصي مثل الاسم والصور والتقدم بشكل دائم.&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;لحذف ملف تعريف (باستثناء&lt;u&gt;المسؤول&lt;/u&gt;&lt;/p&gt;&lt;p&gt;1. من الصفحة الرئيسية للمسؤول ، اضغط على زر القائمة أعلى اليسار.&lt;/p&gt;&lt;p&gt;2. اضغط على&lt;strong&gt;ضوابط المسؤول&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;3. اضغط على&lt;strong&gt;تحرير ملفات التعريف&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;4. اضغط على الملف الشخصي الذي ترغب في حذفه.&lt;/p&gt;&lt;p&gt;5. في الجزء السفلي من الشاشة ، انقر فوق&lt;strong&gt;حذف الملف الشخصي&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;6. اضغط&lt;strong&gt;حذف&lt;/strong&gt;لتأكيد الحذف.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;ملاحظة:&lt;u&gt;المسؤول&lt;/u&gt;فقط هو القادر على إدارة الملفات الشخصية.&lt;/p&gt;</string>
Expand All @@ -519,7 +518,6 @@
<string name="faq_answer_5">&lt;p&gt;المشرف هو المستخدم الرئيسي الذي يدير ملفات التعريف والإعدادات لكل ملف تعريف على حسابه. هم على الأرجح والدك أو معلمك أو وصي عليك الذي أنشأ هذا الملف الشخصي لك.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;يمكن للمسؤولين إدارة الملفات الشخصية وتعيين أرقام التعريف الشخصية وتغيير الإعدادات الأخرى ضمن حساباتهم. بناءً على ملف التعريف الخاص بك ، قد تكون أذونات المسؤول مطلوبة لبعض الميزات مثل تنزيل الموضوعات وتغيير رقم التعريف الشخصي وغير ذلك.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;لمعرفة من هو المسؤول لديك ، انتقل إلى منتقي الملف الشخصي. الملف الشخصي الأول المدرج ولديه \"المسؤول\" مكتوب باسمه هو المسؤول.&lt;/p&gt;</string>
<string name="faq_answer_6">&lt;p&gt;إذا لم يتم تحميل مشغل الاستكشاف&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;تحقق لمعرفة ما إذا كان التطبيق محدثًا أم لا:&lt;/p&gt;&lt;p&gt; &lt;ol&gt; &lt;li&gt; انتقل إلى متجر Play وتأكد من تحديث التطبيق إلى أحدث إصدار &lt;/li&gt; &lt;/ol&gt; &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;تحقق من اتصالك بالإنترنت:&lt;/p&gt;&lt;p&gt; &lt;li&gt; إذا كان اتصالك بالإنترنت بطيئًا ، فحاول إعادة الاتصال بشبكة Wi-Fi أو الاتصال بشبكة أخرى. &lt;/li&gt; &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;اطلب من المشرف التحقق من أجهزتهم واتصال الإنترنت:&lt;/p&gt;&lt;p&gt; &lt;li&gt; اطلب من المشرف استكشاف الأخطاء وإصلاحها باستخدام الخطوات المذكورة أعلاه &lt;/li&gt; &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;أخبرنا إذا كنت لا تزال تواجه مشكلات في التحميل:&lt;/p&gt;&lt;p&gt; &lt;li&gt; أبلغ عن مشكلة عن طريق الاتصال بنا على [email protected]. &lt;/li&gt; &lt;/p&gt;</string>
<string name="faq_answer_7">&lt;p&gt;إذا لم يتم تشغيل الصوت الخاص بك&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;تحقق لمعرفة ما إذا كان التطبيق محدثًا أم لا:&lt;/p&gt;&lt;p&gt; &lt;li&gt;انتقل إلى متجر Play وتأكد من تحديث التطبيق إلى أحدث إصدار&lt;/li&gt; &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;تحقق من اتصالك بالإنترنت:&lt;/p&gt;&lt;p&gt; &lt;li&gt;إذا كان اتصالك بالإنترنت بطيئًا ، فحاول إعادة الاتصال بشبكة Wi-Fi أو الاتصال بشبكة أخرى. قد يتسبب الإنترنت البطيء في تحميل الصوت بشكل غير منتظم ، مما يجعل من الصعب تشغيله.&lt;/li&gt; &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;اطلب من المسؤول التحقق من أجهزتهم واتصال الإنترنت:&lt;/p&gt;&lt;p&gt; &lt;li&gt;اطلب من المسؤول استكشاف الأخطاء وإصلاحها باستخدام الخطوات المذكورة أعلاه&lt;/li&gt; &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;أخبرنا إذا كنت لا تزال تواجه مشكلات في التحميل:&lt;/p&gt;&lt;p&gt; &lt;li&gt;أبلغ عن مشكلة عن طريق الاتصال بنا على [email protected].&lt;/li&gt;&lt;/p&gt;</string>
<string name="faq_answer_8">&lt;p&gt;لتنزيل استكشاف:&lt;/p&gt;&lt;p&gt;1. من الصفحة الرئيسية ، انقر فوق موضوع أو استكشاف.&lt;/p&gt;&lt;p&gt;2. من صفحة الموضوع هذه ، انقر على علامة التبويب &lt;strong&gt; معلومات &lt;/ strong&gt;.&lt;/p&gt;&lt;p&gt;3. اضغط على &lt;strong&gt; تنزيل الموضوع &lt;/ strong&gt;.&lt;/p&gt;&lt;p&gt;4. اعتمادًا على إعدادات التطبيق ، قد تحتاج إلى موافقة المسؤول أو اتصال Wifi ثابتًا لإكمال التنزيل. إذا لزم الأمر ، بمجرد استيفاء هذه المتطلبات ، يتم تنزيل الموضوع على الجهاز ويمكن استخدامه في وضع عدم الاتصال بواسطة جميع ملفات التعريف. &lt;p&gt;</string>
<string name="faq_answer_9">&lt;p&gt; إذا لم تتمكن من العثور على سؤالك أو كنت ترغب في الإبلاغ عن خطأ ، فاتصل بنا على [email protected]. &lt;/p&gt;</string>
<string name="profile_edit_fragment_test_activity_label">نشاط اختبار جزء تحرير ملف التعريف</string>
<string name="administrator_controls_fragment_test_activity_label">يتحكم المسؤول في نشاط اختبار التجزئة</string>
Expand Down
Loading