theme selection & gradle update
* it's now possible to change the app theme (light/dark) * update gradle to version 6.7.1 * update gradle pugin to version 4.1.1 * update kotlin to 1.4.10
This commit is contained in:
		| @ -11,7 +11,7 @@ android { | |||||||
|         minSdkVersion 23 |         minSdkVersion 23 | ||||||
|         targetSdkVersion 30 |         targetSdkVersion 30 | ||||||
|         versionCode 1000 //00.01.000 |         versionCode 1000 //00.01.000 | ||||||
|         versionName "0.2.0-beta1" |         versionName "0.2.0-beta2" | ||||||
|  |  | ||||||
|         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" |         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | ||||||
|         resValue "string", "build_time", buildTime() |         resValue "string", "build_time", buildTime() | ||||||
|  | |||||||
| @ -38,6 +38,7 @@ import org.mosad.teapod.preferences.EncryptedPreferences | |||||||
| import org.mosad.teapod.preferences.Preferences | import org.mosad.teapod.preferences.Preferences | ||||||
| import org.mosad.teapod.ui.components.LoginDialog | import org.mosad.teapod.ui.components.LoginDialog | ||||||
| import org.mosad.teapod.ui.fragments.* | import org.mosad.teapod.ui.fragments.* | ||||||
|  | import org.mosad.teapod.util.DataTypes | ||||||
| import org.mosad.teapod.util.StorageController | import org.mosad.teapod.util.StorageController | ||||||
| import org.mosad.teapod.util.TMDBApiController | import org.mosad.teapod.util.TMDBApiController | ||||||
| import kotlin.system.measureTimeMillis | import kotlin.system.measureTimeMillis | ||||||
| @ -46,13 +47,22 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS | |||||||
|  |  | ||||||
|     private var activeBaseFragment: Fragment = HomeFragment() // the currently active fragment, home at the start |     private var activeBaseFragment: Fragment = HomeFragment() // the currently active fragment, home at the start | ||||||
|  |  | ||||||
|  |     companion object { | ||||||
|  |         var wasInitialized = false | ||||||
|  |     } | ||||||
|  |  | ||||||
|     override fun onCreate(savedInstanceState: Bundle?) { |     override fun onCreate(savedInstanceState: Bundle?) { | ||||||
|         super.onCreate(savedInstanceState) |         super.onCreate(savedInstanceState) | ||||||
|  |  | ||||||
|  |         if (!wasInitialized) { | ||||||
|  |             load() | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         theme.applyStyle(getThemeResource(), true) | ||||||
|  |  | ||||||
|         setContentView(R.layout.activity_main) |         setContentView(R.layout.activity_main) | ||||||
|         nav_view.setOnNavigationItemSelectedListener(this) |         nav_view.setOnNavigationItemSelectedListener(this) | ||||||
|  |  | ||||||
|         load() |  | ||||||
|  |  | ||||||
|         supportFragmentManager.commit { |         supportFragmentManager.commit { | ||||||
|             replace(R.id.nav_host_fragment, activeBaseFragment, activeBaseFragment.javaClass.simpleName) |             replace(R.id.nav_host_fragment, activeBaseFragment, activeBaseFragment.javaClass.simpleName) | ||||||
|         } |         } | ||||||
| @ -102,6 +112,13 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS | |||||||
|         return ret |         return ret | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private fun getThemeResource(): Int { | ||||||
|  |         return when (Preferences.theme) { | ||||||
|  |             DataTypes.Theme.DARK -> R.style.AppTheme_Dark | ||||||
|  |             else -> R.style.AppTheme_Light | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     private fun load() { |     private fun load() { | ||||||
|         // running login and list in parallel does not bring any speed improvements |         // running login and list in parallel does not bring any speed improvements | ||||||
|         val time = measureTimeMillis { |         val time = measureTimeMillis { | ||||||
| @ -118,10 +135,26 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS | |||||||
|  |  | ||||||
|             StorageController.load(this) |             StorageController.load(this) | ||||||
|             AoDParser.initialLoading() |             AoDParser.initialLoading() | ||||||
|  |  | ||||||
|  |             wasInitialized = true | ||||||
|         } |         } | ||||||
|         Log.i(javaClass.name, "login and list in $time ms") |         Log.i(javaClass.name, "login and list in $time ms") | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private fun showLoginDialog(firstTry: Boolean) { | ||||||
|  |         LoginDialog(this, firstTry).positiveButton { | ||||||
|  |             EncryptedPreferences.saveCredentials(login, password, context) | ||||||
|  |  | ||||||
|  |             if (!AoDParser.login()) { | ||||||
|  |                 showLoginDialog(false) | ||||||
|  |                 Log.w(javaClass.name, "Login failed, please try again.") | ||||||
|  |             } | ||||||
|  |         }.negativeButton { | ||||||
|  |             Log.i(javaClass.name, "Login canceled, exiting.") | ||||||
|  |             finish() | ||||||
|  |         }.show() | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Show the media fragment for the selected media. |      * Show the media fragment for the selected media. | ||||||
|      * While loading show the loading fragment. |      * While loading show the loading fragment. | ||||||
| @ -159,17 +192,15 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS | |||||||
|         startActivity(intent) |         startActivity(intent) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private fun showLoginDialog(firstTry: Boolean) { |     /** | ||||||
|         LoginDialog(this, firstTry).positiveButton { |      * use custom restart instead of recreate(), since it has animations | ||||||
|             EncryptedPreferences.saveCredentials(login, password, context) |      */ | ||||||
|  |     fun restart() { | ||||||
|             if (!AoDParser.login()) { |         val restartIntent = intent | ||||||
|                 showLoginDialog(false) |         restartIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION) | ||||||
|                 Log.w(javaClass.name, "Login failed, please try again.") |         finish() | ||||||
|             } |         startActivity(restartIntent) | ||||||
|         }.negativeButton { |  | ||||||
|             Log.i(javaClass.name, "Login canceled, exiting.") |  | ||||||
|             finish() |  | ||||||
|         }.show() |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,7 +1,9 @@ | |||||||
| package org.mosad.teapod.preferences | package org.mosad.teapod.preferences | ||||||
|  |  | ||||||
| import android.content.Context | import android.content.Context | ||||||
|  | import android.content.SharedPreferences | ||||||
| import org.mosad.teapod.R | import org.mosad.teapod.R | ||||||
|  | import org.mosad.teapod.util.DataTypes | ||||||
|  |  | ||||||
| object Preferences { | object Preferences { | ||||||
|  |  | ||||||
| @ -9,14 +11,18 @@ object Preferences { | |||||||
|         internal set |         internal set | ||||||
|     var autoplay = true |     var autoplay = true | ||||||
|         internal set |         internal set | ||||||
|  |     var theme = DataTypes.Theme.LIGHT | ||||||
|  |         internal set | ||||||
|  |  | ||||||
|     fun savePreferSecondary(context: Context, preferSecondary: Boolean) { |     private fun getSharedPref(context: Context): SharedPreferences { | ||||||
|         val sharedPref = context.getSharedPreferences( |         return context.getSharedPreferences( | ||||||
|             context.getString(R.string.preference_file_key), |             context.getString(R.string.preference_file_key), | ||||||
|             Context.MODE_PRIVATE |             Context.MODE_PRIVATE | ||||||
|         ) |         ) | ||||||
|  |     } | ||||||
|  |  | ||||||
|         with(sharedPref.edit()) { |     fun savePreferSecondary(context: Context, preferSecondary: Boolean) { | ||||||
|  |         with(getSharedPref(context).edit()) { | ||||||
|             putBoolean(context.getString(R.string.save_key_prefer_secondary), preferSecondary) |             putBoolean(context.getString(R.string.save_key_prefer_secondary), preferSecondary) | ||||||
|             apply() |             apply() | ||||||
|         } |         } | ||||||
| @ -25,12 +31,7 @@ object Preferences { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     fun saveAutoplay(context: Context, autoplay: Boolean) { |     fun saveAutoplay(context: Context, autoplay: Boolean) { | ||||||
|         val sharedPref = context.getSharedPreferences( |         with(getSharedPref(context).edit()) { | ||||||
|             context.getString(R.string.preference_file_key), |  | ||||||
|             Context.MODE_PRIVATE |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         with(sharedPref.edit()) { |  | ||||||
|             putBoolean(context.getString(R.string.save_key_autoplay), autoplay) |             putBoolean(context.getString(R.string.save_key_autoplay), autoplay) | ||||||
|             apply() |             apply() | ||||||
|         } |         } | ||||||
| @ -38,14 +39,20 @@ object Preferences { | |||||||
|         this.autoplay = autoplay |         this.autoplay = autoplay | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     fun saveTheme(context: Context, theme: DataTypes.Theme) { | ||||||
|  |         with(getSharedPref(context).edit()) { | ||||||
|  |             putString(context.getString(R.string.save_key_theme), theme.toString()) | ||||||
|  |             apply() | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         this.theme = theme | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * initially load the stored values |      * initially load the stored values | ||||||
|      */ |      */ | ||||||
|     fun load(context: Context) { |     fun load(context: Context) { | ||||||
|         val sharedPref = context.getSharedPreferences( |         val sharedPref = getSharedPref(context) | ||||||
|             context.getString(R.string.preference_file_key), |  | ||||||
|             Context.MODE_PRIVATE |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         preferSecondary = sharedPref.getBoolean( |         preferSecondary = sharedPref.getBoolean( | ||||||
|             context.getString(R.string.save_key_prefer_secondary), false |             context.getString(R.string.save_key_prefer_secondary), false | ||||||
| @ -53,6 +60,11 @@ object Preferences { | |||||||
|         autoplay = sharedPref.getBoolean( |         autoplay = sharedPref.getBoolean( | ||||||
|             context.getString(R.string.save_key_autoplay), true |             context.getString(R.string.save_key_autoplay), true | ||||||
|         ) |         ) | ||||||
|  |         theme = DataTypes.Theme.valueOf( | ||||||
|  |             sharedPref.getString( | ||||||
|  |                 context.getString(R.string.save_key_theme), DataTypes.Theme.LIGHT.toString() | ||||||
|  |             ) ?:  DataTypes.Theme.LIGHT.toString() | ||||||
|  |         ) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -7,17 +7,21 @@ import android.view.View | |||||||
| import android.view.ViewGroup | import android.view.ViewGroup | ||||||
| import androidx.fragment.app.Fragment | import androidx.fragment.app.Fragment | ||||||
| import com.afollestad.materialdialogs.MaterialDialog | import com.afollestad.materialdialogs.MaterialDialog | ||||||
|  | import com.afollestad.materialdialogs.list.listItemsSingleChoice | ||||||
| import de.psdev.licensesdialog.LicensesDialog | import de.psdev.licensesdialog.LicensesDialog | ||||||
| import kotlinx.android.synthetic.main.fragment_account.* | import kotlinx.android.synthetic.main.fragment_account.* | ||||||
| import org.mosad.teapod.BuildConfig | import org.mosad.teapod.BuildConfig | ||||||
|  | import org.mosad.teapod.MainActivity | ||||||
| import org.mosad.teapod.R | import org.mosad.teapod.R | ||||||
| import org.mosad.teapod.parser.AoDParser | import org.mosad.teapod.parser.AoDParser | ||||||
| import org.mosad.teapod.preferences.EncryptedPreferences | import org.mosad.teapod.preferences.EncryptedPreferences | ||||||
| import org.mosad.teapod.preferences.Preferences | import org.mosad.teapod.preferences.Preferences | ||||||
| import org.mosad.teapod.ui.components.LoginDialog | import org.mosad.teapod.ui.components.LoginDialog | ||||||
|  | import org.mosad.teapod.util.DataTypes.Theme | ||||||
|  |  | ||||||
| class AccountFragment : Fragment() { | class AccountFragment : Fragment() { | ||||||
|  |  | ||||||
|  |  | ||||||
|     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { |     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { | ||||||
|         return inflater.inflate(R.layout.fragment_account, container, false) |         return inflater.inflate(R.layout.fragment_account, container, false) | ||||||
|     } |     } | ||||||
| @ -27,6 +31,11 @@ class AccountFragment : Fragment() { | |||||||
|  |  | ||||||
|         text_account_login.text = EncryptedPreferences.login |         text_account_login.text = EncryptedPreferences.login | ||||||
|         text_info_about_desc.text = getString(R.string.info_about_desc, BuildConfig.VERSION_NAME, getString(R.string.build_time)) |         text_info_about_desc.text = getString(R.string.info_about_desc, BuildConfig.VERSION_NAME, getString(R.string.build_time)) | ||||||
|  |         text_theme_selected.text = when (Preferences.theme) { | ||||||
|  |             Theme.DARK -> getString(R.string.theme_dark) | ||||||
|  |             else -> getString(R.string.theme_light) | ||||||
|  |         } | ||||||
|  |  | ||||||
|         switch_secondary.isChecked = Preferences.preferSecondary |         switch_secondary.isChecked = Preferences.preferSecondary | ||||||
|         switch_autoplay.isChecked = Preferences.autoplay |         switch_autoplay.isChecked = Preferences.autoplay | ||||||
|  |  | ||||||
| @ -38,6 +47,10 @@ class AccountFragment : Fragment() { | |||||||
|             showLoginDialog(true) |             showLoginDialog(true) | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         linear_theme.setOnClickListener { | ||||||
|  |             showThemeDialog() | ||||||
|  |         } | ||||||
|  |  | ||||||
|         linear_about.setOnClickListener { |         linear_about.setOnClickListener { | ||||||
|             MaterialDialog(requireContext()) |             MaterialDialog(requireContext()) | ||||||
|                 .title(R.string.info_about) |                 .title(R.string.info_about) | ||||||
| @ -46,15 +59,14 @@ class AccountFragment : Fragment() { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         text_licenses.setOnClickListener { |         text_licenses.setOnClickListener { | ||||||
|             val selectedTheme = requireContext().applicationInfo.theme |  | ||||||
|  |  | ||||||
|             val dialogCss = when (selectedTheme) { |             val dialogCss = when (Preferences.theme) { | ||||||
|                 R.style.AppTheme_Dark -> R.string.license_dialog_style_dark |                 Theme.DARK -> R.string.license_dialog_style_dark | ||||||
|                 else -> R.string.license_dialog_style_light |                 else -> R.string.license_dialog_style_light | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             val themeId = when (selectedTheme) { |             val themeId = when (Preferences.theme) { | ||||||
|                 R.style.AppTheme_Dark -> R.style.LicensesDialogTheme_Dark |                 Theme.DARK -> R.style.LicensesDialogTheme_Dark | ||||||
|                 else -> R.style.AppTheme_Light |                 else -> R.style.AppTheme_Light | ||||||
|             } |             } | ||||||
|  |  | ||||||
| @ -90,4 +102,24 @@ class AccountFragment : Fragment() { | |||||||
|             password = "" |             password = "" | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private fun showThemeDialog() { | ||||||
|  |         val themes = listOf( | ||||||
|  |             resources.getString(R.string.theme_light), | ||||||
|  |             resources.getString(R.string.theme_dark) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         MaterialDialog(requireContext()).show { | ||||||
|  |             title(R.string.theme) | ||||||
|  |             listItemsSingleChoice(items = themes, initialSelection = Preferences.theme.ordinal) { _, index, _ -> | ||||||
|  |                 when(index) { | ||||||
|  |                     0 -> Preferences.saveTheme(context, Theme.LIGHT) | ||||||
|  |                     1 -> Preferences.saveTheme(context, Theme.DARK) | ||||||
|  |                     else -> Preferences.saveTheme(context, Theme.LIGHT) | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 (activity as MainActivity).restart() | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
| @ -6,6 +6,11 @@ class DataTypes { | |||||||
|         MOVIE, |         MOVIE, | ||||||
|         TVSHOW |         TVSHOW | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     enum class Theme(val str: String) { | ||||||
|  |         LIGHT("Light"), | ||||||
|  |         DARK("Dark") | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								app/src/main/res/drawable/ic_baseline_style_24.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								app/src/main/res/drawable/ic_baseline_style_24.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | <vector android:height="24dp" android:tint="#FFFFFF" | ||||||
|  |     android:viewportHeight="24" android:viewportWidth="24" | ||||||
|  |     android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> | ||||||
|  |     <path android:fillColor="@android:color/white" android:pathData="M2.53,19.65l1.34,0.56v-9.03l-2.43,5.86c-0.41,1.02 0.08,2.19 1.09,2.61zM22.03,15.95L17.07,3.98c-0.31,-0.75 -1.04,-1.21 -1.81,-1.23 -0.26,0 -0.53,0.04 -0.79,0.15L7.1,5.95c-0.75,0.31 -1.21,1.03 -1.23,1.8 -0.01,0.27 0.04,0.54 0.15,0.8l4.96,11.97c0.31,0.76 1.05,1.22 1.83,1.23 0.26,0 0.52,-0.05 0.77,-0.15l7.36,-3.05c1.02,-0.42 1.51,-1.59 1.09,-2.6zM7.88,8.75c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1 1,0.45 1,1 -0.45,1 -1,1zM5.88,19.75c0,1.1 0.9,2 2,2h1.45l-3.45,-8.34v6.34z"/> | ||||||
|  | </vector> | ||||||
| @ -222,6 +222,50 @@ | |||||||
|                     </androidx.constraintlayout.widget.ConstraintLayout> |                     </androidx.constraintlayout.widget.ConstraintLayout> | ||||||
|                 </LinearLayout> |                 </LinearLayout> | ||||||
|  |  | ||||||
|  |                 <LinearLayout | ||||||
|  |                     android:id="@+id/linear_theme" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="match_parent" | ||||||
|  |                     android:layout_margin="7dp" | ||||||
|  |                     android:gravity="center" | ||||||
|  |                     android:orientation="horizontal"> | ||||||
|  |  | ||||||
|  |                     <ImageView | ||||||
|  |                         android:id="@+id/imageViewTheme" | ||||||
|  |                         android:layout_width="wrap_content" | ||||||
|  |                         android:layout_height="wrap_content" | ||||||
|  |                         android:contentDescription="@string/account" | ||||||
|  |                         android:minWidth="48dp" | ||||||
|  |                         android:minHeight="48dp" | ||||||
|  |                         android:padding="9dp" | ||||||
|  |                         android:scaleType="fitXY" | ||||||
|  |                         android:src="@drawable/ic_baseline_style_24" | ||||||
|  |                         app:tint="?iconNoAction" /> | ||||||
|  |  | ||||||
|  |                     <LinearLayout | ||||||
|  |                         android:layout_width="match_parent" | ||||||
|  |                         android:layout_height="match_parent" | ||||||
|  |                         android:orientation="vertical"> | ||||||
|  |  | ||||||
|  |                         <TextView | ||||||
|  |                             android:id="@+id/text_theme" | ||||||
|  |                             android:layout_width="match_parent" | ||||||
|  |                             android:layout_height="wrap_content" | ||||||
|  |                             android:layout_weight="1" | ||||||
|  |                             android:text="@string/theme" | ||||||
|  |                             android:textSize="16sp" /> | ||||||
|  |  | ||||||
|  |                         <TextView | ||||||
|  |                             android:id="@+id/text_theme_selected" | ||||||
|  |                             android:layout_width="match_parent" | ||||||
|  |                             android:layout_height="wrap_content" | ||||||
|  |                             android:layout_weight="1" | ||||||
|  |                             android:text="@string/theme_light" | ||||||
|  |                             android:textColor="?textSecondary" /> | ||||||
|  |                     </LinearLayout> | ||||||
|  |  | ||||||
|  |                 </LinearLayout> | ||||||
|  |  | ||||||
|             </LinearLayout> |             </LinearLayout> | ||||||
|  |  | ||||||
|             <LinearLayout |             <LinearLayout | ||||||
|  | |||||||
| @ -31,6 +31,9 @@ | |||||||
|     <string name="settings_secondary_desc">Untertitle-Stream verwenden, sofern vorhanden</string> |     <string name="settings_secondary_desc">Untertitle-Stream verwenden, sofern vorhanden</string> | ||||||
|     <string name="settings_autoplay">Autoplay</string> |     <string name="settings_autoplay">Autoplay</string> | ||||||
|     <string name="settings_autoplay_desc">Nächste Episode automatisch abspielen</string> |     <string name="settings_autoplay_desc">Nächste Episode automatisch abspielen</string> | ||||||
|  |     <string name="theme">Design</string> | ||||||
|  |     <string name="theme_light">Hell</string> | ||||||
|  |     <string name="theme_dark">Dunkel</string> | ||||||
|  |  | ||||||
|     <!-- player --> |     <!-- player --> | ||||||
|     <string name="close_player">Player schließen</string> |     <string name="close_player">Player schließen</string> | ||||||
|  | |||||||
| @ -40,6 +40,10 @@ | |||||||
|     <string name="settings_secondary_desc">Use the subtitles stream if present</string> |     <string name="settings_secondary_desc">Use the subtitles stream if present</string> | ||||||
|     <string name="settings_autoplay">Autoplay</string> |     <string name="settings_autoplay">Autoplay</string> | ||||||
|     <string name="settings_autoplay_desc">Play next episode automatically</string> |     <string name="settings_autoplay_desc">Play next episode automatically</string> | ||||||
|  |     <string name="theme">Theme</string> | ||||||
|  |     <string name="theme_light">Light</string> | ||||||
|  |     <string name="theme_dark">Dark</string> | ||||||
|  |  | ||||||
|  |  | ||||||
|     <!-- player --> |     <!-- player --> | ||||||
|     <string name="close_player">close player</string> |     <string name="close_player">close player</string> | ||||||
| @ -69,6 +73,7 @@ | |||||||
|     <string name="save_key_user_password" translatable="false">org.mosad.teapod.user_password</string> |     <string name="save_key_user_password" translatable="false">org.mosad.teapod.user_password</string> | ||||||
|     <string name="save_key_prefer_secondary" translatable="false">org.mosad.teapod.prefer_secondary</string> |     <string name="save_key_prefer_secondary" translatable="false">org.mosad.teapod.prefer_secondary</string> | ||||||
|     <string name="save_key_autoplay" translatable="false">org.mosad.teapod.autoplay</string> |     <string name="save_key_autoplay" translatable="false">org.mosad.teapod.autoplay</string> | ||||||
|  |     <string name="save_key_theme" translatable="false">org.mosad.teapod.theme</string> | ||||||
|  |  | ||||||
|     <!-- intents & states --> |     <!-- intents & states --> | ||||||
|     <string name="intent_media_id" translatable="false">intent_media_id</string> |     <string name="intent_media_id" translatable="false">intent_media_id</string> | ||||||
|  | |||||||
| @ -18,7 +18,6 @@ | |||||||
|         <item name="iconNoAction">@color/iconNoActionLight</item> |         <item name="iconNoAction">@color/iconNoActionLight</item> | ||||||
|         <item name="buttonBackground">@color/buttonBackgroundLight</item> |         <item name="buttonBackground">@color/buttonBackgroundLight</item> | ||||||
|         <item name="md_background_color">@color/themeSecondaryLight</item> |         <item name="md_background_color">@color/themeSecondaryLight</item> | ||||||
|         <item name="md_color_title">@color/textPrimaryLight</item> |  | ||||||
|         <item name="md_color_content">@color/textSecondaryLight</item> |         <item name="md_color_content">@color/textSecondaryLight</item> | ||||||
|     </style> |     </style> | ||||||
|  |  | ||||||
| @ -34,8 +33,10 @@ | |||||||
|         <item name="iconNoAction">@color/iconNoActionDark</item> |         <item name="iconNoAction">@color/iconNoActionDark</item> | ||||||
|         <item name="buttonBackground">@color/buttonBackgroundDark</item> |         <item name="buttonBackground">@color/buttonBackgroundDark</item> | ||||||
|         <item name="md_background_color">@color/themeSecondaryDark</item> |         <item name="md_background_color">@color/themeSecondaryDark</item> | ||||||
|         <item name="md_color_title">@color/textPrimaryDark</item> |  | ||||||
|         <item name="md_color_content">@color/textSecondaryDark</item> |         <item name="md_color_content">@color/textSecondaryDark</item> | ||||||
|  |  | ||||||
|  |         <!-- without this, the unchecked single choice buttons while be black --> | ||||||
|  |         <item name="md_color_widget_unchecked">@color/textSecondaryDark</item> | ||||||
|     </style> |     </style> | ||||||
|  |  | ||||||
|     <style name="LicensesDialogTheme.Dark" parent="Theme.AppCompat.Dialog"> |     <style name="LicensesDialogTheme.Dark" parent="Theme.AppCompat.Dialog"> | ||||||
|  | |||||||
| @ -1,12 +1,12 @@ | |||||||
| // Top-level build file where you can add configuration options common to all sub-projects/modules. | // Top-level build file where you can add configuration options common to all sub-projects/modules. | ||||||
| buildscript { | buildscript { | ||||||
|     ext.kotlin_version = "1.4.10" |     ext.kotlin_version = "1.4.20" | ||||||
|     repositories { |     repositories { | ||||||
|         google() |         google() | ||||||
|         jcenter() |         jcenter() | ||||||
|     } |     } | ||||||
|     dependencies { |     dependencies { | ||||||
|         classpath 'com.android.tools.build:gradle:4.1.0' |         classpath 'com.android.tools.build:gradle:4.1.1' | ||||||
|         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" |         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" | ||||||
|  |  | ||||||
|         // NOTE: Do not place your application dependencies here; they belong |         // NOTE: Do not place your application dependencies here; they belong | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										3
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							| @ -1,6 +1,5 @@ | |||||||
| #Tue Oct 13 12:04:29 CEST 2020 |  | ||||||
| distributionBase=GRADLE_USER_HOME | distributionBase=GRADLE_USER_HOME | ||||||
| distributionPath=wrapper/dists | distributionPath=wrapper/dists | ||||||
|  | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip | ||||||
| zipStoreBase=GRADLE_USER_HOME | zipStoreBase=GRADLE_USER_HOME | ||||||
| zipStorePath=wrapper/dists | zipStorePath=wrapper/dists | ||||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip |  | ||||||
|  | |||||||
							
								
								
									
										53
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										53
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							| @ -1,5 +1,21 @@ | |||||||
| #!/usr/bin/env sh | #!/usr/bin/env sh | ||||||
|  |  | ||||||
|  | # | ||||||
|  | # Copyright 2015 the original author or authors. | ||||||
|  | # | ||||||
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | # you may not use this file except in compliance with the License. | ||||||
|  | # You may obtain a copy of the License at | ||||||
|  | # | ||||||
|  | #      https://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | # | ||||||
|  | # Unless required by applicable law or agreed to in writing, software | ||||||
|  | # distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | # See the License for the specific language governing permissions and | ||||||
|  | # limitations under the License. | ||||||
|  | # | ||||||
|  |  | ||||||
| ############################################################################## | ############################################################################## | ||||||
| ## | ## | ||||||
| ##  Gradle start up script for UN*X | ##  Gradle start up script for UN*X | ||||||
| @ -28,7 +44,7 @@ APP_NAME="Gradle" | |||||||
| APP_BASE_NAME=`basename "$0"` | APP_BASE_NAME=`basename "$0"` | ||||||
|  |  | ||||||
| # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||||||
| DEFAULT_JVM_OPTS="" | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' | ||||||
|  |  | ||||||
| # Use the maximum available, or set MAX_FD != -1 to use that value. | # Use the maximum available, or set MAX_FD != -1 to use that value. | ||||||
| MAX_FD="maximum" | MAX_FD="maximum" | ||||||
| @ -66,6 +82,7 @@ esac | |||||||
|  |  | ||||||
| CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | ||||||
|  |  | ||||||
|  |  | ||||||
| # Determine the Java command to use to start the JVM. | # Determine the Java command to use to start the JVM. | ||||||
| if [ -n "$JAVA_HOME" ] ; then | if [ -n "$JAVA_HOME" ] ; then | ||||||
|     if [ -x "$JAVA_HOME/jre/sh/java" ] ; then |     if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | ||||||
| @ -109,10 +126,11 @@ if $darwin; then | |||||||
|     GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" |     GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | ||||||
| fi | fi | ||||||
|  |  | ||||||
| # For Cygwin, switch paths to Windows format before running java | # For Cygwin or MSYS, switch paths to Windows format before running java | ||||||
| if $cygwin ; then | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then | ||||||
|     APP_HOME=`cygpath --path --mixed "$APP_HOME"` |     APP_HOME=`cygpath --path --mixed "$APP_HOME"` | ||||||
|     CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` |     CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | ||||||
|  |      | ||||||
|     JAVACMD=`cygpath --unix "$JAVACMD"` |     JAVACMD=`cygpath --unix "$JAVACMD"` | ||||||
|  |  | ||||||
|     # We build the pattern for arguments to be converted via cygpath |     # We build the pattern for arguments to be converted via cygpath | ||||||
| @ -138,19 +156,19 @@ if $cygwin ; then | |||||||
|         else |         else | ||||||
|             eval `echo args$i`="\"$arg\"" |             eval `echo args$i`="\"$arg\"" | ||||||
|         fi |         fi | ||||||
|         i=$((i+1)) |         i=`expr $i + 1` | ||||||
|     done |     done | ||||||
|     case $i in |     case $i in | ||||||
|         (0) set -- ;; |         0) set -- ;; | ||||||
|         (1) set -- "$args0" ;; |         1) set -- "$args0" ;; | ||||||
|         (2) set -- "$args0" "$args1" ;; |         2) set -- "$args0" "$args1" ;; | ||||||
|         (3) set -- "$args0" "$args1" "$args2" ;; |         3) set -- "$args0" "$args1" "$args2" ;; | ||||||
|         (4) set -- "$args0" "$args1" "$args2" "$args3" ;; |         4) set -- "$args0" "$args1" "$args2" "$args3" ;; | ||||||
|         (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; |         5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | ||||||
|         (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; |         6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | ||||||
|         (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; |         7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | ||||||
|         (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; |         8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | ||||||
|         (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; |         9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | ||||||
|     esac |     esac | ||||||
| fi | fi | ||||||
|  |  | ||||||
| @ -159,14 +177,9 @@ save () { | |||||||
|     for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done |     for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done | ||||||
|     echo " " |     echo " " | ||||||
| } | } | ||||||
| APP_ARGS=$(save "$@") | APP_ARGS=`save "$@"` | ||||||
|  |  | ||||||
| # Collect all arguments for the java command, following the shell quoting and substitution rules | # Collect all arguments for the java command, following the shell quoting and substitution rules | ||||||
| eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" | ||||||
|  |  | ||||||
| # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong |  | ||||||
| if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then |  | ||||||
|   cd "$(dirname "$0")" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| exec "$JAVACMD" "$@" | exec "$JAVACMD" "$@" | ||||||
|  | |||||||
							
								
								
									
										22
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							| @ -1,3 +1,19 @@ | |||||||
|  | @rem | ||||||
|  | @rem Copyright 2015 the original author or authors. | ||||||
|  | @rem | ||||||
|  | @rem Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | @rem you may not use this file except in compliance with the License. | ||||||
|  | @rem You may obtain a copy of the License at | ||||||
|  | @rem | ||||||
|  | @rem      https://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | @rem | ||||||
|  | @rem Unless required by applicable law or agreed to in writing, software | ||||||
|  | @rem distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | @rem See the License for the specific language governing permissions and | ||||||
|  | @rem limitations under the License. | ||||||
|  | @rem | ||||||
|  |  | ||||||
| @if "%DEBUG%" == "" @echo off | @if "%DEBUG%" == "" @echo off | ||||||
| @rem ########################################################################## | @rem ########################################################################## | ||||||
| @rem | @rem | ||||||
| @ -13,8 +29,11 @@ if "%DIRNAME%" == "" set DIRNAME=. | |||||||
| set APP_BASE_NAME=%~n0 | set APP_BASE_NAME=%~n0 | ||||||
| set APP_HOME=%DIRNAME% | set APP_HOME=%DIRNAME% | ||||||
|  |  | ||||||
|  | @rem Resolve any "." and ".." in APP_HOME to make it shorter. | ||||||
|  | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi | ||||||
|  |  | ||||||
| @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||||||
| set DEFAULT_JVM_OPTS= | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" | ||||||
|  |  | ||||||
| @rem Find java.exe | @rem Find java.exe | ||||||
| if defined JAVA_HOME goto findJavaFromJavaHome | if defined JAVA_HOME goto findJavaFromJavaHome | ||||||
| @ -65,6 +84,7 @@ set CMD_LINE_ARGS=%* | |||||||
|  |  | ||||||
| set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | ||||||
|  |  | ||||||
|  |  | ||||||
| @rem Execute Gradle | @rem Execute Gradle | ||||||
| "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | ||||||
|  |  | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user