diff --git a/app/src/main/assets/gpl_2.html b/app/src/main/assets/gpl_2.html index 37d578a69..0e1b8827e 100644 --- a/app/src/main/assets/gpl_2.html +++ b/app/src/main/assets/gpl_2.html @@ -15,9 +15,9 @@ Version 2, June 1991

-Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
-51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
-
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
diff --git a/app/src/main/assets/mpl2.html b/app/src/main/assets/mpl2.html index 5009391a0..5e988a70c 100644 --- a/app/src/main/assets/mpl2.html +++ b/app/src/main/assets/mpl2.html @@ -4,6 +4,7 @@ Mozilla Public License, version 2.0 +

Mozilla Public License
Version 2.0

1. Definitions

diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index 3ff55cb76..03b856d31 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -181,7 +181,6 @@ public class MainActivity extends AppCompatActivity implements HistoryListener { ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { - actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayHomeAsUpEnabled(false); } return true; diff --git a/app/src/main/java/org/schabi/newpipe/about/License.java b/app/src/main/java/org/schabi/newpipe/about/License.java index 312ad5087..e51e1d0f1 100644 --- a/app/src/main/java/org/schabi/newpipe/about/License.java +++ b/app/src/main/java/org/schabi/newpipe/about/License.java @@ -50,6 +50,10 @@ public class License implements Parcelable { public String getAbbreviation() { return abbreviation; } + + public String getFilename() { + return filename; + } @Override public int describeContents() { diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java b/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java index 8b0e67d18..4400cac53 100644 --- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java +++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java @@ -1,22 +1,13 @@ package org.schabi.newpipe.about; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; -import android.support.v7.app.AlertDialog; -import android.view.ContextMenu; -import android.view.LayoutInflater; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.webkit.WebView; +import android.view.*; import android.widget.TextView; - import org.schabi.newpipe.R; import java.util.Arrays; @@ -48,25 +39,7 @@ public class LicenseFragment extends Fragment { * @param license the license to show */ public static void showLicense(Context context, License license) { - if(context == null) { - throw new NullPointerException("context is null"); - } - if(license == null) { - throw new NullPointerException("license is null"); - } - AlertDialog.Builder alert = new AlertDialog.Builder(context); - alert.setTitle(license.getName()); - - WebView wv = new WebView(context); - wv.loadUrl(license.getContentUri().toString()); - alert.setView(wv); - alert.setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }); - alert.show(); + new LicenseFragmentHelper().execute(context, license); } @Override @@ -111,7 +84,6 @@ public class LicenseFragment extends Fragment { }); softwareComponentsView.addView(componentView); registerForContextMenu(componentView); - } return rootView; } diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java new file mode 100644 index 000000000..726e97ec2 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java @@ -0,0 +1,111 @@ +package org.schabi.newpipe.about; + +import android.content.Context; +import android.content.DialogInterface; +import android.os.AsyncTask; +import android.support.v7.app.AlertDialog; +import android.webkit.WebView; +import org.schabi.newpipe.R; +import org.schabi.newpipe.util.ThemeHelper; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class LicenseFragmentHelper extends AsyncTask { + + private Context context; + private License license; + + @Override + protected Integer doInBackground(Object... objects) { + context = (Context) objects[0]; + license = (License) objects[1]; + return 1; + } + + @Override + protected void onPostExecute(Integer result){ + String webViewData = getFormattedLicense(context, license); + AlertDialog.Builder alert = new AlertDialog.Builder(context); + alert.setTitle(license.getName()); + + WebView wv = new WebView(context); + wv.loadData(webViewData, "text/html; charset=UTF-8", null); + + alert.setView(wv); + alert.setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + alert.show(); + } + + /** + * @param context the context to use + * @param license the license + * @return String which contains a HTML formatted license page styled according to the context's theme + */ + public static String getFormattedLicense(Context context, License license) { + if(context == null) { + throw new NullPointerException("context is null"); + } + if(license == null) { + throw new NullPointerException("license is null"); + } + + String licenseContent = ""; + String webViewData; + try { + BufferedReader in = new BufferedReader(new InputStreamReader(context.getAssets().open(license.getFilename()), "UTF-8")); + String str; + while ((str = in.readLine()) != null) { + licenseContent += str; + } + in.close(); + + // split the HTML file and insert the stylesheet into the HEAD of the file + String[] insert = licenseContent.split(""); + webViewData = insert[0] + "" + + insert[1]; + } catch (Exception e) { + throw new NullPointerException("could not get license file:" + getLicenseStylesheet(context)); + } + return webViewData; + } + + /** + * + * @param context + * @return String which is a CSS stylesheet according to the context's theme + */ + public static String getLicenseStylesheet(Context context) { + boolean isLightTheme = ThemeHelper.isLightThemeSelected(context); + return "body{padding:12px 15px;margin:0;background:#" + + getHexRGBColor(context, isLightTheme + ? R.color.light_license_background_color + : R.color.dark_license_background_color) + + ";color:#" + + getHexRGBColor(context, isLightTheme + ? R.color.light_license_text_color + : R.color.dark_license_text_color) + ";}" + + "a[href]{color:#" + + getHexRGBColor(context, isLightTheme + ? R.color.light_youtube_primary_color + : R.color.dark_youtube_primary_color) + ";}" + + "pre{white-space: pre-wrap;}"; + } + + /** + * Cast R.color to a hexadecimal color value + * @param context the context to use + * @param color the color number from R.color + * @return a six characters long String with hexadecimal RGB values + */ + public static String getHexRGBColor(Context context, int color) { + return context.getResources().getString(color).substring(3); + } + +} diff --git a/app/src/main/java/org/schabi/newpipe/fragments/BlankFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/BlankFragment.java index e9e50dd69..e81645202 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/BlankFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/BlankFragment.java @@ -2,6 +2,7 @@ package org.schabi.newpipe.fragments; import android.os.Bundle; import android.support.annotation.Nullable; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -13,6 +14,24 @@ public class BlankFragment extends BaseFragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { + if(activity != null && activity.getSupportActionBar() != null) { + activity.getSupportActionBar() + .setTitle("NewPipe"); + } return inflater.inflate(R.layout.fragment_blank, container, false); } + + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if(isVisibleToUser) { + if(activity != null && activity.getSupportActionBar() != null) { + activity.getSupportActionBar() + .setTitle("NewPipe"); + } + // leave this inline. Will make it harder for copy cats. + // If you are a Copy cat FUCK YOU. + // I WILL FIND YOU, AND I WILL ... + } + } } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java index 317630faa..7992f88f0 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java @@ -33,6 +33,7 @@ import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.KioskTranslator; import org.schabi.newpipe.util.NavigationHelper; +import org.schabi.newpipe.util.ThemeHelper; import java.util.concurrent.ExecutionException; @@ -84,6 +85,28 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte viewPager.setOffscreenPageLimit(adapter.getCount()); tabLayout.setupWithViewPager(viewPager); + + if(ThemeHelper.isLightThemeSelected(getActivity())) { + tabLayout.setBackgroundColor(getResources().getColor(R.color.light_youtube_primary_color)); + } + + if(PreferenceManager.getDefaultSharedPreferences(getActivity()) + .getString(getString(R.string.main_page_content_key), getString(R.string.blank_page_key)) + .equals(getString(R.string.subscription_page_key))) { + if(ThemeHelper.isLightThemeSelected(getActivity())) { + tabLayout.getTabAt(0).setIcon(R.drawable.ic_channel_black_24dp); + } else{ + tabLayout.getTabAt(0).setIcon(R.drawable.ic_channel_white_24dp); + } + } else { + if(ThemeHelper.isLightThemeSelected(getActivity())) { + tabLayout.getTabAt(0).setIcon(R.drawable.ic_whatshot_black_24dp); + tabLayout.getTabAt(1).setIcon(R.drawable.ic_channel_black_24dp); + } else { + tabLayout.getTabAt(0).setIcon(R.drawable.ic_whatshot_white_24dp); + tabLayout.getTabAt(1).setIcon(R.drawable.ic_channel_white_24dp); + } + } } /*////////////////////////////////////////////////////////////////////////// @@ -108,7 +131,6 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte ActionBar supportActionBar = activity.getSupportActionBar(); if (supportActionBar != null) { - supportActionBar.setDisplayShowTitleEnabled(false); supportActionBar.setDisplayHomeAsUpEnabled(false); } } @@ -171,7 +193,8 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte @Override public CharSequence getPageTitle(int position) { - return getString(this.tabTitles[position]); + //return getString(this.tabTitles[position]); + return ""; } @Override diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java index daa1b62ed..61a97e847 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java @@ -26,6 +26,7 @@ import org.schabi.newpipe.R; import org.schabi.newpipe.database.subscription.SubscriptionEntity; import org.schabi.newpipe.extractor.ListExtractor; import org.schabi.newpipe.extractor.NewPipe; +import org.schabi.newpipe.extractor.UrlIdHandler; import org.schabi.newpipe.extractor.channel.ChannelInfo; import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.fragments.list.BaseListInfoFragment; @@ -33,6 +34,7 @@ import org.schabi.newpipe.fragments.subscription.SubscriptionService; import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.util.AnimationUtils; import org.schabi.newpipe.util.ExtractorHelper; +import org.schabi.newpipe.util.KioskTranslator; import org.schabi.newpipe.util.Localization; import java.util.List; @@ -81,6 +83,20 @@ public class ChannelFragment extends BaseListInfoFragment { // LifeCycle //////////////////////////////////////////////////////////////////////////*/ + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if(activity != null + && useAsFrontPage + && isVisibleToUser) { + try { + activity.getSupportActionBar().setTitle(currentInfo.name); + } catch (Exception e) { + onError(e); + } + } + } + @Override public void onAttach(Context context) { super.onAttach(context); @@ -125,7 +141,6 @@ public class ChannelFragment extends BaseListInfoFragment { ActionBar supportActionBar = activity.getSupportActionBar(); if(useAsFrontPage) { supportActionBar.setDisplayHomeAsUpEnabled(false); - //supportActionBar.setDisplayShowTitleEnabled(false); } else { inflater.inflate(R.menu.menu_channel, menu); diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/feed/FeedFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/feed/FeedFragment.java index 379ec591a..835647eec 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/feed/FeedFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/feed/FeedFragment.java @@ -121,7 +121,7 @@ public class FeedFragment extends BaseListFragment, Voi } if(useAsFrontPage) { - supportActionBar.setDisplayHomeAsUpEnabled(false); + supportActionBar.setDisplayShowTitleEnabled(true); //supportActionBar.setDisplayShowTitleEnabled(false); } } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java index b1387b1ad..a9d1cda76 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java @@ -53,6 +53,9 @@ import static org.schabi.newpipe.util.AnimationUtils.animateView; public class KioskFragment extends BaseListInfoFragment { + private String kioskId = ""; + + /*////////////////////////////////////////////////////////////////////////// // Views //////////////////////////////////////////////////////////////////////////*/ @@ -76,6 +79,7 @@ public class KioskFragment extends BaseListInfoFragment { instance.setInitialData(serviceId, kioskTypeUrlIdHandler.getUrl(kioskId), kioskId); + instance.kioskId = kioskId; return instance; } @@ -83,6 +87,18 @@ public class KioskFragment extends BaseListInfoFragment { // LifeCycle //////////////////////////////////////////////////////////////////////////*/ + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if(useAsFrontPage && isVisibleToUser) { + try { + activity.getSupportActionBar().setTitle(KioskTranslator.getTranslatedKioskName(kioskId, getActivity())); + } catch (Exception e) { + onError(e); + } + } + } + @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_kiosk, container, false); @@ -97,7 +113,6 @@ public class KioskFragment extends BaseListInfoFragment { super.onCreateOptionsMenu(menu, inflater); ActionBar supportActionBar = activity.getSupportActionBar(); if (supportActionBar != null && useAsFrontPage) { - //supportActionBar.setDisplayShowTitleEnabled(false); supportActionBar.setDisplayHomeAsUpEnabled(false); } } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/subscription/SubscriptionFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/subscription/SubscriptionFragment.java index afb2f078e..c4dfbc50d 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/subscription/SubscriptionFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/subscription/SubscriptionFragment.java @@ -7,6 +7,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -19,6 +20,7 @@ import org.schabi.newpipe.fragments.BaseStateFragment; import org.schabi.newpipe.info_list.InfoItemBuilder; import org.schabi.newpipe.info_list.InfoListAdapter; import org.schabi.newpipe.report.UserAction; +import org.schabi.newpipe.util.KioskTranslator; import org.schabi.newpipe.util.NavigationHelper; import java.util.ArrayList; @@ -52,6 +54,17 @@ public class SubscriptionFragment extends BaseStateFragment windowLayoutParams.x + (windowLayoutParams.width / 2f); + updateScreenSize(); + checkPositionBounds(); + updatePopupSize((int) screenWidth, -1); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { - if (isResizing) return false; + if (isResizing) return super.onScroll(e1, e2, distanceX, distanceY); if (playerImpl.getCurrentState() != BasePlayer.STATE_BUFFERING && (!isMoving || playerImpl.getControlsRoot().getAlpha() != 1f)) playerImpl.showControls(0); @@ -659,19 +650,33 @@ public class PopupVideoPlayer extends Service { } } + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + if (Math.abs(velocityX) > SHUTDOWN_FLING_VELOCITY) { + if (DEBUG) Log.d(TAG, "Popup close fling velocity= " + velocityX); + onVideoClose(); + return true; + } + return false; + } + @Override public boolean onTouch(View v, MotionEvent event) { gestureDetector.onTouchEvent(event); - if (event.getAction() == MotionEvent.ACTION_MOVE && isResizing && !isMoving) { - //if (DEBUG) Log.d(TAG, "onTouch() ACTION_MOVE > v = [" + v + "], e1.getRaw = [" + event.getRawX() + ", " + event.getRawY() + "]"); - int width; - if (isResizingRightSide) width = (int) event.getRawX() - windowLayoutParams.x; - else { - width = (int) (windowLayoutParams.width + (windowLayoutParams.x - event.getRawX())); - if (width > minimumWidth) windowLayoutParams.x = initialPopupX - (width - onDownPopupWidth); - } - if (width <= maximumWidth && width >= minimumWidth) updatePopupSize(width, -1); - return true; + if (event.getPointerCount() == 2 && !isResizing) { + if (DEBUG) Log.d(TAG, "onTouch() 2 finger pointer detected, enabling resizing."); + playerImpl.showAndAnimateControl(-1, true); + playerImpl.getLoadingPanel().setVisibility(View.GONE); + + playerImpl.hideControls(0, 0); + animateView(playerImpl.getCurrentDisplaySeek(), false, 0, 0); + animateView(playerImpl.getResizingIndicator(), true, 200, 0); + isResizing = true; + } + + if (event.getAction() == MotionEvent.ACTION_MOVE && !isMoving && isResizing) { + if (DEBUG) Log.d(TAG, "onTouch() ACTION_MOVE > v = [" + v + "], e1.getRaw = [" + event.getRawX() + ", " + event.getRawY() + "]"); + return handleMultiDrag(event); } if (event.getAction() == MotionEvent.ACTION_UP) { @@ -692,6 +697,29 @@ public class PopupVideoPlayer extends Service { return true; } + private boolean handleMultiDrag(final MotionEvent event) { + if (event.getPointerCount() != 2) return false; + + final float firstPointerX = event.getX(0); + final float secondPointerX = event.getX(1); + + final float diff = Math.abs(firstPointerX - secondPointerX); + if (firstPointerX > secondPointerX) { + // second pointer is the anchor (the leftmost pointer) + windowLayoutParams.x = (int) (event.getRawX() - diff); + } else { + // first pointer is the anchor + windowLayoutParams.x = (int) event.getRawX(); + } + + checkPositionBounds(); + updateScreenSize(); + + final int width = (int) Math.min(screenWidth, diff); + updatePopupSize(width, -1); + + return true; + } } /** diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java index 4f6c2d1ae..2cda95987 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java @@ -50,7 +50,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment { getContext()); String summary = - String.format(getString(R.string.service_kosk_string), + String.format(getString(R.string.service_kiosk_string), serviceName, kioskName); @@ -122,7 +122,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment { getContext()); String summary = - String.format(getString(R.string.service_kosk_string), + String.format(getString(R.string.service_kiosk_string), service.getServiceInfo().name, kioskName); diff --git a/app/src/main/java/org/schabi/newpipe/settings/SelectKioskFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SelectKioskFragment.java index a9f0a53ed..9e5420b6e 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SelectKioskFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SelectKioskFragment.java @@ -126,7 +126,7 @@ public class SelectKioskFragment extends DialogFragment { for(StreamingService service : NewPipe.getServices()) { for(String kioskId : service.getKioskList().getAvailableKiosks()) { - String name = String.format(getString(R.string.service_kosk_string), + String name = String.format(getString(R.string.service_kiosk_string), service.getServiceInfo().name, KioskTranslator.getTranslatedKioskName(kioskId, getContext())); kioskList.add(new Entry( diff --git a/app/src/main/res/drawable-hdpi/ic_channel_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_channel_black_24dp.png new file mode 100644 index 000000000..ac66a3b86 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_channel_black_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_channel_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_channel_white_24dp.png new file mode 100644 index 000000000..e0ef2a1a8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_channel_white_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_whatshot_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_whatshot_black_24dp.png new file mode 100644 index 000000000..b2db5994c Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_whatshot_black_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_whatshot_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_whatshot_white_24dp.png new file mode 100644 index 000000000..46ed1f8b6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_whatshot_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_channel_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_channel_black_24dp.png new file mode 100644 index 000000000..984ff498e Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_channel_black_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_channel_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_channel_white_24dp.png new file mode 100644 index 000000000..68f6ffd7f Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_channel_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_whatshot_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_whatshot_black_24dp.png new file mode 100644 index 000000000..31b1981f0 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_whatshot_black_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_whatshot_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_whatshot_white_24dp.png new file mode 100644 index 000000000..4cf6f85f8 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_whatshot_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_channel_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_channel_black_24dp.png new file mode 100644 index 000000000..0851f1738 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_channel_black_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_channel_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_channel_white_24dp.png new file mode 100644 index 000000000..2f0f6c5fd Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_channel_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_whatshot_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_whatshot_black_24dp.png new file mode 100644 index 000000000..e9ae82670 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_whatshot_black_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_whatshot_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_whatshot_white_24dp.png new file mode 100644 index 000000000..3651d061a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_whatshot_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_channel_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_channel_black_24dp.png new file mode 100644 index 000000000..4861728c4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_channel_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_channel_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_channel_white_24dp.png new file mode 100644 index 000000000..2fd740ee8 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_channel_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_whatshot_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_whatshot_black_24dp.png new file mode 100644 index 000000000..a14dcd695 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_whatshot_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_whatshot_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_whatshot_white_24dp.png new file mode 100644 index 000000000..8eaf3755d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_whatshot_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_channel_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_channel_black_24dp.png new file mode 100644 index 000000000..2ff64b449 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_channel_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_channel_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_channel_white_24dp.png new file mode 100644 index 000000000..9384592d6 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_channel_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_whatshot_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_whatshot_black_24dp.png new file mode 100644 index 000000000..8f03a95c7 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_whatshot_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_whatshot_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_whatshot_white_24dp.png new file mode 100644 index 000000000..5c5d86873 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_whatshot_white_24dp.png differ diff --git a/app/src/main/res/layout/fragment_blank.xml b/app/src/main/res/layout/fragment_blank.xml index ad91b1d1d..d1167d722 100644 --- a/app/src/main/res/layout/fragment_blank.xml +++ b/app/src/main/res/layout/fragment_blank.xml @@ -16,4 +16,10 @@ android:layout_marginTop="50dp" android:visibility="gone" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_channel.xml b/app/src/main/res/layout/fragment_channel.xml index 460f95a7a..67691fc81 100644 --- a/app/src/main/res/layout/fragment_channel.xml +++ b/app/src/main/res/layout/fragment_channel.xml @@ -62,4 +62,10 @@ android:visibility="gone" tools:visibility="visible"/> + + diff --git a/app/src/main/res/layout/fragment_feed.xml b/app/src/main/res/layout/fragment_feed.xml index 0f2d0b675..0868d8233 100644 --- a/app/src/main/res/layout/fragment_feed.xml +++ b/app/src/main/res/layout/fragment_feed.xml @@ -34,4 +34,10 @@ android:visibility="gone" tools:visibility="visible"/> + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_kiosk.xml b/app/src/main/res/layout/fragment_kiosk.xml index a85c30cb1..4730e66c8 100644 --- a/app/src/main/res/layout/fragment_kiosk.xml +++ b/app/src/main/res/layout/fragment_kiosk.xml @@ -4,6 +4,7 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index dac5478ff..b1dd3e20b 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -10,13 +10,14 @@ android:id="@+id/main_tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_alignParentBottom="true" + android:layout_alignParentTop="true" + android:background="@color/dark_youtube_primary_color" app:tabGravity="fill"/> + android:layout_below="@id/main_tab_layout"/> diff --git a/app/src/main/res/layout/fragment_playlist.xml b/app/src/main/res/layout/fragment_playlist.xml index d5ef26a63..37c609fa4 100644 --- a/app/src/main/res/layout/fragment_playlist.xml +++ b/app/src/main/res/layout/fragment_playlist.xml @@ -62,4 +62,10 @@ android:visibility="gone" tools:visibility="visible"/> + + diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 04b10347c..d49d23175 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -81,4 +81,10 @@ android:visibility="gone" tools:visibility="visible"/> + + diff --git a/app/src/main/res/layout/fragment_subscription.xml b/app/src/main/res/layout/fragment_subscription.xml index 35cfbfeb7..e0d0348dc 100644 --- a/app/src/main/res/layout/fragment_subscription.xml +++ b/app/src/main/res/layout/fragment_subscription.xml @@ -35,4 +35,10 @@ android:visibility="gone" tools:visibility="visible"/> + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_video_detail.xml b/app/src/main/res/layout/fragment_video_detail.xml index 0d87809fc..b067db7bc 100644 --- a/app/src/main/res/layout/fragment_video_detail.xml +++ b/app/src/main/res/layout/fragment_video_detail.xml @@ -1,345 +1,308 @@ - - - + + android:focusableInTouchMode="true"> - - + android:layout_height="match_parent" + android:visibility="visible" + app:parallax_factor="1.9"> - - + + android:orientation="vertical"> - - - - - - - - - - + - - + android:foreground="?attr/selectableItemBackground"> + android:id="@+id/detail_thumbnail_image_view" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@android:color/transparent" + android:contentDescription="@string/detail_thumbnail_view_description" + android:scaleType="centerCrop" + tools:ignore="RtlHardcoded" + tools:layout_height="200dp" + tools:src="@drawable/dummy_thumbnail"/> + + - - - - - - - - + + android:background="?android:windowBackground"> - - - - - - - - - - - - - - - - - - - - - - - - + - - - + android:paddingRight="12dp"> + tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a ultricies ex. Integer sit amet sodales risus. Duis non mi et urna pretium bibendum. Nunc eleifend est quis ipsum porttitor egestas. Sed facilisis, nisl quis eleifend pellentesque, orci metus egestas dolor, at accumsan eros metus quis libero."/> - - + android:layout_marginLeft="5dp" + android:src="@drawable/arrow_down" + tools:ignore="ContentDescription,RtlHardcoded"/> - + - - + + + + + + + - + + android:layout_marginTop="6dp" + android:baselineAligned="false" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + android:background="?attr/selectableItemBackground" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingBottom="8dp" + android:paddingLeft="12dp" + android:paddingRight="12dp" + android:paddingTop="8dp"> + + + + + + + + - - - - - - - + - - + android:layout_marginTop="5dp" + android:orientation="vertical" + android:visibility="gone" + tools:visibility="visible"> + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + diff --git a/app/src/main/res/layout/toolbar_layout.xml b/app/src/main/res/layout/toolbar_layout.xml index 36ab6454e..096974c03 100644 --- a/app/src/main/res/layout/toolbar_layout.xml +++ b/app/src/main/res/layout/toolbar_layout.xml @@ -36,9 +36,4 @@ - - \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index aea2e91d2..38235a17b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -267,4 +267,4 @@ Populaires Top 50 Nouveau & populaire - + diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index a809e81dc..e3a29073a 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -273,5 +273,4 @@ pentru a deschide în mod pop-up Trenduri Top 50 Tendințe - %1$s/%2$s diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 9f8a41bc5..3008f68ee 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -10,6 +10,8 @@ #48868686 #1fa6a6a6 #5a000000 + #ffffff + #212121 #222222 @@ -20,6 +22,8 @@ #48ffffff #1f717171 #82000000 + #424242 + #ffffff #000 @@ -37,8 +41,8 @@ #e53935 #fff - #d6d6d6d - #717171d + #d6d6d6 + #717171 #607D8B diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 94b185988..4f06dc4c4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -290,5 +290,5 @@ Trending Top 50 New & hot - %1$s/%2$s + %1$s/%2$s