From dadc34901cc091e411e8d8d387106f2d2ca41204 Mon Sep 17 00:00:00 2001 From: David Eisner Date: Tue, 3 May 2016 20:58:12 +0100 Subject: [PATCH] Plugin content browser For feature request #72 --- .../xbmc/kore/ui/AddonOverviewFragment.java | 137 ++++++++++++++++++ .../java/org/xbmc/kore/ui/AddonsActivity.java | 2 +- app/src/main/res/values/strings.xml | 3 + 3 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/org/xbmc/kore/ui/AddonOverviewFragment.java diff --git a/app/src/main/java/org/xbmc/kore/ui/AddonOverviewFragment.java b/app/src/main/java/org/xbmc/kore/ui/AddonOverviewFragment.java new file mode 100644 index 0000000..a8f3425 --- /dev/null +++ b/app/src/main/java/org/xbmc/kore/ui/AddonOverviewFragment.java @@ -0,0 +1,137 @@ +/* + * Copyright 2016 Synced Synapse. 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.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.view.ViewPager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.astuetz.PagerSlidingTabStrip; + +import org.xbmc.kore.R; +import org.xbmc.kore.utils.LogUtils; +import org.xbmc.kore.utils.TabsAdapter; +import org.xbmc.kore.utils.UIUtils; +import org.xbmc.kore.utils.Utils; + +import butterknife.ButterKnife; +import butterknife.InjectView; + +/** + * Container for the TV Show overview and Episodes list + */ +public class AddonOverviewFragment extends Fragment { + private static final String TAG = LogUtils.makeLogTag(AddonOverviewFragment.class); + + private TabsAdapter tabsAdapter; + + @InjectView(R.id.pager_tab_strip) PagerSlidingTabStrip pagerTabStrip; + @InjectView(R.id.pager) ViewPager viewPager; + + /** + * Create a new instance of this, initialized to show the addon addonId + */ + @TargetApi(21) + public static AddonOverviewFragment newInstance(AddonListFragment.ViewHolder vh) { + AddonOverviewFragment fragment = new AddonOverviewFragment(); + + Bundle args = new Bundle(); + args.putString(AddonDetailsFragment.BUNDLE_KEY_ADDONID, vh.addonId); + args.putString(AddonDetailsFragment.BUNDLE_KEY_NAME, vh.addonName); + args.putString(AddonDetailsFragment.BUNDLE_KEY_AUTHOR, vh.author); + args.putString(AddonDetailsFragment.BUNDLE_KEY_VERSION, vh.version); + args.putString(AddonDetailsFragment.BUNDLE_KEY_SUMMARY, vh.summary); + args.putString(AddonDetailsFragment.BUNDLE_KEY_DESCRIPTION, vh.description); + args.putString(AddonDetailsFragment.BUNDLE_KEY_FANART, vh.fanart); + args.putString(AddonDetailsFragment.BUNDLE_KEY_POSTER, vh.poster); + args.putBoolean(AddonDetailsFragment.BUNDLE_KEY_ENABLED, vh.enabled); + + if( Utils.isLollipopOrLater()) { + args.putString(AddonDetailsFragment.POSTER_TRANS_NAME, vh.artView.getTransitionName()); + } + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + Bundle args = getArguments(); + + if ((container == null) || (args == null)) { + // We're not being shown or there's nothing to show + return null; + } + + ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_default_view_pager, container, false); + ButterKnife.inject(this, root); + + Bundle plugin = new Bundle(); + MediaFileListFragment.FileLocation rootPath = new MediaFileListFragment.FileLocation( + args.getString(AddonDetailsFragment.BUNDLE_KEY_NAME, "Content"), + "plugin://" + args.getString(AddonDetailsFragment.BUNDLE_KEY_ADDONID, ""), + true); + rootPath.setRootDir(true); + plugin.putParcelable(MediaFileListFragment.ROOT_PATH, rootPath); + + long baseFragmentId = 1000; + tabsAdapter = new TabsAdapter(getActivity(), getChildFragmentManager()) + .addTab(AddonDetailsFragment.class, args, R.string.addon_overview, baseFragmentId++) + .addTab(MediaFileListFragment.class, plugin, R.string.addon_content, baseFragmentId++) + ; + viewPager.setAdapter(tabsAdapter); + pagerTabStrip.setViewPager(viewPager); + + return root; + } + + @Override + public void onActivityCreated (Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setHasOptionsMenu(false); + } + + public Fragment getCurrentTabFragment() { + return tabsAdapter.getItem(viewPager.getCurrentItem()); + } + + public View getSharedElement() { + View view = getView(); + if (view == null) + return null; + + //Note: this works as R.id.poster is only used in TVShowOverviewFragment. + //If the same id is used in other fragments in the TabsAdapter we + //need to check which fragment is currently displayed + View artView = view.findViewById(R.id.poster); + View scrollView = view.findViewById(R.id.media_panel); + if (( artView != null ) && + ( scrollView != null ) && + UIUtils.isViewInBounds(scrollView, artView)) { + return artView; + } + + return null; + } +} diff --git a/app/src/main/java/org/xbmc/kore/ui/AddonsActivity.java b/app/src/main/java/org/xbmc/kore/ui/AddonsActivity.java index 5bd3fc6..1a02654 100644 --- a/app/src/main/java/org/xbmc/kore/ui/AddonsActivity.java +++ b/app/src/main/java/org/xbmc/kore/ui/AddonsActivity.java @@ -206,7 +206,7 @@ public class AddonsActivity extends BaseActivity selectedAddonTitle = vh.addonName; // Replace list fragment - final AddonDetailsFragment addonDetailsFragment = AddonDetailsFragment.newInstance(vh); + final AddonOverviewFragment addonDetailsFragment = AddonOverviewFragment.newInstance(vh); FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction(); // Set up transitions diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f97757f..48df2ad 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -286,6 +286,9 @@ Overview Episodes + Overview + Content + Artists Albums Genres