diff --git a/app/build.gradle b/app/build.gradle index e6774b8..6be087c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,26 +6,24 @@ android { applicationId "net.schueller.peertube" minSdkVersion 21 targetSdkVersion 28 - versionCode 1011 - versionName "1.0.11" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + versionCode 1012 + versionName "1.0.12" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) // Layouts and design - implementation 'com.android.support.constraint:constraint-layout:1.1.3' - implementation 'com.android.support:appcompat-v7:28.0.0' - implementation 'com.android.support:cardview-v7:28.0.0' - implementation 'com.android.support:recyclerview-v7:28.0.0' - implementation 'com.android.support:design:28.0.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'androidx.cardview:cardview:1.0.0' + implementation 'androidx.recyclerview:recyclerview:1.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 'com.android.support:support-v13:28.0.0' // font awesome - implementation 'com.blackboardtheory:android-iconify-fontawesome:3.0.1-SNAPSHOT' - - // BottomNavigationViewEx -> https://github.com/ittianyu/BottomNavigationViewEx - implementation 'com.github.ittianyu:BottomNavigationViewEx:2.0.2' + implementation "com.mikepenz:iconics-core:3.1.0" + implementation 'com.mikepenz:fontawesome-typeface:5.3.1.1@aar' // http client / REST 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-hls:2.9.2' implementation 'com.google.android.exoplayer:exoplayer-smoothstreaming:2.9.2' -// implementation 'com.devbrackets.android:exomedia:4.1.0' // testing testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + androidTestImplementation 'androidx.test:runner:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' } } buildTypes { diff --git a/app/src/androidTest/java/net/schueller/peertube/ExampleInstrumentedTest.java b/app/src/androidTest/java/net/schueller/peertube/ExampleInstrumentedTest.java index 1079623..0c0fe04 100644 --- a/app/src/androidTest/java/net/schueller/peertube/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/net/schueller/peertube/ExampleInstrumentedTest.java @@ -1,8 +1,8 @@ package net.schueller.peertube; import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/app/src/main/java/net/schueller/peertube/activity/AppCompatPreferenceActivity.java b/app/src/main/java/net/schueller/peertube/activity/AppCompatPreferenceActivity.java index 8675d18..f4ef791 100644 --- a/app/src/main/java/net/schueller/peertube/activity/AppCompatPreferenceActivity.java +++ b/app/src/main/java/net/schueller/peertube/activity/AppCompatPreferenceActivity.java @@ -3,11 +3,10 @@ package net.schueller.peertube.activity; import android.content.res.Configuration; import android.os.Bundle; import android.preference.PreferenceActivity; -import android.support.annotation.LayoutRes; -import android.support.annotation.Nullable; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatDelegate; -import android.support.v7.widget.Toolbar; +import androidx.annotation.LayoutRes; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatDelegate; + import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/net/schueller/peertube/activity/LoginActivity.java b/app/src/main/java/net/schueller/peertube/activity/LoginActivity.java index 5118071..990f8a8 100644 --- a/app/src/main/java/net/schueller/peertube/activity/LoginActivity.java +++ b/app/src/main/java/net/schueller/peertube/activity/LoginActivity.java @@ -1,36 +1,31 @@ package net.schueller.peertube.activity; -import android.os.StrictMode; -import android.support.annotation.NonNull; -import android.support.v7.app.AppCompatActivity; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.EditText; -import android.widget.Toast; import net.schueller.peertube.R; import net.schueller.peertube.helper.APIUrlHelper; import net.schueller.peertube.model.OauthClient; import net.schueller.peertube.model.Token; -import net.schueller.peertube.model.VideoList; import net.schueller.peertube.network.AuthenticationService; -import net.schueller.peertube.network.GetVideoDataService; import net.schueller.peertube.network.RetrofitInstance; -import java.io.IOException; - -import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; import retrofit2.Call; 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 { OkHttpClient client = new OkHttpClient(); @@ -48,6 +43,15 @@ public class LoginActivity extends AppCompatActivity { @Override protected void onCreate(Bundle 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); // bind button click diff --git a/app/src/main/java/net/schueller/peertube/activity/SelectServerActivity.java b/app/src/main/java/net/schueller/peertube/activity/SelectServerActivity.java index 9c06c8d..5f15750 100644 --- a/app/src/main/java/net/schueller/peertube/activity/SelectServerActivity.java +++ b/app/src/main/java/net/schueller/peertube/activity/SelectServerActivity.java @@ -1,7 +1,7 @@ package net.schueller.peertube.activity; -import android.support.annotation.NonNull; -import android.support.v7.app.AppCompatActivity; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import net.schueller.peertube.R; diff --git a/app/src/main/java/net/schueller/peertube/activity/SettingsActivity.java b/app/src/main/java/net/schueller/peertube/activity/SettingsActivity.java index f4070fd..eabde7c 100644 --- a/app/src/main/java/net/schueller/peertube/activity/SettingsActivity.java +++ b/app/src/main/java/net/schueller/peertube/activity/SettingsActivity.java @@ -3,11 +3,12 @@ package net.schueller.peertube.activity; import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.content.res.Configuration; import android.os.Build; import android.os.Bundle; import android.preference.Preference; -import android.support.v7.app.ActionBar; +import androidx.appcompat.app.ActionBar; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.util.Patterns; @@ -17,6 +18,8 @@ import android.widget.Toast; import net.schueller.peertube.R; 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 { @@ -80,7 +83,17 @@ public class SettingsActivity extends AppCompatPreferenceActivity { @Override 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); + setupActionBar(); getFragmentManager().beginTransaction().replace(android.R.id.content, new GeneralPreferenceFragment()).commit(); diff --git a/app/src/main/java/net/schueller/peertube/activity/VideoListActivity.java b/app/src/main/java/net/schueller/peertube/activity/VideoListActivity.java index d7d6797..a256766 100644 --- a/app/src/main/java/net/schueller/peertube/activity/VideoListActivity.java +++ b/app/src/main/java/net/schueller/peertube/activity/VideoListActivity.java @@ -8,18 +8,20 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.preference.PreferenceManager; import android.provider.SearchRecentSuggestions; -import android.support.annotation.NonNull; -import android.support.design.bottomnavigation.LabelVisibilityMode; -import android.support.v4.app.ActivityCompat; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.app.AppCompatActivity; +import androidx.annotation.NonNull; + +import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.google.android.material.bottomnavigation.LabelVisibilityMode; +import androidx.core.app.ActivityCompat; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; -import android.support.v7.app.AppCompatDelegate; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.SearchView; -import android.support.v7.widget.Toolbar; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.appcompat.widget.SearchView; +import androidx.appcompat.widget.Toolbar; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; @@ -27,17 +29,8 @@ import android.view.MenuItem; import android.view.View; import android.widget.TextView; import android.widget.Toast; - -//import com.google.android.gms.common.GooglePlayServicesNotAvailableException; -//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 com.mikepenz.fontawesome_typeface_library.FontAwesome; +import com.mikepenz.iconics.IconicsDrawable; import net.schueller.peertube.R; import net.schueller.peertube.adapter.VideoAdapter; import net.schueller.peertube.helper.APIUrlHelper; @@ -53,6 +46,9 @@ import retrofit2.Call; import retrofit2.Callback; 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 { private String TAG = "VideoListActivity"; @@ -73,49 +69,10 @@ public class VideoListActivity extends AppCompatActivity { 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 protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); // Set Night Mode @@ -125,7 +82,7 @@ public class VideoListActivity extends AppCompatActivity { // Set theme setTheme(getResources().getIdentifier( - sharedPref.getString("pref_theme", "AppTheme.ORANGE"), + sharedPref.getString(THEME_PREF_KEY, DEFAULT_THEME), "style", getPackageName()) ); @@ -134,41 +91,13 @@ public class VideoListActivity extends AppCompatActivity { filter = ""; - // Init icons - Iconify.with(new FontAwesomeModule()); + createBottomBarNavigation(); // Attaching the layout to the toolbar object Toolbar toolbar = findViewById(R.id.tool_bar); // Setting toolbar as the ActionBar with setSupportActionBar() call 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) - .colorRes(R.color.primaryDarkColorDeepOrange)); - navMenu.findItem(R.id.navigation_trending).setIcon( - new IconDrawable(this, FontAwesomeIcons.fa_fire) - .colorRes(R.color.primaryDarkColorDeepOrange)); - navMenu.findItem(R.id.navigation_subscriptions).setIcon( - new IconDrawable(this, FontAwesomeIcons.fa_folder) - .colorRes(R.color.primaryDarkColorDeepOrange)); - navMenu.findItem(R.id.navigation_account).setIcon( - new IconDrawable(this, FontAwesomeIcons.fa_user_circle) - .colorRes(R.color.primaryDarkColorDeepOrange)); - - navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); - - // load Video List createList(); @@ -181,16 +110,12 @@ public class VideoListActivity extends AppCompatActivity { // Set an icon in the ActionBar menu.findItem(R.id.action_settings).setIcon( - new IconDrawable(this, FontAwesomeIcons.fa_cog) - .colorRes(R.color.cardview_light_background) - .actionBarSize()); - + new IconicsDrawable(this, FontAwesome.Icon.faw_cog).actionBar()); MenuItem searchMenuItem = menu.findItem(R.id.action_search); + searchMenuItem.setIcon( - new IconDrawable(this, FontAwesomeIcons.fa_search) - .colorRes(R.color.cardview_light_background) - .actionBarSize()); + new IconicsDrawable(this, FontAwesome.Icon.faw_search).actionBar()); // Get the SearchView and set the searchable configuration SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); @@ -356,22 +281,7 @@ public class VideoListActivity extends AppCompatActivity { }); } - /** - * Force android to not use SSLv3 - *
- * // * @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
protected void onResume() {
super.onResume();
@@ -415,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;
+ });
+
+ }
+
}
diff --git a/app/src/main/java/net/schueller/peertube/activity/VideoPlayActivity.java b/app/src/main/java/net/schueller/peertube/activity/VideoPlayActivity.java
index b1cef54..e43af9d 100644
--- a/app/src/main/java/net/schueller/peertube/activity/VideoPlayActivity.java
+++ b/app/src/main/java/net/schueller/peertube/activity/VideoPlayActivity.java
@@ -12,9 +12,9 @@ import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
import android.preference.PreferenceManager;
-import android.support.annotation.NonNull;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.PopupMenu;
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.PopupMenu;
import android.util.Log;
import android.view.Surface;
import android.view.View;
@@ -51,6 +51,9 @@ import retrofit2.Call;
import retrofit2.Callback;
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 {
private static final String TAG = "VideoPlayActivity";
@@ -89,6 +92,15 @@ public class VideoPlayActivity extends AppCompatActivity implements VideoRendere
@Override
protected void onCreate(Bundle 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);
progressBar = findViewById(R.id.progress);
diff --git a/app/src/main/java/net/schueller/peertube/adapter/VideoAdapter.java b/app/src/main/java/net/schueller/peertube/adapter/VideoAdapter.java
index d1b7796..b898133 100644
--- a/app/src/main/java/net/schueller/peertube/adapter/VideoAdapter.java
+++ b/app/src/main/java/net/schueller/peertube/adapter/VideoAdapter.java
@@ -2,9 +2,9 @@ package net.schueller.peertube.adapter;
import android.content.Context;
import android.content.Intent;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.PopupMenu;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.NonNull;
+import androidx.appcompat.widget.PopupMenu;
+import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
diff --git a/app/src/main/java/net/schueller/peertube/helper/Constants.java b/app/src/main/java/net/schueller/peertube/helper/Constants.java
new file mode 100644
index 0000000..02d03bf
--- /dev/null
+++ b/app/src/main/java/net/schueller/peertube/helper/Constants.java
@@ -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";
+}
diff --git a/app/src/main/java/net/schueller/peertube/service/VideoPlayerService.java b/app/src/main/java/net/schueller/peertube/service/VideoPlayerService.java
index 2f42dd1..3b9611e 100644
--- a/app/src/main/java/net/schueller/peertube/service/VideoPlayerService.java
+++ b/app/src/main/java/net/schueller/peertube/service/VideoPlayerService.java
@@ -12,7 +12,7 @@ import android.media.AudioManager;
import android.net.Uri;
import android.os.Binder;
import android.os.IBinder;
-import android.support.annotation.Nullable;
+import androidx.annotation.Nullable;
import android.util.Log;
import com.google.android.exoplayer2.ExoPlayerFactory;
diff --git a/app/src/main/res/color/bottom_bar.xml b/app/src/main/res/color/bottom_bar.xml
deleted file mode 100644
index 1f394b4..0000000
--- a/app/src/main/res/color/bottom_bar.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-