From 709d3d30cd4fd53d226a24857ff184a4e35bf082 Mon Sep 17 00:00:00 2001 From: Joseba S Date: Mon, 29 Feb 2016 21:08:33 +0100 Subject: [PATCH] #421: Configured correctly TabLayout to get the change events --- .../oppia/activity/CourseActivity.java | 356 +++++++++--------- 1 file changed, 179 insertions(+), 177 deletions(-) diff --git a/src/org/digitalcampus/oppia/activity/CourseActivity.java b/src/org/digitalcampus/oppia/activity/CourseActivity.java index fa18f129f..704073dd7 100644 --- a/src/org/digitalcampus/oppia/activity/CourseActivity.java +++ b/src/org/digitalcampus/oppia/activity/CourseActivity.java @@ -63,70 +63,69 @@ import android.view.MenuItem; import android.widget.Toast; -public class CourseActivity extends AppActivity implements ActionBar.TabListener, OnInitListener { +public class CourseActivity extends AppActivity implements OnInitListener, TabLayout.OnTabSelectedListener { - public static final String TAG = CourseActivity.class.getSimpleName(); - public static final String BASELINE_TAG = "BASELINE"; - private Section section; - private Course course; + public static final String TAG = CourseActivity.class.getSimpleName(); + public static final String BASELINE_TAG = "BASELINE"; + private Section section; + private Course course; - private int currentActivityNo = 0; + private int currentActivityNo = 0; private int previousActivityNo = 0; private SharedPreferences prefs; - private DbHelper db; - private ArrayList activities; - private boolean isBaseline = false; - private ActionBar actionBar; + private ArrayList activities; + private boolean isBaseline = false; + private ActionBar actionBar; private long userID; - private static int TTS_CHECK = 0; - private static TextToSpeech myTTS; - private boolean ttsRunning = false; + private static int TTS_CHECK = 0; + private static TextToSpeech myTTS; + private boolean ttsRunning = false; TabLayout tabs; - private ViewPager viewPager; - private ActivityPagerAdapter apAdapter; + private ViewPager viewPager; + private ActivityPagerAdapter apAdapter; - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); - setContentView(R.layout.activity_course); + setContentView(R.layout.activity_course); setSupportActionBar( (Toolbar)findViewById(R.id.toolbar) ); - actionBar = getSupportActionBar(); - prefs = PreferenceManager.getDefaultSharedPreferences(this); - viewPager = (ViewPager) findViewById(R.id.activity_widget_pager); - - Bundle bundle = this.getIntent().getExtras(); - if (bundle != null) { - section = (Section) bundle.getSerializable(Section.TAG); - course = (Course) bundle.getSerializable(Course.TAG); - activities = section.getActivities(); - currentActivityNo = bundle.getInt(SectionListAdapter.TAG_PLACEHOLDER); + actionBar = getSupportActionBar(); + prefs = PreferenceManager.getDefaultSharedPreferences(this); + viewPager = (ViewPager) findViewById(R.id.activity_widget_pager); + + Bundle bundle = this.getIntent().getExtras(); + if (bundle != null) { + section = (Section) bundle.getSerializable(Section.TAG); + course = (Course) bundle.getSerializable(Course.TAG); + activities = section.getActivities(); + currentActivityNo = bundle.getInt(SectionListAdapter.TAG_PLACEHOLDER); previousActivityNo = currentActivityNo; - if (bundle.getSerializable(CourseActivity.BASELINE_TAG) != null) { - this.isBaseline = bundle.getBoolean(CourseActivity.BASELINE_TAG); - } - // set image - BitmapDrawable bm = ImageUtils.LoadBMPsdcard(course.getImageFileFromRoot(), this.getResources(), MobileLearning.APP_LOGO); - //actionBar.setIcon(bm); + if (bundle.getSerializable(CourseActivity.BASELINE_TAG) != null) { + this.isBaseline = bundle.getBoolean(CourseActivity.BASELINE_TAG); + } + // set image + BitmapDrawable bm = ImageUtils.LoadBMPsdcard(course.getImageFileFromRoot(), this.getResources(), MobileLearning.APP_LOGO); + //actionBar.setIcon(bm); actionBar.setHomeAsUpIndicator(bm); actionBar.setDisplayShowHomeEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayShowTitleEnabled(true); - //actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); - } + //actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); + } tabs = (TabLayout) findViewById(R.id.tabs_toolbar); - tabs.setTabMode(TabLayout.MODE_SCROLLABLE); + loadActivities(); - } - - @Override - public void onStart() { - super.onStart(); + } + + @Override + public void onStart() { + super.onStart(); viewPager.setOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabs)); - viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { + viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { public void onPageScrollStateChanged(int arg0) { // do nothing @@ -140,34 +139,33 @@ public void onPageSelected(int numPage) { Log.d(TAG, "Page selected " + numPage + " current act " + currentActivityNo); //actionBar.setSelectedNavigationItem(numPage); } - }); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putInt("currentActivityNo", currentActivityNo); - } - - @Override - public void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - currentActivityNo = savedInstanceState.getInt("currentActivityNo"); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt("currentActivityNo", currentActivityNo); + } + + @Override + public void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + currentActivityNo = savedInstanceState.getInt("currentActivityNo"); previousActivityNo = currentActivityNo; - } - - @Override - public void onPause() { - super.onPause(); - if (myTTS != null) { - myTTS.shutdown(); - myTTS = null; - } + } + + @Override + public void onPause() { + super.onPause(); + if (myTTS != null) { + myTTS.shutdown(); + myTTS = null; + } WidgetFactory currentWidget = (WidgetFactory) apAdapter.getItem(currentActivityNo); currentWidget.pauseTimeTracking(); currentWidget.saveTracker(); - } + } public void onResume(){ super.onResume(); @@ -178,75 +176,75 @@ public void onResume(){ userID = db.getUserId(SessionManager.getUsername(this)); DatabaseManager.getInstance().closeDatabase(); } - - @Override - protected void onDestroy() { - if (myTTS != null) { - myTTS.shutdown(); - myTTS = null; - } - super.onDestroy(); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.activity_course, menu); - return true; - } - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - MenuItem item = menu.findItem(R.id.menu_tts); - if (ttsRunning) { - item.setTitle(R.string.menu_stop_read_aloud); - } else { - item.setTitle(R.string.menu_read_aloud); - } - return super.onPrepareOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle item selection - Bundle tb = new Bundle(); - Intent i; - int itemId = item.getItemId(); - if (itemId == R.id.menu_language) { - createLanguageDialog(); - return true; - } else if (itemId == R.id.menu_help) { - i = new Intent(this, AboutActivity.class); - tb.putSerializable(AboutActivity.TAB_ACTIVE, AboutActivity.TAB_HELP); - i.putExtras(tb); - startActivity(i); - return true; - } else if (itemId == android.R.id.home) { - this.finish(); - return true; - } else if (itemId == R.id.menu_scorecard) { - i = new Intent(this, ScorecardActivity.class); - tb.putSerializable(Course.TAG, course); - i.putExtras(tb); - startActivity(i); - return true; - } else if (itemId == R.id.menu_tts) { - if (myTTS == null && !ttsRunning) { - // check for TTS data - Intent checkTTSIntent = new Intent(); - checkTTSIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); - startActivityForResult(checkTTSIntent, TTS_CHECK); - } else if (myTTS != null && ttsRunning) { - this.stopReading(); - } else { - // TTS not installed so show message - Toast.makeText(this, this.getString(R.string.error_tts_start), Toast.LENGTH_LONG).show(); - } - supportInvalidateOptionsMenu(); - return true; - } else { - return super.onOptionsItemSelected(item); - } - } + + @Override + protected void onDestroy() { + if (myTTS != null) { + myTTS.shutdown(); + myTTS = null; + } + super.onDestroy(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.activity_course, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + MenuItem item = menu.findItem(R.id.menu_tts); + if (ttsRunning) { + item.setTitle(R.string.menu_stop_read_aloud); + } else { + item.setTitle(R.string.menu_read_aloud); + } + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle item selection + Bundle tb = new Bundle(); + Intent i; + int itemId = item.getItemId(); + if (itemId == R.id.menu_language) { + createLanguageDialog(); + return true; + } else if (itemId == R.id.menu_help) { + i = new Intent(this, AboutActivity.class); + tb.putSerializable(AboutActivity.TAB_ACTIVE, AboutActivity.TAB_HELP); + i.putExtras(tb); + startActivity(i); + return true; + } else if (itemId == android.R.id.home) { + this.finish(); + return true; + } else if (itemId == R.id.menu_scorecard) { + i = new Intent(this, ScorecardActivity.class); + tb.putSerializable(Course.TAG, course); + i.putExtras(tb); + startActivity(i); + return true; + } else if (itemId == R.id.menu_tts) { + if (myTTS == null && !ttsRunning) { + // check for TTS data + Intent checkTTSIntent = new Intent(); + checkTTSIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); + startActivityForResult(checkTTSIntent, TTS_CHECK); + } else if (myTTS != null && ttsRunning) { + this.stopReading(); + } else { + // TTS not installed so show message + Toast.makeText(this, this.getString(R.string.error_tts_start), Toast.LENGTH_LONG).show(); + } + supportInvalidateOptionsMenu(); + return true; + } else { + return super.onOptionsItemSelected(item); + } + } private void loadActivities(){ String currentLang = prefs.getString(PrefsActivity.PREF_LANGUAGE, Locale.getDefault().getLanguage()); @@ -293,11 +291,12 @@ private void loadActivities(){ apAdapter = new ActivityPagerAdapter(this, getSupportFragmentManager(), fragments, titles); viewPager.setAdapter(apAdapter); tabs.setupWithViewPager(viewPager); - + tabs.setTabMode(TabLayout.MODE_SCROLLABLE); + tabs.setOnTabSelectedListener(this); for (int i = 0; i < tabs.getTabCount(); i++) { TabLayout.Tab tab = tabs.getTabAt(i); - tab.setCustomView(apAdapter.getTabView(i)); + if (tab!=null) tab.setCustomView(apAdapter.getTabView(i)); } //Tab creation @@ -312,18 +311,17 @@ private void loadActivities(){ viewPager.setCurrentItem(currentActivityNo); } - private void createLanguageDialog() { + private void createLanguageDialog() { UIUtils.createLanguageDialog(this, course.getLangs(), prefs, new Callable() { public Boolean call() throws Exception { CourseActivity.this.loadActivities(); return true; } }); - } - - public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {} + } - public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { + @Override + public void onTabSelected(TabLayout.Tab tab) { int tabSelected = tab.getPosition(); Log.d(TAG, "Tab selected " + tabSelected + " current act " + currentActivityNo); @@ -348,9 +346,14 @@ public void run() { } } - public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { + @Override + public void onTabUnselected(TabLayout.Tab tab) { ((WidgetFactory) apAdapter.getItem(currentActivityNo)).saveTracker(); - } + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { } + private boolean canNavigateTo(int newTab){ //If the course does not have a sequencing mode, we can navigate freely @@ -365,15 +368,15 @@ private boolean canNavigateTo(int newTab){ return actCompleted; } - public void onInit(int status) { - // check for successful instantiation - if (status == TextToSpeech.SUCCESS) { - ttsRunning = true; - ((WidgetFactory) apAdapter.getItem(currentActivityNo)).setReadAloud(true); - supportInvalidateOptionsMenu(); - HashMap params = new HashMap(); - params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,TAG); - myTTS.speak(((WidgetFactory) apAdapter.getItem(currentActivityNo)).getContentToRead(), TextToSpeech.QUEUE_FLUSH, params); + public void onInit(int status) { + // check for successful instantiation + if (status == TextToSpeech.SUCCESS) { + ttsRunning = true; + ((WidgetFactory) apAdapter.getItem(currentActivityNo)).setReadAloud(true); + supportInvalidateOptionsMenu(); + HashMap params = new HashMap(); + params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,TAG); + myTTS.speak(((WidgetFactory) apAdapter.getItem(currentActivityNo)).getContentToRead(), TextToSpeech.QUEUE_FLUSH, params); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { myTTS.setOnUtteranceProgressListener(new UtteranceProgressListener() { @Override @@ -386,28 +389,27 @@ public void onDone(String utteranceId){ }); } } else { - // TTS not installed so show message - Toast.makeText(this, this.getString(R.string.error_tts_start), Toast.LENGTH_LONG).show(); - } - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == TTS_CHECK) { - if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { - // the user has the necessary data - create the TTS - myTTS = new TextToSpeech(this, this); - } - } - super.onActivityResult(requestCode, resultCode, data); - } - - private void stopReading() { - if (myTTS != null) { - myTTS.stop(); - myTTS = null; - } - this.ttsRunning = false; - } + // TTS not installed so show message + Toast.makeText(this, this.getString(R.string.error_tts_start), Toast.LENGTH_LONG).show(); + } + } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == TTS_CHECK) { + if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { + // the user has the necessary data - create the TTS + myTTS = new TextToSpeech(this, this); + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + private void stopReading() { + if (myTTS != null) { + myTTS.stop(); + myTTS = null; + } + this.ttsRunning = false; + } }