Added bug report

main
h4h13 2018-12-06 15:53:03 +05:30
parent 63e3276098
commit d47aeccd87
53 changed files with 1137 additions and 229 deletions

File diff suppressed because one or more lines are too long

View File

@ -122,9 +122,6 @@ dependencies {
implementation "com.squareup.retrofit2:converter-gson:2.4.0"
implementation "com.squareup.retrofit2:adapter-rxjava2:2.4.0"
implementation "com.jakewharton:butterknife:$butterKnife"
kapt "com.jakewharton:butterknife-compiler:$butterKnife"
implementation "com.afollestad.material-dialogs:core:$materialDialog"
implementation "com.afollestad.material-dialogs:commons:$materialDialog"
implementation 'com.afollestad:material-cab:0.1.12'
@ -151,6 +148,8 @@ dependencies {
implementation 'org.nanohttpd:nanohttpd:2.3.1'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
}
repositories {
mavenCentral()

View File

@ -24,7 +24,7 @@ class SongShareDialog : RoundedBottomSheetDialogFragment() {
super.onViewCreated(view, savedInstanceState)
val song = arguments!!.getParcelable<Song>("song")!!
audioFile.text = getString(R.string.currently_listening_to_x_by_x, song.title, song.artistName)
audioText.text = getString(R.string.currently_listening_to_x_by_x, song.title, song.artistName)
audioFile.setTextColor(ThemeStore.textColorSecondary(context!!))
audioText.setTextColor(ThemeStore.textColorSecondary(context!!))
title.setTextColor(ThemeStore.textColorPrimary(context!!))

View File

@ -26,6 +26,7 @@ import code.name.monkey.retromusic.loaders.ArtistLoader
import code.name.monkey.retromusic.loaders.PlaylistSongsLoader
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.ui.activities.base.AbsSlidingMusicPanelActivity
import code.name.monkey.retromusic.ui.activities.bugreport.BugReportActivity
import code.name.monkey.retromusic.ui.fragments.mainactivity.LibraryFragment
import code.name.monkey.retromusic.ui.fragments.mainactivity.folders.FoldersFragment
import code.name.monkey.retromusic.ui.fragments.mainactivity.home.BannerHomeFragment
@ -308,7 +309,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP
}
private fun prepareBugReport() {
startActivity(Intent(this, BugReportActivity::class.java))
}
private fun shareApp() {

View File

@ -3,7 +3,6 @@ package code.name.monkey.retromusic.ui.activities.base
import android.animation.ArgbEvaluator
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
@ -11,7 +10,6 @@ import android.view.ViewTreeObserver
import androidx.annotation.FloatRange
import androidx.annotation.LayoutRes
import androidx.fragment.app.Fragment
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.helper.MusicPlayerRemote
@ -170,8 +168,6 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
override fun onPanelSlide(panel: View?, slideOffset: Float) {
bottomNavigationView.translationY = slideOffset * 400
setMiniPlayerAlphaProgress(slideOffset)
//if (navigationBarColorAnimator != null) navigationBarColorAnimator.cancel();
//super.setNavigationbarColor((int) argbEvaluator.evaluate(slideOffset, navigationbarColor, Color.TRANSPARENT));
}
override fun onPanelStateChanged(panel: View, previousState: PanelState, newState: PanelState) {
@ -230,7 +226,7 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
NowPlayingScreen.PLAIN -> PlainPlayerFragment()
NowPlayingScreen.SIMPLE -> SimplePlayerFragment()
NowPlayingScreen.MATERIAL -> MaterialFragment()
NowPlayingScreen.COLOR->ColorFragment()
NowPlayingScreen.COLOR -> ColorFragment()
else -> PlayerFragment()
} // must implement AbsPlayerFragment
supportFragmentManager.beginTransaction().replace(R.id.player_fragment_container, fragment).commit()
@ -261,16 +257,17 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
override fun onPaletteColorChanged() {
if (panelState == PanelState.EXPANDED) {
val paletteColor = playerFragment!!.paletteColor
ColorUtil.isColorLight(paletteColor)
super.setTaskDescriptionColor(paletteColor)
if (currentNowPlayingScreen == NowPlayingScreen.BLUR) {
val isColorLight = ColorUtil.isColorLight(paletteColor)
if (PreferenceUtil.getInstance().adaptiveColor &&
(currentNowPlayingScreen == NowPlayingScreen.NORMAL || currentNowPlayingScreen == NowPlayingScreen.FLAT)) {
super.setLightNavigationBar(true)
super.setLightStatusbar(isColorLight)
} else if (currentNowPlayingScreen == NowPlayingScreen.FULL || currentNowPlayingScreen == NowPlayingScreen.CARD ||
currentNowPlayingScreen == NowPlayingScreen.BLUR || currentNowPlayingScreen == NowPlayingScreen.BLUR_CARD) {
super.setLightStatusbar(false)
super.setLightNavigationBar(true)
} else {
val isTheme = isOneOfTheseThemes && ColorUtil.isColorLight(ThemeStore.primaryColor(this))
super.setStatusbarColor(Color.TRANSPARENT)
super.setLightStatusbar(isTheme)
super.setLightNavigationBar(isTheme)
}
}
}

View File

@ -0,0 +1,318 @@
package code.name.monkey.retromusic.ui.activities.bugreport
import android.app.Activity
import android.app.Dialog
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.text.TextUtils
import android.view.MenuItem
import android.view.inputmethod.EditorInfo
import android.widget.Toast
import androidx.annotation.StringDef
import androidx.annotation.StringRes
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.misc.DialogAsyncTask
import code.name.monkey.retromusic.ui.activities.base.AbsThemeActivity
import code.name.monkey.retromusic.ui.activities.bugreport.model.DeviceInfo
import code.name.monkey.retromusic.ui.activities.bugreport.model.Report
import code.name.monkey.retromusic.ui.activities.bugreport.model.github.ExtraInfo
import code.name.monkey.retromusic.ui.activities.bugreport.model.github.GithubLogin
import code.name.monkey.retromusic.ui.activities.bugreport.model.github.GithubTarget
import com.afollestad.materialdialogs.MaterialDialog
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.textfield.TextInputLayout
import kotlinx.android.synthetic.main.activity_bug_report.*
import kotlinx.android.synthetic.main.bug_report_card_device_info.*
import kotlinx.android.synthetic.main.bug_report_card_report.*
import org.eclipse.egit.github.core.Issue
import org.eclipse.egit.github.core.client.GitHubClient
import org.eclipse.egit.github.core.client.RequestException
import org.eclipse.egit.github.core.service.IssueService
import java.io.IOException
private const val RESULT_SUCCESS = "RESULT_OK"
private const val RESULT_BAD_CREDENTIALS = "RESULT_BAD_CREDENTIALS"
private const val RESULT_INVALID_TOKEN = "RESULT_INVALID_TOKEN"
private const val RESULT_ISSUES_NOT_ENABLED = "RESULT_ISSUES_NOT_ENABLED"
private const val RESULT_UNKNOWN = "RESULT_UNKNOWN"
@StringDef(RESULT_SUCCESS, RESULT_BAD_CREDENTIALS, RESULT_INVALID_TOKEN, RESULT_ISSUES_NOT_ENABLED, RESULT_UNKNOWN)
@Retention(AnnotationRetention.SOURCE)
private annotation class Result
open class BugReportActivity : AbsThemeActivity() {
private var deviceInfo: DeviceInfo? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_bug_report)
setStatusbarColorAuto()
setNavigationbarColorAuto()
setTaskDescriptionColorAuto()
initViews()
if (TextUtils.isEmpty(title))
setTitle(R.string.report_an_issue)
deviceInfo = DeviceInfo(this)
airTextDeviceInfo!!.text = deviceInfo!!.toString()
}
private fun initViews() {
val accentColor = ThemeStore.accentColor(this)
val primaryColor = ThemeStore.primaryColor(this)
toolbar!!.setBackgroundColor(primaryColor)
setSupportActionBar(toolbar)
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
TintHelper.setTintAuto(optionUseAccount!!, accentColor, false)
optionUseAccount!!.setOnClickListener {
inputTitle!!.isEnabled = true
inputDescription!!.isEnabled = true
inputUsername!!.isEnabled = true
inputPassword!!.isEnabled = true
optionAnonymous!!.isChecked = false
sendFab!!.hide(object : FloatingActionButton.OnVisibilityChangedListener() {
override fun onHidden(fab: FloatingActionButton?) {
super.onHidden(fab)
sendFab!!.setImageResource(R.drawable.ic_send_white_24dp)
sendFab!!.show()
}
})
}
TintHelper.setTintAuto(optionAnonymous!!, accentColor, false)
optionAnonymous!!.setOnClickListener {
inputTitle!!.isEnabled = false
inputDescription!!.isEnabled = false
inputUsername!!.isEnabled = false
inputPassword!!.isEnabled = false
optionUseAccount!!.isChecked = false
sendFab!!.hide(object : FloatingActionButton.OnVisibilityChangedListener() {
override fun onHidden(fab: FloatingActionButton?) {
super.onHidden(fab)
sendFab!!.setImageResource(R.drawable.ic_open_in_browser_white_24dp)
sendFab!!.show()
}
})
}
inputPassword!!.setOnEditorActionListener { _, actionId, event ->
if (actionId == EditorInfo.IME_ACTION_SEND) {
reportIssue()
return@setOnEditorActionListener true
}
false
}
airTextDeviceInfo!!.setOnClickListener { copyDeviceInfoToClipBoard() }
TintHelper.setTintAuto(sendFab!!, accentColor, true)
sendFab!!.setOnClickListener { reportIssue() }
TintHelper.setTintAuto(inputTitle!!, accentColor, false)
TintHelper.setTintAuto(inputDescription!!, accentColor, false)
TintHelper.setTintAuto(inputUsername!!, accentColor, false)
TintHelper.setTintAuto(inputPassword!!, accentColor, false)
}
private fun reportIssue() {
if (optionUseAccount!!.isChecked) {
if (!validateInput()) return
val username = inputUsername!!.text!!.toString()
val password = inputPassword!!.text!!.toString()
sendBugReport(GithubLogin(username, password))
} else {
copyDeviceInfoToClipBoard()
val i = Intent(Intent.ACTION_VIEW)
i.data = Uri.parse(ISSUE_TRACKER_LINK)
i.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(i)
}
}
private fun copyDeviceInfoToClipBoard() {
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText(getString(R.string.device_info), deviceInfo!!.toMarkdown())
clipboard.primaryClip = clip
Toast.makeText(this@BugReportActivity, R.string.copied_device_info_to_clipboard, Toast.LENGTH_LONG).show()
}
private fun validateInput(): Boolean {
var hasErrors = false
if (optionUseAccount!!.isChecked) {
if (TextUtils.isEmpty(inputUsername!!.text)) {
setError(inputLayoutUsername!!, R.string.bug_report_no_username)
hasErrors = true
} else {
removeError(inputLayoutUsername!!)
}
if (TextUtils.isEmpty(inputPassword!!.text)) {
setError(inputLayoutPassword!!, R.string.bug_report_no_password)
hasErrors = true
} else {
removeError(inputLayoutPassword!!)
}
}
if (TextUtils.isEmpty(inputTitle!!.text)) {
setError(inputLayoutTitle!!, R.string.bug_report_no_title)
hasErrors = true
} else {
removeError(inputLayoutTitle!!)
}
if (TextUtils.isEmpty(inputDescription!!.text)) {
setError(inputLayoutDescription!!, R.string.bug_report_no_description)
hasErrors = true
} else {
removeError(inputLayoutDescription!!)
}
return !hasErrors
}
private fun setError(editTextLayout: TextInputLayout, @StringRes errorRes: Int) {
editTextLayout.error = getString(errorRes)
}
private fun removeError(editTextLayout: TextInputLayout) {
editTextLayout.error = null
}
private fun sendBugReport(login: GithubLogin) {
if (!validateInput()) return
val bugTitle = inputTitle!!.text!!.toString()
val bugDescription = inputDescription!!.text!!.toString()
val extraInfo = ExtraInfo()
onSaveExtraInfo(extraInfo)
val report = Report(bugTitle, bugDescription, deviceInfo, extraInfo)
val target = GithubTarget("h4h13", "RetroMusicPlayer")
ReportIssueAsyncTask.report(this, report, target, login)
}
private fun onSaveExtraInfo(extraInfo: ExtraInfo) {}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) {
onBackPressed()
}
return super.onOptionsItemSelected(item)
}
private class ReportIssueAsyncTask private constructor(activity: Activity, private val report: Report, private val target: GithubTarget,
private val login: GithubLogin) : DialogAsyncTask<Void, Void, String>(activity) {
override fun createDialog(context: Context): Dialog {
return MaterialDialog.Builder(context)
.progress(true, 0)
.progressIndeterminateStyle(true)
.title(R.string.bug_report_uploading)
.show()
}
@Result
override fun doInBackground(vararg params: Void): String {
val client: GitHubClient = if (login.shouldUseApiToken()) {
GitHubClient().setOAuth2Token(login.apiToken)
} else {
GitHubClient().setCredentials(login.username, login.password)
}
val issue = Issue().setTitle(report.title).setBody(report.description)
try {
IssueService(client).createIssue(target.username, target.repository, issue)
return RESULT_SUCCESS
} catch (e: RequestException) {
return when (e.status) {
STATUS_BAD_CREDENTIALS -> {
if (login.shouldUseApiToken()) RESULT_INVALID_TOKEN else RESULT_BAD_CREDENTIALS
}
STATUS_ISSUES_NOT_ENABLED -> RESULT_ISSUES_NOT_ENABLED
else -> {
e.printStackTrace()
RESULT_UNKNOWN
}
}
} catch (e: IOException) {
e.printStackTrace()
return RESULT_UNKNOWN
}
}
override fun onPostExecute(@Result result: String) {
super.onPostExecute(result)
val context = context ?: return
when (result) {
RESULT_SUCCESS -> tryToFinishActivity()
RESULT_BAD_CREDENTIALS -> MaterialDialog.Builder(context)
.title(R.string.bug_report_failed)
.content(R.string.bug_report_failed_wrong_credentials)
.positiveText(android.R.string.ok)
.show()
RESULT_INVALID_TOKEN -> MaterialDialog.Builder(context)
.title(R.string.bug_report_failed)
.content(R.string.bug_report_failed_invalid_token)
.positiveText(android.R.string.ok)
.show()
RESULT_ISSUES_NOT_ENABLED -> MaterialDialog.Builder(context)
.title(R.string.bug_report_failed)
.content(R.string.bug_report_failed_issues_not_available)
.positiveText(android.R.string.ok)
.show()
else -> MaterialDialog.Builder(context)
.title(R.string.bug_report_failed)
.content(R.string.bug_report_failed_unknown)
.positiveText(android.R.string.ok)
.onPositive { _, _ -> tryToFinishActivity() }
.cancelListener { tryToFinishActivity() }
.show()
}
}
private fun tryToFinishActivity() {
val context = context
if (context is Activity && !context.isFinishing) {
context.finish()
}
}
companion object {
fun report(activity: Activity, report: Report, target: GithubTarget, login: GithubLogin) {
ReportIssueAsyncTask(activity, report, target, login).execute()
}
}
}
companion object {
private const val STATUS_BAD_CREDENTIALS = 401
private const val STATUS_ISSUES_NOT_ENABLED = 410
private const val ISSUE_TRACKER_LINK = "https://github.com/h4h13/RetroMusicPlayer"
}
}

View File

@ -0,0 +1,95 @@
package code.name.monkey.retromusic.ui.activities.bugreport.model;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import java.util.Arrays;
import androidx.annotation.IntRange;
public class DeviceInfo {
private final int versionCode;
private final String versionName;
private final String buildVersion = Build.VERSION.INCREMENTAL;
private final String releaseVersion = Build.VERSION.RELEASE;
@IntRange(from = 0)
private final int sdkVersion = Build.VERSION.SDK_INT;
private final String buildID = Build.DISPLAY;
private final String brand = Build.BRAND;
private final String manufacturer = Build.MANUFACTURER;
private final String device = Build.DEVICE;
private final String model = Build.MODEL;
private final String product = Build.PRODUCT;
private final String hardware = Build.HARDWARE;
@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
private final String[] abis = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ?
Build.SUPPORTED_ABIS : new String[]{Build.CPU_ABI, Build.CPU_ABI2};
@SuppressLint("NewApi")
private final String[] abis32Bits = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ?
Build.SUPPORTED_32_BIT_ABIS : null;
@SuppressLint("NewApi")
private final String[] abis64Bits = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ?
Build.SUPPORTED_64_BIT_ABIS : null;
public DeviceInfo(Context context) {
PackageInfo packageInfo;
try {
packageInfo = context.getPackageManager()
.getPackageInfo(context.getPackageName(), 0);
} catch (PackageManager.NameNotFoundException e) {
packageInfo = null;
}
if (packageInfo != null) {
versionCode = packageInfo.versionCode;
versionName = packageInfo.versionName;
} else {
versionCode = -1;
versionName = null;
}
}
public String toMarkdown() {
return "Device info:\n"
+ "---\n"
+ "<table>\n"
+ "<tr><td>App version</td><td>" + versionName + "</td></tr>\n"
+ "<tr><td>App version code</td><td>" + versionCode + "</td></tr>\n"
+ "<tr><td>Android build version</td><td>" + buildVersion + "</td></tr>\n"
+ "<tr><td>Android release version</td><td>" + releaseVersion + "</td></tr>\n"
+ "<tr><td>Android SDK version</td><td>" + sdkVersion + "</td></tr>\n"
+ "<tr><td>Android build ID</td><td>" + buildID + "</td></tr>\n"
+ "<tr><td>Device brand</td><td>" + brand + "</td></tr>\n"
+ "<tr><td>Device manufacturer</td><td>" + manufacturer + "</td></tr>\n"
+ "<tr><td>Device name</td><td>" + device + "</td></tr>\n"
+ "<tr><td>Device model</td><td>" + model + "</td></tr>\n"
+ "<tr><td>Device product name</td><td>" + product + "</td></tr>\n"
+ "<tr><td>Device hardware name</td><td>" + hardware + "</td></tr>\n"
+ "<tr><td>ABIs</td><td>" + Arrays.toString(abis) + "</td></tr>\n"
+ "<tr><td>ABIs (32bit)</td><td>" + Arrays.toString(abis32Bits) + "</td></tr>\n"
+ "<tr><td>ABIs (64bit)</td><td>" + Arrays.toString(abis64Bits) + "</td></tr>\n"
+ "</table>\n";
}
@Override
public String toString() {
return "App version: " + versionName + "\n"
+ "App version code: " + versionCode + "\n"
+ "Android build version: " + buildVersion + "\n"
+ "Android release version: " + releaseVersion + "\n"
+ "Android SDK version: " + sdkVersion + "\n"
+ "Android build ID: " + buildID + "\n"
+ "Device brand: " + brand + "\n"
+ "Device manufacturer: " + manufacturer + "\n"
+ "Device name: " + device + "\n"
+ "Device model: " + model + "\n"
+ "Device product name: " + product + "\n"
+ "Device hardware name: " + hardware + "\n"
+ "ABIs: " + Arrays.toString(abis) + "\n"
+ "ABIs (32bit): " + Arrays.toString(abis32Bits) + "\n"
+ "ABIs (64bit): " + Arrays.toString(abis64Bits);
}
}

View File

@ -0,0 +1,32 @@
package code.name.monkey.retromusic.ui.activities.bugreport.model;
import code.name.monkey.retromusic.ui.activities.bugreport.model.github.ExtraInfo;
public class Report {
private final String title;
private final String description;
private final DeviceInfo deviceInfo;
private final ExtraInfo extraInfo;
public Report(String title, String description, DeviceInfo deviceInfo, ExtraInfo extraInfo) {
this.title = title;
this.description = description;
this.deviceInfo = deviceInfo;
this.extraInfo = extraInfo;
}
public String getTitle() {
return title;
}
public String getDescription() {
return description + "\n\n"
+ "-\n\n"
+ deviceInfo.toMarkdown() + "\n\n"
+ extraInfo.toMarkdown();
}
}

View File

@ -0,0 +1,59 @@
package code.name.monkey.retromusic.ui.activities.bugreport.model.github;
import java.util.LinkedHashMap;
import java.util.Map;
public class ExtraInfo {
private final Map<String, String> extraInfo = new LinkedHashMap<>();
public void put(String key, String value) {
extraInfo.put(key, value);
}
public void put(String key, boolean value) {
extraInfo.put(key, Boolean.toString(value));
}
public void put(String key, double value) {
extraInfo.put(key, Double.toString(value));
}
public void put(String key, float value) {
extraInfo.put(key, Float.toString(value));
}
public void put(String key, long value) {
extraInfo.put(key, Long.toString(value));
}
public void put(String key, int value) {
extraInfo.put(key, Integer.toString(value));
}
public void put(String key, Object value) {
extraInfo.put(key, String.valueOf(value));
}
public void remove(String key) {
extraInfo.remove(key);
}
public String toMarkdown() {
if (extraInfo.isEmpty()) return "";
StringBuilder output = new StringBuilder();
output.append("Extra info:\n"
+ "---\n"
+ "<table>\n");
for (String key : extraInfo.keySet()) {
output.append("<tr><td>")
.append(key)
.append("</td><td>")
.append(extraInfo.get(key))
.append("</td></tr>\n");
}
output.append("</table>\n");
return output.toString();
}
}

View File

@ -0,0 +1,40 @@
package code.name.monkey.retromusic.ui.activities.bugreport.model.github;
import android.text.TextUtils;
public class GithubLogin {
private final String username;
private final String password;
private final String apiToken;
public GithubLogin(String username, String password) {
this.username = username;
this.password = password;
this.apiToken = null;
}
public GithubLogin(String apiToken) {
this.username = null;
this.password = null;
this.apiToken = apiToken;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public boolean shouldUseApiToken() {
return TextUtils.isEmpty(username) || TextUtils.isEmpty(password);
}
public String getApiToken() {
return apiToken;
}
}

View File

@ -0,0 +1,20 @@
package code.name.monkey.retromusic.ui.activities.bugreport.model.github;
public class GithubTarget {
private final String username;
private final String repository;
public GithubTarget(String username, String repository) {
this.username = username;
this.repository = repository;
}
public String getUsername() {
return username;
}
public String getRepository() {
return repository;
}
}

View File

@ -13,11 +13,7 @@ import android.view.animation.AccelerateInterpolator
import android.view.animation.DecelerateInterpolator
import android.view.animation.LinearInterpolator
import android.widget.SeekBar
import android.widget.TextView
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.TintHelper
@ -27,14 +23,14 @@ import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.ui.fragments.VolumeFragment
import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import kotlinx.android.synthetic.main.fragment_player_playback_controls.*
import kotlinx.android.synthetic.main.media_button.*
import kotlinx.android.synthetic.main.player_time.*
import kotlinx.android.synthetic.main.volume_controls.*
import code.name.monkey.retromusic.ui.fragments.VolumeFragment
class BlurPlaybackControlsFragment : AbsPlayerControlsFragment() {
@ -65,6 +61,8 @@ class BlurPlaybackControlsFragment : AbsPlayerControlsFragment() {
}
showBonceAnimation()
}
val volumeFragment = childFragmentManager.findFragmentById(R.id.volumeFragment) as VolumeFragment
volumeFragment.tintWhiteColor()
}
private fun updateSong() {
@ -108,20 +106,15 @@ class BlurPlaybackControlsFragment : AbsPlayerControlsFragment() {
}
override fun setDark(color: Int) {
val colorBg = ATHUtil.resolveColor(activity, android.R.attr.colorBackground)
if (ColorUtil.isColorLight(colorBg)) {
lastPlaybackControlsColor = MaterialValueHelper.getSecondaryTextColor(activity, true)
lastDisabledPlaybackControlsColor = MaterialValueHelper.getSecondaryDisabledTextColor(activity, true)
} else {
lastPlaybackControlsColor = MaterialValueHelper.getPrimaryTextColor(activity, false)
lastDisabledPlaybackControlsColor = MaterialValueHelper.getPrimaryDisabledTextColor(activity, false)
}
lastPlaybackControlsColor = Color.WHITE
lastDisabledPlaybackControlsColor = ContextCompat.getColor(context!!, R.color.md_grey_500)
if (PreferenceUtil.getInstance().adaptiveColor) {
setFabColor(color)
} else {
setFabColor(ThemeStore.accentColor(context!!))
}
title.setTextColor(lastPlaybackControlsColor)
text.setTextColor(lastDisabledPlaybackControlsColor)
setFabColor(lastPlaybackControlsColor)
songCurrentProgress.setTextColor(lastPlaybackControlsColor)
songTotalTime.setTextColor(lastPlaybackControlsColor)
updateRepeatState()
updateShuffleState()

View File

@ -40,7 +40,7 @@ class AudioSettings : AbsSettingsFragment() {
return ri != null
}
override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.pref_audio)
}
}

View File

@ -20,7 +20,7 @@ class ImageSettingFragment : AbsSettingsFragment() {
}
override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.pref_images)
}
}

View File

@ -35,7 +35,7 @@ class NotificationSettingsFragment : AbsSettingsFragment() {
}
}
override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.pref_notification)
}
}

View File

@ -29,7 +29,7 @@ class NowPlayingSettingsFragment : AbsSettingsFragment(), SharedPreferences.OnSh
}
override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.pref_now_playing_screen)
}

View File

@ -13,7 +13,7 @@ class OtherSettingsFragment : AbsSettingsFragment() {
}
override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.pref_blacklist)
addPreferencesFromResource(R.xml.pref_playlists)
addPreferencesFromResource(R.xml.pref_advanced)

View File

@ -28,7 +28,7 @@ class PersonaizeSettingsFragment : AbsSettingsFragment(), SharedPreferences.OnSh
}
}
override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.pref_ui)
addPreferencesFromResource(R.xml.pref_window)
addPreferencesFromResource(R.xml.pref_lockscreen)

View File

@ -21,10 +21,7 @@ import com.afollestad.materialdialogs.color.ColorChooserDialog
class ThemeSettingsFragment : AbsSettingsFragment() {
override fun invalidateSettings() {
val primaryColorPref = findPreference(
"primary_color") as ATEColorPreference
val primaryColorPref = findPreference("primary_color") as ATEColorPreference
primaryColorPref.isVisible = PreferenceUtil.getInstance().generalTheme == R.style.Theme_RetroMusic_Color
val primaryColor = ThemeStore.primaryColor(activity!!)
primaryColorPref.setColor(primaryColor, ColorUtil.darkenColor(primaryColor))
@ -87,8 +84,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
true
}
val colorAppShortcuts = findPreference(
"should_color_app_shortcuts") as TwoStatePreference
val colorAppShortcuts = findPreference("should_color_app_shortcuts") as TwoStatePreference
if (!VersionUtils.hasNougatMR()) {
colorAppShortcuts.isVisible = false
} else {
@ -102,7 +98,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
}
override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.pref_general)
}
}

View File

@ -12,9 +12,6 @@ import android.os.Environment;
import android.provider.BaseColumns;
import android.provider.MediaStore;
import android.provider.Settings;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.FileProvider;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
@ -29,6 +26,9 @@ import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.FileProvider;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.loaders.PlaylistLoader;
@ -59,20 +59,13 @@ public class MusicUtil {
@NonNull
public static Intent createShareSongFileIntent(@NonNull final Song song, Context context) {
try {
return new Intent()
.setAction(Intent.ACTION_SEND)
.putExtra(Intent.EXTRA_STREAM,
FileProvider.getUriForFile(context,
context.getApplicationContext().getPackageName(),
new File(song.getData())))
return new Intent().setAction(Intent.ACTION_SEND).putExtra(Intent.EXTRA_STREAM,
FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName(), new File(song.getData())))
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
.setType("audio/*");
} catch (IllegalArgumentException e) {
// TODO the path is most likely not like /storage/emulated/0/... but something like /storage/28C7-75B0/...
e.printStackTrace();
Toast.makeText(context, "Could not share this file, I'm aware of the issue.",
Toast.LENGTH_SHORT).show();
Toast.makeText(context, "Could not share this file, I'm aware of the issue.", Toast.LENGTH_SHORT).show();
return new Intent();
}
}

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/md_white_1000"
android:pathData="M10,20h4L14,4h-4v16zM4,20h4v-8L4,12v8zM16,9v11h4L20,9h-4z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/md_white_1000"
android:pathData="M19,4L5,4c-1.11,0 -2,0.9 -2,2v12c0,1.1 0.89,2 2,2h4v-2L5,18L5,8h14v10h-4v2h4c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.89,-2 -2,-2zM12,10l-4,4h3v6h2v-6h3l-4,-4z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/md_white_1000"
android:pathData="M2.01,21L23,12 2.01,3 2,10l15,2 -15,2z"/>
</vector>

View File

@ -24,16 +24,10 @@
tools:ignore="UnusedAttribute">
<TextView
android:id="@+id/title"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/action_tag_editor"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
tools:ignore="MissingPrefix" />
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/bannerTitle"
style="@style/BigTitleTextAppearance"
android:text="@string/action_tag_editor" />
</androidx.appcompat.widget.Toolbar>
@ -43,7 +37,7 @@
android:orientation="horizontal">
<FrameLayout
android:id="@+id/image_container"
android:id="@+id/imageContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
@ -51,7 +45,7 @@
app:layout_collapseParallaxMultiplier="0.5">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image"
android:id="@+id/editorImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
@ -86,7 +80,7 @@
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/album_title_container"
android:id="@+id/albumTitleContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:boxBackgroundMode="outline"
@ -100,7 +94,7 @@
app:hintEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/album_title"
android:id="@+id/albumText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
@ -112,7 +106,7 @@
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/album_artist_container"
android:id="@+id/albumArtistContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
@ -127,7 +121,7 @@
app:hintEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/album_artist"
android:id="@+id/albumArtistText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
@ -139,7 +133,7 @@
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/genre_container"
android:id="@+id/genreContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
@ -154,7 +148,7 @@
app:hintEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/genre"
android:id="@+id/genreTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
@ -166,7 +160,7 @@
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/year_container"
android:id="@+id/yearContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
@ -181,7 +175,7 @@
app:hintEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/year"
android:id="@+id/yearTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
@ -198,7 +192,7 @@
</LinearLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/save_fab"
android:id="@+id/saveFab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"

View File

@ -6,7 +6,7 @@
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
@ -18,7 +18,7 @@
app:navigationIcon="@drawable/ic_keyboard_backspace_black_24dp">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/title"
android:id="@+id/bannerTitle"
style="@style/BigTitleTextAppearance"
android:text="@string/profile" />
@ -45,19 +45,19 @@
app:cardUseCompatPadding="true">
<FrameLayout
android:id="@+id/image_container"
android:id="@+id/imageContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/banner_image"
android:id="@+id/bannerImage"
android:layout_width="match_parent"
android:layout_height="228dp"
android:scaleType="centerCrop"
app:srcCompat="@drawable/material_design_default" />
<View
android:id="@+id/banner_select"
android:id="@+id/bannerSelect"
android:layout_width="match_parent"
android:layout_height="228dp"
android:background="@color/twenty_percent_black_overlay" />
@ -77,7 +77,7 @@
android:layout_margin="8dp">
<code.name.monkey.retromusic.views.CircularImageView
android:id="@+id/user_image"
android:id="@+id/userImage"
android:layout_width="72dp"
android:layout_height="72dp"
android:layout_gravity="center"
@ -101,7 +101,7 @@
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/name_container"
android:id="@+id/nameContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="12dp"

View File

@ -6,28 +6,28 @@
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
app:elevation="0dp">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:id="@+id/collapsingToolbarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlwaysCollapsed"
app:titleEnabled="false">
<code.name.monkey.retromusic.views.WidthFitSquareLayout
android:id="@+id/image_container"
android:id="@+id/imageContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.5">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image"
android:id="@+id/editorImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
@ -64,8 +64,8 @@
tools:ignore="UnusedAttribute">
<TextView
android:id="@+id/title"
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/bannerTitle"
style="@style/BigTitleTextAppearance"
android:text="@string/action_tag_editor" />
@ -97,7 +97,7 @@
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/album_title_container"
android:id="@+id/albumTitleContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:boxBackgroundMode="outline"
@ -111,7 +111,7 @@
app:hintEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/album_title"
android:id="@+id/albumText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
@ -123,7 +123,7 @@
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/album_artist_container"
android:id="@+id/albumArtistContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
@ -138,7 +138,7 @@
app:hintEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/album_artist"
android:id="@+id/albumArtistText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
@ -150,7 +150,7 @@
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/genre_container"
android:id="@+id/genreContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
@ -165,7 +165,7 @@
app:hintEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/genre"
android:id="@+id/genreTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
@ -177,7 +177,7 @@
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/year_container"
android:id="@+id/yearContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
@ -192,7 +192,7 @@
app:hintEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/year"
android:id="@+id/yearTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
@ -207,7 +207,7 @@
</androidx.core.widget.NestedScrollView>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/save_fab"
android:id="@+id/saveFab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"

View File

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
style="@style/Toolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize" />
</com.google.android.material.appbar.AppBarLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:orientation="vertical">
<include
layout="@layout/bug_report_card_report"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp" />
<include
layout="@layout/bug_report_card_device_info"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Space
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_margin="16dp" />
</LinearLayout>
</ScrollView>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/sendFab"
style="@style/Fab"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
app:srcCompat="@drawable/ic_send_white_24dp" />
</FrameLayout>
</LinearLayout>

View File

@ -7,14 +7,13 @@
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
app:elevation="0dp">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:titleEnabled="false">
@ -27,7 +26,7 @@
tools:ignore="UnusedAttribute">
<TextView
android:id="@+id/title"
android:id="@+id/bannerTitle"
style="@style/BigTitleTextAppearance"
android:text="@string/support_development" />
@ -60,7 +59,7 @@
android:textColor="?attr/colorAccent" />
<LinearLayout
android:id="@+id/progress_container"
android:id="@+id/progressContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end|center_vertical"
@ -85,7 +84,7 @@
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="6dp"

View File

@ -6,14 +6,14 @@
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
app:elevation="0dp">
<com.google.android.material.appbar.CollapsingToolbarLayout xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlwaysCollapsed"
@ -27,8 +27,8 @@
tools:ignore="UnusedAttribute">
<TextView
android:id="@+id/title"
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/bannerTitle"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -39,7 +39,7 @@
tools:ignore="MissingPrefix" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/equalizer"
android:id="@+id/equalizerSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
@ -90,8 +90,8 @@
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/bass_boost"
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/bassBoost"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
@ -100,7 +100,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Subhead" />
<SeekBar
android:id="@+id/bass_boost_strength"
android:id="@+id/bassBoostStrength"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
@ -119,7 +119,7 @@
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/virtualizer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -129,7 +129,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Subhead" />
<SeekBar
android:id="@+id/virtualizer_strength"
android:id="@+id/virtualizerStrength"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
@ -143,7 +143,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/bands"
android:id="@+id/frequencyBands"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"

View File

@ -7,7 +7,7 @@
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
@ -29,7 +29,7 @@
tools:ignore="UnusedAttribute">
<TextView
android:id="@+id/title"
android:id="@+id/bannerTitle"
style="@style/BigTitleTextAppearance"
android:text="@string/licenses" />

View File

@ -5,7 +5,7 @@
android:layout_height="match_parent">
<ImageView
android:id="@+id/image"
android:id="@+id/albumImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
@ -22,7 +22,7 @@
<com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/bottom_app_bar"
android:id="@+id/bottomAppBar"
style="@style/Widget.MaterialComponents.BottomAppBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -42,7 +42,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_edit_white_24dp"
app:layout_anchor="@id/bottom_app_bar" />
app:layout_anchor="@id/bottomAppBar" />
<LinearLayout
android:layout_width="match_parent"
@ -61,7 +61,7 @@
android:paddingEnd="12dp">
<RadioButton
android:id="@+id/synced_lyrics"
android:id="@+id/syncedLyrics"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
@ -75,7 +75,7 @@
android:textColor="@color/md_white_1000" />
<RadioButton
android:id="@+id/normal_lyrics"
android:id="@+id/normalLyrics"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
@ -101,7 +101,7 @@
android:fadingEdge="vertical">
<TextView
android:id="@+id/offline_lyrics"
android:id="@+id/offlineLyrics"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
@ -116,7 +116,7 @@
</ScrollView>
<code.name.monkey.retromusic.views.LyricView
android:id="@+id/lyrics_view"
android:id="@+id/lyricsView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:fadeInFadeOut="true"

View File

@ -7,14 +7,14 @@
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
app:elevation="0dp">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:id="@+id/collapsingToolbarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways"
@ -29,7 +29,7 @@
tools:ignore="UnusedAttribute">
<TextView
android:id="@+id/title"
android:id="@+id/bannerTitle"
style="@style/BigTitleTextAppearance"
android:text="@string/queue" />
@ -37,7 +37,7 @@
</com.google.android.material.appbar.CollapsingToolbarLayout>
<TextView
android:id="@+id/player_queue_sub_header"
android:id="@+id/playerQueueSubHeader"
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center_vertical"
@ -54,7 +54,7 @@
<com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView
android:id="@+id/recycler_view"
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
@ -73,7 +73,7 @@
android:visibility="gone" />
<code.name.monkey.retromusic.views.CollapsingFAB
android:id="@+id/clear_queue"
android:id="@+id/clearQueue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"

View File

@ -22,14 +22,13 @@
android:layout_alignParentStart="true">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
app:elevation="0dp">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways"
@ -43,7 +42,7 @@
tools:ignore="UnusedAttribute">
<TextView
android:id="@+id/title"
android:id="@+id/bannerTitle"
style="@style/BigTitleTextAppearance"
android:text="@string/buy_retro_music_pro" />

View File

@ -129,7 +129,7 @@
android:orientation="horizontal">
<com.google.android.material.button.MaterialButton
android:id="@+id/restore_button"
android:id="@+id/restoreButton"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -141,7 +141,7 @@
<com.google.android.material.button.MaterialButton
android:id="@+id/purchase_button"
android:id="@+id/purchaseButton"
style="@style/Widget.MaterialComponents.Button"
android:layout_width="match_parent"
android:layout_height="wrap_content"

View File

@ -40,7 +40,7 @@
app:srcCompat="@drawable/ic_keyboard_backspace_black_24dp" />
<code.name.monkey.appthemehelper.common.views.ATEEditText
android:id="@+id/search_view"
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
@ -49,7 +49,7 @@
android:inputType="text|textAutoComplete" />
<code.name.monkey.retromusic.views.IconImageView
android:id="@+id/voice_search"
android:id="@+id/voiceSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
@ -77,7 +77,7 @@
tools:visibility="visible" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false"

View File

@ -7,26 +7,26 @@
android:focusableInTouchMode="true">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
app:elevation="0dp">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:id="@+id/collapsingToolbarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlwaysCollapsed"
app:titleEnabled="false">
<FrameLayout
android:id="@+id/image_container"
android:id="@+id/imageContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/editorImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
@ -40,14 +40,14 @@
<TextView
android:id="@+id/title"
android:textStyle="bold"
android:id="@+id/bannerTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/action_tag_editor"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textStyle="bold"
tools:ignore="MissingPrefix" />
@ -77,8 +77,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/title1"
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/songText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
@ -95,8 +95,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/title2"
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/albumText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
@ -113,8 +113,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/artist"
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/artistText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
@ -130,8 +130,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/album_artist"
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/albumArtistText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
@ -154,8 +154,8 @@
android:layout_height="wrap_content"
android:layout_weight="1">
<EditText
android:id="@+id/genre"
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/genreText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
@ -173,8 +173,8 @@
android:layout_height="wrap_content"
android:layout_weight="1">
<EditText
android:id="@+id/year"
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/yearText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
@ -192,8 +192,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/image_text"
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/trackNumberText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
@ -209,8 +209,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/lyrics"
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/lyricsText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
@ -227,7 +227,7 @@
</androidx.core.widget.NestedScrollView>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/save_fab"
android:id="@+id/saveFab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
@ -242,6 +242,5 @@
android:layout_gravity="center"
android:visibility="gone" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardBackgroundColor="?cardBackgroundColor"
app:cardCornerRadius="8dp"
app:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="8dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical"
android:paddingLeft="16dp"
android:paddingTop="24dp"
android:paddingRight="16dp"
android:text="@string/device_info"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
android:textColor="?android:textColorSecondary" />
<TextView
android:id="@+id/airTextDeviceInfo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?rectSelector"
android:padding="16dp"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textColor="?android:textColorSecondary" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>

View File

@ -0,0 +1,189 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="8dp"
app:cardBackgroundColor="?cardBackgroundColor"
app:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="@dimen/md_listitem_height"
android:orientation="horizontal"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<RadioButton
android:id="@+id/optionUseAccount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:gravity="start|center_vertical"
android:minHeight="@dimen/md_listitem_height" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="56dp"
android:layout_marginLeft="56dp"
android:orientation="vertical"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bug_report_use_account"
android:textAppearance="@style/TextAppearance.AppCompat.Subhead" />
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/your_account_data_is_only_used_for_authentication"
android:textAppearance="@style/TextAppearance.AppCompat.Caption" />
</LinearLayout>
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="72dp"
android:paddingLeft="72dp"
android:paddingEnd="16dp"
android:paddingRight="16dp">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:text="@string/bug_report_issue"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
android:textColor="?android:textColorSecondary" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/inputLayoutTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/inputTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/title"
android:inputType="textCapSentences"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/inputLayoutDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/inputDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/description"
android:inputType="textCapSentences" />
</com.google.android.material.textfield.TextInputLayout>
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:text="@string/login"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
android:textColor="?android:textColorSecondary" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/inputLayoutUsername"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/inputUsername"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/username"
android:inputType="textNoSuggestions"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/inputLayoutPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/inputPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/password"
android:imeOptions="actionSend"
android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="@dimen/md_listitem_height"
android:orientation="horizontal"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<RadioButton
android:id="@+id/optionAnonymous"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start|center_vertical"
android:minHeight="@dimen/md_listitem_height" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="56dp"
android:layout_marginLeft="56dp"
android:orientation="vertical"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bug_report_manual"
android:textAppearance="@style/TextAppearance.AppCompat.Subhead" />
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/you_will_be_forwarded_to_the_issue_tracker_website"
android:textAppearance="@style/TextAppearance.AppCompat.Caption" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>

View File

@ -18,7 +18,7 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
@ -26,7 +26,7 @@
</com.google.android.material.card.MaterialCardView>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/made_text"
android:id="@+id/madeText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"

View File

@ -56,7 +56,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/open_source"
android:id="@+id/openSource"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/rectSelector"
@ -107,7 +107,7 @@
android:textColor="@color/md_white_1000" />
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/app_version"
android:id="@+id/appVersion"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:alpha="0.85"

View File

@ -18,14 +18,13 @@
app:cardUseCompatPadding="true">
<LinearLayout
android:id="@+id/app_support"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/app_github"
android:id="@+id/appGithub"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/rectSelector"
@ -68,7 +67,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/app_translation"
android:id="@+id/appTranslation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/rectSelector"
@ -111,7 +110,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/app_rate"
android:id="@+id/appRate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/rectSelector"
@ -154,7 +153,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/donate_link"
android:id="@+id/donateLink"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/rectSelector"
@ -197,7 +196,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/app_share"
android:id="@+id/appShare"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/rectSelector"
@ -237,7 +236,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/faq_link"
android:id="@+id/faqLink"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/rectSelector"

View File

@ -24,7 +24,7 @@
<LinearLayout
android:id="@+id/instagram_link"
android:id="@+id/instagramLink"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/rectSelector"
@ -66,7 +66,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/twitter_link"
android:id="@+id/twitterLink"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/rectSelector"
@ -107,7 +107,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/discord_link"
android:id="@+id/discordLink"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/rectSelector"
@ -148,7 +148,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/telegram_link"
android:id="@+id/telegramLink"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/rectSelector"
@ -189,7 +189,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/app_google_plus"
android:id="@+id/googlePlus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/rectSelector"

View File

@ -18,7 +18,7 @@
android:padding="12dp">
<com.google.android.material.button.MaterialButton
android:id="@+id/action_cancel"
android:id="@+id/actionCancel"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -27,7 +27,7 @@
app:strokeWidth="1dp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/action_delete"
android:id="@+id/actionDelete"
style="@style/Widget.MaterialComponents.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@ -7,37 +7,37 @@
android:padding="12dp"
tools:ignore="NewApi,RtlSymmetry">
<TextView
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/title"
android:textStyle="bold"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:textColor="?android:attr/textColorPrimary"
android:text="@string/action_details"
android:textAppearance="@style/TextAppearance.AppCompat.Title"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold"
tools:ignore="MissingPrefix" />
<TextView
android:id="@+id/file_path"
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/filePath"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif"
android:textAppearance="?android:textAppearanceMedium"
android:textSize="16sp" />
<TextView
android:id="@+id/file_name"
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/fileName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif"
android:paddingTop="16dp"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="?android:attr/textColorPrimary"
android:textAppearance="?android:textAppearanceMedium"
android:textSize="16sp" />
<TextView
android:id="@+id/file_size"
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/fileSize"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif"
@ -45,8 +45,8 @@
android:textAppearance="?android:textAppearanceMedium"
android:textSize="16sp" />
<TextView
android:id="@+id/file_format"
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/fileFormat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif"
@ -54,8 +54,8 @@
android:textAppearance="?android:textAppearanceMedium"
android:textSize="16sp" />
<TextView
android:id="@+id/track_length"
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/trackLength"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif"
@ -63,7 +63,7 @@
android:textAppearance="?android:textAppearanceMedium"
android:textSize="16sp" />
<TextView
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/bitrate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -72,8 +72,8 @@
android:textAppearance="?android:textAppearanceMedium"
android:textSize="16sp" />
<TextView
android:id="@+id/sampling_rate"
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView
android:id="@+id/samplingRate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif"

View File

@ -18,7 +18,7 @@
tools:ignore="MissingPrefix" />
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/option_1"
android:id="@+id/audioText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
@ -26,7 +26,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Subhead" />
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/option_2"
android:id="@+id/audioFile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="12dp"

View File

@ -23,7 +23,7 @@
android:background="?dividerColor" />
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/timer_display"
android:id="@+id/timerDisplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="12dp"
@ -31,7 +31,7 @@
<SeekBar
android:id="@+id/seek_arc"
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxHeight="3dp"
@ -50,7 +50,7 @@
android:orientation="horizontal">
<com.google.android.material.button.MaterialButton
android:id="@+id/action_cancel"
android:id="@+id/actionCancel"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -60,7 +60,7 @@
tools:visibility="visible" />
<com.google.android.material.button.MaterialButton
android:id="@+id/action_set"
android:id="@+id/actionSet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"

View File

@ -22,8 +22,8 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_weight="0"
android:gravity="center"
android:orientation="vertical">

View File

@ -20,7 +20,7 @@
android:orientation="vertical">
<TextView
android:id="@+id/price"
android:id="@+id/itemPrice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
@ -33,7 +33,7 @@
android:layout_height="36dp">
<code.name.monkey.retromusic.views.IconImageView
android:id="@+id/image"
android:id="@+id/itemImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerInside"
@ -42,7 +42,7 @@
</code.name.monkey.retromusic.views.WidthFitSquareLayout>
<TextView
android:id="@+id/title"
android:id="@+id/itemTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
@ -50,7 +50,7 @@
tools:text="Title" />
<TextView
android:id="@+id/text"
android:id="@+id/itemText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"

View File

@ -1,6 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/navigation_drawer_menu_category_buy_pro"
android:checkableBehavior="none">
<item
android:id="@+id/buy_pro"
android:icon="@drawable/ic_card_giftcard_white_24dp"
android:title="@string/buy_pro" />
</group>
<group
android:id="@+id/navigation_drawer_menu_category_sections"
android:checkableBehavior="single">
@ -17,13 +24,27 @@
android:icon="@drawable/ic_folder_white_24dp"
android:title="@string/folders" />
</group>
<group android:checkableBehavior="none">
<item
android:id="@+id/nav_equalizer"
android:icon="@drawable/ic_equalizer_white_24dp"
android:title="@string/equalizer" />
<item
android:id="@+id/nav_settings"
android:icon="@drawable/ic_settings_white_24dp"
android:title="@string/action_settings" />
</group>
<group
android:id="@+id/navigation_drawer_menu_category_buy_pro"
android:id="@+id/others"
android:checkableBehavior="none">
<item
android:id="@+id/buy_pro"
android:icon="@drawable/ic_card_giftcard_white_24dp"
android:title="@string/buy_pro" />
android:id="@+id/nav_share_app"
android:icon="@drawable/ic_share_white_24dp"
android:title="@string/share_app" />
<item
android:id="@+id/nav_report_bug"
android:icon="@drawable/ic_bug_report_white_24dp"
android:title="@string/report_bug" />
</group>
</menu>

View File

@ -559,4 +559,31 @@
<string name="pref_now_playing_screen_summary">Click to open with or slide to without transparent navigation of now playing screen</string>
<string name="clear_playing_queue">Clear queue</string>
<string name="buy_pro">Buy Retro Music Pro</string>
<string name="share_app">Share app</string>
<string name="report_bug">Report bug</string>
<string name="bug_report_use_account">Send using GitHub account</string>
<string name="login">Login</string>
<string name="bug_report_manual">Send manually</string>
<string name="you_will_be_forwarded_to_the_issue_tracker_website">You will be forwarded to the issue tracker website.</string>
<string name="bug_report_issue">Issue</string>
<string name="title">Title</string>
<string name="description">Description</string>
<string name="username">Username</string>
<string name="password">Password</string>
<string name="device_info">Device info</string>
<string name="report_an_issue">Report an issue</string>
<string name="bug_report_no_username">Please enter your valid GitHub username</string>
<string name="bug_report_no_password">Please enter your valid GitHub password</string>
<string name="bug_report_no_title">Please enter an issue title</string>
<string name="bug_report_no_description">Please enter an issue description</string>
<string name="bug_report_uploading">Uploading report to GitHub…</string>
<string name="bug_report_failed">Unable to send report</string>
<string name="bug_report_failed_wrong_credentials">Wrong username or password</string>
<string name="bug_report_failed_invalid_token">Invalid access token. Please contact the app developer.</string>
<string name="bug_report_failed_issues_not_available">Issues are not enabled for the selected repository. Please contact the app developer.</string>
<string name="bug_report_failed_unknown">An unexpected error occurred. Please contact the app developer.</string>
<string name="copied_device_info_to_clipboard">Copied device info to clipboard.</string>
<string name="your_account_data_is_only_used_for_authentication">Your account data is only used for authentication.</string>
</resources>

View File

@ -82,7 +82,7 @@
<style name="BottomSheetTextAppearance">
<item name="android:breakStrategy">simple</item>
<item name="android:hyphenationFrequency">none</item>
<item name="android:textSize">13sp</item>
<item name="android:textAppearance">@style/TextAppearance.MaterialComponents.Headline6</item>
<item name="android:textStyle">bold</item>
</style>
@ -105,5 +105,5 @@
<item name="android:textAppearance">@style/TextAppearance.AppCompat.Subhead</item>
</style>
<style name="Fab" parent="FabParent" />
</resources>

View File

@ -185,4 +185,9 @@
<item name="android:background">@android:color/transparent</item>
</style>
<style name="FabParent">
<item name="borderWidth">0dp</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
</style>
</resources>

View File

@ -116,13 +116,17 @@
<excludeFolder url="file://$MODULE_DIR$/build/generated/source/r" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/aapt_friendly_merged_manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotation_processor_list" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations_typedef_file" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations_zip" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/intermediate-jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/library_and_local_jars_jni" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/library_assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/packaged-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/packaged_res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/public_res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />