Introduces BaseMediaActivity (#374)
* BaseMediaActivity enforces a common layout which allows us to more easily add new common UI elements * All activities that allow browsing media should extend BaseMediaActivity Currently CastActivity is the only exception.
This commit is contained in:
parent
db7d689c3a
commit
6afaa60d74
|
@ -0,0 +1,189 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2017 Martijn Brekhof. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.xbmc.kore.ui;
|
||||||
|
|
||||||
|
import android.annotation.TargetApi;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v4.app.FragmentTransaction;
|
||||||
|
import android.support.v4.widget.DrawerLayout;
|
||||||
|
import android.support.v7.app.ActionBar;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.transition.TransitionInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.Window;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
|
||||||
|
import org.xbmc.kore.R;
|
||||||
|
import org.xbmc.kore.Settings;
|
||||||
|
import org.xbmc.kore.ui.generic.NavigationDrawerFragment;
|
||||||
|
import org.xbmc.kore.ui.sections.remote.RemoteActivity;
|
||||||
|
import org.xbmc.kore.utils.LogUtils;
|
||||||
|
import org.xbmc.kore.utils.SharedElementTransition;
|
||||||
|
import org.xbmc.kore.utils.UIUtils;
|
||||||
|
import org.xbmc.kore.utils.Utils;
|
||||||
|
|
||||||
|
public abstract class BaseMediaActivity extends AppCompatActivity {
|
||||||
|
private static final String TAG = LogUtils.makeLogTag(BaseMediaActivity.class);
|
||||||
|
|
||||||
|
private static final String NAVICON_ISARROW = "navstate";
|
||||||
|
private static final String ACTIONBAR_TITLE = "actionbartitle";
|
||||||
|
|
||||||
|
private NavigationDrawerFragment navigationDrawerFragment;
|
||||||
|
private SharedElementTransition sharedElementTransition = new SharedElementTransition();
|
||||||
|
private boolean drawerIndicatorIsArrow;
|
||||||
|
|
||||||
|
protected abstract String getActionBarTitle();
|
||||||
|
protected abstract Fragment createFragment();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@TargetApi(21)
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
// Request transitions on lollipop
|
||||||
|
if (Utils.isLollipopOrLater()) {
|
||||||
|
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
|
||||||
|
}
|
||||||
|
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
setTheme(UIUtils.getThemeResourceId(
|
||||||
|
prefs.getString(Settings.KEY_PREF_THEME, Settings.DEFAULT_PREF_THEME)));
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
setContentView(R.layout.activity_generic_media);
|
||||||
|
|
||||||
|
// Set up the drawer.
|
||||||
|
navigationDrawerFragment = (NavigationDrawerFragment)getSupportFragmentManager()
|
||||||
|
.findFragmentById(R.id.navigation_drawer);
|
||||||
|
navigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));
|
||||||
|
|
||||||
|
Toolbar toolbar = (Toolbar)findViewById(R.id.default_toolbar);
|
||||||
|
setSupportActionBar(toolbar);
|
||||||
|
|
||||||
|
ActionBar actionBar = getSupportActionBar();
|
||||||
|
if (actionBar != null) {
|
||||||
|
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
updateActionBar(savedInstanceState.getString(ACTIONBAR_TITLE),
|
||||||
|
savedInstanceState.getBoolean(NAVICON_ISARROW));
|
||||||
|
} else {
|
||||||
|
updateActionBar(getActionBarTitle(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String fragmentTitle = getActionBarTitle();
|
||||||
|
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
|
||||||
|
if (fragment == null) {
|
||||||
|
fragment = createFragment();
|
||||||
|
|
||||||
|
if (Utils.isLollipopOrLater()) {
|
||||||
|
fragment.setExitTransition(null);
|
||||||
|
fragment.setReenterTransition(TransitionInflater
|
||||||
|
.from(this)
|
||||||
|
.inflateTransition(android.R.transition.fade));
|
||||||
|
}
|
||||||
|
|
||||||
|
getSupportFragmentManager()
|
||||||
|
.beginTransaction()
|
||||||
|
.add(R.id.fragment_container, fragment, fragmentTitle)
|
||||||
|
.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Utils.isLollipopOrLater()) {
|
||||||
|
sharedElementTransition.setupExitTransition(this, fragment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
outState.putBoolean(NAVICON_ISARROW, drawerIndicatorIsArrow);
|
||||||
|
|
||||||
|
ActionBar actionBar = getSupportActionBar();
|
||||||
|
if (actionBar != null) {
|
||||||
|
CharSequence title = actionBar.getTitle();
|
||||||
|
if (title != null) {
|
||||||
|
outState.putString(ACTIONBAR_TITLE, title.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getDrawerIndicatorIsArrow() {
|
||||||
|
return drawerIndicatorIsArrow;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the title and drawer indicator of the toolbar
|
||||||
|
* @param title
|
||||||
|
* @param showArrowIndicator true if the toolbar should show the back arrow indicator,
|
||||||
|
* false if it should show the drawer icon
|
||||||
|
*/
|
||||||
|
protected void updateActionBar(String title, boolean showArrowIndicator) {
|
||||||
|
if (showArrowIndicator != drawerIndicatorIsArrow) {
|
||||||
|
navigationDrawerFragment.animateDrawerToggle(showArrowIndicator);
|
||||||
|
drawerIndicatorIsArrow = showArrowIndicator;
|
||||||
|
}
|
||||||
|
|
||||||
|
ActionBar actionBar = getSupportActionBar();
|
||||||
|
if (actionBar != null)
|
||||||
|
actionBar.setTitle(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
getMenuInflater().inflate(R.menu.media_info, menu);
|
||||||
|
return super.onCreateOptionsMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case R.id.action_show_remote:
|
||||||
|
Intent launchIntent = new Intent(this, RemoteActivity.class)
|
||||||
|
.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||||||
|
startActivity(launchIntent);
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TargetApi(21)
|
||||||
|
protected void showFragment(AbstractFragment fragment, ImageView sharedImageView, AbstractFragment.DataHolder dataHolder) {
|
||||||
|
FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction();
|
||||||
|
|
||||||
|
// Set up transitions
|
||||||
|
if (Utils.isLollipopOrLater()) {
|
||||||
|
dataHolder.setPosterTransitionName(sharedImageView.getTransitionName());
|
||||||
|
sharedElementTransition.setupEnterTransition(this, fragTrans, fragment, sharedImageView);
|
||||||
|
} else {
|
||||||
|
fragTrans.setCustomAnimations(R.anim.fragment_details_enter, 0,
|
||||||
|
R.anim.fragment_list_popenter, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
fragTrans.replace(R.id.fragment_container, fragment, getActionBarTitle())
|
||||||
|
.addToBackStack(null)
|
||||||
|
.commit();
|
||||||
|
|
||||||
|
dataHolder.getBundle().putBoolean(NAVICON_ISARROW, true);
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,77 +19,47 @@ import android.annotation.TargetApi;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
import android.text.TextUtils;
|
||||||
import android.support.v4.widget.DrawerLayout;
|
|
||||||
import android.support.v7.app.ActionBar;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.Window;
|
|
||||||
|
|
||||||
import org.xbmc.kore.R;
|
import org.xbmc.kore.R;
|
||||||
import org.xbmc.kore.ui.AbstractFragment;
|
import org.xbmc.kore.ui.AbstractFragment;
|
||||||
import org.xbmc.kore.ui.BaseActivity;
|
import org.xbmc.kore.ui.BaseMediaActivity;
|
||||||
import org.xbmc.kore.ui.generic.NavigationDrawerFragment;
|
|
||||||
import org.xbmc.kore.ui.sections.remote.RemoteActivity;
|
import org.xbmc.kore.ui.sections.remote.RemoteActivity;
|
||||||
import org.xbmc.kore.utils.LogUtils;
|
import org.xbmc.kore.utils.LogUtils;
|
||||||
import org.xbmc.kore.utils.SharedElementTransition;
|
|
||||||
import org.xbmc.kore.utils.Utils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controls the presentation of Addons information (list, details)
|
* Controls the presentation of Addons information (list, details)
|
||||||
* All the information is presented by specific fragments
|
* All the information is presented by specific fragments
|
||||||
*/
|
*/
|
||||||
public class AddonsActivity extends BaseActivity
|
public class AddonsActivity extends BaseMediaActivity
|
||||||
implements AddonListFragment.OnAddonSelectedListener {
|
implements AddonListFragment.OnAddonSelectedListener {
|
||||||
private static final String TAG = LogUtils.makeLogTag(AddonsActivity.class);
|
private static final String TAG = LogUtils.makeLogTag(AddonsActivity.class);
|
||||||
|
|
||||||
public static final String ADDONID = "addon_id";
|
public static final String ADDONID = "addon_id";
|
||||||
public static final String ADDONTITLE = "addon_title";
|
public static final String ADDONTITLE = "addon_title";
|
||||||
public static final String LISTFRAGMENT_TAG = "addonlist";
|
|
||||||
|
|
||||||
private String selectedAddonId;
|
private String selectedAddonId;
|
||||||
private String selectedAddonTitle;
|
private String selectedAddonTitle;
|
||||||
|
|
||||||
private NavigationDrawerFragment navigationDrawerFragment;
|
@Override
|
||||||
|
protected Fragment createFragment() {
|
||||||
|
return new AddonListFragment();
|
||||||
|
}
|
||||||
|
|
||||||
private SharedElementTransition sharedElementTransition = new SharedElementTransition();
|
@Override
|
||||||
|
protected String getActionBarTitle() {
|
||||||
|
return TextUtils.isEmpty(selectedAddonTitle) ? getResources().getString(R.string.addons)
|
||||||
|
: selectedAddonTitle;
|
||||||
|
}
|
||||||
|
|
||||||
@TargetApi(21)
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
// Request transitions on lollipop
|
if (savedInstanceState != null) {
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
|
|
||||||
}
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setContentView(R.layout.activity_generic_media);
|
|
||||||
|
|
||||||
// Set up the drawer.
|
|
||||||
navigationDrawerFragment = (NavigationDrawerFragment)getSupportFragmentManager()
|
|
||||||
.findFragmentById(R.id.navigation_drawer);
|
|
||||||
navigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));
|
|
||||||
|
|
||||||
Fragment fragment;
|
|
||||||
if (savedInstanceState == null) {
|
|
||||||
fragment = new AddonListContainerFragment();
|
|
||||||
|
|
||||||
getSupportFragmentManager()
|
|
||||||
.beginTransaction()
|
|
||||||
.add(R.id.fragment_container, fragment, LISTFRAGMENT_TAG)
|
|
||||||
.commit();
|
|
||||||
} else {
|
|
||||||
fragment = getSupportFragmentManager().findFragmentByTag(LISTFRAGMENT_TAG);
|
|
||||||
|
|
||||||
selectedAddonId = savedInstanceState.getString(ADDONID, null);
|
selectedAddonId = savedInstanceState.getString(ADDONID, null);
|
||||||
selectedAddonTitle = savedInstanceState.getString(ADDONTITLE, null);
|
selectedAddonTitle = savedInstanceState.getString(ADDONTITLE, null);
|
||||||
}
|
}
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
sharedElementTransition.setupExitTransition(this, fragment);
|
|
||||||
}
|
|
||||||
|
|
||||||
setupActionBar(selectedAddonTitle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -99,15 +69,6 @@ public class AddonsActivity extends BaseActivity
|
||||||
outState.putString(ADDONTITLE, selectedAddonTitle);
|
outState.putString(ADDONTITLE, selectedAddonTitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
// if (!navigationDrawerFragment.isDrawerOpen()) {
|
|
||||||
// getMenuInflater().inflate(R.menu.media_info, menu);
|
|
||||||
// }
|
|
||||||
getMenuInflater().inflate(R.menu.media_info, menu);
|
|
||||||
return super.onCreateOptionsMenu(menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
|
@ -124,7 +85,7 @@ public class AddonsActivity extends BaseActivity
|
||||||
if (selectedAddonId != null) {
|
if (selectedAddonId != null) {
|
||||||
selectedAddonId = null;
|
selectedAddonId = null;
|
||||||
selectedAddonTitle = null;
|
selectedAddonTitle = null;
|
||||||
setupActionBar(null);
|
updateActionBar(getActionBarTitle(), false);
|
||||||
getSupportFragmentManager().popBackStack();
|
getSupportFragmentManager().popBackStack();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -142,34 +103,11 @@ public class AddonsActivity extends BaseActivity
|
||||||
if (selectedAddonId != null) {
|
if (selectedAddonId != null) {
|
||||||
selectedAddonId = null;
|
selectedAddonId = null;
|
||||||
selectedAddonTitle = null;
|
selectedAddonTitle = null;
|
||||||
setupActionBar(null);
|
updateActionBar(getActionBarTitle(), false);
|
||||||
}
|
}
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean drawerIndicatorIsArrow = false;
|
|
||||||
private void setupActionBar(String addonTitle) {
|
|
||||||
Toolbar toolbar = (Toolbar)findViewById(R.id.default_toolbar);
|
|
||||||
setSupportActionBar(toolbar);
|
|
||||||
|
|
||||||
ActionBar actionBar = getSupportActionBar();
|
|
||||||
if (actionBar == null) return;
|
|
||||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
|
||||||
if (addonTitle != null) {
|
|
||||||
if (!drawerIndicatorIsArrow) {
|
|
||||||
navigationDrawerFragment.animateDrawerToggle(true);
|
|
||||||
drawerIndicatorIsArrow = true;
|
|
||||||
}
|
|
||||||
actionBar.setTitle(addonTitle);
|
|
||||||
} else {
|
|
||||||
if (drawerIndicatorIsArrow) {
|
|
||||||
navigationDrawerFragment.animateDrawerToggle(false);
|
|
||||||
drawerIndicatorIsArrow = false;
|
|
||||||
}
|
|
||||||
actionBar.setTitle(R.string.addons);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback from list fragment when a addon is selected.
|
* Callback from list fragment when a addon is selected.
|
||||||
* Switch fragment in portrait
|
* Switch fragment in portrait
|
||||||
|
@ -191,21 +129,8 @@ public class AddonsActivity extends BaseActivity
|
||||||
vh.dataHolder.setSquarePoster(true);
|
vh.dataHolder.setSquarePoster(true);
|
||||||
vh.dataHolder.setPosterTransitionName(vh.artView.getTransitionName());
|
vh.dataHolder.setPosterTransitionName(vh.artView.getTransitionName());
|
||||||
|
|
||||||
FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction();
|
showFragment(addonDetailsFragment, vh.artView, vh.dataHolder);
|
||||||
|
|
||||||
// Set up transitions
|
updateActionBar(getActionBarTitle(), true);
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
sharedElementTransition.setupEnterTransition(this, fragTrans, addonDetailsFragment,
|
|
||||||
vh.artView);
|
|
||||||
} else {
|
|
||||||
fragTrans.setCustomAnimations(R.anim.fragment_details_enter, 0,
|
|
||||||
R.anim.fragment_list_popenter, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
fragTrans.replace(R.id.fragment_container, addonDetailsFragment)
|
|
||||||
.addToBackStack(null)
|
|
||||||
.commit();
|
|
||||||
|
|
||||||
setupActionBar(selectedAddonTitle);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,30 +16,20 @@
|
||||||
package org.xbmc.kore.ui.sections.audio;
|
package org.xbmc.kore.ui.sections.audio;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
|
||||||
import android.support.v4.widget.DrawerLayout;
|
|
||||||
import android.support.v7.app.ActionBar;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
|
||||||
import org.xbmc.kore.R;
|
import org.xbmc.kore.R;
|
||||||
import org.xbmc.kore.ui.AbstractInfoFragment;
|
import org.xbmc.kore.ui.AbstractInfoFragment;
|
||||||
import org.xbmc.kore.ui.BaseActivity;
|
import org.xbmc.kore.ui.BaseMediaActivity;
|
||||||
import org.xbmc.kore.ui.generic.NavigationDrawerFragment;
|
|
||||||
import org.xbmc.kore.ui.sections.remote.RemoteActivity;
|
|
||||||
import org.xbmc.kore.utils.LogUtils;
|
import org.xbmc.kore.utils.LogUtils;
|
||||||
import org.xbmc.kore.utils.SharedElementTransition;
|
|
||||||
import org.xbmc.kore.utils.Utils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controls the presentation of Music information (list, details)
|
* Controls the presentation of Music information (list, details)
|
||||||
* All the information is presented by specific fragments
|
* All the information is presented by specific fragments
|
||||||
*/
|
*/
|
||||||
public class MusicActivity extends BaseActivity
|
public class MusicActivity extends BaseMediaActivity
|
||||||
implements ArtistListFragment.OnArtistSelectedListener,
|
implements ArtistListFragment.OnArtistSelectedListener,
|
||||||
AlbumListFragment.OnAlbumSelectedListener,
|
AlbumListFragment.OnAlbumSelectedListener,
|
||||||
AudioGenresListFragment.OnAudioGenreSelectedListener,
|
AudioGenresListFragment.OnAudioGenreSelectedListener,
|
||||||
|
@ -54,7 +44,6 @@ public class MusicActivity extends BaseActivity
|
||||||
public static final String GENRETITLE = "genre_title";
|
public static final String GENRETITLE = "genre_title";
|
||||||
public static final String MUSICVIDEOID = "music_video_id";
|
public static final String MUSICVIDEOID = "music_video_id";
|
||||||
public static final String MUSICVIDEOTITLE = "music_video_title";
|
public static final String MUSICVIDEOTITLE = "music_video_title";
|
||||||
public static final String LISTFRAGMENT_TAG = "musiclist";
|
|
||||||
|
|
||||||
private int selectedAlbumId = -1;
|
private int selectedAlbumId = -1;
|
||||||
private int selectedArtistId = -1;
|
private int selectedArtistId = -1;
|
||||||
|
@ -65,33 +54,30 @@ public class MusicActivity extends BaseActivity
|
||||||
private String selectedGenreTitle = null;
|
private String selectedGenreTitle = null;
|
||||||
private String selectedMusicVideoTitle = null;
|
private String selectedMusicVideoTitle = null;
|
||||||
|
|
||||||
private NavigationDrawerFragment navigationDrawerFragment;
|
@Override
|
||||||
|
protected String getActionBarTitle() {
|
||||||
private SharedElementTransition sharedElementTransition = new SharedElementTransition();
|
if (selectedAlbumTitle != null) {
|
||||||
|
return selectedAlbumTitle;
|
||||||
|
} else if (selectedArtistName != null) {
|
||||||
|
return selectedArtistName;
|
||||||
|
} else if (selectedGenreTitle != null) {
|
||||||
|
return selectedGenreTitle;
|
||||||
|
} else if (selectedMusicVideoTitle != null) {
|
||||||
|
return selectedMusicVideoTitle;
|
||||||
|
} else {
|
||||||
|
return getResources().getString(R.string.music);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Fragment createFragment() {
|
||||||
|
return new MusicListFragment();
|
||||||
|
}
|
||||||
|
|
||||||
@TargetApi(21)
|
@TargetApi(21)
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
if (savedInstanceState != null) {
|
||||||
setContentView(R.layout.activity_generic_media);
|
|
||||||
|
|
||||||
// Set up the drawer.
|
|
||||||
navigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager()
|
|
||||||
.findFragmentById(R.id.navigation_drawer);
|
|
||||||
navigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));
|
|
||||||
|
|
||||||
Fragment fragment;
|
|
||||||
if (savedInstanceState == null) {
|
|
||||||
fragment = new MusicListFragment();
|
|
||||||
|
|
||||||
getSupportFragmentManager()
|
|
||||||
.beginTransaction()
|
|
||||||
.add(R.id.fragment_container, fragment, LISTFRAGMENT_TAG)
|
|
||||||
.commit();
|
|
||||||
} else {
|
|
||||||
fragment = getSupportFragmentManager().findFragmentByTag(LISTFRAGMENT_TAG);
|
|
||||||
|
|
||||||
selectedAlbumId = savedInstanceState.getInt(ALBUMID, -1);
|
selectedAlbumId = savedInstanceState.getInt(ALBUMID, -1);
|
||||||
selectedArtistId = savedInstanceState.getInt(ARTISTID, -1);
|
selectedArtistId = savedInstanceState.getInt(ARTISTID, -1);
|
||||||
selectedGenreId = savedInstanceState.getInt(GENREID, -1);
|
selectedGenreId = savedInstanceState.getInt(GENREID, -1);
|
||||||
|
@ -101,17 +87,7 @@ public class MusicActivity extends BaseActivity
|
||||||
selectedGenreTitle = savedInstanceState.getString(GENRETITLE, null);
|
selectedGenreTitle = savedInstanceState.getString(GENRETITLE, null);
|
||||||
selectedMusicVideoTitle = savedInstanceState.getString(MUSICVIDEOTITLE, null);
|
selectedMusicVideoTitle = savedInstanceState.getString(MUSICVIDEOTITLE, null);
|
||||||
}
|
}
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
sharedElementTransition.setupExitTransition(this, fragment);
|
|
||||||
}
|
|
||||||
|
|
||||||
setupActionBar(selectedAlbumTitle, selectedArtistName, selectedGenreTitle, selectedMusicVideoTitle);
|
|
||||||
|
|
||||||
// // Setup system bars and content padding, allowing averlap with the bottom bar
|
|
||||||
// setupSystemBarsColors();
|
|
||||||
// UIUtils.setPaddingForSystemBars(this, findViewById(R.id.fragment_container), true, true, true);
|
|
||||||
// UIUtils.setPaddingForSystemBars(this, findViewById(R.id.drawer_layout), true, true, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -127,51 +103,40 @@ public class MusicActivity extends BaseActivity
|
||||||
outState.putString(MUSICVIDEOTITLE, selectedMusicVideoTitle);
|
outState.putString(MUSICVIDEOTITLE, selectedMusicVideoTitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
// if (!navigationDrawerFragment.isDrawerOpen()) {
|
|
||||||
// getMenuInflater().inflate(R.menu.media_info, menu);
|
|
||||||
// }
|
|
||||||
getMenuInflater().inflate(R.menu.media_info, menu);
|
|
||||||
return super.onCreateOptionsMenu(menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.action_show_remote:
|
|
||||||
// Starts remote
|
|
||||||
Intent launchIntent = new Intent(this, RemoteActivity.class)
|
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
|
||||||
startActivity(launchIntent);
|
|
||||||
return true;
|
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
// Only respond to this if we are showing some details, which can be checked by
|
// Only respond to this if we are showing some details, which can be checked by
|
||||||
// checking if some id != -1, in which case we should go back to the previous
|
// checking if some id != -1, in which case we should go back to the previous
|
||||||
// fragment, which is the list.
|
// fragment, which is the list.
|
||||||
// The default behaviour is handled by the nav drawer (open/close)
|
// The default behaviour is handled by the nav drawer (open/close)
|
||||||
|
boolean respond = false;
|
||||||
if (selectedAlbumId != -1) {
|
if (selectedAlbumId != -1) {
|
||||||
selectedAlbumId = -1;
|
selectedAlbumId = -1;
|
||||||
selectedAlbumTitle = null;
|
selectedAlbumTitle = null;
|
||||||
setupActionBar(null, selectedArtistName, selectedGenreTitle, selectedMusicVideoTitle);
|
respond = true;
|
||||||
getSupportFragmentManager().popBackStack();
|
|
||||||
return true;
|
|
||||||
} else if (selectedArtistId != -1) {
|
} else if (selectedArtistId != -1) {
|
||||||
selectedArtistId = -1;
|
selectedArtistId = -1;
|
||||||
selectedArtistName = null;
|
selectedArtistName = null;
|
||||||
setupActionBar(selectedAlbumTitle, null, selectedGenreTitle, selectedMusicVideoTitle);
|
respond = true;
|
||||||
getSupportFragmentManager().popBackStack();
|
|
||||||
return true;
|
|
||||||
} else if (selectedGenreId != -1) {
|
} else if (selectedGenreId != -1) {
|
||||||
selectedGenreId = -1;
|
selectedGenreId = -1;
|
||||||
selectedGenreTitle = null;
|
selectedGenreTitle = null;
|
||||||
setupActionBar(selectedAlbumTitle, selectedArtistName, null, selectedMusicVideoTitle);
|
respond = true;
|
||||||
getSupportFragmentManager().popBackStack();
|
|
||||||
return true;
|
|
||||||
} else if (selectedMusicVideoId != -1) {
|
} else if (selectedMusicVideoId != -1) {
|
||||||
selectedMusicVideoId = -1;
|
selectedMusicVideoId = -1;
|
||||||
selectedMusicVideoTitle = null;
|
selectedMusicVideoTitle = null;
|
||||||
setupActionBar(selectedAlbumTitle, selectedArtistName, selectedGenreTitle, null);
|
respond = true;
|
||||||
|
}
|
||||||
|
if (respond) {
|
||||||
|
if (selectedArtistId == -1 &&
|
||||||
|
selectedGenreId == -1 &&
|
||||||
|
selectedMusicVideoId == -1) {
|
||||||
|
updateActionBar(getActionBarTitle(), false);
|
||||||
|
} else {
|
||||||
|
updateActionBar(getActionBarTitle(), true);
|
||||||
|
}
|
||||||
getSupportFragmentManager().popBackStack();
|
getSupportFragmentManager().popBackStack();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -189,59 +154,27 @@ public class MusicActivity extends BaseActivity
|
||||||
if (selectedAlbumId != -1) {
|
if (selectedAlbumId != -1) {
|
||||||
selectedAlbumId = -1;
|
selectedAlbumId = -1;
|
||||||
selectedAlbumTitle = null;
|
selectedAlbumTitle = null;
|
||||||
setupActionBar(null, selectedArtistName, selectedGenreTitle, selectedMusicVideoTitle);
|
|
||||||
} else if (selectedArtistId != -1) {
|
} else if (selectedArtistId != -1) {
|
||||||
selectedArtistId = -1;
|
selectedArtistId = -1;
|
||||||
selectedArtistName = null;
|
selectedArtistName = null;
|
||||||
setupActionBar(selectedAlbumTitle, null, selectedGenreTitle, selectedMusicVideoTitle);
|
|
||||||
} else if (selectedGenreId != -1) {
|
} else if (selectedGenreId != -1) {
|
||||||
selectedGenreId = -1;
|
selectedGenreId = -1;
|
||||||
selectedGenreTitle = null;
|
selectedGenreTitle = null;
|
||||||
setupActionBar(selectedAlbumTitle, selectedArtistName, null, selectedMusicVideoTitle);
|
|
||||||
} else if (selectedMusicVideoId != -1) {
|
} else if (selectedMusicVideoId != -1) {
|
||||||
selectedMusicVideoId = -1;
|
selectedMusicVideoId = -1;
|
||||||
selectedMusicVideoTitle = null;
|
selectedMusicVideoTitle = null;
|
||||||
setupActionBar(selectedAlbumTitle, selectedArtistName, selectedGenreTitle, null);
|
}
|
||||||
|
|
||||||
|
if (selectedArtistId == -1 &&
|
||||||
|
selectedGenreId == -1 &&
|
||||||
|
selectedMusicVideoId == -1) {
|
||||||
|
updateActionBar(getActionBarTitle(), false);
|
||||||
|
} else {
|
||||||
|
updateActionBar(getActionBarTitle(), true);
|
||||||
}
|
}
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean drawerIndicatorIsArrow = false;
|
|
||||||
private void setupActionBar(String albumTitle, String artistName, String genreTitle,
|
|
||||||
String musicVideoTitle) {
|
|
||||||
Toolbar toolbar = (Toolbar)findViewById(R.id.default_toolbar);
|
|
||||||
setSupportActionBar(toolbar);
|
|
||||||
|
|
||||||
|
|
||||||
ActionBar actionBar = getSupportActionBar();
|
|
||||||
if (actionBar == null) return;
|
|
||||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
|
||||||
if (albumTitle != null) {
|
|
||||||
actionBar.setTitle(albumTitle);
|
|
||||||
} else if (artistName != null) {
|
|
||||||
actionBar.setTitle(artistName);
|
|
||||||
} else if (genreTitle != null) {
|
|
||||||
actionBar.setTitle(genreTitle);
|
|
||||||
} else if (musicVideoTitle != null) {
|
|
||||||
actionBar.setTitle(musicVideoTitle);
|
|
||||||
} else {
|
|
||||||
actionBar.setTitle(R.string.music);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((albumTitle != null) || (artistName != null) || (genreTitle != null) || (musicVideoTitle != null)) {
|
|
||||||
if (!drawerIndicatorIsArrow) {
|
|
||||||
navigationDrawerFragment.animateDrawerToggle(true);
|
|
||||||
drawerIndicatorIsArrow = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (drawerIndicatorIsArrow) {
|
|
||||||
navigationDrawerFragment.animateDrawerToggle(false);
|
|
||||||
drawerIndicatorIsArrow = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@TargetApi(21)
|
@TargetApi(21)
|
||||||
public void onArtistSelected(ArtistListFragment.ViewHolder vh) {
|
public void onArtistSelected(ArtistListFragment.ViewHolder vh) {
|
||||||
selectedArtistId = vh.dataHolder.getId();
|
selectedArtistId = vh.dataHolder.getId();
|
||||||
|
@ -252,22 +185,9 @@ public class MusicActivity extends BaseActivity
|
||||||
artistDetailsFragment.setDataHolder(vh.dataHolder);
|
artistDetailsFragment.setDataHolder(vh.dataHolder);
|
||||||
vh.dataHolder.setSquarePoster(true);
|
vh.dataHolder.setSquarePoster(true);
|
||||||
|
|
||||||
FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction();
|
showFragment(artistDetailsFragment, vh.artView, vh.dataHolder);
|
||||||
// Setup animations
|
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
vh.dataHolder.setPosterTransitionName(vh.artView.getTransitionName());
|
|
||||||
sharedElementTransition.setupEnterTransition(this, fragTrans, artistDetailsFragment,
|
|
||||||
vh.artView);
|
|
||||||
} else {
|
|
||||||
fragTrans.setCustomAnimations(R.anim.fragment_details_enter, 0, R.anim.fragment_list_popenter, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
fragTrans.replace(R.id.fragment_container, artistDetailsFragment)
|
updateActionBar(selectedArtistName, true);
|
||||||
.addToBackStack(null)
|
|
||||||
.commit();
|
|
||||||
|
|
||||||
navigationDrawerFragment.animateDrawerToggle(true);
|
|
||||||
setupActionBar(null, selectedArtistName, null, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@TargetApi(21)
|
@TargetApi(21)
|
||||||
|
@ -279,21 +199,10 @@ public class MusicActivity extends BaseActivity
|
||||||
final AbstractInfoFragment albumInfoFragment = new AlbumInfoFragment();
|
final AbstractInfoFragment albumInfoFragment = new AlbumInfoFragment();
|
||||||
vh.dataHolder.setSquarePoster(true);
|
vh.dataHolder.setSquarePoster(true);
|
||||||
albumInfoFragment.setDataHolder(vh.dataHolder);
|
albumInfoFragment.setDataHolder(vh.dataHolder);
|
||||||
FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction();
|
|
||||||
|
|
||||||
// Set up transitions
|
showFragment(albumInfoFragment, vh.artView, vh.dataHolder);
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
vh.dataHolder.setPosterTransitionName(vh.artView.getTransitionName());
|
|
||||||
sharedElementTransition.setupEnterTransition(this, fragTrans, albumInfoFragment, vh.artView);
|
|
||||||
} else {
|
|
||||||
fragTrans.setCustomAnimations(R.anim.fragment_details_enter, 0,
|
|
||||||
R.anim.fragment_list_popenter, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
fragTrans.replace(R.id.fragment_container, albumInfoFragment)
|
updateActionBar(selectedAlbumTitle, true);
|
||||||
.addToBackStack(null)
|
|
||||||
.commit();
|
|
||||||
setupActionBar(selectedAlbumTitle, null, null, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onAudioGenreSelected(int genreId, String genreTitle) {
|
public void onAudioGenreSelected(int genreId, String genreTitle) {
|
||||||
|
@ -310,7 +219,8 @@ public class MusicActivity extends BaseActivity
|
||||||
.replace(R.id.fragment_container, albumListFragment)
|
.replace(R.id.fragment_container, albumListFragment)
|
||||||
.addToBackStack(null)
|
.addToBackStack(null)
|
||||||
.commit();
|
.commit();
|
||||||
setupActionBar(null, null, genreTitle, null);
|
|
||||||
|
updateActionBar(selectedGenreTitle, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TargetApi(21)
|
@TargetApi(21)
|
||||||
|
@ -323,20 +233,8 @@ public class MusicActivity extends BaseActivity
|
||||||
vh.dataHolder.setSquarePoster(true);
|
vh.dataHolder.setSquarePoster(true);
|
||||||
musicVideoInfoFragment.setDataHolder(vh.dataHolder);
|
musicVideoInfoFragment.setDataHolder(vh.dataHolder);
|
||||||
|
|
||||||
FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction();
|
showFragment(musicVideoInfoFragment, vh.artView, vh.dataHolder);
|
||||||
|
|
||||||
// Set up transitions
|
updateActionBar(selectedMusicVideoTitle, true);
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
vh.dataHolder.setPosterTransitionName(vh.artView.getTransitionName());
|
|
||||||
sharedElementTransition.setupEnterTransition(this, fragTrans, musicVideoInfoFragment, vh.artView);
|
|
||||||
} else {
|
|
||||||
fragTrans.setCustomAnimations(R.anim.fragment_details_enter, 0,
|
|
||||||
R.anim.fragment_list_popenter, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
fragTrans.replace(R.id.fragment_container, musicVideoInfoFragment)
|
|
||||||
.addToBackStack(null)
|
|
||||||
.commit();
|
|
||||||
setupActionBar(null, null, null, selectedMusicVideoTitle);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,30 +15,25 @@
|
||||||
*/
|
*/
|
||||||
package org.xbmc.kore.ui.sections.file;
|
package org.xbmc.kore.ui.sections.file;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.support.v4.app.Fragment;
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.support.v4.widget.DrawerLayout;
|
|
||||||
import android.support.v7.app.ActionBar;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
|
||||||
import android.transition.TransitionInflater;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.Window;
|
|
||||||
|
|
||||||
import org.xbmc.kore.R;
|
import org.xbmc.kore.R;
|
||||||
import org.xbmc.kore.ui.BaseActivity;
|
import org.xbmc.kore.ui.BaseMediaActivity;
|
||||||
import org.xbmc.kore.ui.generic.NavigationDrawerFragment;
|
|
||||||
import org.xbmc.kore.ui.OnBackPressedListener;
|
import org.xbmc.kore.ui.OnBackPressedListener;
|
||||||
import org.xbmc.kore.ui.sections.remote.RemoteActivity;
|
|
||||||
import org.xbmc.kore.utils.Utils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles listing of files fragments
|
* Handles listing of files fragments
|
||||||
*/
|
*/
|
||||||
public class FileActivity extends BaseActivity {
|
public class FileActivity extends BaseMediaActivity {
|
||||||
|
@Override
|
||||||
|
protected String getActionBarTitle() {
|
||||||
|
return getString(R.string.file_browser);
|
||||||
|
}
|
||||||
|
|
||||||
private NavigationDrawerFragment navigationDrawerFragment;
|
@Override
|
||||||
|
protected Fragment createFragment() {
|
||||||
|
return new FileListFragment();
|
||||||
|
}
|
||||||
|
|
||||||
OnBackPressedListener fragmentBackListener;
|
OnBackPressedListener fragmentBackListener;
|
||||||
|
|
||||||
|
@ -46,61 +41,6 @@ public class FileActivity extends BaseActivity {
|
||||||
fragmentBackListener = listener;
|
fragmentBackListener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@TargetApi(21)
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
|
||||||
// Request transitions on lollipop
|
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
|
|
||||||
}
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setContentView(R.layout.activity_generic_media);
|
|
||||||
|
|
||||||
// Set up the drawer.
|
|
||||||
navigationDrawerFragment = (NavigationDrawerFragment)getSupportFragmentManager()
|
|
||||||
.findFragmentById(R.id.navigation_drawer);
|
|
||||||
navigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));
|
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
|
||||||
FileListFragment fileListFragment = new FileListFragment();
|
|
||||||
|
|
||||||
// Setup animations
|
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
fileListFragment.setExitTransition(null);
|
|
||||||
fileListFragment.setReenterTransition(TransitionInflater
|
|
||||||
.from(this)
|
|
||||||
.inflateTransition(android.R.transition.fade));
|
|
||||||
}
|
|
||||||
getSupportFragmentManager()
|
|
||||||
.beginTransaction()
|
|
||||||
.add(R.id.fragment_container, fileListFragment)
|
|
||||||
.commit();
|
|
||||||
}
|
|
||||||
setupActionBar(getString(R.string.file_browser));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
getMenuInflater().inflate(R.menu.media_info, menu);
|
|
||||||
return super.onCreateOptionsMenu(menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
|
||||||
switch (item.getItemId()) {
|
|
||||||
case R.id.action_show_remote:
|
|
||||||
// Starts remote
|
|
||||||
Intent launchIntent = new Intent(this, RemoteActivity.class)
|
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
|
||||||
startActivity(launchIntent);
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.onOptionsItemSelected(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
// tell fragment to move up one directory
|
// tell fragment to move up one directory
|
||||||
|
@ -111,17 +51,5 @@ public class FileActivity extends BaseActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupActionBar(String title) {
|
|
||||||
Toolbar toolbar = (Toolbar)findViewById(R.id.default_toolbar);
|
|
||||||
setSupportActionBar(toolbar);
|
|
||||||
|
|
||||||
ActionBar actionBar = getSupportActionBar();
|
|
||||||
if (actionBar == null) return;
|
|
||||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
|
||||||
navigationDrawerFragment.setDrawerIndicatorEnabled(true);
|
|
||||||
actionBar.setTitle(title);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,79 +16,45 @@
|
||||||
package org.xbmc.kore.ui.sections.video;
|
package org.xbmc.kore.ui.sections.video;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
|
||||||
import android.support.v4.widget.DrawerLayout;
|
|
||||||
import android.support.v7.app.ActionBar;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.Window;
|
|
||||||
|
|
||||||
import org.xbmc.kore.R;
|
import org.xbmc.kore.R;
|
||||||
import org.xbmc.kore.ui.BaseActivity;
|
import org.xbmc.kore.ui.BaseMediaActivity;
|
||||||
import org.xbmc.kore.ui.generic.NavigationDrawerFragment;
|
|
||||||
import org.xbmc.kore.ui.sections.remote.RemoteActivity;
|
|
||||||
import org.xbmc.kore.utils.LogUtils;
|
import org.xbmc.kore.utils.LogUtils;
|
||||||
import org.xbmc.kore.utils.SharedElementTransition;
|
|
||||||
import org.xbmc.kore.utils.Utils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controls the presentation of Movies information (list, details)
|
* Controls the presentation of Movies information (list, details)
|
||||||
* All the information is presented by specific fragments
|
* All the information is presented by specific fragments
|
||||||
*/
|
*/
|
||||||
public class MoviesActivity extends BaseActivity
|
public class MoviesActivity extends BaseMediaActivity
|
||||||
implements MovieListFragment.OnMovieSelectedListener {
|
implements MovieListFragment.OnMovieSelectedListener {
|
||||||
private static final String TAG = LogUtils.makeLogTag(MoviesActivity.class);
|
private static final String TAG = LogUtils.makeLogTag(MoviesActivity.class);
|
||||||
|
|
||||||
public static final String MOVIEID = "movie_id";
|
public static final String MOVIEID = "movie_id";
|
||||||
public static final String MOVIETITLE = "movie_title";
|
public static final String MOVIETITLE = "movie_title";
|
||||||
public static final String LISTFRAGMENT_TAG = "movielist";
|
|
||||||
|
|
||||||
private int selectedMovieId = -1;
|
private int selectedMovieId = -1;
|
||||||
private String selectedMovieTitle;
|
private String selectedMovieTitle;
|
||||||
|
|
||||||
private NavigationDrawerFragment navigationDrawerFragment;
|
@Override
|
||||||
|
protected String getActionBarTitle() {
|
||||||
|
return (selectedMovieTitle != null) ? selectedMovieTitle : getString(R.string.movies);
|
||||||
|
}
|
||||||
|
|
||||||
private SharedElementTransition sharedElementTransition = new SharedElementTransition();
|
@Override
|
||||||
|
protected Fragment createFragment() {
|
||||||
|
return new MovieListFragment();
|
||||||
|
}
|
||||||
|
|
||||||
@TargetApi(21)
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
// Request transitions on lollipop
|
if (savedInstanceState != null) {
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
|
|
||||||
}
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setContentView(R.layout.activity_generic_media);
|
|
||||||
|
|
||||||
// Set up the drawer.
|
|
||||||
navigationDrawerFragment = (NavigationDrawerFragment)getSupportFragmentManager()
|
|
||||||
.findFragmentById(R.id.navigation_drawer);
|
|
||||||
navigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));
|
|
||||||
|
|
||||||
Fragment fragment;
|
|
||||||
if (savedInstanceState == null) {
|
|
||||||
fragment = new MovieListFragment();
|
|
||||||
|
|
||||||
getSupportFragmentManager()
|
|
||||||
.beginTransaction()
|
|
||||||
.add(R.id.fragment_container, fragment, LISTFRAGMENT_TAG)
|
|
||||||
.commit();
|
|
||||||
} else {
|
|
||||||
fragment = getSupportFragmentManager().findFragmentByTag(LISTFRAGMENT_TAG);
|
|
||||||
|
|
||||||
selectedMovieId = savedInstanceState.getInt(MOVIEID, -1);
|
selectedMovieId = savedInstanceState.getInt(MOVIEID, -1);
|
||||||
selectedMovieTitle = savedInstanceState.getString(MOVIETITLE, null);
|
selectedMovieTitle = savedInstanceState.getString(MOVIETITLE, null);
|
||||||
}
|
}
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
sharedElementTransition.setupExitTransition(this, fragment);
|
|
||||||
}
|
|
||||||
|
|
||||||
setupActionBar(selectedMovieTitle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -98,24 +64,9 @@ public class MoviesActivity extends BaseActivity
|
||||||
outState.putString(MOVIETITLE, selectedMovieTitle);
|
outState.putString(MOVIETITLE, selectedMovieTitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
// if (!navigationDrawerFragment.isDrawerOpen()) {
|
|
||||||
// getMenuInflater().inflate(R.menu.media_info, menu);
|
|
||||||
// }
|
|
||||||
getMenuInflater().inflate(R.menu.media_info, menu);
|
|
||||||
return super.onCreateOptionsMenu(menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.action_show_remote:
|
|
||||||
// Starts remote
|
|
||||||
Intent launchIntent = new Intent(this, RemoteActivity.class)
|
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
|
||||||
startActivity(launchIntent);
|
|
||||||
return true;
|
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
// Only respond to this if we are showing the movie details in portrait mode,
|
// Only respond to this if we are showing the movie details in portrait mode,
|
||||||
// which can be checked by checking if selected movie != -1, in which case we
|
// which can be checked by checking if selected movie != -1, in which case we
|
||||||
|
@ -123,7 +74,7 @@ public class MoviesActivity extends BaseActivity
|
||||||
if (selectedMovieId != -1) {
|
if (selectedMovieId != -1) {
|
||||||
selectedMovieId = -1;
|
selectedMovieId = -1;
|
||||||
selectedMovieTitle = null;
|
selectedMovieTitle = null;
|
||||||
setupActionBar(null);
|
updateActionBar(getActionBarTitle(), false);
|
||||||
getSupportFragmentManager().popBackStack();
|
getSupportFragmentManager().popBackStack();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -141,35 +92,12 @@ public class MoviesActivity extends BaseActivity
|
||||||
if (selectedMovieId != -1) {
|
if (selectedMovieId != -1) {
|
||||||
selectedMovieId = -1;
|
selectedMovieId = -1;
|
||||||
selectedMovieTitle = null;
|
selectedMovieTitle = null;
|
||||||
setupActionBar(null);
|
updateActionBar(getActionBarTitle(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean drawerIndicatorIsArrow = false;
|
|
||||||
private void setupActionBar(String movieTitle) {
|
|
||||||
Toolbar toolbar = (Toolbar)findViewById(R.id.default_toolbar);
|
|
||||||
setSupportActionBar(toolbar);
|
|
||||||
|
|
||||||
ActionBar actionBar = getSupportActionBar();
|
|
||||||
if (actionBar == null) return;
|
|
||||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
|
||||||
if (movieTitle != null) {
|
|
||||||
if (!drawerIndicatorIsArrow) {
|
|
||||||
navigationDrawerFragment.animateDrawerToggle(true);
|
|
||||||
drawerIndicatorIsArrow = true;
|
|
||||||
}
|
|
||||||
actionBar.setTitle(movieTitle);
|
|
||||||
} else {
|
|
||||||
if (drawerIndicatorIsArrow) {
|
|
||||||
navigationDrawerFragment.animateDrawerToggle(false);
|
|
||||||
drawerIndicatorIsArrow = false;
|
|
||||||
}
|
|
||||||
actionBar.setTitle(R.string.movies);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback from movielist fragment when a movie is selected.
|
* Callback from movielist fragment when a movie is selected.
|
||||||
* Switch fragment in portrait
|
* Switch fragment in portrait
|
||||||
|
@ -183,21 +111,8 @@ public class MoviesActivity extends BaseActivity
|
||||||
final MovieInfoFragment movieInfoFragment = new MovieInfoFragment();
|
final MovieInfoFragment movieInfoFragment = new MovieInfoFragment();
|
||||||
movieInfoFragment.setDataHolder(vh.dataHolder);
|
movieInfoFragment.setDataHolder(vh.dataHolder);
|
||||||
|
|
||||||
FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction();
|
showFragment(movieInfoFragment, vh.artView, vh.dataHolder);
|
||||||
|
|
||||||
// Set up transitions
|
updateActionBar(selectedMovieTitle, true);
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
vh.dataHolder.setPosterTransitionName(vh.artView.getTransitionName());
|
|
||||||
sharedElementTransition.setupEnterTransition(this, fragTrans, movieInfoFragment,
|
|
||||||
vh.artView);
|
|
||||||
} else {
|
|
||||||
fragTrans.setCustomAnimations(R.anim.fragment_details_enter, 0,
|
|
||||||
R.anim.fragment_list_popenter, 0);
|
|
||||||
}
|
|
||||||
fragTrans.replace(R.id.fragment_container, movieInfoFragment)
|
|
||||||
.addToBackStack(null)
|
|
||||||
.commit();
|
|
||||||
|
|
||||||
setupActionBar(selectedMovieTitle);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,21 +16,14 @@
|
||||||
package org.xbmc.kore.ui.sections.video;
|
package org.xbmc.kore.ui.sections.video;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
import android.support.v4.app.FragmentTransaction;
|
||||||
import android.support.v4.widget.DrawerLayout;
|
|
||||||
import android.support.v7.app.ActionBar;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
|
||||||
import android.transition.TransitionInflater;
|
import android.transition.TransitionInflater;
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.Window;
|
|
||||||
|
|
||||||
import org.xbmc.kore.R;
|
import org.xbmc.kore.R;
|
||||||
import org.xbmc.kore.ui.BaseActivity;
|
import org.xbmc.kore.ui.BaseMediaActivity;
|
||||||
import org.xbmc.kore.ui.generic.NavigationDrawerFragment;
|
|
||||||
import org.xbmc.kore.ui.sections.remote.RemoteActivity;
|
|
||||||
import org.xbmc.kore.utils.LogUtils;
|
import org.xbmc.kore.utils.LogUtils;
|
||||||
import org.xbmc.kore.utils.Utils;
|
import org.xbmc.kore.utils.Utils;
|
||||||
|
|
||||||
|
@ -38,7 +31,7 @@ import org.xbmc.kore.utils.Utils;
|
||||||
* Controls the presentation of Live TV/Radio and recordings information (list, details)
|
* Controls the presentation of Live TV/Radio and recordings information (list, details)
|
||||||
* All the information is presented by specific fragments
|
* All the information is presented by specific fragments
|
||||||
*/
|
*/
|
||||||
public class PVRActivity extends BaseActivity
|
public class PVRActivity extends BaseMediaActivity
|
||||||
implements PVRChannelsListFragment.OnPVRChannelSelectedListener {
|
implements PVRChannelsListFragment.OnPVRChannelSelectedListener {
|
||||||
private static final String TAG = LogUtils.makeLogTag(PVRActivity.class);
|
private static final String TAG = LogUtils.makeLogTag(PVRActivity.class);
|
||||||
|
|
||||||
|
@ -56,56 +49,31 @@ public class PVRActivity extends BaseActivity
|
||||||
private int selectedChannelGroupId = -1;
|
private int selectedChannelGroupId = -1;
|
||||||
private String selectedChannelGroupTitle = null;
|
private String selectedChannelGroupTitle = null;
|
||||||
|
|
||||||
private NavigationDrawerFragment navigationDrawerFragment;
|
@Override
|
||||||
|
protected String getActionBarTitle() {
|
||||||
|
if ( selectedChannelTitle != null ) {
|
||||||
|
return selectedChannelTitle;
|
||||||
|
} else if ( selectedChannelGroupTitle != null ) {
|
||||||
|
return selectedChannelGroupTitle;
|
||||||
|
}
|
||||||
|
return getString(R.string.pvr);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Fragment createFragment() {
|
||||||
|
return new PVRListFragment();
|
||||||
|
}
|
||||||
|
|
||||||
@TargetApi(21)
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
// Request transitions on lollipop
|
if (savedInstanceState != null) {
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
|
|
||||||
}
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setContentView(R.layout.activity_generic_media);
|
|
||||||
|
|
||||||
// Set up the drawer.
|
|
||||||
navigationDrawerFragment = (NavigationDrawerFragment)getSupportFragmentManager()
|
|
||||||
.findFragmentById(R.id.navigation_drawer);
|
|
||||||
navigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));
|
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
|
||||||
PVRListFragment pvrListFragment = new PVRListFragment();
|
|
||||||
|
|
||||||
// Setup animations
|
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
pvrListFragment.setExitTransition(null);
|
|
||||||
pvrListFragment.setReenterTransition(TransitionInflater
|
|
||||||
.from(this)
|
|
||||||
.inflateTransition(android.R.transition.fade));
|
|
||||||
}
|
|
||||||
getSupportFragmentManager()
|
|
||||||
.beginTransaction()
|
|
||||||
.add(R.id.fragment_container, pvrListFragment, LISTFRAGMENTTAG)
|
|
||||||
.commit();
|
|
||||||
} else {
|
|
||||||
selectedChannelId = savedInstanceState.getInt(CHANNELID, -1);
|
selectedChannelId = savedInstanceState.getInt(CHANNELID, -1);
|
||||||
selectedChannelTitle = savedInstanceState.getString(CHANNELTITLE, null);
|
selectedChannelTitle = savedInstanceState.getString(CHANNELTITLE, null);
|
||||||
|
|
||||||
selectedChannelGroupId = savedInstanceState.getInt(CHANNELGROUPID, -1);
|
selectedChannelGroupId = savedInstanceState.getInt(CHANNELGROUPID, -1);
|
||||||
selectedChannelGroupTitle = savedInstanceState.getString(CHANNELGROUPTITLE, null);
|
selectedChannelGroupTitle = savedInstanceState.getString(CHANNELGROUPTITLE, null);
|
||||||
}
|
}
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
setupActionBar(selectedChannelGroupTitle, selectedChannelTitle);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause() {
|
|
||||||
super.onPause();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -118,33 +86,21 @@ public class PVRActivity extends BaseActivity
|
||||||
outState.putString(CHANNELGROUPTITLE, selectedChannelGroupTitle);
|
outState.putString(CHANNELGROUPTITLE, selectedChannelGroupTitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
getMenuInflater().inflate(R.menu.media_info, menu);
|
|
||||||
return super.onCreateOptionsMenu(menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.action_show_remote:
|
|
||||||
// Starts remote
|
|
||||||
Intent launchIntent = new Intent(this, RemoteActivity.class)
|
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
|
||||||
startActivity(launchIntent);
|
|
||||||
return true;
|
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
// If showing detail view, back up to list
|
// If showing detail view, back up to list
|
||||||
if (selectedChannelId != -1) {
|
if (selectedChannelId != -1) {
|
||||||
selectedChannelId = -1;
|
selectedChannelId = -1;
|
||||||
selectedChannelTitle = null;
|
selectedChannelTitle = null;
|
||||||
setupActionBar(selectedChannelGroupTitle, null);
|
updateActionBar(getActionBarTitle(), true);
|
||||||
getSupportFragmentManager().popBackStack();
|
getSupportFragmentManager().popBackStack();
|
||||||
return true;
|
return true;
|
||||||
} else if (selectedChannelGroupId != -1) {
|
} else if (selectedChannelGroupId != -1) {
|
||||||
selectedChannelGroupId = -1;
|
selectedChannelGroupId = -1;
|
||||||
selectedChannelGroupTitle = null;
|
selectedChannelGroupTitle = null;
|
||||||
setupActionBar(null, null);
|
updateActionBar(getActionBarTitle(), false);
|
||||||
|
|
||||||
PVRListFragment fragment = (PVRListFragment)getSupportFragmentManager().findFragmentByTag(LISTFRAGMENTTAG);
|
PVRListFragment fragment = (PVRListFragment)getSupportFragmentManager().findFragmentByTag(LISTFRAGMENTTAG);
|
||||||
if (fragment != null) {
|
if (fragment != null) {
|
||||||
|
@ -167,12 +123,12 @@ public class PVRActivity extends BaseActivity
|
||||||
if (selectedChannelId != -1) {
|
if (selectedChannelId != -1) {
|
||||||
selectedChannelId = -1;
|
selectedChannelId = -1;
|
||||||
selectedChannelTitle = null;
|
selectedChannelTitle = null;
|
||||||
setupActionBar(selectedChannelGroupTitle, null);
|
updateActionBar(getActionBarTitle(), true);
|
||||||
} else {
|
} else {
|
||||||
if (selectedChannelGroupId != -1) {
|
if (selectedChannelGroupId != -1) {
|
||||||
selectedChannelGroupId = -1;
|
selectedChannelGroupId = -1;
|
||||||
selectedChannelGroupTitle = null;
|
selectedChannelGroupTitle = null;
|
||||||
setupActionBar(null, null);
|
updateActionBar(getActionBarTitle(), true);
|
||||||
}
|
}
|
||||||
PVRListFragment fragment = (PVRListFragment)getSupportFragmentManager().findFragmentByTag(LISTFRAGMENTTAG);
|
PVRListFragment fragment = (PVRListFragment)getSupportFragmentManager().findFragmentByTag(LISTFRAGMENTTAG);
|
||||||
if (fragment != null) {
|
if (fragment != null) {
|
||||||
|
@ -183,31 +139,6 @@ public class PVRActivity extends BaseActivity
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean drawerIndicatorIsArrow = false;
|
|
||||||
private void setupActionBar(String channelGroupTitle, String channelTitle) {
|
|
||||||
Toolbar toolbar = (Toolbar)findViewById(R.id.default_toolbar);
|
|
||||||
setSupportActionBar(toolbar);
|
|
||||||
|
|
||||||
ActionBar actionBar = getSupportActionBar();
|
|
||||||
if (actionBar == null) return;
|
|
||||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
|
||||||
|
|
||||||
if ((channelTitle != null) || (channelGroupTitle != null)) {
|
|
||||||
if (!drawerIndicatorIsArrow) {
|
|
||||||
navigationDrawerFragment.animateDrawerToggle(true);
|
|
||||||
drawerIndicatorIsArrow = true;
|
|
||||||
}
|
|
||||||
actionBar.setTitle(channelTitle == null? channelGroupTitle : channelTitle);
|
|
||||||
} else {
|
|
||||||
if (drawerIndicatorIsArrow) {
|
|
||||||
navigationDrawerFragment.animateDrawerToggle(false);
|
|
||||||
drawerIndicatorIsArrow = false;
|
|
||||||
}
|
|
||||||
actionBar.setTitle(R.string.pvr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback from list fragment when the channel guide should be displayed.
|
* Callback from list fragment when the channel guide should be displayed.
|
||||||
* Setup action bar and repolace list fragment
|
* Setup action bar and repolace list fragment
|
||||||
|
@ -237,7 +168,7 @@ public class PVRActivity extends BaseActivity
|
||||||
fragTrans.replace(R.id.fragment_container, pvrEPGFragment)
|
fragTrans.replace(R.id.fragment_container, pvrEPGFragment)
|
||||||
.addToBackStack(null)
|
.addToBackStack(null)
|
||||||
.commit();
|
.commit();
|
||||||
setupActionBar(selectedChannelGroupTitle, selectedChannelTitle);
|
updateActionBar(getActionBarTitle(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -250,6 +181,6 @@ public class PVRActivity extends BaseActivity
|
||||||
selectedChannelGroupId = channelGroupId;
|
selectedChannelGroupId = channelGroupId;
|
||||||
selectedChannelGroupTitle = channelGroupTitle;
|
selectedChannelGroupTitle = channelGroupTitle;
|
||||||
|
|
||||||
setupActionBar(selectedChannelGroupTitle, selectedChannelTitle);
|
updateActionBar(getActionBarTitle(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,32 +16,24 @@
|
||||||
package org.xbmc.kore.ui.sections.video;
|
package org.xbmc.kore.ui.sections.video;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
import android.support.v4.app.FragmentTransaction;
|
||||||
import android.support.v4.widget.DrawerLayout;
|
|
||||||
import android.support.v7.app.ActionBar;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
|
||||||
import android.transition.TransitionInflater;
|
import android.transition.TransitionInflater;
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.Window;
|
|
||||||
|
|
||||||
import org.xbmc.kore.R;
|
import org.xbmc.kore.R;
|
||||||
|
import org.xbmc.kore.ui.AbstractFragment;
|
||||||
import org.xbmc.kore.ui.AbstractInfoFragment;
|
import org.xbmc.kore.ui.AbstractInfoFragment;
|
||||||
import org.xbmc.kore.ui.BaseActivity;
|
import org.xbmc.kore.ui.BaseMediaActivity;
|
||||||
import org.xbmc.kore.ui.generic.NavigationDrawerFragment;
|
|
||||||
import org.xbmc.kore.ui.sections.remote.RemoteActivity;
|
|
||||||
import org.xbmc.kore.utils.LogUtils;
|
import org.xbmc.kore.utils.LogUtils;
|
||||||
import org.xbmc.kore.utils.SharedElementTransition;
|
|
||||||
import org.xbmc.kore.utils.Utils;
|
import org.xbmc.kore.utils.Utils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controls the presentation of TV Shows information (list, details)
|
* Controls the presentation of TV Shows information (list, details)
|
||||||
* All the information is presented by specific fragments
|
* All the information is presented by specific fragments
|
||||||
*/
|
*/
|
||||||
public class TVShowsActivity extends BaseActivity
|
public class TVShowsActivity extends BaseMediaActivity
|
||||||
implements TVShowListFragment.OnTVShowSelectedListener,
|
implements TVShowListFragment.OnTVShowSelectedListener,
|
||||||
TVShowProgressFragment.TVShowProgressActionListener,
|
TVShowProgressFragment.TVShowProgressActionListener,
|
||||||
TVShowEpisodeListFragment.OnEpisodeSelectedListener {
|
TVShowEpisodeListFragment.OnEpisodeSelectedListener {
|
||||||
|
@ -52,7 +44,6 @@ public class TVShowsActivity extends BaseActivity
|
||||||
public static final String EPISODEID = "episode_id";
|
public static final String EPISODEID = "episode_id";
|
||||||
public static final String SEASON = "season";
|
public static final String SEASON = "season";
|
||||||
public static final String SEASONTITLE = "season_title";
|
public static final String SEASONTITLE = "season_title";
|
||||||
public static final String LISTFRAGMENT_TAG = "tvshowlist";
|
|
||||||
|
|
||||||
private int selectedTVShowId = -1;
|
private int selectedTVShowId = -1;
|
||||||
private String selectedTVShowTitle = null;
|
private String selectedTVShowTitle = null;
|
||||||
|
@ -60,53 +51,28 @@ public class TVShowsActivity extends BaseActivity
|
||||||
private String selectedSeasonTitle = null;
|
private String selectedSeasonTitle = null;
|
||||||
private int selectedEpisodeId = -1;
|
private int selectedEpisodeId = -1;
|
||||||
|
|
||||||
private SharedElementTransition sharedElementTransition = new SharedElementTransition();
|
@Override
|
||||||
|
protected String getActionBarTitle() {
|
||||||
|
return (selectedSeasonTitle != null) ? selectedSeasonTitle :
|
||||||
|
(selectedTVShowTitle != null) ? selectedTVShowTitle : getString(R.string.tv_shows);
|
||||||
|
}
|
||||||
|
|
||||||
private NavigationDrawerFragment navigationDrawerFragment;
|
@Override
|
||||||
|
protected Fragment createFragment() {
|
||||||
|
return new TVShowListFragment();
|
||||||
|
}
|
||||||
|
|
||||||
@TargetApi(21)
|
@TargetApi(21)
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
// Request transitions on lollipop
|
if (savedInstanceState != null) {
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
|
|
||||||
}
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setContentView(R.layout.activity_generic_media);
|
|
||||||
|
|
||||||
// Set up the drawer.
|
|
||||||
navigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager()
|
|
||||||
.findFragmentById(R.id.navigation_drawer);
|
|
||||||
navigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));
|
|
||||||
|
|
||||||
Fragment fragment;
|
|
||||||
if (savedInstanceState == null) {
|
|
||||||
fragment = new TVShowListFragment();
|
|
||||||
|
|
||||||
getSupportFragmentManager()
|
|
||||||
.beginTransaction()
|
|
||||||
.add(R.id.fragment_container, fragment, LISTFRAGMENT_TAG)
|
|
||||||
.commit();
|
|
||||||
} else {
|
|
||||||
fragment = getSupportFragmentManager().findFragmentByTag(LISTFRAGMENT_TAG);
|
|
||||||
|
|
||||||
selectedTVShowId = savedInstanceState.getInt(TVSHOWID, -1);
|
selectedTVShowId = savedInstanceState.getInt(TVSHOWID, -1);
|
||||||
selectedTVShowTitle = savedInstanceState.getString(TVSHOWTITLE, null);
|
selectedTVShowTitle = savedInstanceState.getString(TVSHOWTITLE, null);
|
||||||
selectedEpisodeId = savedInstanceState.getInt(EPISODEID, -1);
|
selectedEpisodeId = savedInstanceState.getInt(EPISODEID, -1);
|
||||||
selectedSeason = savedInstanceState.getInt(SEASON, -1);
|
selectedSeason = savedInstanceState.getInt(SEASON, -1);
|
||||||
selectedSeasonTitle = savedInstanceState.getString(SEASONTITLE, null);
|
selectedSeasonTitle = savedInstanceState.getString(SEASONTITLE, null);
|
||||||
}
|
}
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
sharedElementTransition.setupExitTransition(this, fragment);
|
|
||||||
}
|
|
||||||
|
|
||||||
setupActionBar(selectedTVShowTitle);
|
|
||||||
|
|
||||||
// // Setup system bars and content padding, allowing averlap with the bottom bar
|
|
||||||
// setupSystemBarsColors();
|
|
||||||
// UIUtils.setPaddingForSystemBars(this, findViewById(R.id.fragment_container), true, true, true);
|
|
||||||
// UIUtils.setPaddingForSystemBars(this, findViewById(R.id.drawer_layout), true, true, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -119,50 +85,15 @@ public class TVShowsActivity extends BaseActivity
|
||||||
outState.putString(SEASONTITLE, selectedSeasonTitle);
|
outState.putString(SEASONTITLE, selectedSeasonTitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
// if (!navigationDrawerFragment.isDrawerOpen()) {
|
|
||||||
// getMenuInflater().inflate(R.menu.media_info, menu);
|
|
||||||
// }
|
|
||||||
getMenuInflater().inflate(R.menu.media_info, menu);
|
|
||||||
return super.onCreateOptionsMenu(menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.action_show_remote:
|
|
||||||
// Starts remote
|
|
||||||
Intent launchIntent = new Intent(this, RemoteActivity.class)
|
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
|
||||||
startActivity(launchIntent);
|
|
||||||
return true;
|
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
// Only respond to this if we are showing the episodeor show details in portrait
|
if (getDrawerIndicatorIsArrow()) {
|
||||||
// mode, which can be checked by checking if selected movie != -1, in which case we
|
|
||||||
// should go back to the previous fragment, which is the list.
|
|
||||||
// The default behaviour is handled by the nav drawer (open/close)
|
|
||||||
if (selectedEpisodeId != -1) {
|
|
||||||
selectedEpisodeId = -1;
|
|
||||||
getSupportFragmentManager().popBackStack();
|
|
||||||
if (selectedSeason != -1)
|
|
||||||
setupActionBar(selectedSeasonTitle);
|
|
||||||
else
|
|
||||||
setupActionBar(selectedTVShowTitle);
|
|
||||||
return true;
|
|
||||||
} else if (selectedSeason != -1) {
|
|
||||||
selectedSeason = -1;
|
|
||||||
getSupportFragmentManager().popBackStack();
|
|
||||||
setupActionBar(selectedTVShowTitle);
|
|
||||||
return true;
|
|
||||||
} else if (selectedTVShowId != -1) {
|
|
||||||
selectedTVShowId = -1;
|
|
||||||
selectedTVShowTitle = null;
|
|
||||||
setupActionBar(null);
|
|
||||||
getSupportFragmentManager().popBackStack();
|
getSupportFragmentManager().popBackStack();
|
||||||
|
updateActionBar();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -172,47 +103,10 @@ public class TVShowsActivity extends BaseActivity
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
// If we are showing episode or show details in portrait, clear selected and show action bar
|
updateActionBar();
|
||||||
if (selectedEpisodeId != -1) {
|
|
||||||
selectedEpisodeId = -1;
|
|
||||||
if (selectedSeason != -1)
|
|
||||||
setupActionBar(selectedSeasonTitle);
|
|
||||||
else
|
|
||||||
setupActionBar(selectedTVShowTitle);
|
|
||||||
} else if (selectedSeason != -1) {
|
|
||||||
selectedSeason = -1;
|
|
||||||
setupActionBar(selectedTVShowTitle);
|
|
||||||
} else if (selectedTVShowId != -1) {
|
|
||||||
selectedTVShowId = -1;
|
|
||||||
selectedTVShowTitle = null;
|
|
||||||
setupActionBar(null);
|
|
||||||
}
|
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean drawerIndicatorIsArrow = false;
|
|
||||||
private void setupActionBar(String title) {
|
|
||||||
Toolbar toolbar = (Toolbar)findViewById(R.id.default_toolbar);
|
|
||||||
setSupportActionBar(toolbar);
|
|
||||||
|
|
||||||
ActionBar actionBar = getSupportActionBar();
|
|
||||||
if (actionBar == null) return;
|
|
||||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
|
||||||
if (title != null) {
|
|
||||||
if (!drawerIndicatorIsArrow) {
|
|
||||||
navigationDrawerFragment.animateDrawerToggle(true);
|
|
||||||
drawerIndicatorIsArrow = true;
|
|
||||||
}
|
|
||||||
actionBar.setTitle(title);
|
|
||||||
} else {
|
|
||||||
if (drawerIndicatorIsArrow) {
|
|
||||||
navigationDrawerFragment.animateDrawerToggle(false);
|
|
||||||
drawerIndicatorIsArrow = false;
|
|
||||||
}
|
|
||||||
actionBar.setTitle(R.string.tv_shows);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback from tvshows list fragment when a show is selected.
|
* Callback from tvshows list fragment when a show is selected.
|
||||||
* Switch fragment in portrait
|
* Switch fragment in portrait
|
||||||
|
@ -226,21 +120,8 @@ public class TVShowsActivity extends BaseActivity
|
||||||
// Replace list fragment
|
// Replace list fragment
|
||||||
final TVShowInfoFragment tvshowDetailsFragment = new TVShowInfoFragment();
|
final TVShowInfoFragment tvshowDetailsFragment = new TVShowInfoFragment();
|
||||||
tvshowDetailsFragment.setDataHolder(vh.dataHolder);
|
tvshowDetailsFragment.setDataHolder(vh.dataHolder);
|
||||||
|
showFragment(tvshowDetailsFragment, vh.artView, vh.dataHolder);
|
||||||
FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction();
|
updateActionBar(selectedTVShowTitle, true);
|
||||||
|
|
||||||
// Set up transitions
|
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
vh.dataHolder.setPosterTransitionName(vh.artView.getTransitionName());
|
|
||||||
sharedElementTransition.setupEnterTransition(this, fragTrans, tvshowDetailsFragment, vh.artView);
|
|
||||||
} else {
|
|
||||||
fragTrans.setCustomAnimations(R.anim.fragment_details_enter, 0, R.anim.fragment_list_popenter, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
fragTrans.replace(R.id.fragment_container, tvshowDetailsFragment)
|
|
||||||
.addToBackStack(null)
|
|
||||||
.commit();
|
|
||||||
setupActionBar(selectedTVShowTitle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -261,7 +142,7 @@ public class TVShowsActivity extends BaseActivity
|
||||||
.addToBackStack(null)
|
.addToBackStack(null)
|
||||||
.commit();
|
.commit();
|
||||||
selectedSeasonTitle = String.format(getString(R.string.season_number), seasonId);
|
selectedSeasonTitle = String.format(getString(R.string.season_number), seasonId);
|
||||||
setupActionBar(selectedSeasonTitle);
|
updateActionBar(selectedSeasonTitle, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -276,21 +157,8 @@ public class TVShowsActivity extends BaseActivity
|
||||||
TVShowEpisodeInfoFragment fragment = new TVShowEpisodeInfoFragment();
|
TVShowEpisodeInfoFragment fragment = new TVShowEpisodeInfoFragment();
|
||||||
fragment.setDataHolder(dh);
|
fragment.setDataHolder(dh);
|
||||||
fragment.setTvshowId(tvshowId);
|
fragment.setTvshowId(tvshowId);
|
||||||
FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction();
|
startFragment(fragment);
|
||||||
|
updateActionBar(selectedTVShowTitle, true);
|
||||||
// Set up transitions
|
|
||||||
if (Utils.isLollipopOrLater()) {
|
|
||||||
fragment.setEnterTransition(
|
|
||||||
TransitionInflater.from(this).inflateTransition(R.transition.media_details));
|
|
||||||
fragment.setReturnTransition(null);
|
|
||||||
} else {
|
|
||||||
fragTrans.setCustomAnimations(R.anim.fragment_details_enter, 0, R.anim.fragment_list_popenter, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
fragTrans.replace(R.id.fragment_container, fragment)
|
|
||||||
.addToBackStack(null)
|
|
||||||
.commit();
|
|
||||||
setupActionBar(selectedTVShowTitle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -300,11 +168,16 @@ public class TVShowsActivity extends BaseActivity
|
||||||
public void onEpisodeSelected(int tvshowId,
|
public void onEpisodeSelected(int tvshowId,
|
||||||
TVShowEpisodeListFragment.ViewHolder viewHolder) {
|
TVShowEpisodeListFragment.ViewHolder viewHolder) {
|
||||||
selectedEpisodeId = viewHolder.dataHolder.getId();
|
selectedEpisodeId = viewHolder.dataHolder.getId();
|
||||||
|
|
||||||
// Replace list fragment
|
|
||||||
TVShowEpisodeInfoFragment fragment = new TVShowEpisodeInfoFragment();
|
TVShowEpisodeInfoFragment fragment = new TVShowEpisodeInfoFragment();
|
||||||
fragment.setDataHolder(viewHolder.dataHolder);
|
fragment.setDataHolder(viewHolder.dataHolder);
|
||||||
fragment.setTvshowId(tvshowId);
|
fragment.setTvshowId(tvshowId);
|
||||||
|
startFragment(fragment);
|
||||||
|
updateActionBar(selectedTVShowTitle, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TargetApi(21)
|
||||||
|
private void startFragment(AbstractFragment fragment) {
|
||||||
|
// Replace list fragment
|
||||||
FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction();
|
FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction();
|
||||||
|
|
||||||
// Set up transitions
|
// Set up transitions
|
||||||
|
@ -319,6 +192,24 @@ public class TVShowsActivity extends BaseActivity
|
||||||
fragTrans.replace(R.id.fragment_container, fragment)
|
fragTrans.replace(R.id.fragment_container, fragment)
|
||||||
.addToBackStack(null)
|
.addToBackStack(null)
|
||||||
.commit();
|
.commit();
|
||||||
setupActionBar(selectedTVShowTitle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateActionBar() {
|
||||||
|
if (selectedEpisodeId != -1) {
|
||||||
|
selectedEpisodeId = -1;
|
||||||
|
if (selectedSeason != -1)
|
||||||
|
updateActionBar(selectedSeasonTitle, true);
|
||||||
|
else
|
||||||
|
updateActionBar(selectedTVShowTitle, true);
|
||||||
|
} else if (selectedSeason != -1) {
|
||||||
|
selectedSeason = -1;
|
||||||
|
selectedSeasonTitle = null;
|
||||||
|
updateActionBar(selectedTVShowTitle, true);
|
||||||
|
} else if (selectedTVShowId != -1) {
|
||||||
|
selectedTVShowId = -1;
|
||||||
|
selectedTVShowTitle = null;
|
||||||
|
updateActionBar(getActionBarTitle(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue