Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
6772381afc
|
@ -16,7 +16,7 @@
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:logo="@mipmap/ic_launcher"
|
android:logo="@mipmap/ic_launcher"
|
||||||
android:theme="@style/DarkTheme"
|
android:theme="@style/OpeningTheme"
|
||||||
tools:ignore="AllowBackup">
|
tools:ignore="AllowBackup">
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
<activity
|
<activity
|
||||||
android:name=".player.old.PlayVideoActivity"
|
android:name=".player.old.PlayVideoActivity"
|
||||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||||
android:theme="@style/VideoPlayerTheme"
|
android:theme="@style/OldVideoPlayerTheme"
|
||||||
tools:ignore="UnusedAttribute"/>
|
tools:ignore="UnusedAttribute"/>
|
||||||
|
|
||||||
<service
|
<service
|
||||||
|
@ -56,8 +56,7 @@
|
||||||
android:name=".player.MainVideoPlayer"
|
android:name=".player.MainVideoPlayer"
|
||||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
|
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"/>
|
||||||
android:theme="@style/PlayerTheme"/>
|
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".settings.SettingsActivity"
|
android:name=".settings.SettingsActivity"
|
||||||
|
|
|
@ -30,7 +30,6 @@ import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.design.widget.NavigationView;
|
import android.support.design.widget.NavigationView;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentManager;
|
|
||||||
import android.support.v4.view.GravityCompat;
|
import android.support.v4.view.GravityCompat;
|
||||||
import android.support.v4.widget.DrawerLayout;
|
import android.support.v4.widget.DrawerLayout;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
|
@ -50,17 +49,18 @@ import org.schabi.newpipe.database.history.dao.WatchHistoryDAO;
|
||||||
import org.schabi.newpipe.database.history.model.HistoryEntry;
|
import org.schabi.newpipe.database.history.model.HistoryEntry;
|
||||||
import org.schabi.newpipe.database.history.model.SearchHistoryEntry;
|
import org.schabi.newpipe.database.history.model.SearchHistoryEntry;
|
||||||
import org.schabi.newpipe.database.history.model.WatchHistoryEntry;
|
import org.schabi.newpipe.database.history.model.WatchHistoryEntry;
|
||||||
import org.schabi.newpipe.extractor.NewPipe;
|
|
||||||
import org.schabi.newpipe.extractor.StreamingService;
|
import org.schabi.newpipe.extractor.StreamingService;
|
||||||
import org.schabi.newpipe.extractor.stream.AudioStream;
|
import org.schabi.newpipe.extractor.stream.AudioStream;
|
||||||
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
||||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||||
import org.schabi.newpipe.fragments.BackPressable;
|
import org.schabi.newpipe.fragments.BackPressable;
|
||||||
|
import org.schabi.newpipe.fragments.MainFragment;
|
||||||
import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
|
import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
|
||||||
import org.schabi.newpipe.fragments.list.search.SearchFragment;
|
import org.schabi.newpipe.fragments.list.search.SearchFragment;
|
||||||
import org.schabi.newpipe.history.HistoryListener;
|
import org.schabi.newpipe.history.HistoryListener;
|
||||||
import org.schabi.newpipe.util.Constants;
|
import org.schabi.newpipe.util.Constants;
|
||||||
import org.schabi.newpipe.util.NavigationHelper;
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
|
import org.schabi.newpipe.util.ServiceHelper;
|
||||||
import org.schabi.newpipe.util.StateSaver;
|
import org.schabi.newpipe.util.StateSaver;
|
||||||
import org.schabi.newpipe.util.ThemeHelper;
|
import org.schabi.newpipe.util.ThemeHelper;
|
||||||
|
|
||||||
|
@ -73,7 +73,8 @@ import io.reactivex.subjects.PublishSubject;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity implements HistoryListener {
|
public class MainActivity extends AppCompatActivity implements HistoryListener {
|
||||||
private static final String TAG = "MainActivity";
|
private static final String TAG = "MainActivity";
|
||||||
public static final boolean DEBUG = false;
|
public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release");
|
||||||
|
|
||||||
private SharedPreferences sharedPreferences;
|
private SharedPreferences sharedPreferences;
|
||||||
private ActionBarDrawerToggle toggle = null;
|
private ActionBarDrawerToggle toggle = null;
|
||||||
|
|
||||||
|
@ -83,9 +84,11 @@ public class MainActivity extends AppCompatActivity implements HistoryListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
if (DEBUG)
|
if (DEBUG) Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
|
||||||
Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
|
|
||||||
ThemeHelper.setTheme(this);
|
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this));
|
||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_main);
|
setContentView(R.layout.activity_main);
|
||||||
|
|
||||||
|
@ -93,62 +96,51 @@ public class MainActivity extends AppCompatActivity implements HistoryListener {
|
||||||
initFragments();
|
initFragments();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setSupportActionBar(findViewById(R.id.toolbar));
|
||||||
|
setupDrawer();
|
||||||
|
initHistory();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupDrawer() {
|
||||||
final Toolbar toolbar = findViewById(R.id.toolbar);
|
final Toolbar toolbar = findViewById(R.id.toolbar);
|
||||||
final DrawerLayout drawer = findViewById(R.id.drawer_layout);
|
final DrawerLayout drawer = findViewById(R.id.drawer_layout);
|
||||||
final NavigationView drawerItems = findViewById(R.id.navigation);
|
final NavigationView drawerItems = findViewById(R.id.navigation);
|
||||||
setSupportActionBar(toolbar);
|
|
||||||
|
|
||||||
drawerItems.getMenu().getItem(NewPipe.getIdOfService(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("service", "YouTube"))).setChecked(true);
|
drawerItems.setItemIconTintList(null);
|
||||||
|
drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this)).setChecked(true);
|
||||||
|
|
||||||
if (!BuildConfig.BUILD_TYPE.equals("release")) {
|
if (!BuildConfig.BUILD_TYPE.equals("release")) {
|
||||||
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open, R.string.drawer_close);
|
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open, R.string.drawer_close);
|
||||||
toggle.syncState();
|
toggle.syncState();
|
||||||
drawer.addDrawerListener(toggle);
|
drawer.addDrawerListener(toggle);
|
||||||
|
drawer.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
|
||||||
|
private int lastService;
|
||||||
|
|
||||||
drawerItems.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
|
@Override
|
||||||
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
|
public void onDrawerOpened(View drawerView) {
|
||||||
drawerItems.getMenu().getItem(NewPipe.getIdOfService(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("service", "YouTube"))).setChecked(false);
|
lastService = ServiceHelper.getSelectedServiceId(MainActivity.this);
|
||||||
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit();
|
|
||||||
editor.putString("service", item.getTitle().toString());
|
|
||||||
editor.apply();
|
|
||||||
drawer.closeDrawers();
|
|
||||||
drawerItems.getMenu().getItem(NewPipe.getIdOfService(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("service", "YouTube"))).setChecked(true);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDrawerClosed(View drawerView) {
|
||||||
|
if (lastService != ServiceHelper.getSelectedServiceId(MainActivity.this)) {
|
||||||
|
new Handler(Looper.getMainLooper()).post(MainActivity.this::recreate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
drawerItems.setNavigationItemSelectedListener(item -> {
|
||||||
|
if (item.getGroupId() == R.id.menu_services_group) {
|
||||||
|
drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this)).setChecked(false);
|
||||||
|
ServiceHelper.setSelectedServiceId(this, item.getTitle().toString());
|
||||||
|
drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this)).setChecked(true);
|
||||||
|
}
|
||||||
|
drawer.closeDrawers();
|
||||||
|
return true;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
|
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
|
|
||||||
@Override
|
|
||||||
public void onBackStackChanged() {
|
|
||||||
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
|
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
||||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
onBackPressed();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
|
|
||||||
if (toggle != null) {
|
|
||||||
toggle.syncState();
|
|
||||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
drawer.openDrawer(GravityCompat.START);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
|
|
||||||
|
|
||||||
initHistory();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -171,20 +163,14 @@ public class MainActivity extends AppCompatActivity implements HistoryListener {
|
||||||
sharedPreferences.edit().putBoolean(Constants.KEY_THEME_CHANGE, false).apply();
|
sharedPreferences.edit().putBoolean(Constants.KEY_THEME_CHANGE, false).apply();
|
||||||
// https://stackoverflow.com/questions/10844112/runtimeexception-performing-pause-of-activity-that-is-not-resumed
|
// https://stackoverflow.com/questions/10844112/runtimeexception-performing-pause-of-activity-that-is-not-resumed
|
||||||
// Briefly, let the activity resume properly posting the recreate call to end of the message queue
|
// Briefly, let the activity resume properly posting the recreate call to end of the message queue
|
||||||
new Handler(Looper.getMainLooper()).post(new Runnable() {
|
new Handler(Looper.getMainLooper()).post(MainActivity.this::recreate);
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
MainActivity.this.recreate();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sharedPreferences.getBoolean(Constants.KEY_MAIN_PAGE_CHANGE, false)) {
|
if (sharedPreferences.getBoolean(Constants.KEY_MAIN_PAGE_CHANGE, false)) {
|
||||||
if (DEBUG) Log.d(TAG, "main page has changed, recreating main fragment...");
|
if (DEBUG) Log.d(TAG, "main page has changed, recreating main fragment...");
|
||||||
sharedPreferences.edit().putBoolean(Constants.KEY_MAIN_PAGE_CHANGE, false).apply();
|
sharedPreferences.edit().putBoolean(Constants.KEY_MAIN_PAGE_CHANGE, false).apply();
|
||||||
NavigationHelper.openMainActivity(this);
|
NavigationHelper.openMainActivity(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -218,6 +204,10 @@ public class MainActivity extends AppCompatActivity implements HistoryListener {
|
||||||
} else super.onBackPressed();
|
} else super.onBackPressed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onHomeButtonPressed() {
|
||||||
|
NavigationHelper.gotoMainFragment(getSupportFragmentManager());
|
||||||
|
}
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Menu
|
// Menu
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
@ -243,9 +233,17 @@ public class MainActivity extends AppCompatActivity implements HistoryListener {
|
||||||
if (actionBar != null) {
|
if (actionBar != null) {
|
||||||
actionBar.setDisplayHomeAsUpEnabled(false);
|
actionBar.setDisplayHomeAsUpEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateDrawerNavigation();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||||
|
return super.onPrepareOptionsMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
if (DEBUG) Log.d(TAG, "onOptionsItemSelected() called with: item = [" + item + "]");
|
if (DEBUG) Log.d(TAG, "onOptionsItemSelected() called with: item = [" + item + "]");
|
||||||
|
@ -253,7 +251,7 @@ public class MainActivity extends AppCompatActivity implements HistoryListener {
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
NavigationHelper.gotoMainFragment(getSupportFragmentManager());
|
onHomeButtonPressed();
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_settings:
|
case R.id.action_settings:
|
||||||
NavigationHelper.openSettings(this);
|
NavigationHelper.openSettings(this);
|
||||||
|
@ -287,6 +285,27 @@ public class MainActivity extends AppCompatActivity implements HistoryListener {
|
||||||
// Utils
|
// Utils
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
private void updateDrawerNavigation() {
|
||||||
|
if (getSupportActionBar() == null) return;
|
||||||
|
|
||||||
|
final Toolbar toolbar = findViewById(R.id.toolbar);
|
||||||
|
final DrawerLayout drawer = findViewById(R.id.drawer_layout);
|
||||||
|
|
||||||
|
final Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_holder);
|
||||||
|
if (fragment instanceof MainFragment) {
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
|
||||||
|
if (toggle != null) {
|
||||||
|
toggle.syncState();
|
||||||
|
toolbar.setNavigationOnClickListener(v -> drawer.openDrawer(GravityCompat.START));
|
||||||
|
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNDEFINED);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
toolbar.setNavigationOnClickListener(v -> onHomeButtonPressed());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void handleIntent(Intent intent) {
|
private void handleIntent(Intent intent) {
|
||||||
if (DEBUG) Log.d(TAG, "handleIntent() called with: intent = [" + intent + "]");
|
if (DEBUG) Log.d(TAG, "handleIntent() called with: intent = [" + intent + "]");
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,6 @@ import org.schabi.newpipe.MainActivity;
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
import org.schabi.newpipe.ReCaptchaActivity;
|
import org.schabi.newpipe.ReCaptchaActivity;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
|
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
|
||||||
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
|
||||||
import org.schabi.newpipe.report.ErrorActivity;
|
import org.schabi.newpipe.report.ErrorActivity;
|
||||||
import org.schabi.newpipe.report.UserAction;
|
import org.schabi.newpipe.report.UserAction;
|
||||||
import org.schabi.newpipe.util.ExtractorHelper;
|
import org.schabi.newpipe.util.ExtractorHelper;
|
||||||
|
@ -247,6 +246,12 @@ public abstract class BaseStateFragment<I> extends BaseFragment implements ViewC
|
||||||
// Utils
|
// Utils
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
if (DEBUG) Log.d(TAG, "setTitle() called with: title = [" + title + "]");
|
||||||
|
if (activity != null && activity.getSupportActionBar() != null) {
|
||||||
|
activity.getSupportActionBar().setTitle(title);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void openUrlInBrowser(String url) {
|
protected void openUrlInBrowser(String url) {
|
||||||
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
||||||
|
|
|
@ -23,6 +23,7 @@ import android.view.ViewGroup;
|
||||||
import org.schabi.newpipe.BaseFragment;
|
import org.schabi.newpipe.BaseFragment;
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
import org.schabi.newpipe.extractor.NewPipe;
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
|
import org.schabi.newpipe.extractor.ServiceList;
|
||||||
import org.schabi.newpipe.extractor.StreamingService;
|
import org.schabi.newpipe.extractor.StreamingService;
|
||||||
import org.schabi.newpipe.extractor.kiosk.KioskList;
|
import org.schabi.newpipe.extractor.kiosk.KioskList;
|
||||||
import org.schabi.newpipe.fragments.list.channel.ChannelFragment;
|
import org.schabi.newpipe.fragments.list.channel.ChannelFragment;
|
||||||
|
@ -33,23 +34,20 @@ import org.schabi.newpipe.report.ErrorActivity;
|
||||||
import org.schabi.newpipe.report.UserAction;
|
import org.schabi.newpipe.report.UserAction;
|
||||||
import org.schabi.newpipe.util.KioskTranslator;
|
import org.schabi.newpipe.util.KioskTranslator;
|
||||||
import org.schabi.newpipe.util.NavigationHelper;
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
|
import org.schabi.newpipe.util.ServiceHelper;
|
||||||
import org.schabi.newpipe.util.ThemeHelper;
|
import org.schabi.newpipe.util.ThemeHelper;
|
||||||
|
|
||||||
public class MainFragment extends BaseFragment implements TabLayout.OnTabSelectedListener {
|
public class MainFragment extends BaseFragment implements TabLayout.OnTabSelectedListener {
|
||||||
private ViewPager viewPager;
|
|
||||||
private boolean showBlankTab = false;
|
|
||||||
|
|
||||||
public int currentServiceId = -1;
|
public int currentServiceId = -1;
|
||||||
|
private ViewPager viewPager;
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Constants
|
// Constants
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
private static final int FALLBACK_SERVICE_ID = ServiceList.YouTube.getId();
|
||||||
private static final int FALLBACK_SERVICE_ID = 0; // Youtube
|
private static final String FALLBACK_CHANNEL_URL = "https://www.youtube.com/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ";
|
||||||
private static final String FALLBACK_CHANNEL_URL =
|
|
||||||
"https://www.youtube.com/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ";
|
|
||||||
private static final String FALLBACK_CHANNEL_NAME = "Music";
|
private static final String FALLBACK_CHANNEL_NAME = "Music";
|
||||||
private static final String FALLBACK_KIOSK_ID = "Trending";
|
private static final String FALLBACK_KIOSK_ID = "Trending";
|
||||||
private static final int KIOSK_MENU_OFFSET = 2000;
|
private static final int KIOSK_MENU_OFFSET = 2000;
|
||||||
|
@ -66,8 +64,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
currentServiceId = Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(getActivity())
|
currentServiceId = ServiceHelper.getSelectedServiceId(activity);
|
||||||
.getString(getString(R.string.current_service_key), "0"));
|
|
||||||
return inflater.inflate(R.layout.fragment_main, container, false);
|
return inflater.inflate(R.layout.fragment_main, container, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,22 +82,10 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
|
||||||
|
|
||||||
tabLayout.setupWithViewPager(viewPager);
|
tabLayout.setupWithViewPager(viewPager);
|
||||||
|
|
||||||
int channelIcon;
|
int channelIcon = ThemeHelper.resolveResourceIdFromAttr(activity, R.attr.ic_channel);
|
||||||
int whatsHotIcon;
|
int whatsHotIcon = ThemeHelper.resolveResourceIdFromAttr(activity, R.attr.ic_hot);
|
||||||
|
|
||||||
if (ThemeHelper.isLightThemeSelected(getActivity())) {
|
if (isSubscriptionsPageOnlySelected()) {
|
||||||
tabLayout.setBackgroundColor(getResources().getColor(R.color.light_youtube_primary_color));
|
|
||||||
channelIcon = R.drawable.ic_channel_black_24dp;
|
|
||||||
whatsHotIcon = R.drawable.ic_whatshot_black_24dp;
|
|
||||||
} else {
|
|
||||||
channelIcon = R.drawable.ic_channel_white_24dp;
|
|
||||||
whatsHotIcon = R.drawable.ic_whatshot_white_24dp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
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))) {
|
|
||||||
tabLayout.getTabAt(0).setIcon(channelIcon);
|
tabLayout.getTabAt(0).setIcon(channelIcon);
|
||||||
} else {
|
} else {
|
||||||
tabLayout.getTabAt(0).setIcon(whatsHotIcon);
|
tabLayout.getTabAt(0).setIcon(whatsHotIcon);
|
||||||
|
@ -138,7 +123,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.action_search:
|
case R.id.action_search:
|
||||||
NavigationHelper.openSearchFragment(getFragmentManager(), NewPipe.getIdOfService(PreferenceManager.getDefaultSharedPreferences(getActivity()).getString("service", "YouTube")), "");
|
NavigationHelper.openSearchFragment(getFragmentManager(), ServiceHelper.getSelectedServiceId(activity), "");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
|
@ -163,11 +148,6 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
|
||||||
|
|
||||||
private class PagerAdapter extends FragmentPagerAdapter {
|
private class PagerAdapter extends FragmentPagerAdapter {
|
||||||
|
|
||||||
private int[] tabTitles = new int[]{
|
|
||||||
R.string.tab_main,
|
|
||||||
R.string.tab_subscriptions
|
|
||||||
};
|
|
||||||
|
|
||||||
PagerAdapter(FragmentManager fm) {
|
PagerAdapter(FragmentManager fm) {
|
||||||
super(fm);
|
super(fm);
|
||||||
}
|
}
|
||||||
|
@ -176,13 +156,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
|
||||||
public Fragment getItem(int position) {
|
public Fragment getItem(int position) {
|
||||||
switch (position) {
|
switch (position) {
|
||||||
case 0:
|
case 0:
|
||||||
if(PreferenceManager.getDefaultSharedPreferences(getActivity())
|
return isSubscriptionsPageOnlySelected() ? new SubscriptionFragment() : getMainPageFragment();
|
||||||
.getString(getString(R.string.main_page_content_key), getString(R.string.blank_page_key))
|
|
||||||
.equals(getString(R.string.subscription_page_key))) {
|
|
||||||
return new SubscriptionFragment();
|
|
||||||
} else {
|
|
||||||
return getMainPageFragment();
|
|
||||||
}
|
|
||||||
case 1:
|
case 1:
|
||||||
return new SubscriptionFragment();
|
return new SubscriptionFragment();
|
||||||
default:
|
default:
|
||||||
|
@ -198,13 +172,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCount() {
|
public int getCount() {
|
||||||
if(PreferenceManager.getDefaultSharedPreferences(getActivity())
|
return isSubscriptionsPageOnlySelected() ? 1 : 2;
|
||||||
.getString(getString(R.string.main_page_content_key), getString(R.string.blank_page_key))
|
|
||||||
.equals(getString(R.string.subscription_page_key))) {
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,28 +180,33 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
|
||||||
// Main page content
|
// Main page content
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
private boolean isSubscriptionsPageOnlySelected() {
|
||||||
|
return PreferenceManager.getDefaultSharedPreferences(activity)
|
||||||
|
.getString(getString(R.string.main_page_content_key), getString(R.string.blank_page_key))
|
||||||
|
.equals(getString(R.string.subscription_page_key));
|
||||||
|
}
|
||||||
|
|
||||||
private Fragment getMainPageFragment() {
|
private Fragment getMainPageFragment() {
|
||||||
try {
|
try {
|
||||||
SharedPreferences preferences =
|
SharedPreferences preferences =
|
||||||
PreferenceManager.getDefaultSharedPreferences(getActivity());
|
PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||||
final String setMainPage = preferences.getString(getString(R.string.main_page_content_key),
|
final String setMainPage = preferences.getString(getString(R.string.main_page_content_key),
|
||||||
getString(R.string.main_page_selectd_kiosk_id));
|
getString(R.string.main_page_selectd_kiosk_id));
|
||||||
if(setMainPage.equals(getString(R.string.blank_page_key))) {
|
if (setMainPage.equals(getString(R.string.blank_page_key))) {
|
||||||
return new BlankFragment();
|
return new BlankFragment();
|
||||||
} else if(setMainPage.equals(getString(R.string.kiosk_page_key))) {
|
} else if (setMainPage.equals(getString(R.string.kiosk_page_key))) {
|
||||||
int serviceId = preferences.getInt(getString(R.string.main_page_selected_service),
|
int serviceId = preferences.getInt(getString(R.string.main_page_selected_service),
|
||||||
FALLBACK_SERVICE_ID);
|
FALLBACK_SERVICE_ID);
|
||||||
String kioskId = preferences.getString(getString(R.string.main_page_selectd_kiosk_id),
|
String kioskId = preferences.getString(getString(R.string.main_page_selectd_kiosk_id),
|
||||||
FALLBACK_KIOSK_ID);
|
FALLBACK_KIOSK_ID);
|
||||||
KioskFragment fragment = KioskFragment.getInstance(serviceId, kioskId
|
KioskFragment fragment = KioskFragment.getInstance(serviceId, kioskId);
|
||||||
);
|
|
||||||
fragment.useAsFrontPage(true);
|
fragment.useAsFrontPage(true);
|
||||||
return fragment;
|
return fragment;
|
||||||
} else if(setMainPage.equals(getString(R.string.feed_page_key))) {
|
} else if (setMainPage.equals(getString(R.string.feed_page_key))) {
|
||||||
FeedFragment fragment = new FeedFragment();
|
FeedFragment fragment = new FeedFragment();
|
||||||
fragment.useAsFrontPage(true);
|
fragment.useAsFrontPage(true);
|
||||||
return fragment;
|
return fragment;
|
||||||
} else if(setMainPage.equals(getString(R.string.channel_page_key))) {
|
} else if (setMainPage.equals(getString(R.string.channel_page_key))) {
|
||||||
int serviceId = preferences.getInt(getString(R.string.main_page_selected_service),
|
int serviceId = preferences.getInt(getString(R.string.main_page_selected_service),
|
||||||
FALLBACK_SERVICE_ID);
|
FALLBACK_SERVICE_ID);
|
||||||
String url = preferences.getString(getString(R.string.main_page_selected_channel_url),
|
String url = preferences.getString(getString(R.string.main_page_selected_channel_url),
|
||||||
|
@ -266,7 +239,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
|
||||||
StreamingService service = NewPipe.getService(currentServiceId);
|
StreamingService service = NewPipe.getService(currentServiceId);
|
||||||
KioskList kl = service.getKioskList();
|
KioskList kl = service.getKioskList();
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for(final String ks : kl.getAvailableKiosks()) {
|
for (final String ks : kl.getAvailableKiosks()) {
|
||||||
menu.add(0, KIOSK_MENU_OFFSET + i, Menu.NONE,
|
menu.add(0, KIOSK_MENU_OFFSET + i, Menu.NONE,
|
||||||
KioskTranslator.getTranslatedKioskName(ks, getContext()))
|
KioskTranslator.getTranslatedKioskName(ks, getContext()))
|
||||||
.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
||||||
|
|
|
@ -84,17 +84,6 @@ public abstract class BaseListInfoFragment<I extends ListInfo> extends BaseListF
|
||||||
currentNextItemsUrl = (String) savedObjects.poll();
|
currentNextItemsUrl = (String) savedObjects.poll();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
|
||||||
// Utils
|
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
|
||||||
|
|
||||||
public void setTitle(String title) {
|
|
||||||
Log.d(TAG, "setTitle() called with: title = [" + title + "]");
|
|
||||||
if (activity.getSupportActionBar() != null) {
|
|
||||||
activity.getSupportActionBar().setTitle(title);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Load and handle
|
// Load and handle
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
|
@ -43,7 +43,6 @@ import org.schabi.newpipe.util.AnimationUtils;
|
||||||
import org.schabi.newpipe.util.ExtractorHelper;
|
import org.schabi.newpipe.util.ExtractorHelper;
|
||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
import org.schabi.newpipe.util.NavigationHelper;
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
import org.schabi.newpipe.util.PermissionHelper;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
@ -102,11 +101,7 @@ public class ChannelFragment extends BaseListInfoFragment<ChannelInfo> {
|
||||||
if(activity != null
|
if(activity != null
|
||||||
&& useAsFrontPage
|
&& useAsFrontPage
|
||||||
&& isVisibleToUser) {
|
&& isVisibleToUser) {
|
||||||
try {
|
setTitle(currentInfo != null ? currentInfo.getName() : name);
|
||||||
activity.getSupportActionBar().setTitle(currentInfo.getName());
|
|
||||||
} catch (Exception e) {
|
|
||||||
onError(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,7 @@ public class KioskFragment extends BaseListInfoFragment<KioskInfo> {
|
||||||
|
|
||||||
@State
|
@State
|
||||||
protected String kioskId = "";
|
protected String kioskId = "";
|
||||||
|
protected String kioskTranslatedName;
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Views
|
// Views
|
||||||
|
@ -87,16 +88,11 @@ public class KioskFragment extends BaseListInfoFragment<KioskInfo> {
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityCreated(Bundle savedState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onActivityCreated(savedState);
|
super.onCreate(savedInstanceState);
|
||||||
try {
|
|
||||||
activity.getSupportActionBar()
|
kioskTranslatedName = KioskTranslator.getTranslatedKioskName(kioskId, activity);
|
||||||
.setTitle(KioskTranslator.getTranslatedKioskName(kioskId, getActivity()));
|
name = kioskTranslatedName;
|
||||||
} catch (Exception e) {
|
|
||||||
onUnrecoverableError(e, UserAction.UI_ERROR,
|
|
||||||
"none",
|
|
||||||
"none", R.string.app_ui_crash);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -104,8 +100,7 @@ public class KioskFragment extends BaseListInfoFragment<KioskInfo> {
|
||||||
super.setUserVisibleHint(isVisibleToUser);
|
super.setUserVisibleHint(isVisibleToUser);
|
||||||
if(useAsFrontPage && isVisibleToUser && activity != null) {
|
if(useAsFrontPage && isVisibleToUser && activity != null) {
|
||||||
try {
|
try {
|
||||||
activity.getSupportActionBar()
|
setTitle(kioskTranslatedName);
|
||||||
.setTitle(KioskTranslator.getTranslatedKioskName(kioskId, getActivity()));
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
onUnrecoverableError(e, UserAction.UI_ERROR,
|
onUnrecoverableError(e, UserAction.UI_ERROR,
|
||||||
"none",
|
"none",
|
||||||
|
@ -115,11 +110,8 @@ public class KioskFragment extends BaseListInfoFragment<KioskInfo> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
View view = inflater.inflate(R.layout.fragment_kiosk, container, false);
|
return inflater.inflate(R.layout.fragment_kiosk, container, false);
|
||||||
activity.getSupportActionBar()
|
|
||||||
.setTitle(KioskTranslator.getTranslatedKioskName(kioskId, getActivity()));
|
|
||||||
return view;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -171,9 +163,8 @@ public class KioskFragment extends BaseListInfoFragment<KioskInfo> {
|
||||||
public void handleResult(@NonNull final KioskInfo result) {
|
public void handleResult(@NonNull final KioskInfo result) {
|
||||||
super.handleResult(result);
|
super.handleResult(result);
|
||||||
|
|
||||||
String title = KioskTranslator.getTranslatedKioskName(result.id, getActivity());
|
name = kioskTranslatedName;
|
||||||
ActionBar supportActionBar = activity.getSupportActionBar();
|
setTitle(kioskTranslatedName);
|
||||||
supportActionBar.setTitle(title);
|
|
||||||
|
|
||||||
if (!result.getErrors().isEmpty()) {
|
if (!result.getErrors().isEmpty()) {
|
||||||
showSnackBarError(result.getErrors(),
|
showSnackBarError(result.getErrors(),
|
||||||
|
|
|
@ -14,21 +14,17 @@ import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
import org.schabi.newpipe.database.subscription.SubscriptionEntity;
|
|
||||||
import org.schabi.newpipe.extractor.NewPipe;
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
|
import org.schabi.newpipe.extractor.ServiceList;
|
||||||
import org.schabi.newpipe.extractor.StreamingService;
|
import org.schabi.newpipe.extractor.StreamingService;
|
||||||
import org.schabi.newpipe.fragments.subscription.SubscriptionService;
|
|
||||||
import org.schabi.newpipe.report.ErrorActivity;
|
import org.schabi.newpipe.report.ErrorActivity;
|
||||||
import org.schabi.newpipe.report.UserAction;
|
import org.schabi.newpipe.report.UserAction;
|
||||||
import org.schabi.newpipe.util.KioskTranslator;
|
import org.schabi.newpipe.util.KioskTranslator;
|
||||||
import org.schabi.newpipe.util.ServiceIconMapper;
|
import org.schabi.newpipe.util.ServiceHelper;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
|
||||||
import io.reactivex.schedulers.Schedulers;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Christian Schabesberger on 09.10.17.
|
* Created by Christian Schabesberger on 09.10.17.
|
||||||
* SelectKioskFragment.java is part of NewPipe.
|
* SelectKioskFragment.java is part of NewPipe.
|
||||||
|
@ -125,13 +121,15 @@ public class SelectKioskFragment extends DialogFragment {
|
||||||
throws Exception {
|
throws Exception {
|
||||||
|
|
||||||
for(StreamingService service : NewPipe.getServices()) {
|
for(StreamingService service : NewPipe.getServices()) {
|
||||||
|
//TODO: Multi-service support
|
||||||
|
if (service.getServiceId() != ServiceList.YouTube.getId()) continue;
|
||||||
|
|
||||||
for(String kioskId : service.getKioskList().getAvailableKiosks()) {
|
for(String kioskId : service.getKioskList().getAvailableKiosks()) {
|
||||||
String name = String.format(getString(R.string.service_kiosk_string),
|
String name = String.format(getString(R.string.service_kiosk_string),
|
||||||
service.getServiceInfo().name,
|
service.getServiceInfo().name,
|
||||||
KioskTranslator.getTranslatedKioskName(kioskId, getContext()));
|
KioskTranslator.getTranslatedKioskName(kioskId, getContext()));
|
||||||
kioskList.add(new Entry(
|
kioskList.add(new Entry(
|
||||||
//ServiceIconMapper.getIconResource(service.getServiceId()),
|
ServiceHelper.getIcon(service.getServiceId()),
|
||||||
ServiceIconMapper.getIconResource(-1),
|
|
||||||
service.getServiceId(),
|
service.getServiceId(),
|
||||||
kioskId,
|
kioskId,
|
||||||
name));
|
name));
|
||||||
|
@ -140,9 +138,7 @@ public class SelectKioskFragment extends DialogFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
//todo: uncommend this line on multyservice support
|
return kioskList.size();
|
||||||
//return kioskList.size();
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public SelectKioskItemHolder onCreateViewHolder(ViewGroup parent, int type) {
|
public SelectKioskItemHolder onCreateViewHolder(ViewGroup parent, int type) {
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
package org.schabi.newpipe.util;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import android.support.annotation.DrawableRes;
|
||||||
|
|
||||||
|
import org.schabi.newpipe.BuildConfig;
|
||||||
|
import org.schabi.newpipe.R;
|
||||||
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
|
import org.schabi.newpipe.extractor.ServiceList;
|
||||||
|
import org.schabi.newpipe.extractor.StreamingService;
|
||||||
|
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||||
|
|
||||||
|
public class ServiceHelper {
|
||||||
|
private static final StreamingService DEFAULT_FALLBACK_SERVICE = ServiceList.YouTube.getService();
|
||||||
|
|
||||||
|
@DrawableRes
|
||||||
|
public static int getIcon(int serviceId) {
|
||||||
|
switch (serviceId) {
|
||||||
|
case 0:
|
||||||
|
return R.drawable.youtube;
|
||||||
|
case 1:
|
||||||
|
return R.drawable.soundcloud;
|
||||||
|
default:
|
||||||
|
return R.drawable.service;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getSelectedServiceId(Context context) {
|
||||||
|
if (BuildConfig.BUILD_TYPE.equals("release")) return DEFAULT_FALLBACK_SERVICE.getServiceId();
|
||||||
|
|
||||||
|
final String serviceName = PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
|
.getString(context.getString(R.string.current_service_key), context.getString(R.string.default_service_value));
|
||||||
|
|
||||||
|
int serviceId;
|
||||||
|
try {
|
||||||
|
serviceId = NewPipe.getService(serviceName).getServiceId();
|
||||||
|
} catch (ExtractionException e) {
|
||||||
|
serviceId = DEFAULT_FALLBACK_SERVICE.getServiceId();
|
||||||
|
}
|
||||||
|
|
||||||
|
return serviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setSelectedServiceId(Context context, int serviceId) {
|
||||||
|
String serviceName;
|
||||||
|
try {
|
||||||
|
serviceName = NewPipe.getService(serviceId).getServiceInfo().name;
|
||||||
|
} catch (ExtractionException e) {
|
||||||
|
serviceName = DEFAULT_FALLBACK_SERVICE.getServiceInfo().name;
|
||||||
|
}
|
||||||
|
|
||||||
|
setSelectedServicePreferences(context, serviceName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setSelectedServiceId(Context context, String serviceName) {
|
||||||
|
int serviceId = NewPipe.getIdOfService(serviceName);
|
||||||
|
if (serviceId == -1) serviceName = DEFAULT_FALLBACK_SERVICE.getServiceInfo().name;
|
||||||
|
|
||||||
|
setSelectedServicePreferences(context, serviceName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void setSelectedServicePreferences(Context context, String serviceName) {
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(context).edit().
|
||||||
|
putString(context.getString(R.string.current_service_key), serviceName).apply();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,35 +0,0 @@
|
||||||
package org.schabi.newpipe.util;
|
|
||||||
|
|
||||||
import org.schabi.newpipe.R;
|
|
||||||
import org.schabi.newpipe.extractor.NewPipe;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by Chrsitian Schabesberger on 09.10.17.
|
|
||||||
* ServiceIconMapper.java is part of NewPipe.
|
|
||||||
*
|
|
||||||
* NewPipe is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* NewPipe is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class ServiceIconMapper {
|
|
||||||
public static int getIconResource(int service_id) {
|
|
||||||
switch(service_id) {
|
|
||||||
case 0:
|
|
||||||
return R.drawable.youtube;
|
|
||||||
case 1:
|
|
||||||
return R.drawable.soud_cloud;
|
|
||||||
default:
|
|
||||||
return R.drawable.service;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -7,16 +7,32 @@ import android.support.annotation.AttrRes;
|
||||||
import android.support.annotation.StyleRes;
|
import android.support.annotation.StyleRes;
|
||||||
|
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
|
import org.schabi.newpipe.extractor.StreamingService;
|
||||||
|
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||||
|
|
||||||
public class ThemeHelper {
|
public class ThemeHelper {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply the selected theme (on NewPipe settings) in the context
|
* Apply the selected theme (on NewPipe settings) in the context
|
||||||
|
* with the default style (see {@link #setTheme(Context, int)}).
|
||||||
*
|
*
|
||||||
* @param context context that the theme will be applied
|
* @param context context that the theme will be applied
|
||||||
*/
|
*/
|
||||||
public static void setTheme(Context context) {
|
public static void setTheme(Context context) {
|
||||||
context.setTheme(getSelectedThemeStyle(context));
|
setTheme(context, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply the selected theme (on NewPipe settings) in the context,
|
||||||
|
* themed according with the styles defined for the service .
|
||||||
|
*
|
||||||
|
* @param context context that the theme will be applied
|
||||||
|
* @param serviceId the theme will be styled to the service with this id,
|
||||||
|
* pass -1 to get the default style
|
||||||
|
*/
|
||||||
|
public static void setTheme(Context context, int serviceId) {
|
||||||
|
context.setTheme(getThemeForService(context, serviceId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -29,18 +45,42 @@ public class ThemeHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
@StyleRes
|
@StyleRes
|
||||||
public static int getSelectedThemeStyle(Context context) {
|
public static int getThemeForService(Context context, int serviceId) {
|
||||||
String lightTheme = context.getResources().getString(R.string.light_theme_key);
|
String lightTheme = context.getResources().getString(R.string.light_theme_key);
|
||||||
String darkTheme = context.getResources().getString(R.string.dark_theme_key);
|
String darkTheme = context.getResources().getString(R.string.dark_theme_key);
|
||||||
String blackTheme = context.getResources().getString(R.string.black_theme_key);
|
String blackTheme = context.getResources().getString(R.string.black_theme_key);
|
||||||
|
|
||||||
String selectedTheme = getSelectedTheme(context);
|
String selectedTheme = getSelectedTheme(context);
|
||||||
|
|
||||||
if (selectedTheme.equals(lightTheme)) return R.style.LightTheme;
|
int defaultTheme = R.style.DarkTheme;
|
||||||
else if (selectedTheme.equals(blackTheme)) return R.style.BlackTheme;
|
if (selectedTheme.equals(lightTheme)) defaultTheme = R.style.LightTheme;
|
||||||
else if (selectedTheme.equals(darkTheme)) return R.style.DarkTheme;
|
else if (selectedTheme.equals(blackTheme)) defaultTheme = R.style.BlackTheme;
|
||||||
// Fallback
|
else if (selectedTheme.equals(darkTheme)) defaultTheme = R.style.DarkTheme;
|
||||||
else return R.style.DarkTheme;
|
|
||||||
|
if (serviceId <= -1) {
|
||||||
|
return defaultTheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
final StreamingService service;
|
||||||
|
try {
|
||||||
|
service = NewPipe.getService(serviceId);
|
||||||
|
} catch (ExtractionException ignored) {
|
||||||
|
return defaultTheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
String themeName = "DarkTheme";
|
||||||
|
if (selectedTheme.equals(lightTheme)) themeName = "LightTheme";
|
||||||
|
else if (selectedTheme.equals(blackTheme)) themeName = "BlackTheme";
|
||||||
|
else if (selectedTheme.equals(darkTheme)) themeName = "DarkTheme";
|
||||||
|
|
||||||
|
themeName += "." + service.getServiceInfo().name;
|
||||||
|
int resourceId = context.getResources().getIdentifier(themeName, "style", context.getPackageName());
|
||||||
|
|
||||||
|
if (resourceId > 0) {
|
||||||
|
return resourceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultTheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getSelectedTheme(Context context) {
|
public static String getSelectedTheme(Context context) {
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:interpolator="@android:interpolator/decelerate_quint">
|
||||||
|
|
||||||
|
<alpha
|
||||||
|
android:duration="150"
|
||||||
|
android:fromAlpha="0.00"
|
||||||
|
android:toAlpha="1.0"/>
|
||||||
|
</set>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:interpolator="@android:interpolator/accelerate_quint">
|
||||||
|
|
||||||
|
<alpha
|
||||||
|
android:duration="350"
|
||||||
|
android:fromAlpha="1.0"
|
||||||
|
android:toAlpha="0.00"/>
|
||||||
|
</set>
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
@ -11,7 +11,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:background="@color/dark_youtube_primary_color"
|
android:background="?attr/colorPrimary"
|
||||||
app:tabGravity="fill"/>
|
app:tabGravity="fill"/>
|
||||||
|
|
||||||
<android.support.v4.view.ViewPager
|
<android.support.v4.view.ViewPager
|
||||||
|
|
|
@ -1,5 +1,14 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:title="@string/youtube" />
|
<group
|
||||||
<item android:title="@string/soundcloud" />
|
android:id="@+id/menu_services_group">
|
||||||
|
<item
|
||||||
|
android:id="@+id/menu_service_youtube"
|
||||||
|
android:icon="@drawable/youtube"
|
||||||
|
android:title="@string/youtube"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/menu_service_soundcloud"
|
||||||
|
android:icon="@drawable/soundcloud"
|
||||||
|
android:title="@string/soundcloud"/>
|
||||||
|
</group>
|
||||||
</menu>
|
</menu>
|
|
@ -328,5 +328,4 @@
|
||||||
|
|
||||||
<string name="preferred_player_fetcher_notification_title">Obtention des infos…</string>
|
<string name="preferred_player_fetcher_notification_title">Obtention des infos…</string>
|
||||||
<string name="preferred_player_fetcher_notification_message">Le contenu demandé est en chargement</string>
|
<string name="preferred_player_fetcher_notification_message">Le contenu demandé est en chargement</string>
|
||||||
<string name="preferred_player_share_menu_title">\@string/preferred_player_settings_title</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -314,7 +314,6 @@
|
||||||
<string name="video_streams_empty">Fant ingen videostrømmer</string>
|
<string name="video_streams_empty">Fant ingen videostrømmer</string>
|
||||||
<string name="audio_streams_empty">Fant ingen lydstrømmer</string>
|
<string name="audio_streams_empty">Fant ingen lydstrømmer</string>
|
||||||
|
|
||||||
<string name="preferred_player_share_menu_title">\@string/preferred_player_settings_title</string>
|
|
||||||
<string name="preferred_player_share_menu_dialog_title">Åpne med foretrukket avspiller</string>
|
<string name="preferred_player_share_menu_dialog_title">Åpne med foretrukket avspiller</string>
|
||||||
<string name="preferred_player_settings_title">Foretrukket avpsiller</string>
|
<string name="preferred_player_settings_title">Foretrukket avpsiller</string>
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<!--TODO: preffix these with "ic_"-->
|
||||||
<attr name="thumbs_up" format="reference"/>
|
<attr name="thumbs_up" format="reference"/>
|
||||||
<attr name="thumbs_down" format="reference"/>
|
<attr name="thumbs_down" format="reference"/>
|
||||||
<attr name="audio" format="reference"/>
|
<attr name="audio" format="reference"/>
|
||||||
|
@ -23,6 +24,8 @@
|
||||||
<attr name="search_add" format="reference"/>
|
<attr name="search_add" format="reference"/>
|
||||||
<attr name="options" format="reference"/>
|
<attr name="options" format="reference"/>
|
||||||
<attr name="play" format="reference"/>
|
<attr name="play" format="reference"/>
|
||||||
|
<attr name="ic_hot" format="reference"/>
|
||||||
|
<attr name="ic_channel" format="reference"/>
|
||||||
|
|
||||||
<!-- Can't refer to colors directly into drawable's xml-->
|
<!-- Can't refer to colors directly into drawable's xml-->
|
||||||
<attr name="toolbar_shadow_drawable" format="reference"/>
|
<attr name="toolbar_shadow_drawable" format="reference"/>
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<color name="ic_launcher_background">#CD201F</color>
|
||||||
|
|
||||||
<!-- Light Theme -->
|
<!-- Light Theme -->
|
||||||
<color name="light_background_color">#EEEEEE</color>
|
<color name="light_background_color">#EEEEEE</color>
|
||||||
<color name="light_youtube_primary_color">#e53935</color>
|
|
||||||
<color name="light_youtube_dark_color">#d32f2f</color>
|
|
||||||
<color name="light_youtube_accent_color">#000000</color>
|
|
||||||
<color name="light_settings_accent_color">#e53935</color>
|
<color name="light_settings_accent_color">#e53935</color>
|
||||||
<color name="light_separator_color">#32000000</color>
|
<color name="light_separator_color">#32000000</color>
|
||||||
<color name="light_ripple_color">#48868686</color>
|
<color name="light_ripple_color">#48868686</color>
|
||||||
|
@ -18,9 +16,6 @@
|
||||||
|
|
||||||
<!-- Dark Theme -->
|
<!-- Dark Theme -->
|
||||||
<color name="dark_background_color">#222222</color>
|
<color name="dark_background_color">#222222</color>
|
||||||
<color name="dark_youtube_primary_color">#CD322E</color>
|
|
||||||
<color name="dark_youtube_dark_color">#BC211D</color>
|
|
||||||
<color name="dark_youtube_accent_color">#FFFFFF</color>
|
|
||||||
<color name="dark_settings_accent_color">#ff5252</color>
|
<color name="dark_settings_accent_color">#ff5252</color>
|
||||||
<color name="dark_separator_color">#0affffff</color>
|
<color name="dark_separator_color">#0affffff</color>
|
||||||
<color name="dark_ripple_color">#48ffffff</color>
|
<color name="dark_ripple_color">#48ffffff</color>
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<!-- YouTube -->
|
||||||
|
<color name="light_youtube_primary_color">#e53935</color>
|
||||||
|
<color name="light_youtube_dark_color">#d32f2f</color>
|
||||||
|
<color name="light_youtube_accent_color">#000000</color>
|
||||||
|
|
||||||
|
<color name="dark_youtube_primary_color">#CD322E</color>
|
||||||
|
<color name="dark_youtube_dark_color">#BC211D</color>
|
||||||
|
<color name="dark_youtube_accent_color">#FFFFFF</color>
|
||||||
|
|
||||||
|
<!-- SoundCloud -->
|
||||||
|
<color name="light_soundcloud_primary_color">#f57c00</color>
|
||||||
|
<color name="light_soundcloud_dark_color">#ef6c00</color>
|
||||||
|
<color name="light_soundcloud_accent_color">#000000</color>
|
||||||
|
|
||||||
|
<color name="dark_soundcloud_primary_color">#f57c00</color>
|
||||||
|
<color name="dark_soundcloud_dark_color">#ef6c00</color>
|
||||||
|
<color name="dark_soundcloud_accent_color">#FFFFFF</color>
|
||||||
|
|
||||||
|
</resources>
|
|
@ -1,4 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<color name="ic_launcher_background">#CD201F</color>
|
|
||||||
</resources>
|
|
|
@ -1,7 +1,12 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources translatable="false">
|
<resources translatable="false">
|
||||||
<!-- Service -->
|
<!-- Service -->
|
||||||
<string name="current_service_key" translatable="false">current_service</string>
|
<string-array name="service_list" translatable="false">
|
||||||
|
<item>@string/youtube</item>
|
||||||
|
<item>@string/soundcloud</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="current_service_key" translatable="false">service</string>
|
||||||
|
<string name="default_service_value" translatable="false">@string/youtube</string>
|
||||||
|
|
||||||
<!-- Key values -->
|
<!-- Key values -->
|
||||||
<string name="download_path_key" translatable="false">download_path</string>
|
<string name="download_path_key" translatable="false">download_path</string>
|
||||||
|
@ -46,12 +51,6 @@
|
||||||
<item>144p</item>
|
<item>144p</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="service_list" translatable="false">
|
|
||||||
<item>@string/youtube</item>
|
|
||||||
<item>@string/soundcloud</item>
|
|
||||||
</string-array>
|
|
||||||
<string name="service_key" translatable="false">service</string>
|
|
||||||
<string name="default_service_value" translatable="false">@string/youtube</string>
|
|
||||||
|
|
||||||
<string name="video_mp4_key" translatable="false">video_mp4</string>
|
<string name="video_mp4_key" translatable="false">video_mp4</string>
|
||||||
<string name="video_webm_key" translatable="false">video_webm</string>
|
<string name="video_webm_key" translatable="false">video_webm</string>
|
||||||
|
|
|
@ -345,7 +345,7 @@
|
||||||
<string name="soundcloud" translatable="false">SoundCloud</string>
|
<string name="soundcloud" translatable="false">SoundCloud</string>
|
||||||
|
|
||||||
<!-- Preferred player -->
|
<!-- Preferred player -->
|
||||||
<string name="preferred_player_share_menu_title">@string/preferred_player_settings_title</string>
|
<string name="preferred_player_share_menu_title" translatable="false">@string/preferred_player_settings_title</string>
|
||||||
<string name="preferred_player_share_menu_dialog_title">Open with preferred player</string>
|
<string name="preferred_player_share_menu_dialog_title">Open with preferred player</string>
|
||||||
<string name="preferred_player_settings_title">Preferred player</string>
|
<string name="preferred_player_settings_title">Preferred player</string>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,15 @@
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<!-- Base application theme. -->
|
<style name="OpeningTheme" parent="Theme.AppCompat.NoActionBar">
|
||||||
|
<item name="colorPrimary">@android:color/transparent</item>
|
||||||
|
<item name="colorPrimaryDark">@android:color/transparent</item>
|
||||||
|
<item name="colorAccent">@android:color/transparent</item>
|
||||||
|
|
||||||
|
<item name="android:windowBackground">@color/dark_background_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!-- Base themes -->
|
||||||
|
|
||||||
<style name="LightTheme" parent="Theme.AppCompat.Light.NoActionBar">
|
<style name="LightTheme" parent="Theme.AppCompat.Light.NoActionBar">
|
||||||
<item name="colorPrimary">@color/light_youtube_primary_color</item>
|
<item name="colorPrimary">@color/light_youtube_primary_color</item>
|
||||||
<item name="colorPrimaryDark">@color/light_youtube_dark_color</item>
|
<item name="colorPrimaryDark">@color/light_youtube_dark_color</item>
|
||||||
|
@ -30,6 +39,8 @@
|
||||||
<item name="search_add">@drawable/ic_arrow_top_left_black_24dp</item>
|
<item name="search_add">@drawable/ic_arrow_top_left_black_24dp</item>
|
||||||
<item name="options">@drawable/ic_more_vert_black_24dp</item>
|
<item name="options">@drawable/ic_more_vert_black_24dp</item>
|
||||||
<item name="play">@drawable/ic_play_arrow_black_24dp</item>
|
<item name="play">@drawable/ic_play_arrow_black_24dp</item>
|
||||||
|
<item name="ic_hot">@drawable/ic_whatshot_black_24dp</item>
|
||||||
|
<item name="ic_channel">@drawable/ic_channel_black_24dp</item>
|
||||||
|
|
||||||
<item name="separator_color">@color/light_separator_color</item>
|
<item name="separator_color">@color/light_separator_color</item>
|
||||||
<item name="contrast_background_color">@color/light_contrast_background_color</item>
|
<item name="contrast_background_color">@color/light_contrast_background_color</item>
|
||||||
|
@ -42,7 +53,10 @@
|
||||||
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
|
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<!-- Dark Theme-->
|
<style name="LightTheme.Switchable">
|
||||||
|
<item name="android:windowAnimationStyle">@style/SwitchAnimation</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
<style name="DarkTheme" parent="Theme.AppCompat.NoActionBar">
|
<style name="DarkTheme" parent="Theme.AppCompat.NoActionBar">
|
||||||
<item name="colorPrimary">@color/dark_youtube_primary_color</item>
|
<item name="colorPrimary">@color/dark_youtube_primary_color</item>
|
||||||
<item name="colorPrimaryDark">@color/dark_youtube_dark_color</item>
|
<item name="colorPrimaryDark">@color/dark_youtube_dark_color</item>
|
||||||
|
@ -72,6 +86,8 @@
|
||||||
<item name="search_add">@drawable/ic_arrow_top_left_white_24dp</item>
|
<item name="search_add">@drawable/ic_arrow_top_left_white_24dp</item>
|
||||||
<item name="options">@drawable/ic_more_vert_white_24dp</item>
|
<item name="options">@drawable/ic_more_vert_white_24dp</item>
|
||||||
<item name="play">@drawable/ic_play_arrow_white_24dp</item>
|
<item name="play">@drawable/ic_play_arrow_white_24dp</item>
|
||||||
|
<item name="ic_hot">@drawable/ic_whatshot_white_24dp</item>
|
||||||
|
<item name="ic_channel">@drawable/ic_channel_white_24dp</item>
|
||||||
|
|
||||||
<item name="separator_color">@color/dark_separator_color</item>
|
<item name="separator_color">@color/dark_separator_color</item>
|
||||||
<item name="contrast_background_color">@color/dark_contrast_background_color</item>
|
<item name="contrast_background_color">@color/dark_contrast_background_color</item>
|
||||||
|
@ -84,12 +100,21 @@
|
||||||
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
|
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="DarkTheme.Switchable">
|
||||||
|
<item name="android:windowAnimationStyle">@style/SwitchAnimation</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
<style name="BlackTheme" parent="DarkTheme">
|
<style name="BlackTheme" parent="DarkTheme">
|
||||||
<item name="android:windowBackground">@color/black_background_color</item>
|
<item name="android:windowBackground">@color/black_background_color</item>
|
||||||
|
|
||||||
<item name="separator_color">@color/black_separator_color</item>
|
<item name="separator_color">@color/black_separator_color</item>
|
||||||
<item name="contrast_background_color">@color/black_contrast_background_color</item>
|
<item name="contrast_background_color">@color/black_contrast_background_color</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="BlackTheme.Switchable">
|
||||||
|
<item name="android:windowAnimationStyle">@style/SwitchAnimation</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<style name="LightSettingsTheme" parent="LightTheme">
|
<style name="LightSettingsTheme" parent="LightTheme">
|
||||||
<item name="colorAccent">@color/light_settings_accent_color</item>
|
<item name="colorAccent">@color/light_settings_accent_color</item>
|
||||||
|
@ -103,85 +128,34 @@
|
||||||
<item name="colorAccent">@color/black_settings_accent_color</item>
|
<item name="colorAccent">@color/black_settings_accent_color</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="SwitchAnimation" parent="@android:style/Animation.Activity">
|
||||||
<style name="PlayerTheme" parent="Theme.AppCompat.NoActionBar">
|
<item name="android:windowEnterAnimation">@anim/switch_service_in</item>
|
||||||
<item name="android:windowNoTitle">true</item>
|
<item name="android:windowExitAnimation">@anim/switch_service_out</item>
|
||||||
<item name="android:windowBackground">@android:color/black</item>
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Toolbar.Title" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
|
<style name="Toolbar.Title" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
|
||||||
<item name="android:textSize">18sp</item>
|
<item name="android:textSize">18sp</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="OldVideoPlayerTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||||
<style name="RedButton" parent="Widget.AppCompat.Button.Colored">
|
|
||||||
<item name="colorButtonNormal">@color/subscribe_background_color</item>
|
|
||||||
<item name="android:textColor">@color/subscribe_text_color</item>
|
|
||||||
<item name="colorControlHighlight">@color/dark_ripple_color</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="VideoPlayerTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
|
||||||
<item name="colorPrimary">@color/light_youtube_primary_color</item>
|
<item name="colorPrimary">@color/light_youtube_primary_color</item>
|
||||||
<item name="colorPrimaryDark">@color/light_youtube_dark_color</item>
|
<item name="colorPrimaryDark">@color/light_youtube_dark_color</item>
|
||||||
<item name="colorAccent">@color/light_youtube_accent_color</item>
|
<item name="colorAccent">@color/light_youtube_accent_color</item>
|
||||||
<item name="android:windowFullscreen">false</item>
|
<item name="android:windowFullscreen">false</item>
|
||||||
<item name="android:windowActionBarOverlay">true</item>
|
<item name="android:windowActionBarOverlay">true</item>
|
||||||
<item name="windowActionBarOverlay">true</item>
|
<item name="windowActionBarOverlay">true</item>
|
||||||
<item name="android:actionBarStyle">@style/VideoPlayerActionBarTheme</item>
|
<item name="android:actionBarStyle">@style/OldVideoPlayerActionBarTheme</item>
|
||||||
<item name="actionBarStyle">@style/VideoPlayerActionBarTheme</item>
|
<item name="actionBarStyle">@style/OldVideoPlayerActionBarTheme</item>
|
||||||
<item name="android:windowBackground">@android:color/black</item>
|
<item name="android:windowBackground">@android:color/black</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="VideoPlayerActionBarTheme" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
|
<style name="OldVideoPlayerActionBarTheme" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
|
||||||
<item name="android:displayOptions">showHome</item>
|
<item name="android:displayOptions">showHome</item>
|
||||||
<item name="displayOptions">showHome</item>
|
<item name="displayOptions">showHome</item>
|
||||||
<item name="android:background">@color/video_overlay_color</item>
|
<item name="android:background">@color/video_overlay_color</item>
|
||||||
<item name="background">@color/video_overlay_color</item>
|
<item name="background">@color/video_overlay_color</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="FilePickerThemeLight" parent="NNF_BaseTheme.Light">
|
|
||||||
<item name="colorPrimary">@color/light_youtube_primary_color</item>
|
|
||||||
<item name="colorPrimaryDark">@color/light_youtube_dark_color</item>
|
|
||||||
<item name="colorAccent">@color/light_youtube_accent_color</item>
|
|
||||||
<item name="android:background">@color/light_background_color</item>
|
|
||||||
<item name="nnf_separator_color">@color/light_separator_color</item>
|
|
||||||
|
|
||||||
<item name="alertDialogTheme">@style/FilePickerAlertDialogThemeLight</item>
|
|
||||||
<item name="nnf_toolbarTheme">@style/FilePickerToolbarLight</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="FilePickerAlertDialogThemeLight" parent="Theme.AppCompat.Dialog.Alert">
|
|
||||||
<item name="colorPrimary">@color/light_youtube_primary_color</item>
|
|
||||||
<item name="colorPrimaryDark">@color/light_youtube_dark_color</item>
|
|
||||||
<item name="colorAccent">@color/light_youtube_accent_color</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="FilePickerToolbarLight" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
|
|
||||||
<item name="android:background">@color/light_youtube_primary_color</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="FilePickerThemeDark" parent="FilePickerThemeLight">
|
|
||||||
<item name="colorPrimary">@color/dark_youtube_primary_color</item>
|
|
||||||
<item name="colorPrimaryDark">@color/dark_youtube_dark_color</item>
|
|
||||||
<item name="colorAccent">@color/dark_youtube_accent_color</item>
|
|
||||||
<item name="android:background">@color/dark_background_color</item>
|
|
||||||
<item name="android:textColorPrimary">@color/dark_youtube_accent_color</item>
|
|
||||||
<item name="nnf_separator_color">@color/black_separator_color</item>
|
|
||||||
|
|
||||||
<item name="alertDialogTheme">@style/FilePickerAlertDialogThemeDark</item>
|
|
||||||
<item name="nnf_toolbarTheme">@style/FilePickerToolbarDark</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="FilePickerAlertDialogThemeDark" parent="Theme.AppCompat.Dialog.Alert">
|
|
||||||
<item name="colorPrimary">@color/dark_youtube_primary_color</item>
|
|
||||||
<item name="colorPrimaryDark">@color/dark_youtube_dark_color</item>
|
|
||||||
<item name="colorAccent">@color/dark_youtube_accent_color</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="FilePickerToolbarDark" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
|
|
||||||
<item name="android:background">@color/dark_youtube_primary_color</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="RouterActivityThemeLight" parent="LightTheme">
|
<style name="RouterActivityThemeLight" parent="LightTheme">
|
||||||
<item name="colorPrimary">@android:color/transparent</item>
|
<item name="colorPrimary">@android:color/transparent</item>
|
||||||
<item name="colorPrimaryDark">@android:color/transparent</item>
|
<item name="colorPrimaryDark">@android:color/transparent</item>
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
|
||||||
|
<style name="RedButton" parent="Widget.AppCompat.Button.Colored">
|
||||||
|
<item name="colorButtonNormal">@color/subscribe_background_color</item>
|
||||||
|
<item name="android:textColor">@color/subscribe_text_color</item>
|
||||||
|
<item name="colorControlHighlight">@color/dark_ripple_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
<!--File picker styles-->
|
||||||
|
|
||||||
|
<style name="FilePickerThemeLight" parent="NNF_BaseTheme.Light">
|
||||||
|
<item name="colorPrimary">@color/light_youtube_primary_color</item>
|
||||||
|
<item name="colorPrimaryDark">@color/light_youtube_dark_color</item>
|
||||||
|
<item name="colorAccent">@color/light_youtube_accent_color</item>
|
||||||
|
<item name="android:background">@color/light_background_color</item>
|
||||||
|
<item name="nnf_separator_color">@color/light_separator_color</item>
|
||||||
|
|
||||||
|
<item name="alertDialogTheme">@style/FilePickerAlertDialogThemeLight</item>
|
||||||
|
<item name="nnf_toolbarTheme">@style/FilePickerToolbarLight</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="FilePickerAlertDialogThemeLight" parent="Theme.AppCompat.Dialog.Alert">
|
||||||
|
<item name="colorPrimary">@color/light_youtube_primary_color</item>
|
||||||
|
<item name="colorPrimaryDark">@color/light_youtube_dark_color</item>
|
||||||
|
<item name="colorAccent">@color/light_youtube_accent_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="FilePickerToolbarLight" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
|
||||||
|
<item name="android:background">@color/light_youtube_primary_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="FilePickerThemeDark" parent="FilePickerThemeLight">
|
||||||
|
<item name="colorPrimary">@color/dark_youtube_primary_color</item>
|
||||||
|
<item name="colorPrimaryDark">@color/dark_youtube_dark_color</item>
|
||||||
|
<item name="colorAccent">@color/dark_youtube_accent_color</item>
|
||||||
|
<item name="android:background">@color/dark_background_color</item>
|
||||||
|
<item name="android:textColorPrimary">@color/dark_youtube_accent_color</item>
|
||||||
|
<item name="nnf_separator_color">@color/black_separator_color</item>
|
||||||
|
|
||||||
|
<item name="alertDialogTheme">@style/FilePickerAlertDialogThemeDark</item>
|
||||||
|
<item name="nnf_toolbarTheme">@style/FilePickerToolbarDark</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="FilePickerAlertDialogThemeDark" parent="Theme.AppCompat.Dialog.Alert">
|
||||||
|
<item name="colorPrimary">@color/dark_youtube_primary_color</item>
|
||||||
|
<item name="colorPrimaryDark">@color/dark_youtube_dark_color</item>
|
||||||
|
<item name="colorAccent">@color/dark_youtube_accent_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="FilePickerToolbarDark" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
|
||||||
|
<item name="android:background">@color/dark_youtube_primary_color</item>
|
||||||
|
</style>
|
||||||
|
</resources>
|
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<!-- YouTube -->
|
||||||
|
<style name="LightTheme.YouTube" parent="LightTheme.Switchable"/>
|
||||||
|
|
||||||
|
<style name="DarkTheme.YouTube" parent="DarkTheme.Switchable"/>
|
||||||
|
|
||||||
|
<style name="BlackTheme.YouTube" parent="BlackTheme.Switchable"/>
|
||||||
|
|
||||||
|
<!-- SoundCloud -->
|
||||||
|
<style name="LightTheme.SoundCloud" parent="LightTheme.Switchable">
|
||||||
|
<item name="colorPrimary">@color/light_soundcloud_primary_color</item>
|
||||||
|
<item name="colorPrimaryDark">@color/light_soundcloud_dark_color</item>
|
||||||
|
<item name="colorAccent">@color/light_soundcloud_accent_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="DarkTheme.SoundCloud" parent="DarkTheme.Switchable">
|
||||||
|
<item name="colorPrimary">@color/dark_soundcloud_primary_color</item>
|
||||||
|
<item name="colorPrimaryDark">@color/dark_soundcloud_dark_color</item>
|
||||||
|
<item name="colorAccent">@color/dark_soundcloud_accent_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="BlackTheme.SoundCloud" parent="BlackTheme.Switchable">
|
||||||
|
<item name="colorPrimary">@color/dark_soundcloud_primary_color</item>
|
||||||
|
<item name="colorPrimaryDark">@color/dark_soundcloud_dark_color</item>
|
||||||
|
<item name="colorAccent">@color/dark_soundcloud_accent_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</resources>
|
Loading…
Reference in New Issue