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 part of #138: Topic train fragment Low-fi UI (Part 3) #203

Merged
merged 19 commits into from
Oct 8, 2019
Prev Previous commit
Next Next commit
Introduce QuestionPlayer Activity/Fragment
  • Loading branch information
Rajat Talesra committed Oct 4, 2019
commit d21f52b5a454dcdf7532af1431b97cf8c1fa712e
17 changes: 9 additions & 8 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="https://schemas.android.com/apk/res/android"
package="org.oppia.app">
<uses-permission android:name="android.permission.INTERNET" />
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="org.oppia.app">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:name=".application.OppiaApplication"
android:allowBackup="true"
Expand All @@ -12,8 +11,9 @@
android:supportsRtl="true"
android:theme="@style/OppiaTheme">
<activity android:name=".player.exploration.ExplorationActivity"/>
<activity android:name=".topic.questionplayer.QuestionPlayerActivity"/>
<activity android:name=".topic.TopicActivity"/>
<activity android:name="org.oppia.app.home.HomeActivity">
<activity android:name=".home.HomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
Expand All @@ -23,8 +23,9 @@
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity android:name=".splash.SplashActivity"
android:theme="@style/SplashScreenTheme">
<activity
android:name=".splash.SplashActivity"
android:theme="@style/SplashScreenTheme">
</activity>
</application>
</manifest>
</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import org.oppia.app.fragment.FragmentComponent
import org.oppia.app.home.HomeActivity
import org.oppia.app.player.exploration.ExplorationActivity
import org.oppia.app.topic.TopicActivity
import org.oppia.app.topic.questionplayer.QuestionPlayerActivity
import javax.inject.Provider

/** Root subcomponent for all activities. */
Expand All @@ -23,5 +24,6 @@ interface ActivityComponent {

fun inject(explorationActivity: ExplorationActivity)
fun inject(homeActivity: HomeActivity)
fun inject(questionPlayerActivity: QuestionPlayerActivity)
fun inject(topicActivity: TopicActivity)
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import org.oppia.app.topic.TopicFragment
import org.oppia.app.topic.conceptcard.ConceptCardFragment
import org.oppia.app.topic.overview.TopicOverviewFragment
import org.oppia.app.topic.play.TopicPlayFragment
import org.oppia.app.topic.questionplayer.QuestionPlayerFragment
import org.oppia.app.topic.review.TopicReviewFragment
import org.oppia.app.topic.train.TopicTrainFragment

Expand All @@ -28,6 +29,7 @@ interface FragmentComponent {
fun inject(conceptCardFragment: ConceptCardFragment)
fun inject(explorationFragment: ExplorationFragment)
fun inject(homeFragment: HomeFragment)
fun inject(questionPlayerFragment: QuestionPlayerFragment)
fun inject(stateFragment: StateFragment)
fun inject(topicFragment: TopicFragment)
fun inject(topicOverviewFragment: TopicOverviewFragment)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.oppia.app.topic.questionplayer

import android.os.Bundle
import org.oppia.app.activity.InjectableAppCompatActivity
import javax.inject.Inject

/** Activity for QuestionPlayer in train mode. */
class QuestionPlayerActivity : InjectableAppCompatActivity() {
@Inject
lateinit var questionPlayerActivityPresenter: QuestionPlayerActivityPresenter

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityComponent.inject(this)
questionPlayerActivityPresenter.handleOnCreate()

// TODO(#159): Use this skillList from TopicTrainFragment to fetch questions and start train mode.
val skillList: ArrayList<String> = getSkillList()
}

private fun getSkillList(): ArrayList<String> {
val topicTrainIntent = intent
return topicTrainIntent.getStringArrayListExtra("SKILL_LIST")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.oppia.app.topic.questionplayer

import androidx.appcompat.app.AppCompatActivity
import org.oppia.app.R
import org.oppia.app.activity.ActivityScope
import javax.inject.Inject

/** The presenter for [QuestionPlayerActivity]. */
@ActivityScope
class QuestionPlayerActivityPresenter @Inject constructor(private val activity: AppCompatActivity) {
fun handleOnCreate() {
activity.setContentView(R.layout.question_player_activity)
if (getQuestionPlayerFragment() == null) {
activity.supportFragmentManager.beginTransaction().add(
R.id.question_player_fragment_placeholder,
QuestionPlayerFragment()
).commitNow()
}
}

private fun getQuestionPlayerFragment(): QuestionPlayerFragment? {
return activity.supportFragmentManager.findFragmentById(R.id.question_player_fragment_placeholder) as QuestionPlayerFragment?
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.oppia.app.topic.questionplayer

import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import org.oppia.app.fragment.InjectableFragment
import javax.inject.Inject

/** Fragment that contains all questions in Question Player. */
class QuestionPlayerFragment: InjectableFragment(){
@Inject
lateinit var questionPlayerFragmentPresenter: QuestionPlayerFragmentPresenter

override fun onAttach(context: Context?) {
super.onAttach(context)
fragmentComponent.inject(this)
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return questionPlayerFragmentPresenter.handleCreateView(inflater, container)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.oppia.app.topic.questionplayer

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import org.oppia.app.databinding.QuestionPlayerFragmentBinding
import org.oppia.app.fragment.FragmentScope
import javax.inject.Inject

/** The controller for [QuestionPlayerFragment]. */
@FragmentScope
class QuestionPlayerFragmentPresenter @Inject constructor(
private val fragment: Fragment
) {
fun handleCreateView(inflater: LayoutInflater, container: ViewGroup?): View? {
val binding = QuestionPlayerFragmentBinding.inflate(inflater, container, /* attachToRoot= */ false)
binding.let {
it.lifecycleOwner = fragment
}
return binding.root
}
}
9 changes: 0 additions & 9 deletions app/src/main/java/org/oppia/app/topic/train/SkillInterface.kt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@ import kotlinx.android.synthetic.main.topic_train_skill_view.view.*
import org.oppia.app.R
import org.oppia.app.databinding.TopicTrainSkillViewBinding

/** Adapter to bind skills to [RecyclerView] inside [TopicTrainFragment]. **/
// TODO(#172): Make use of generic data-binding-enabled RecyclerView adapter.
rt4914 marked this conversation as resolved.
Show resolved Hide resolved
/** Adapter to bind skills to [RecyclerView] inside [TopicTrainFragment]. */
class SkillSelectionAdapter(
private val skillList: List<String>,
private val skillInterface: SkillInterface
private val skillSelector: SkillSelector
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
Expand All @@ -23,7 +24,7 @@ class SkillSelectionAdapter(
inflater,
R.layout.topic_train_skill_view,
parent,
false
/* attachToParent= */false
)
return SkillViewHolder(binding)
}
Expand All @@ -42,9 +43,9 @@ class SkillSelectionAdapter(
binding.root.skill_check_box.setOnCheckedChangeListener { buttonView, isChecked ->
val skill = skillList[position]
if (isChecked) {
skillInterface.skillSelected(skill)
skillSelector.skillSelected(skill)
} else {
skillInterface.skillUnselected(skill)
skillSelector.skillUnselected(skill)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.oppia.app.topic.train

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
Expand All @@ -22,8 +23,10 @@ class TopicTrainFragment : InjectableFragment() {
return topicTrainFragmentPresenter.handleCreateView(inflater, container)
}

fun submitButtonClicked(){
// List of selected skills when submit button is clicked.
fun submitButtonClicked() {
val skillList = topicTrainFragmentPresenter.getSelectedSkillList()
val questionPlayerIntent = Intent()
questionPlayerIntent.putStringArrayListExtra("SKILL_LIST", skillList)
startActivity(questionPlayerIntent)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import javax.inject.Inject
class TopicTrainFragmentPresenter @Inject constructor(
private val fragment: Fragment,
private val viewModelProvider: ViewModelProvider<TopicTrainViewModel>
) : SkillInterface {
) : SkillSelector {
private val selectedSkillList = ArrayList<String>()

fun handleCreateView(inflater: LayoutInflater, container: ViewGroup?): View? {
Expand Down
8 changes: 8 additions & 0 deletions app/src/main/res/layout/question_player_activity.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:id="@+id/question_player_fragment_placeholder"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".topic.questionplayer.QuestionPlayerActivity" />
18 changes: 18 additions & 0 deletions app/src/main/res/layout/question_player_fragment.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/dummy_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is dummy TextView for testing"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
You are viewing a condensed version of this merge commit. You can view the full changes here.