Update
This commit is contained in:
korok 2018-12-23 22:37:37 +01:00
commit 10d2274f52
34 changed files with 664 additions and 289 deletions

View File

@ -6,8 +6,9 @@
</h4> </h4>
<p align="center"> <p align="center">
<img src="https://raw.githubusercontent.com/sschueller/peertube-android/develop/Screenshot2.jpg" alt="screenshot" /> <img width="250" src="https://raw.githubusercontent.com/sschueller/peertube-android/develop/Screenshot_1545425516.png" alt="screenshot" />
<img src="https://raw.githubusercontent.com/sschueller/peertube-android/develop/Screenshot1.png" alt="screenshot" /> <img width="250" src="https://raw.githubusercontent.com/sschueller/peertube-android/develop/Screenshot_1545425431.png" alt="screenshot" />
<img width="250" src="https://raw.githubusercontent.com/sschueller/peertube-android/develop/Screenshot_1545425504.png" alt="screenshot" />
</p> </p>
## Download ## Download
@ -23,16 +24,19 @@ Beta Test on Google Play: https://play.google.com/store/apps/details?id=net.schu
- [X] Change Server - [X] Change Server
- [X] Search - [X] Search
- [X] App Icon and assets - [X] App Icon and assets
- [!] Themes / Dark mode (needs work)
- [X] Background playback
- [X] NSFW Filter option
# TODO # TODO
- [ ] Video Playback via WebRTC - [ ] Video Playback via WebRTC
- [ ] Login - [ ] Authentication / Login
- [ ] Like/dislike video - [ ] Like/dislike video
- [ ] Comment video - [ ] Comment video
- [ ] Unit Tests - [ ] Unit Tests
- [ ] Lots more missing at this point... - [ ] Lots more missing at this point...

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

BIN
Screenshot_1545425431.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 843 KiB

BIN
Screenshot_1545425504.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 KiB

BIN
Screenshot_1545425516.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 KiB

View File

@ -6,26 +6,24 @@ android {
applicationId "net.schueller.peertube" applicationId "net.schueller.peertube"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 28 targetSdkVersion 28
versionCode 1010 versionCode 1012
versionName "1.0.10" versionName "1.0.12"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
// Layouts and design // Layouts and design
implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'com.android.support:cardview-v7:28.0.0' implementation 'androidx.cardview:cardview:1.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.android.support:design:28.0.0' implementation 'androidx.legacy:legacy-support-v13:1.0.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'de.hdodenhof:circleimageview:2.2.0' implementation 'de.hdodenhof:circleimageview:2.2.0'
implementation 'com.android.support:support-v13:28.0.0'
// font awesome // font awesome
implementation 'com.blackboardtheory:android-iconify-fontawesome:3.0.1-SNAPSHOT' implementation "com.mikepenz:iconics-core:3.1.0"
implementation 'com.mikepenz:fontawesome-typeface:5.3.1.1@aar'
// BottomNavigationViewEx -> https://github.com/ittianyu/BottomNavigationViewEx
implementation 'com.github.ittianyu:BottomNavigationViewEx:2.0.2'
// http client / REST // http client / REST
implementation 'com.squareup.okhttp3:okhttp:3.10.0' implementation 'com.squareup.okhttp3:okhttp:3.10.0'
@ -49,12 +47,11 @@ android {
implementation 'com.google.android.exoplayer:exoplayer-ui:2.9.2' implementation 'com.google.android.exoplayer:exoplayer-ui:2.9.2'
implementation 'com.google.android.exoplayer:exoplayer-hls:2.9.2' implementation 'com.google.android.exoplayer:exoplayer-hls:2.9.2'
implementation 'com.google.android.exoplayer:exoplayer-smoothstreaming:2.9.2' implementation 'com.google.android.exoplayer:exoplayer-smoothstreaming:2.9.2'
// implementation 'com.devbrackets.android:exomedia:4.1.0'
// testing // testing
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
} }
} }
buildTypes { buildTypes {

View File

@ -1,8 +1,8 @@
package net.schueller.peertube; package net.schueller.peertube;
import android.content.Context; import android.content.Context;
import android.support.test.InstrumentationRegistry; import androidx.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4; import androidx.test.runner.AndroidJUnit4;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;

View File

@ -21,6 +21,7 @@
tools:ignore="GoogleAppIndexingWarning"> tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".activity.VideoListActivity" <activity android:name=".activity.VideoListActivity"
android:theme="@style/AppTheme.NoActionBar"
android:launchMode="singleTop"> android:launchMode="singleTop">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
@ -34,15 +35,17 @@
</activity> </activity>
<activity <activity
android:name=".activity.LoginActivity" android:name=".activity.LoginActivity"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_login" /> android:label="@string/title_activity_login" />
<activity <activity
android:name=".activity.VideoPlayActivity" android:name=".activity.VideoPlayActivity"
android:theme="@style/AppTheme.NoActionBar"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:label="@string/title_activity_video_play" android:label="@string/title_activity_video_play"
android:launchMode="singleTop" android:launchMode="singleTop" />
android:theme="@style/AppTheme" />
<activity <activity
android:name=".activity.SettingsActivity" android:name=".activity.SettingsActivity"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_settings" /> android:label="@string/title_activity_settings" />
<!-- Content provider for search suggestions --> <!-- Content provider for search suggestions -->

View File

@ -3,11 +3,10 @@ package net.schueller.peertube.activity;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceActivity; import android.preference.PreferenceActivity;
import android.support.annotation.LayoutRes; import androidx.annotation.LayoutRes;
import android.support.annotation.Nullable; import androidx.appcompat.app.ActionBar;
import android.support.v7.app.ActionBar; import androidx.appcompat.app.AppCompatDelegate;
import android.support.v7.app.AppCompatDelegate;
import android.support.v7.widget.Toolbar;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;

View File

@ -1,36 +1,31 @@
package net.schueller.peertube.activity; package net.schueller.peertube.activity;
import android.os.StrictMode; import android.content.SharedPreferences;
import android.support.annotation.NonNull; import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity; import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.AutoCompleteTextView; import android.widget.AutoCompleteTextView;
import android.widget.Button; import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Toast;
import net.schueller.peertube.R; import net.schueller.peertube.R;
import net.schueller.peertube.helper.APIUrlHelper; import net.schueller.peertube.helper.APIUrlHelper;
import net.schueller.peertube.model.OauthClient; import net.schueller.peertube.model.OauthClient;
import net.schueller.peertube.model.Token; import net.schueller.peertube.model.Token;
import net.schueller.peertube.model.VideoList;
import net.schueller.peertube.network.AuthenticationService; import net.schueller.peertube.network.AuthenticationService;
import net.schueller.peertube.network.GetVideoDataService;
import net.schueller.peertube.network.RetrofitInstance; import net.schueller.peertube.network.RetrofitInstance;
import java.io.IOException;
import okhttp3.FormBody;
import okhttp3.MediaType; import okhttp3.MediaType;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
import static net.schueller.peertube.helper.Constants.DEFAULT_THEME;
import static net.schueller.peertube.helper.Constants.THEME_PREF_KEY;
public class LoginActivity extends AppCompatActivity { public class LoginActivity extends AppCompatActivity {
OkHttpClient client = new OkHttpClient(); OkHttpClient client = new OkHttpClient();
@ -48,6 +43,15 @@ public class LoginActivity extends AppCompatActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
// Set theme
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
setTheme(getResources().getIdentifier(
sharedPref.getString(THEME_PREF_KEY, DEFAULT_THEME),
"style",
getPackageName())
);
setContentView(R.layout.activity_login); setContentView(R.layout.activity_login);
// bind button click // bind button click

View File

@ -1,7 +1,7 @@
package net.schueller.peertube.activity; package net.schueller.peertube.activity;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.v7.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle; import android.os.Bundle;
import net.schueller.peertube.R; import net.schueller.peertube.R;

View File

@ -3,11 +3,12 @@ package net.schueller.peertube.activity;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.preference.Preference; import android.preference.Preference;
import android.support.v7.app.ActionBar; import androidx.appcompat.app.ActionBar;
import android.preference.PreferenceFragment; import android.preference.PreferenceFragment;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.util.Patterns; import android.util.Patterns;
@ -17,6 +18,8 @@ import android.widget.Toast;
import net.schueller.peertube.R; import net.schueller.peertube.R;
import java.util.List; import java.util.List;
import static net.schueller.peertube.helper.Constants.DEFAULT_THEME;
import static net.schueller.peertube.helper.Constants.THEME_PREF_KEY;
public class SettingsActivity extends AppCompatPreferenceActivity { public class SettingsActivity extends AppCompatPreferenceActivity {
@ -80,7 +83,17 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
// Set theme
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
setTheme(getResources().getIdentifier(
sharedPref.getString(THEME_PREF_KEY, DEFAULT_THEME),
"style",
getPackageName())
);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setupActionBar(); setupActionBar();
getFragmentManager().beginTransaction().replace(android.R.id.content, new GeneralPreferenceFragment()).commit(); getFragmentManager().beginTransaction().replace(android.R.id.content, new GeneralPreferenceFragment()).commit();

View File

@ -8,17 +8,20 @@ import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.provider.SearchRecentSuggestions; import android.provider.SearchRecentSuggestions;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.design.bottomnavigation.LabelVisibilityMode;
import android.support.v4.app.ActivityCompat; import com.google.android.material.bottomnavigation.BottomNavigationView;
import android.support.v4.widget.SwipeRefreshLayout; import com.google.android.material.bottomnavigation.LabelVisibilityMode;
import android.support.v7.app.AppCompatActivity; import androidx.core.app.ActivityCompat;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager; import androidx.appcompat.app.AppCompatDelegate;
import android.support.v7.widget.RecyclerView; import androidx.recyclerview.widget.LinearLayoutManager;
import android.support.v7.widget.SearchView; import androidx.recyclerview.widget.RecyclerView;
import android.support.v7.widget.Toolbar; import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import android.util.Log; import android.util.Log;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
@ -26,17 +29,8 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.mikepenz.fontawesome_typeface_library.FontAwesome;
//import com.google.android.gms.common.GooglePlayServicesNotAvailableException; import com.mikepenz.iconics.IconicsDrawable;
//import com.google.android.gms.common.GooglePlayServicesRepairableException;
//import com.google.android.gms.common.GooglePlayServicesUtil;
//import com.google.android.gms.security.ProviderInstaller;
import com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx;
import com.joanzapata.iconify.IconDrawable;
import com.joanzapata.iconify.Iconify;
import com.joanzapata.iconify.fonts.FontAwesomeIcons;
import com.joanzapata.iconify.fonts.FontAwesomeModule;
import net.schueller.peertube.R; import net.schueller.peertube.R;
import net.schueller.peertube.adapter.VideoAdapter; import net.schueller.peertube.adapter.VideoAdapter;
import net.schueller.peertube.helper.APIUrlHelper; import net.schueller.peertube.helper.APIUrlHelper;
@ -52,6 +46,9 @@ import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
import retrofit2.Response; import retrofit2.Response;
import static net.schueller.peertube.helper.Constants.DEFAULT_THEME;
import static net.schueller.peertube.helper.Constants.THEME_PREF_KEY;
public class VideoListActivity extends AppCompatActivity { public class VideoListActivity extends AppCompatActivity {
private String TAG = "VideoListActivity"; private String TAG = "VideoListActivity";
@ -72,85 +69,35 @@ public class VideoListActivity extends AppCompatActivity {
private boolean isLoading = false; private boolean isLoading = false;
private BottomNavigationViewEx.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= item -> {
switch (item.getItemId()) {
case R.id.navigation_home:
//Log.v(TAG, "navigation_home");
if (!isLoading) {
sort = "-createdAt";
currentStart = 0;
loadVideos(currentStart, count, sort, filter);
}
return true;
case R.id.navigation_trending:
//Log.v(TAG, "navigation_trending");
if (!isLoading) {
sort = "-trending";
currentStart = 0;
loadVideos(currentStart, count, sort, filter);
}
return true;
case R.id.navigation_subscriptions:
//Log.v(TAG, "navigation_subscriptions");
Toast.makeText(VideoListActivity.this, "Subscriptions Not Implemented", Toast.LENGTH_SHORT).show();
return false;
case R.id.navigation_account:
//Log.v(TAG, "navigation_account");
Toast.makeText(VideoListActivity.this, "Account Not Implemented", Toast.LENGTH_SHORT).show();
// Intent intent = new Intent(this, LoginActivity.class);
// this.startActivity(intent);
return false;
}
return false;
};
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
// Set Night Mode
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
AppCompatDelegate.setDefaultNightMode(sharedPref.getBoolean("pref_dark_mode", false) ?
AppCompatDelegate.MODE_NIGHT_YES : AppCompatDelegate.MODE_NIGHT_NO);
// Set theme
setTheme(getResources().getIdentifier(
sharedPref.getString(THEME_PREF_KEY, DEFAULT_THEME),
"style",
getPackageName())
);
setContentView(R.layout.activity_video_list); setContentView(R.layout.activity_video_list);
filter = ""; filter = "";
// Init icons createBottomBarNavigation();
Iconify.with(new FontAwesomeModule());
// Attaching the layout to the toolbar object // Attaching the layout to the toolbar object
Toolbar toolbar = findViewById(R.id.tool_bar); Toolbar toolbar = findViewById(R.id.tool_bar);
// Setting toolbar as the ActionBar with setSupportActionBar() call // Setting toolbar as the ActionBar with setSupportActionBar() call
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
// fix android trying to use SSLv3 for handshake
// updateAndroidSecurityProvider(this);
// Bottom Navigation
BottomNavigationViewEx navigation = findViewById(R.id.navigation);
navigation.enableAnimation(false);
navigation.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED); // enableShiftingMode
navigation.setItemHorizontalTranslationEnabled(false); // enableItemShiftingMode
Menu navMenu = navigation.getMenu();
navMenu.findItem(R.id.navigation_home).setIcon(
new IconDrawable(this, FontAwesomeIcons.fa_home));
navMenu.findItem(R.id.navigation_trending).setIcon(
new IconDrawable(this, FontAwesomeIcons.fa_fire));
navMenu.findItem(R.id.navigation_subscriptions).setIcon(
new IconDrawable(this, FontAwesomeIcons.fa_folder));
navMenu.findItem(R.id.navigation_account).setIcon(
new IconDrawable(this, FontAwesomeIcons.fa_user_circle));
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
// load Video List // load Video List
createList(); createList();
@ -163,16 +110,12 @@ public class VideoListActivity extends AppCompatActivity {
// Set an icon in the ActionBar // Set an icon in the ActionBar
menu.findItem(R.id.action_settings).setIcon( menu.findItem(R.id.action_settings).setIcon(
new IconDrawable(this, FontAwesomeIcons.fa_cog) new IconicsDrawable(this, FontAwesome.Icon.faw_cog).actionBar());
.colorRes(R.color.cardview_light_background)
.actionBarSize());
MenuItem searchMenuItem = menu.findItem(R.id.action_search); MenuItem searchMenuItem = menu.findItem(R.id.action_search);
searchMenuItem.setIcon( searchMenuItem.setIcon(
new IconDrawable(this, FontAwesomeIcons.fa_search) new IconicsDrawable(this, FontAwesome.Icon.faw_search).actionBar());
.colorRes(R.color.cardview_light_background)
.actionBarSize());
// Get the SearchView and set the searchable configuration // Get the SearchView and set the searchable configuration
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
@ -338,22 +281,7 @@ public class VideoListActivity extends AppCompatActivity {
}); });
} }
/**
* Force android to not use SSLv3
* <p>
* // * @param callingActivity Activity
*/
// private void updateAndroidSecurityProvider(Activity callingActivity) {
// try {
// ProviderInstaller.installIfNeeded(this);
// } catch (GooglePlayServicesRepairableException e) {
// // Thrown when Google Play Services is not installed, up-to-date, or enabled
// // Show dialog to allow users to install, update, or otherwise enable Google Play services.
// GooglePlayServicesUtil.getErrorDialog(e.getConnectionStatusCode(), callingActivity, 0);
// } catch (GooglePlayServicesNotAvailableException e) {
// Log.e("SecurityException", "Google Play Services not available.");
// }
// }
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
@ -397,4 +325,66 @@ public class VideoListActivity extends AppCompatActivity {
} }
private void createBottomBarNavigation() {
// Get Bottom Navigation
BottomNavigationView navigation = findViewById(R.id.navigation);
// Always show text label
navigation.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
// Add Icon font
Menu navMenu = navigation.getMenu();
navMenu.findItem(R.id.navigation_home).setIcon(
new IconicsDrawable(this, FontAwesome.Icon.faw_home));
navMenu.findItem(R.id.navigation_trending).setIcon(
new IconicsDrawable(this, FontAwesome.Icon.faw_fire));
navMenu.findItem(R.id.navigation_subscriptions).setIcon(
new IconicsDrawable(this, FontAwesome.Icon.faw_folder));
navMenu.findItem(R.id.navigation_account).setIcon(
new IconicsDrawable(this, FontAwesome.Icon.faw_user_circle));
// Click Listener
navigation.setOnNavigationItemSelectedListener(menuItem -> {
switch (menuItem.getItemId()) {
case R.id.navigation_home:
//Log.v(TAG, "navigation_home");
if (!isLoading) {
sort = "-createdAt";
currentStart = 0;
loadVideos(currentStart, count, sort, filter);
}
return true;
case R.id.navigation_trending:
//Log.v(TAG, "navigation_trending");
if (!isLoading) {
sort = "-trending";
currentStart = 0;
loadVideos(currentStart, count, sort, filter);
}
return true;
case R.id.navigation_subscriptions:
//Log.v(TAG, "navigation_subscriptions");
Toast.makeText(VideoListActivity.this, "Subscriptions Not Implemented", Toast.LENGTH_SHORT).show();
return false;
case R.id.navigation_account:
//Log.v(TAG, "navigation_account");
Toast.makeText(VideoListActivity.this, "Account Not Implemented", Toast.LENGTH_SHORT).show();
// Intent intent = new Intent(this, LoginActivity.class);
// this.startActivity(intent);
return false;
}
return false;
});
}
} }

View File

@ -12,9 +12,9 @@ import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.os.IBinder; import android.os.IBinder;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.v7.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import android.support.v7.widget.PopupMenu; import androidx.appcompat.widget.PopupMenu;
import android.util.Log; import android.util.Log;
import android.view.Surface; import android.view.Surface;
import android.view.View; import android.view.View;
@ -51,6 +51,9 @@ import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
import retrofit2.Response; import retrofit2.Response;
import static net.schueller.peertube.helper.Constants.DEFAULT_THEME;
import static net.schueller.peertube.helper.Constants.THEME_PREF_KEY;
public class VideoPlayActivity extends AppCompatActivity implements VideoRendererEventListener { public class VideoPlayActivity extends AppCompatActivity implements VideoRendererEventListener {
private static final String TAG = "VideoPlayActivity"; private static final String TAG = "VideoPlayActivity";
@ -89,6 +92,15 @@ public class VideoPlayActivity extends AppCompatActivity implements VideoRendere
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
// Set theme
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
setTheme(getResources().getIdentifier(
sharedPref.getString(THEME_PREF_KEY, DEFAULT_THEME),
"style",
getPackageName())
);
setContentView(R.layout.activity_video_play); setContentView(R.layout.activity_video_play);
progressBar = findViewById(R.id.progress); progressBar = findViewById(R.id.progress);

View File

@ -2,9 +2,9 @@ package net.schueller.peertube.adapter;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.v7.widget.PopupMenu; import androidx.appcompat.widget.PopupMenu;
import android.support.v7.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;

View File

@ -0,0 +1,6 @@
package net.schueller.peertube.helper;
public class Constants {
public static final String THEME_PREF_KEY = "pref_theme";
public static final String DEFAULT_THEME = "AppTheme.ORANGE";
}

View File

@ -12,7 +12,7 @@ import android.media.AudioManager;
import android.net.Uri; import android.net.Uri;
import android.os.Binder; import android.os.Binder;
import android.os.IBinder; import android.os.IBinder;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import android.util.Log; import android.util.Log;
import com.google.android.exoplayer2.ExoPlayerFactory; import com.google.android.exoplayer2.ExoPlayerFactory;

View File

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:color="@color/colorAccent"
android:state_checked="true"
android:state_pressed="true"
android:state_focused="true"
android:state_selected="true"
android:state_checkable="true"
android:state_enabled="true"
/>
<item
android:color="@color/viewBg"
android:state_checked="false"
android:state_pressed="false"
android:state_focused="false"
android:state_selected="false"
android:state_checkable="false"
android:state_enabled="false"
/>
</selector>

View File

@ -30,7 +30,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<android.support.design.widget.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -43,9 +43,9 @@
android:maxLines="1" android:maxLines="1"
android:singleLine="true" /> android:singleLine="true" />
</android.support.design.widget.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<android.support.design.widget.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -61,7 +61,7 @@
android:maxLines="1" android:maxLines="1"
android:singleLine="true" /> android:singleLine="true" />
</android.support.design.widget.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<Button <Button
android:id="@+id/email_sign_in_button" android:id="@+id/email_sign_in_button"

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".activity.SelectServerActivity"> tools:context=".activity.SelectServerActivity">
</android.support.constraint.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,22 +1,26 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context="net.schueller.peertube.activity.VideoListActivity"> tools:context="net.schueller.peertube.activity.VideoListActivity">
<android.support.design.widget.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar" android:id="@+id/appbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical">
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<include <androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tool_bar" android:id="@+id/tool_bar"
layout="@layout/tool_bar" /> android:layout_width="match_parent"
</android.support.design.widget.AppBarLayout> android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways"
android:elevation="4dp" />
</com.google.android.material.appbar.AppBarLayout>
<TextView <TextView
android:id="@+id/empty_view" android:id="@+id/empty_view"
@ -24,10 +28,9 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:gravity="center" android:gravity="center"
android:visibility="gone" android:visibility="gone"
android:textColor="@color/black"
android:text="@string/no_data_available" /> android:text="@string/no_data_available" />
<android.support.v4.widget.SwipeRefreshLayout <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout" android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@ -36,19 +39,19 @@
android:layout_weight="1" android:layout_weight="1"
app:layout_behavior="@string/appbar_scrolling_view_behavior"> app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v7.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView" android:id="@+id/recyclerView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
> >
</android.support.v7.widget.RecyclerView> </androidx.recyclerview.widget.RecyclerView>
</android.support.v4.widget.SwipeRefreshLayout> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx <com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/navigation" android:id="@+id/navigation"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -59,8 +62,7 @@
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
android:layout_gravity="bottom" android:layout_gravity="bottom"
app:menu="@menu/menu_bottom" app:menu="@menu/menu_bottom"
app:itemIconTint="@color/bottom_bar"
android:background="?android:attr/windowBackground" android:background="?android:attr/windowBackground"
/> />
</android.support.design.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -17,7 +17,6 @@
android:id="@+id/video_view" android:id="@+id/video_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="250dp" android:layout_height="250dp"
android:background="@color/black"
app:layout_constraintDimensionRatio="H,3:1" app:layout_constraintDimensionRatio="H,3:1"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@ -30,7 +29,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/video_view" android:layout_below="@id/video_view"
android:background="@color/black"
android:indeterminate="false" android:indeterminate="false"
android:max="100" /> android:max="100" />
@ -115,4 +113,4 @@
</RelativeLayout> </RelativeLayout>
</android.support.design.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?><!-- START*** Root Container *** --> <?xml version="1.0" encoding="utf-8"?><!-- START*** Root Container *** -->
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto" xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -89,4 +89,4 @@
</RelativeLayout> </RelativeLayout>
</android.support.v7.widget.CardView> </androidx.cardview.widget.CardView>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
android:elevation="4dp" />

View File

@ -1,45 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Unused? delete? -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!--<android.support.v7.widget.CardView-->
<!--android:layout_margin="16dp"-->
<!--android:layout_width="220dp"-->
<!--android:layout_gravity="center"-->
<!--android:layout_height="wrap_content">-->
<!--<LinearLayout-->
<!--android:id="@+id/linearLayout"-->
<!--android:padding="8dp"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--android:orientation="vertical">-->
<!--<ImageView-->
<!--android:id="@+id/thumb"-->
<!--android:layout_margin="5dp"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content" />-->
<!--<TextView-->
<!--android:id="@+id/name"-->
<!--android:layout_margin="5dp"-->
<!--android:gravity="center"-->
<!--android:textAppearance="@style/Base.TextAppearance.AppCompat.Large"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--android:text="username"/>-->
<!--<TextView-->
<!--android:id="@+id/description"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--/>-->
<!--</LinearLayout>-->
<!--</android.support.v7.widget.CardView>-->
</LinearLayout>

View File

@ -9,7 +9,7 @@
android:orderInCategory="300" android:orderInCategory="300"
android:title="@string/action_bar_title_search" android:title="@string/action_bar_title_search"
app:showAsAction="always|collapseActionView" app:showAsAction="always|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView" /> app:actionViewClass="androidx.appcompat.widget.SearchView" />
<item <item
android:id="@+id/action_settings" android:id="@+id/action_settings"

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="themeArray">
<item>@string/red</item>
<item>@string/pink</item>
<item>@string/purple</item>
<item>@string/deeppurple</item>
<item>@string/indigo</item>
<item>@string/blue</item>
<item>@string/lightblue</item>
<item>@string/cyan</item>
<item>@string/teal</item>
<item>@string/green</item>
<item>@string/lightgreen</item>
<item>@string/lime</item>
<item>@string/yellow</item>
<item>@string/amber</item>
<item>@string/orange</item>
<item>@string/deeporange</item>
<item>@string/brown</item>
<item>@string/gray</item>
<item>@string/bluegray</item>
</string-array>
<string-array name="themeValues">
<item>AppTheme.RED</item>
<item>AppTheme.PINK</item>
<item>AppTheme.PURPLE</item>
<item>AppTheme.DEEPPURPLE</item>
<item>AppTheme.INDIGO</item>
<item>AppTheme.BLUE</item>
<item>AppTheme.LIGHTBLUE</item>
<item>AppTheme.CYAN</item>
<item>AppTheme.TEAL</item>
<item>AppTheme.GREEN</item>
<item>AppTheme.LIGHTGREEN</item>
<item>AppTheme.LIME</item>
<item>AppTheme.YELLOW</item>
<item>AppTheme.AMBER</item>
<item>AppTheme.ORANGE</item>
<item>AppTheme.DEEPORANGE</item>
<item>AppTheme.BROWN</item>
<item>AppTheme.GRAY</item>
<item>AppTheme.BLUEGRAY</item>
</string-array>
</resources>

View File

@ -1,12 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<!-- Declare custom theme attributes that allow changing which styles are <attr name="metaButtonBarStyle" format="reference" />
used for button bars depending on the API level. <attr name="metaButtonBarButtonStyle" format="reference" />
?android:attr/buttonBarStyle is new as of API 11 so this is
necessary to support previous API levels. -->
<declare-styleable name="ButtonBarContainerTheme">
<attr name="metaButtonBarStyle" format="reference" />
<attr name="metaButtonBarButtonStyle" format="reference" />
</declare-styleable>
</resources> </resources>

View File

@ -1,11 +1,201 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<color name="colorPrimary">#f1680d</color>
<color name="colorPrimaryDark">#E64A19</color>
<color name="colorAccent">#FF4081</color>
<color name="viewBg">#f1f5f8</color>
<color name="album_title">#4c4c4c</color>
<color name="black_overlay">#66000000</color> <color name="themeDeselected">#d69b9b9b</color>
<color name="black">#000000</color> <color name="themeSelected">#e300aaff</color>
<color name="seperator">#7ca6a6a6</color>
<!-- RED Theme -->
<color name="primaryColorRed">#F44336</color>
<color name="primaryLightColorRed">#FFCDD2</color>
<color name="primaryDarkColorRed">#D32F2F</color>
<color name="secondaryColorRed">#FFC107</color>
<color name="secondaryLightColorRed">#fccf4a</color>
<color name="secondaryDarkColorRed">#e1a902</color>
<color name="primaryTextColorRed">#ffffff</color>
<color name="secondaryTextColorRed">#000000</color>
<!-- PINK Theme -->
<color name="primaryColorPink">#E91E63</color>
<color name="primaryLightColorPink">#F8BBD0</color>
<color name="primaryDarkColorPink">#C2185B</color>
<color name="secondaryColorPink">#448AFF</color>
<color name="secondaryLightColorPink">#89b3f8</color>
<color name="secondaryDarkColorPink">#1a62da</color>
<color name="primaryTextColorPink">#000000</color>
<color name="secondaryTextColorPink">#000000</color>
<!-- PURPLE Theme -->
<color name="primaryColorPurple">#9C27B0</color>
<color name="primaryLightColorPurple">#E1BEE7</color>
<color name="primaryDarkColorPurple">#7B1FA2</color>
<color name="secondaryColorPurple">#CDDC39</color>
<color name="secondaryLightColorPurple">#e1ea86</color>
<color name="secondaryDarkColorPurple">#b4c320</color>
<color name="primaryTextColorPurple">#ffffff</color>
<color name="secondaryTextColorPurple">#000000</color>
<!-- DEEPPURPLE Theme -->
<color name="primaryColorDeepPurple">#673AB7</color>
<color name="primaryLightColorDeepPurple">#D1C4E9</color>
<color name="primaryDarkColorDeepPurple">#512DA8</color>
<color name="secondaryColorDeepPurple">#FFEB3B</color>
<color name="secondaryLightColorDeepPurple">#fff599</color>
<color name="secondaryDarkColorDeepPurple">#e0cd24</color>
<color name="primaryTextColorDeepPurple">#ffffff</color>
<color name="secondaryTextColorDeepPurple">#000000</color>
<!-- INDIGO Theme -->
<color name="primaryColorIndigo">#3F51B5</color>
<color name="primaryLightColorIndigo">#C5CAE9</color>
<color name="primaryDarkColorIndigo">#303F9F</color>
<color name="secondaryColorIndigo">#FF9800</color>
<color name="secondaryLightColorIndigo">#feba56</color>
<color name="secondaryDarkColorIndigo">#cf7b00</color>
<color name="primaryTextColorIndigo">#ffffff</color>
<color name="secondaryTextColorIndigo">#000000</color>
<!-- BLUE Theme -->
<color name="primaryColorBlue">#1e88e5</color>
<color name="primaryLightColorBlue">#6ab7ff</color>
<color name="primaryDarkColorBlue">#005cb2</color>
<color name="secondaryColorBlue">#607D8B</color>
<color name="secondaryLightColorBlue">#CFD8DC</color>
<color name="secondaryDarkColorBlue">#455A64</color>
<color name="primaryTextColorBlue">#000000</color>
<color name="secondaryTextColorBlue">#000000</color>
<!-- LIGHTBLUE Theme -->
<color name="primaryColorLightBlue">#039be5</color>
<color name="primaryLightColorLightBlue">#63ccff</color>
<color name="primaryDarkColorLightBlue">#006db3</color>
<color name="secondaryColorLightBlue">#CDDC39</color>
<color name="secondaryLightColorLightBlue">#F0F4C3</color>
<color name="secondaryDarkColorLightBlue">#AFB42B</color>
<color name="primaryTextColorLightBlue">#000000</color>
<color name="secondaryTextColorLightBlue">#000000</color>
<!-- CYAN Theme -->
<color name="primaryColorCyan">#00acc1</color>
<color name="primaryLightColorCyan">#5ddef4</color>
<color name="primaryDarkColorCyan">#007c91</color>
<color name="secondaryColorCyan">#f50057</color>
<color name="secondaryLightColorCyan">#ff5983</color>
<color name="secondaryDarkColorCyan">#bb002f</color>
<color name="primaryTextColorCyan">#000000</color>
<color name="secondaryTextColorCyan">#000000</color>
<!-- TEAL Theme -->
<color name="primaryColorTeal">#00796b</color>
<color name="primaryLightColorTeal">#48a999</color>
<color name="primaryDarkColorTeal">#004c40</color>
<color name="secondaryColorTeal">#ffd180</color>
<color name="secondaryLightColorTeal">#ffffb1</color>
<color name="secondaryDarkColorTeal">#caa052</color>
<color name="primaryTextColorTeal">#ffffff</color>
<color name="secondaryTextColorTeal">#000000</color>
<!-- GREEN Theme -->
<color name="primaryColorGreen">#4CAF50</color>
<color name="primaryLightColorGreen">#C8E6C9</color>
<color name="primaryDarkColorGreen">#388E3C</color>
<color name="secondaryColorGreen">#00BCD4</color>
<color name="secondaryLightColorGreen">#6cd1de</color>
<color name="secondaryDarkColorGreen">#0197ab</color>
<color name="primaryTextColorGreen">#ffffff</color>
<color name="secondaryTextColorGreen">#000000</color>
<!-- LIGHTGREEN Theme -->
<color name="primaryColorLightGreen">#8BC34A</color>
<color name="primaryLightColorLightGreen">#DCEDC8</color>
<color name="primaryDarkColorLightGreen">#689F38</color>
<color name="secondaryColorLightGreen">#448AFF</color>
<color name="secondaryLightColorLightGreen">#83affa</color>
<color name="secondaryDarkColorLightGreen">#1e58b8</color>
<color name="primaryTextColorLightGreen">#ffffff</color>
<color name="secondaryTextColorLightGreen">#000000</color>
<!-- Lime Theme -->
<color name="primaryColorLime">#CDDC39</color>
<color name="primaryLightColorLime">#F0F4C3</color>
<color name="primaryDarkColorLime">#AFB42B</color>
<color name="secondaryColorLime">#7C4DFF</color>
<color name="secondaryLightColorLime">#ae94f5</color>
<color name="secondaryDarkColorLime">#4f2cb3</color>
<color name="primaryTextColorLime">#ffffff</color>
<color name="secondaryTextColorLime">#000000</color>
<!-- YELLOW Theme -->
<color name="primaryColorYellow">#FFEB3B</color>
<color name="primaryLightColorYellow">#FFF9C4</color>
<color name="primaryDarkColorYellow">#FBC02D</color>
<color name="secondaryColorYellow">#536DFE</color>
<color name="secondaryLightColorYellow">#8799fd</color>
<color name="secondaryDarkColorYellow">#3751e1</color>
<color name="primaryTextColorYellow">#ffffff</color>
<color name="secondaryTextColorYellow">#000000</color>
<!-- AMBER Theme -->
<color name="primaryColorAmber">#FFC107</color>
<color name="primaryLightColorAmber">#FFECB3</color>
<color name="primaryDarkColorAmber">#FFA000</color>
<color name="secondaryColorAmber">#03A9F4</color>
<color name="secondaryLightColorAmber">#65c4ef</color>
<color name="secondaryDarkColorAmber">#1e87b6</color>
<color name="primaryTextColorAmber">#ffffff</color>
<color name="secondaryTextColorAmber">#000000</color>
<!-- ORANGE Theme -->
<color name="primaryColorOrange">#FF9800</color>
<color name="primaryLightColorOrange">#FFE0B2</color>
<color name="primaryDarkColorOrange">#F57C00</color>
<color name="secondaryColorOrange">#8BC34A</color>
<color name="secondaryLightColorOrange">#b4e67a</color>
<color name="secondaryDarkColorOrange">#649131</color>
<color name="primaryTextColorOrange">#ffffff</color>
<color name="secondaryTextColorOrange">#000000</color>
<!-- DEEPORANGE Theme -->
<color name="primaryColorDeepOrange">#FF5722</color>
<color name="primaryLightColorDeepOrange">#FFCCBC</color>
<color name="primaryDarkColorDeepOrange">#E64A19</color>
<color name="secondaryColorDeepOrange">#00BCD4</color>
<color name="secondaryLightColorDeepOrange">#75e8f6</color>
<color name="secondaryDarkColorDeepOrange">#2a9cab</color>
<color name="primaryTextColorDeepOrange">#ffffff</color>
<color name="secondaryTextColorDeepOrange">#000000</color>
<!-- BROWN Theme -->
<color name="primaryColorBrown">#795548</color>
<color name="primaryLightColorBrown">#D7CCC8</color>
<color name="primaryDarkColorBrown">#5D4037</color>
<color name="secondaryColorBrown">#FFC107</color>
<color name="secondaryLightColorBrown">#f6c83f</color>
<color name="secondaryDarkColorBrown">#cf9c02</color>
<color name="primaryTextColorBrown">#ffffff</color>
<color name="secondaryTextColorBrown">#000000</color>
<!-- GRAY Theme -->
<color name="primaryColorGray">#9E9E9E</color>
<color name="primaryLightColorGray">#F5F5F5</color>
<color name="primaryDarkColorGray">#616161</color>
<color name="secondaryColorGray">#536DFE</color>
<color name="secondaryLightColorGray">#94a5ff</color>
<color name="secondaryDarkColorGray">#2c44c9</color>
<color name="primaryTextColorGray">#ffffff</color>
<color name="secondaryTextColorGray">#000000</color>
<!-- BLUEGRAY Theme -->
<color name="primaryColorBlueGray">#607D8B</color>
<color name="primaryLightColorBlueGray">#CFD8DC</color>
<color name="primaryDarkColorBlueGray">#455A64</color>
<color name="secondaryColorBlueGray">#CDDC39</color>
<color name="secondaryLightColorBlueGray">#e3f15c</color>
<color name="secondaryDarkColorBlueGray">#a6b320</color>
<color name="primaryTextColorBlueGray">#ffffff</color>
<color name="secondaryTextColorBlueGray">#000000</color>
</resources> </resources>

View File

@ -60,5 +60,29 @@
<string name="menu_share">Share</string> <string name="menu_share">Share</string>
<string name="playback_channel_name">PeerTube</string> <string name="playback_channel_name">PeerTube</string>
<string name="invalid_url">Invalid Url!</string> <string name="invalid_url">Invalid Url!</string>
<string name="pref_title_dark_mode">Dark Mode</string>
<string name="pref_description_dark_mode">Restart App for Dark Mode to take effect.</string>
<string name="pref_title_app_theme">App Theme</string>
<string name="pref_description_app_theme">Restart App for theme to take effect.</string>
<string name="red">Red</string>
<string name="pink">Pink</string>
<string name="purple">Purple</string>
<string name="deeppurple">Deep Purple</string>
<string name="indigo">Indigo</string>
<string name="blue">Nlue</string>
<string name="lightblue">Light Blue</string>
<string name="cyan">Cyan</string>
<string name="teal">Teal</string>
<string name="green">Green</string>
<string name="lightgreen">Light Green</string>
<string name="lime">Lime</string>
<string name="yellow">Yellow</string>
<string name="amber">Amber</string>
<string name="orange">Orange</string>
<string name="deeporange">Deep Orange</string>
<string name="brown">Brown</string>
<string name="gray">Gray</string>
<string name="bluegray">Bluegray</string>
</resources> </resources>

View File

@ -1,26 +1,174 @@
<resources> <resources>
<!-- Base application theme. --> <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style> </style>
<style name="FullscreenTheme" parent="AppTheme"> <style name="AppTheme.NoActionBar" parent="AppTheme">
<item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item> <item name="windowActionBar">false</item>
<item name="android:windowActionBarOverlay">true</item> <item name="windowNoTitle">true</item>
<item name="android:windowBackground">@null</item>
<item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
<item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
</style> </style>
<style name="FullscreenActionBarStyle" parent="Widget.AppCompat.ActionBar"> <style name="AppTheme.RED" parent="AppTheme.NoActionBar">
<item name="android:background">@color/black_overlay</item> <!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorRed</item>
<item name="colorPrimaryDark">@color/primaryDarkColorRed</item>
<item name="colorAccent">@color/secondaryColorRed</item>
</style> </style>
<style name="AppTheme.PINK" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorPink</item>
<item name="colorPrimaryDark">@color/primaryDarkColorPink</item>
<item name="colorAccent">@color/secondaryColorPink</item>
</style>
<style name="AppTheme.PURPLE" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorPurple</item>
<item name="colorPrimaryDark">@color/primaryDarkColorPurple</item>
<item name="colorAccent">@color/secondaryColorPurple</item>
</style>
<style name="AppTheme.DEEPPURPLE" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorDeepPurple</item>
<item name="colorPrimaryDark">@color/primaryDarkColorDeepPurple</item>
<item name="colorAccent">@color/secondaryColorDeepPurple</item>
</style>
<style name="AppTheme.INDIGO" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorIndigo</item>
<item name="colorPrimaryDark">@color/primaryDarkColorIndigo</item>
<item name="colorAccent">@color/secondaryColorIndigo</item>
</style>
<style name="AppTheme.BLUE" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorBlue</item>
<item name="colorPrimaryDark">@color/primaryDarkColorBlue</item>
<item name="colorAccent">@color/secondaryColorBlue</item>
</style>
<style name="AppTheme.LIGHTBLUE" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorLightBlue</item>
<item name="colorPrimaryDark">@color/primaryDarkColorLightBlue</item>
<item name="colorAccent">@color/secondaryColorLightBlue</item>
</style>
<style name="AppTheme.CYAN" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorCyan</item>
<item name="colorPrimaryDark">@color/primaryDarkColorCyan</item>
<item name="colorAccent">@color/secondaryColorCyan</item>
</style>
<style name="AppTheme.TEAL" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorTeal</item>
<item name="colorPrimaryDark">@color/primaryDarkColorTeal</item>
<item name="colorAccent">@color/secondaryColorTeal</item>
</style>
<style name="AppTheme.GREEN" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorGreen</item>
<item name="colorPrimaryDark">@color/primaryDarkColorGreen</item>
<item name="colorAccent">@color/secondaryColorGreen</item>
</style>
<style name="AppTheme.LIGHTGREEN" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorLightGreen</item>
<item name="colorPrimaryDark">@color/primaryDarkColorLightGreen</item>
<item name="colorAccent">@color/secondaryColorLightGreen</item>
</style>
<style name="AppTheme.LIME" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorLime</item>
<item name="colorPrimaryDark">@color/primaryDarkColorLime</item>
<item name="colorAccent">@color/secondaryColorLime</item>
</style>
<style name="AppTheme.YELLOW" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorYellow</item>
<item name="colorPrimaryDark">@color/primaryDarkColorYellow</item>
<item name="colorAccent">@color/secondaryColorYellow</item>
</style>
<style name="AppTheme.AMBER" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorAmber</item>
<item name="colorPrimaryDark">@color/primaryDarkColorAmber</item>
<item name="colorAccent">@color/secondaryColorAmber</item>
</style>
<style name="AppTheme.ORANGE" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorOrange</item>
<item name="colorPrimaryDark">@color/primaryDarkColorOrange</item>
<item name="colorAccent">@color/secondaryColorOrange</item>
</style>
<style name="AppTheme.DEEPORANGE" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorDeepOrange</item>
<item name="colorPrimaryDark">@color/primaryDarkColorDeepOrange</item>
<item name="colorAccent">@color/secondaryColorDeepOrange</item>
</style>
<style name="AppTheme.BROWN" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorBrown</item>
<item name="colorPrimaryDark">@color/primaryDarkColorBrown</item>
<item name="colorAccent">@color/secondaryColorBrown</item>
</style>
<style name="AppTheme.GRAY" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorGray</item>
<item name="colorPrimaryDark">@color/primaryDarkColorGray</item>
<item name="colorAccent">@color/secondaryColorGray</item>
</style>
<style name="AppTheme.BLUEGRAY" parent="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColorBlueGray</item>
<item name="colorPrimaryDark">@color/primaryDarkColorBlueGray</item>
<item name="colorAccent">@color/secondaryColorBlueGray</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
<!-- Text styles -->
<style name="Text" parent="TextAppearance.AppCompat"></style>
<style name="Text.Caption" parent="TextAppearance.AppCompat.Caption"></style>
<style name="Text.Small" parent="TextAppearance.AppCompat.Small"></style>
<style name="Text.Body1" parent="TextAppearance.AppCompat.Body1"></style>
<style name="Text.Body2" parent="TextAppearance.AppCompat.Body2"></style>
<style name="Text.Medium" parent="TextAppearance.AppCompat.Medium"></style>
<style name="Text.Large" parent="TextAppearance.AppCompat.Large"></style>
<style name="Text.Headline" parent="TextAppearance.AppCompat.Headline"></style>
<style name="Text.Title" parent="TextAppearance.AppCompat.Title"></style>
<style name="Text.Display1" parent="TextAppearance.AppCompat.Display1"></style>
<style name="Text.Subhead" parent="TextAppearance.AppCompat.Subhead"></style>
<style name="Text.Button" parent="TextAppearance.AppCompat.Button"></style>
<!-- Button Styles-->
<style name="Buton" parent="Widget.AppCompat.Button"></style>
<style name="Buton.Small" parent="Widget.AppCompat.Button.Small"></style>
<style name="Buton.Colored" parent="Widget.AppCompat.Button.Colored"></style>
<style name="Buton.Borderless" parent="Widget.AppCompat.Button.Borderless"></style>
<style name="Buton.Borderless.Colored" parent="Widget.AppCompat.Button.Borderless.Colored"></style>
</resources> </resources>

View File

@ -16,6 +16,20 @@
android:summary="@string/pref_description_show_nsfw" android:summary="@string/pref_description_show_nsfw"
android:defaultValue="false" /> android:defaultValue="false" />
<ListPreference
android:title="@string/pref_title_app_theme"
android:summary="@string/pref_description_app_theme"
android:key="pref_theme"
android:defaultValue="1"
android:entries="@array/themeArray"
android:entryValues="@array/themeValues" />
<SwitchPreference
android:key="pref_dark_mode"
android:title="@string/pref_title_dark_mode"
android:summary="@string/pref_description_dark_mode"
android:defaultValue="false" />
<SwitchPreference <SwitchPreference
android:key="pref_torrent_player" android:key="pref_torrent_player"
android:title="@string/pref_title_torrent_player" android:title="@string/pref_title_torrent_player"

View File

@ -9,6 +9,8 @@
# Specifies the JVM arguments used for the daemon process. # Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings. # The setting is particularly useful for tweaking memory settings.
android.enableJetifier=true
android.useAndroidX=true
org.gradle.jvmargs=-Xmx1536m org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode. # When configured, Gradle will run in incubating parallel mode.