Skip to content

Commit

Permalink
MA-2422: Implemented nav buttons and swipe in landscape
Browse files Browse the repository at this point in the history
  • Loading branch information
mdinino committed Aug 4, 2016
1 parent 34729ed commit 795556b
Show file tree
Hide file tree
Showing 9 changed files with 139 additions and 197 deletions.
4 changes: 0 additions & 4 deletions VideoLocker/res/values/strings.xml
Expand Up @@ -335,12 +335,8 @@
<string name="discussion_question">Question</string>

<!-- Assessment -->
<!-- Label showing next sub-section on assessment navigation bar-->
<string name="assessment_next_unit">Next Unit</string>
<!-- Label showing next unit in a sub-section on assessment navigation bar-->
<string name="assessment_next">Next</string>
<!-- Label showing previous sub-section on assessment navigation bar-->
<string name="assessment_previous_unit">Previous Unit</string>
<!-- Label showing previous unit in a sub-section on assessment navigation bar-->
<string name="assessment_previous">Previous</string>
<!-- Label for empty video in video only mode-->
Expand Down
@@ -1,11 +1,13 @@
package org.edx.mobile.player;

import android.view.View;

import java.io.Serializable;

public interface IPlayerEventCallback extends Serializable {

public void onError();
public void onPlaybackStarted();
public void onPlaybackComplete();
public void saveCurrentPlaybackPosition(int currentPosition);
void onError();
void onPlaybackStarted();
void onPlaybackComplete();
void saveCurrentPlaybackPosition(int currentPosition);
}
Expand Up @@ -577,10 +577,19 @@ private void setupController() {
}

public void setNextPreviousListeners(View.OnClickListener next, View.OnClickListener prev) {
if (player != null && isScreenLandscape()) {
this.prevListner = prev;
this.nextListner = next;
player.setNextPreviousListeners(next, prev);
this.prevListner = prev;
this.nextListner = next;
updateNextPreviousListeners();
}

private void updateNextPreviousListeners() {
if (player != null) {
if (isScreenLandscape()) {
player.setNextPreviousListeners(nextListner, prevListner);
}
else {
player.setNextPreviousListeners(null, null);
}
}
}

Expand Down Expand Up @@ -1787,6 +1796,7 @@ private void updateController(String source) {
// controller should also refresh, so hide and show it
player.hideController();
player.showController();
updateNextPreviousListeners();
}
}

Expand Down
Expand Up @@ -14,6 +14,8 @@
public abstract class CourseUnitFragment extends BaseFragment implements PageViewStateCallback, RunnableCourseComponent {
public interface HasComponent {
CourseComponent getComponent();
void navigateNextComponent();
void navigatePreviousComponent();
}

protected CourseComponent unit;
Expand Down
Expand Up @@ -8,6 +8,7 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
Expand Down Expand Up @@ -106,31 +107,45 @@ public void onPageScrollStateChanged(int state) {
mPreviousBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int index = pager.getCurrentItem();
if (index > 0) {
PageViewStateCallback curView = (PageViewStateCallback) pagerAdapter.instantiateItem(pager, index);
if (curView != null)
curView.onPageDisappear();
pager.setCurrentItem(index - 1);
}
navigatePreviousComponent();
}
});
mNextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int index = pager.getCurrentItem();
if (index < pagerAdapter.getCount() - 1) {
PageViewStateCallback curView = (PageViewStateCallback) pagerAdapter.instantiateItem(pager, index);
if (curView != null)
curView.onPageDisappear();
pager.setCurrentItem(index + 1);
}
navigateNextComponent();
}
});
}

@Override
protected void onResume() {
super.onResume();
updateUIForOrientation();
}

@Override
public void navigatePreviousComponent() {
int index = pager.getCurrentItem();
if (index > 0) {
PageViewStateCallback curView = (PageViewStateCallback) pagerAdapter.instantiateItem(pager, index);
if (curView != null)
curView.onPageDisappear();
pager.setCurrentItem(index - 1);
}
}

@Override
public void navigateNextComponent() {
int index = pager.getCurrentItem();
if (index < pagerAdapter.getCount() - 1) {
PageViewStateCallback curView = (PageViewStateCallback) pagerAdapter.instantiateItem(pager, index);
if (curView != null)
curView.onPageDisappear();
pager.setCurrentItem(index + 1);
}
}

@Override
protected void onLoadData() {
selectedUnit = courseManager.getComponentById(courseData.getCourse().getId(), courseComponentId);
Expand All @@ -154,6 +169,8 @@ private void setCurrentUnit(CourseComponent component){
courseComponentId = selectedUnit.getId();
environment.getDatabase().updateAccess(null, selectedUnit.getId(), true);

updateUIForOrientation();

String prefName = PrefManager.getPrefNameForLastAccessedBy(
loginPrefs.getUsername(), selectedUnit.getCourseId());
final PrefManager prefManager = new PrefManager(MainApplication.instance(), prefName);
Expand All @@ -178,43 +195,34 @@ private void tryToUpdateForEndOfSequential(){

setTitle(selectedUnit.getDisplayName());

// fix: https://openedx.atlassian.net/browse/MA-995
// code below decides to show Next/Previous Unit name or only Next/Previous
// based on units in a subsection
String currentSubsectionId = selectedUnit.getParent().getId();
if (curIndex + 1 <= pagerAdapter.getCount() - 1) {
String nextUnitSubsectionId = unitList.get(curIndex + 1).getParent().getId();
if (currentSubsectionId.equalsIgnoreCase(nextUnitSubsectionId)) {
mNextUnitLbl.setVisibility(View.GONE);
mNextBtn.setText(R.string.assessment_next);
}
else {
mNextUnitLbl.setText(unitList.get(curIndex + 1).getParent().getDisplayName());
mNextUnitLbl.setVisibility(View.VISIBLE);
mNextBtn.setText(R.string.assessment_next_unit);
}
}
else {
// we have reached the end and next button is disabled
mNextBtn.setText(R.string.assessment_next);
mNextUnitLbl.setVisibility(View.GONE);
}

if (curIndex - 1 >= 0) {
String prevUnitSubsectionId = unitList.get(curIndex - 1).getParent().getId();
if (currentSubsectionId.equalsIgnoreCase(prevUnitSubsectionId)) {
mPreviousUnitLbl.setVisibility(View.GONE);
mPreviousBtn.setText(R.string.assessment_previous);
}
else {
mPreviousUnitLbl.setText(unitList.get(curIndex - 1).getParent().getDisplayName());
mPreviousUnitLbl.setVisibility(View.VISIBLE);
mPreviousBtn.setText(R.string.assessment_previous_unit);
}
}
else {
// we have reached the start and previous button is disabled
mPreviousBtn.setText(R.string.assessment_previous);
mPreviousUnitLbl.setVisibility(View.GONE);
}
}
Expand All @@ -234,7 +242,7 @@ private void updateDataModel(){
PrefManager.UserPrefManager userPrefManager = new PrefManager.UserPrefManager(MainApplication.instance());
EnumSet<BlockType> types = userPrefManager.isUserPrefVideoModel() ?
EnumSet.of(BlockType.VIDEO) : EnumSet.allOf(BlockType.class);
((CourseComponent) selectedUnit.getRoot()).fetchAllLeafComponents(leaves, types);
selectedUnit.getRoot().fetchAllLeafComponents(leaves, types);
unitList.addAll( leaves );
pagerAdapter.notifyDataSetChanged();

Expand Down Expand Up @@ -263,14 +271,15 @@ public void onConfigurationChanged(Configuration newConfig) {
}

private void updateUIForOrientation(){
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE && CourseUnitPagerAdapter.isCourseUnitVideo(selectedUnit)) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setActionBarVisible(false);
findViewById(R.id.course_unit_nav_bar).setVisibility(View.GONE);
pager.setEnabled(false);

} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setActionBarVisible(true);
findViewById(R.id.course_unit_nav_bar).setVisibility(View.VISIBLE);
pager.setEnabled(true);
}
}

Expand Down

0 comments on commit 795556b

Please sign in to comment.