update minSdk to 24, cleanup code (#4014)
closes https://github.com/tuskyapp/Tusky/issues/2607 redo of https://github.com/tuskyapp/Tusky/pull/3593
This commit is contained in:
parent
0768dcd374
commit
7dfc8790c7
16 changed files with 72 additions and 204 deletions
|
@ -27,7 +27,7 @@ android {
|
|||
defaultConfig {
|
||||
applicationId APP_ID
|
||||
namespace "com.keylesspalace.tusky"
|
||||
minSdk 23
|
||||
minSdk 24
|
||||
targetSdk 33
|
||||
versionCode 113
|
||||
versionName "23.0"
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<issue
|
||||
id="InlinedApi"
|
||||
message="Field requires API level 33 (current min is 23): `android.Manifest.permission#POST_NOTIFICATIONS`"
|
||||
message="Field requires API level 33 (current min is 24): `android.Manifest.permission#POST_NOTIFICATIONS`"
|
||||
errorLine1=" arrayOf(Manifest.permission.POST_NOTIFICATIONS),"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
|
@ -73,17 +73,6 @@
|
|||
file="$GRADLE_USER_HOME/caches/modules-2/files-2.1/org.pageseeder.diffx/pso-diffx/1.1.1/b655ebc87588a857a4f3d88cf98bcefa87a6105b/pso-diffx-1.1.1.jar"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="NewApi"
|
||||
message="Call requires API level 24 (current min is 23): `java.lang.Iterable#forEach`"
|
||||
errorLine1=" media.value.forEach { item ->"
|
||||
errorLine2=" ~~~~~~~">
|
||||
<location
|
||||
file="src/main/java/com/keylesspalace/tusky/components/compose/ComposeViewModel.kt"
|
||||
line="278"
|
||||
column="21"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="UseAppTint"
|
||||
message="Must use `app:tint` instead of `android:tint`"
|
||||
|
@ -471,13 +460,46 @@
|
|||
|
||||
<issue
|
||||
id="ObsoleteSdkInt"
|
||||
message="Unnecessary; SDK_INT is always >= 23"
|
||||
errorLine1=" return PendingIntent.FLAG_UPDATE_CURRENT | (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_IMMUTABLE : 0);"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
message="Unnecessary; SDK_INT is always >= 24"
|
||||
errorLine1=" if (Build.VERSION.SDK_INT > 23) {"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/java/com/keylesspalace/tusky/components/notifications/NotificationHelper.java"
|
||||
line="862"
|
||||
column="57"/>
|
||||
file="src/main/java/com/keylesspalace/tusky/fragment/ViewVideoFragment.kt"
|
||||
line="252"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="ObsoleteSdkInt"
|
||||
message="Unnecessary; SDK_INT is never < 24"
|
||||
errorLine1=" if (Build.VERSION.SDK_INT <= 23 || player == null) {"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/java/com/keylesspalace/tusky/fragment/ViewVideoFragment.kt"
|
||||
line="261"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="ObsoleteSdkInt"
|
||||
message="Unnecessary; SDK_INT is never < 24"
|
||||
errorLine1=" if (Build.VERSION.SDK_INT <= 23) {"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/java/com/keylesspalace/tusky/fragment/ViewVideoFragment.kt"
|
||||
line="284"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="ObsoleteSdkInt"
|
||||
message="Unnecessary; SDK_INT is always >= 24"
|
||||
errorLine1=" if (Build.VERSION.SDK_INT > 23) {"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/java/com/keylesspalace/tusky/fragment/ViewVideoFragment.kt"
|
||||
line="296"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
|
@ -1103,7 +1125,7 @@
|
|||
errorLine2=" ~~~~~~~">
|
||||
<location
|
||||
file="src/main/java/com/keylesspalace/tusky/components/notifications/NotificationHelper.java"
|
||||
line="274"
|
||||
line="273"
|
||||
column="51"/>
|
||||
</issue>
|
||||
|
||||
|
@ -1114,7 +1136,7 @@
|
|||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/java/com/keylesspalace/tusky/components/notifications/NotificationHelper.java"
|
||||
line="274"
|
||||
line="273"
|
||||
column="68"/>
|
||||
</issue>
|
||||
|
||||
|
@ -1125,7 +1147,7 @@
|
|||
errorLine2=" ~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/java/com/keylesspalace/tusky/components/notifications/NotificationHelper.java"
|
||||
line="274"
|
||||
line="273"
|
||||
column="109"/>
|
||||
</issue>
|
||||
|
||||
|
@ -1136,7 +1158,7 @@
|
|||
errorLine2=" ~~~~~~~">
|
||||
<location
|
||||
file="src/main/java/com/keylesspalace/tusky/components/notifications/NotificationHelper.java"
|
||||
line="612"
|
||||
line="611"
|
||||
column="48"/>
|
||||
</issue>
|
||||
|
||||
|
@ -1147,7 +1169,7 @@
|
|||
errorLine2=" ~~~~~~~">
|
||||
<location
|
||||
file="src/main/java/com/keylesspalace/tusky/components/notifications/NotificationHelper.java"
|
||||
line="640"
|
||||
line="639"
|
||||
column="49"/>
|
||||
</issue>
|
||||
|
||||
|
@ -1158,7 +1180,7 @@
|
|||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/java/com/keylesspalace/tusky/components/notifications/NotificationHelper.java"
|
||||
line="656"
|
||||
line="655"
|
||||
column="46"/>
|
||||
</issue>
|
||||
|
||||
|
@ -1169,7 +1191,7 @@
|
|||
errorLine2=" ~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/java/com/keylesspalace/tusky/components/notifications/NotificationHelper.java"
|
||||
line="656"
|
||||
line="655"
|
||||
column="87"/>
|
||||
</issue>
|
||||
|
||||
|
|
|
@ -188,8 +188,7 @@
|
|||
android:icon="@drawable/ic_quicksettings"
|
||||
android:label="@string/tusky_compose_post_quicksetting_label"
|
||||
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
|
||||
android:exported="true"
|
||||
tools:targetApi="24">
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.service.quicksettings.action.QS_TILE" />
|
||||
</intent-filter>
|
||||
|
|
|
@ -679,17 +679,12 @@ public class NotificationsAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|||
);
|
||||
LinkHelper.setClickableText(statusContent, emojifiedText, statusViewData.getActionable().getMentions(), statusViewData.getActionable().getTags(), listener);
|
||||
|
||||
CharSequence emojifiedContentWarning;
|
||||
if (statusViewData.getSpoilerText() != null) {
|
||||
emojifiedContentWarning = CustomEmojiHelper.emojify(
|
||||
statusViewData.getSpoilerText(),
|
||||
CharSequence emojifiedContentWarning = CustomEmojiHelper.emojify(
|
||||
statusViewData.getStatus().getSpoilerText(),
|
||||
statusViewData.getActionable().getEmojis(),
|
||||
contentWarningDescriptionTextView,
|
||||
statusDisplayOptions.animateEmojis()
|
||||
);
|
||||
} else {
|
||||
emojifiedContentWarning = "";
|
||||
}
|
||||
contentWarningDescriptionTextView.setText(emojifiedContentWarning);
|
||||
}
|
||||
|
||||
|
|
|
@ -213,7 +213,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
|
|||
final StatusActionListener listener) {
|
||||
|
||||
Status actionable = status.getActionable();
|
||||
String spoilerText = status.getSpoilerText();
|
||||
String spoilerText = actionable.getSpoilerText();
|
||||
List<Emoji> emojis = actionable.getEmojis();
|
||||
|
||||
boolean sensitive = !TextUtils.isEmpty(spoilerText);
|
||||
|
@ -764,7 +764,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
|
|||
if (payloads == null) {
|
||||
Status actionable = status.getActionable();
|
||||
setDisplayName(actionable.getAccount().getName(), actionable.getAccount().getEmojis(), statusDisplayOptions);
|
||||
setUsername(status.getUsername());
|
||||
setUsername(actionable.getAccount().getUsername());
|
||||
setMetaData(status, statusDisplayOptions, listener);
|
||||
setIsReply(actionable.getInReplyToId() != null);
|
||||
setReplyCount(actionable.getRepliesCount(), statusDisplayOptions.showStatsInline());
|
||||
|
@ -860,11 +860,11 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
|
|||
String description = context.getString(R.string.description_status,
|
||||
actionable.getAccount().getDisplayName(),
|
||||
getContentWarningDescription(context, status),
|
||||
(TextUtils.isEmpty(status.getSpoilerText()) || !actionable.getSensitive() || status.isExpanded() ? status.getContent() : ""),
|
||||
(TextUtils.isEmpty(actionable.getSpoilerText()) || !actionable.getSensitive() || status.isExpanded() ? status.getContent() : ""),
|
||||
getCreatedAtDescription(actionable.getCreatedAt(), statusDisplayOptions),
|
||||
actionable.getEditedAt() != null ? context.getString(R.string.description_post_edited) : "",
|
||||
getReblogDescription(context, status),
|
||||
status.getUsername(),
|
||||
actionable.getAccount().getUsername(),
|
||||
actionable.getReblogged() ? context.getString(R.string.description_post_reblogged) : "",
|
||||
actionable.getFavourited() ? context.getString(R.string.description_post_favourited) : "",
|
||||
actionable.getBookmarked() ? context.getString(R.string.description_post_bookmarked) : "",
|
||||
|
@ -911,8 +911,8 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
|
|||
|
||||
private static CharSequence getContentWarningDescription(Context context,
|
||||
@NonNull StatusViewData.Concrete status) {
|
||||
if (!TextUtils.isEmpty(status.getSpoilerText())) {
|
||||
return context.getString(R.string.description_post_cw, status.getSpoilerText());
|
||||
if (!TextUtils.isEmpty(status.getActionable().getSpoilerText())) {
|
||||
return context.getString(R.string.description_post_cw, status.getActionable().getSpoilerText());
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
|
|
|
@ -78,7 +78,7 @@ public class ConversationViewHolder extends StatusBaseViewHolder {
|
|||
if (payloads == null) {
|
||||
TimelineAccount account = status.getAccount();
|
||||
|
||||
setupCollapsedState(statusViewData.isCollapsible(), statusViewData.isCollapsed(), statusViewData.isExpanded(), statusViewData.getSpoilerText(), listener);
|
||||
setupCollapsedState(statusViewData.isCollapsible(), statusViewData.isCollapsed(), statusViewData.isExpanded(), status.getSpoilerText(), listener);
|
||||
|
||||
setDisplayName(account.getDisplayName(), account.getEmojis(), statusDisplayOptions);
|
||||
setUsername(account.getUsername());
|
||||
|
|
|
@ -201,8 +201,7 @@ public class NotificationHelper {
|
|||
builder.setLargeIcon(accountAvatar);
|
||||
|
||||
// Reply to mention action; RemoteInput is available from KitKat Watch, but buttons are available from Nougat
|
||||
if (body.getType() == Notification.Type.MENTION
|
||||
&& android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
if (body.getType() == Notification.Type.MENTION) {
|
||||
RemoteInput replyRemoteInput = new RemoteInput.Builder(KEY_REPLY)
|
||||
.setLabel(context.getString(R.string.label_quick_reply))
|
||||
.build();
|
||||
|
@ -859,7 +858,7 @@ public class NotificationHelper {
|
|||
if (mutable) {
|
||||
return PendingIntent.FLAG_UPDATE_CURRENT | (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ? PendingIntent.FLAG_MUTABLE : 0);
|
||||
} else {
|
||||
return PendingIntent.FLAG_UPDATE_CURRENT | (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_IMMUTABLE : 0);
|
||||
return PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -103,15 +103,15 @@ class StatusViewHolder(
|
|||
shouldTrimStatus(viewdata.content),
|
||||
viewState.isCollapsed(viewdata.id, true),
|
||||
viewState.isContentShow(viewdata.id, viewdata.status.sensitive),
|
||||
viewdata.spoilerText
|
||||
viewdata.status.spoilerText
|
||||
)
|
||||
|
||||
if (viewdata.spoilerText.isBlank()) {
|
||||
if (viewdata.status.spoilerText.isBlank()) {
|
||||
setTextVisible(true, viewdata.content, viewdata.status.mentions, viewdata.status.tags, viewdata.status.emojis, adapterHandler)
|
||||
binding.statusContentWarningButton.hide()
|
||||
binding.statusContentWarningDescription.hide()
|
||||
} else {
|
||||
val emojiSpoiler = viewdata.spoilerText.emojify(viewdata.status.emojis, binding.statusContentWarningDescription, statusDisplayOptions.animateEmojis)
|
||||
val emojiSpoiler = viewdata.status.spoilerText.emojify(viewdata.status.emojis, binding.statusContentWarningDescription, statusDisplayOptions.animateEmojis)
|
||||
binding.statusContentWarningDescription.text = emojiSpoiler
|
||||
binding.statusContentWarningDescription.show()
|
||||
binding.statusContentWarningButton.show()
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
|
||||
package com.keylesspalace.tusky.service
|
||||
|
||||
import android.annotation.TargetApi
|
||||
import android.content.Intent
|
||||
import android.service.quicksettings.TileService
|
||||
import com.keylesspalace.tusky.MainActivity
|
||||
|
@ -25,8 +24,6 @@ import com.keylesspalace.tusky.components.compose.ComposeActivity
|
|||
* Small Addition that adds in a QuickSettings tile
|
||||
* opens the Compose activity or shows an account selector when multiple accounts are present
|
||||
*/
|
||||
|
||||
@TargetApi(24)
|
||||
class TuskyTileService : TileService() {
|
||||
|
||||
override fun onClick() {
|
||||
|
|
|
@ -48,7 +48,7 @@ class ListStatusAccessibilityDelegate(
|
|||
val pos = recyclerView.getChildAdapterPosition(host)
|
||||
val status = statusProvider.getStatus(pos) ?: return
|
||||
if (status is StatusViewData.Concrete) {
|
||||
if (status.spoilerText.isNotEmpty()) {
|
||||
if (status.status.spoilerText.isNotEmpty()) {
|
||||
info.addAction(if (status.isExpanded) collapseCwAction else expandCwAction)
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
package com.keylesspalace.tusky.util
|
||||
|
||||
import android.icu.text.BreakIterator
|
||||
import android.text.InputFilter
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.Spanned
|
||||
|
@ -72,20 +73,10 @@ object SmartLengthInputFilter : InputFilter {
|
|||
if (source[keep].isLetterOrDigit()) {
|
||||
var boundary: Int
|
||||
|
||||
// Android N+ offer a clone of the ICU APIs in Java for better internationalization and
|
||||
// unicode support. Using the ICU version of BreakIterator grants better support for
|
||||
// those without having to add the ICU4J library at a minimum Api trade-off.
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
|
||||
val iterator = android.icu.text.BreakIterator.getWordInstance()
|
||||
iterator.setText(source.toString())
|
||||
boundary = iterator.following(keep)
|
||||
if (keep - boundary > RUNWAY) boundary = iterator.preceding(keep)
|
||||
} else {
|
||||
val iterator = java.text.BreakIterator.getWordInstance()
|
||||
iterator.setText(source.toString())
|
||||
boundary = iterator.following(keep)
|
||||
if (keep - boundary > RUNWAY) boundary = iterator.preceding(keep)
|
||||
}
|
||||
val iterator = BreakIterator.getWordInstance()
|
||||
iterator.setText(source.toString())
|
||||
boundary = iterator.following(keep)
|
||||
if (keep - boundary > RUNWAY) boundary = iterator.preceding(keep)
|
||||
|
||||
keep = boundary
|
||||
} else {
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
package com.keylesspalace.tusky.util
|
||||
|
||||
import android.text.Html.TagHandler
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.Spanned
|
||||
import androidx.core.text.parseAsHtml
|
||||
|
||||
|
@ -36,31 +35,3 @@ fun String.parseAsMastodonHtml(tagHandler: TagHandler? = null): Spanned {
|
|||
* most status contents do, so it should be trimmed. */
|
||||
.trimTrailingWhitespace()
|
||||
}
|
||||
|
||||
fun replaceCrashingCharacters(content: Spanned): Spanned {
|
||||
return replaceCrashingCharacters(content as CharSequence) as Spanned
|
||||
}
|
||||
|
||||
fun replaceCrashingCharacters(content: CharSequence): CharSequence? {
|
||||
var replacing = false
|
||||
var builder: SpannableStringBuilder? = null
|
||||
val length = content.length
|
||||
for (index in 0 until length) {
|
||||
val character = content[index]
|
||||
|
||||
// If there are more than one or two, switch to a map
|
||||
if (character == SOFT_HYPHEN) {
|
||||
if (!replacing) {
|
||||
replacing = true
|
||||
builder = SpannableStringBuilder(content, 0, index)
|
||||
}
|
||||
builder!!.append(ASCII_HYPHEN)
|
||||
} else if (replacing) {
|
||||
builder!!.append(character)
|
||||
}
|
||||
}
|
||||
return if (replacing) builder else content
|
||||
}
|
||||
|
||||
private const val SOFT_HYPHEN = '\u00ad'
|
||||
private const val ASCII_HYPHEN = '-'
|
||||
|
|
|
@ -14,12 +14,10 @@
|
|||
* see <http://www.gnu.org/licenses>. */
|
||||
package com.keylesspalace.tusky.viewdata
|
||||
|
||||
import android.os.Build
|
||||
import android.text.Spanned
|
||||
import com.keylesspalace.tusky.entity.Filter
|
||||
import com.keylesspalace.tusky.entity.Status
|
||||
import com.keylesspalace.tusky.util.parseAsMastodonHtml
|
||||
import com.keylesspalace.tusky.util.replaceCrashingCharacters
|
||||
import com.keylesspalace.tusky.util.shouldTrimStatus
|
||||
|
||||
/**
|
||||
|
@ -48,17 +46,15 @@ sealed class StatusViewData {
|
|||
override val id: String
|
||||
get() = status.id
|
||||
|
||||
val content: Spanned = status.actionableStatus.content.parseAsMastodonHtml()
|
||||
|
||||
/**
|
||||
* Specifies whether the content of this post is long enough to be automatically
|
||||
* collapsed or if it should show all content regardless.
|
||||
*
|
||||
* @return Whether the post is collapsible or never collapsed.
|
||||
*/
|
||||
val isCollapsible: Boolean
|
||||
|
||||
val content: Spanned
|
||||
val spoilerText: String
|
||||
val username: String
|
||||
val isCollapsible: Boolean = shouldTrimStatus(this.content)
|
||||
|
||||
val actionable: Status
|
||||
get() = status.actionableStatus
|
||||
|
@ -76,22 +72,6 @@ sealed class StatusViewData {
|
|||
val rebloggingStatus: Status?
|
||||
get() = if (status.reblog != null) status else null
|
||||
|
||||
init {
|
||||
if (Build.VERSION.SDK_INT == 23) {
|
||||
// https://github.com/tuskyapp/Tusky/issues/563
|
||||
this.content = replaceCrashingCharacters(status.actionableStatus.content.parseAsMastodonHtml())
|
||||
this.spoilerText =
|
||||
replaceCrashingCharacters(status.actionableStatus.spoilerText).toString()
|
||||
this.username =
|
||||
replaceCrashingCharacters(status.actionableStatus.account.username).toString()
|
||||
} else {
|
||||
this.content = status.actionableStatus.content.parseAsMastodonHtml()
|
||||
this.spoilerText = status.actionableStatus.spoilerText
|
||||
this.username = status.actionableStatus.account.username
|
||||
}
|
||||
this.isCollapsible = shouldTrimStatus(this.content)
|
||||
}
|
||||
|
||||
/** Helper for Java */
|
||||
fun copyWithStatus(status: Status): Concrete {
|
||||
return copy(status = status)
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<gradient xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:startColor="#000"
|
||||
android:centerColor="#000"
|
||||
android:endColor="#0000"
|
||||
android:startX="30"
|
||||
android:startY="30"
|
||||
android:centerX="90"
|
||||
android:centerY="90"
|
||||
android:endX="110"
|
||||
android:endY="110"
|
||||
android:type="linear"/>
|
|
@ -1,51 +0,0 @@
|
|||
<vector android:height="34dp"
|
||||
android:viewportHeight="128"
|
||||
android:viewportWidth="128"
|
||||
android:width="34dp"
|
||||
xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path
|
||||
android:pathData="M63.7,119c-28,0 -58,-17.5 -58,-55.9s30.1,-55.9 58,-55.9c15.5,0 29.9,5.1 40.4,14.5A53.5,53.5 0,0 1,121.8 63c0,16.9 -6.1,31.2 -17.7,41.4A60.6,60.6 0,0 1,63.7 119z"
|
||||
android:strokeAlpha="1" android:strokeColor="#eb8f00" android:strokeWidth="3.6">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient android:endX="63.7" android:endY="106.8"
|
||||
android:startX="63.7" android:startY="18.8" android:type="linear">
|
||||
<item android:color="#FFFEE133" android:offset="0.5"/>
|
||||
<item android:color="#FFFEDE32" android:offset="0.6"/>
|
||||
<item android:color="#FFFCD32F" android:offset="0.7"/>
|
||||
<item android:color="#FFFAC12B" android:offset="0.8"/>
|
||||
<item android:color="#FFF7A924" android:offset="0.9"/>
|
||||
<item android:color="#FFF6A323" android:offset="0.9"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path android:fillColor="#242424" android:pathData="m89.4,43.1c4,0 7.5,3.3 7.5,8.7 0,5.4 -3.6,8.8 -7.5,8.8 -3.9,0 -7.4,-3.3 -7.4,-8.8 0,-5.5 3.6,-8.7 7.4,-8.7zM38.6,43.1c-4,0 -7.5,3.3 -7.5,8.7 0,5.4 3.6,8.8 7.5,8.8 3.9,0 7.4,-3.3 7.4,-8.8 0,-5.5 -3.5,-8.7 -7.4,-8.7z"/>
|
||||
<path android:fillColor="#242424" android:pathData="M64,69.5c-15.7,0 -30.3,-1.4 -42.5,-3.6 -3,-0.6 -5.7,2 -5,5 4,19.9 23.5,36.2 47.5,36.2 26.2,0 44,-16.8 47.6,-36.2 0.6,-3 -2.1,-5.6 -5.1,-5A238.4,238.4 0,0 1,64 69.5z"/>
|
||||
<path android:fillAlpha="1" android:fillColor="#ffffff" android:pathData="M20.395,65.82C17.878,65.957 15.887,68.275 16.5,70.9C16.543,71.113 16.598,71.322 16.645,71.533C31.288,79.1 47.255,83.301 64,83.301C80.805,83.301 96.747,79.069 111.484,71.451C111.521,71.267 111.565,71.085 111.6,70.9C112.2,67.9 109.5,65.3 106.5,65.9A238.4,238.4 0,0 1,64 69.5C48.3,69.5 33.7,68.1 21.5,65.9C21.125,65.825 20.754,65.801 20.395,65.82z"/>
|
||||
<path android:fillAlpha="1" android:fillColor="#eb8f00" android:pathData="M107.3,65.8C107,65.8 106.7,65.8 106.5,65.9A238.4,238.4 0,0 1,78.2 69A237.6,237.6 0,0 1,64 69.6A238.5,238.5 0,0 1,61 69.5C55.1,69.4 49.4,69.1 43.9,68.7A238.5,238.5 0,0 1,36.2 68C32.3,67.6 28.5,67.1 24.9,66.5A238.5,238.5 0,0 1,20.7 65.9A4.3,4.3 0,0 0,17 67.8A4.3,4.3 0,0 0,17 67.8A4.3,4.3 0,0 0,16.7 68.4C16.4,69.2 16.3,70 16.5,70.9C16.5,71.1 16.6,71.3 16.6,71.5C17.5,72 18.3,72.4 19.1,72.8C20,73.2 20.9,73.6 21.8,74A39.6,39.6 0,0 1,20.7 70C33.6,72.3 48.6,73.6 64,73.6C79.4,73.6 94.4,72.3 107.3,69.9L107.3,70L107.5,70.1A39,39 0,0 1,106.6 73.8C106.6,73.8 106.7,73.8 106.7,73.8C107.5,73.4 108.3,73.1 109,72.7C109,72.7 109,72.7 109.1,72.7C109.9,72.3 110.7,71.9 111.5,71.5C111.5,71.3 111.6,71.1 111.6,70.9C111.7,70.5 111.7,70.2 111.7,69.8A4.3,4.3 0,0 0,111.7 69.8A4.3,4.3 0,0 0,107.3 65.9L107.3,65.8z"/>
|
||||
<path android:fillColor="#FF000000" android:pathData="M75.2,37.5c-0.5,-0.4 -1.2,-0.5 -1.7,-0.2 0,0 -1.8,1 -4.1,0.8H69c-2,-0.2 -3.7,-0.3 -5.7,-0.3h-0.1l-5.4,0.3c-2.3,0.1 -3.8,-0.8 -3.8,-0.8 -0.6,-0.3 -1.3,-0.2 -1.8,0.2s-0.6,1.2 -0.4,1.9l3,9.8c0.2,0.6 0.7,1 1.2,1.1 0.6,0.1 1.2,-0.2 1.5,-0.8 0,0 2,-3.2 6.2,-3.2 4.3,0 6.2,3.1 6.3,3.2 0.3,0.5 0.8,0.8 1.3,0.8h0.2c0.6,0 1,-0.5 1.3,-1.1l2.7,-9.9c0.2,-0.6 0,-1.3 -0.4,-1.8z"/>
|
||||
<path android:fillColor="#FF000000" android:pathData="M59,38.4s-8,-9.3 -36.6,-6.6C3.3,33.5 2.3,35.3 2.3,35.3L2,42.6s2.9,0.8 4.7,3c1.9,2.3 2.7,15 5.7,21 4.7,9.2 27.7,6.8 27.7,6.8s9.4,0.8 14,-7.2c4.5,-7.8 6,-19.2 6,-19.2L59,38.4zM52.4,55.3c-1.9,8.4 -4.2,14.1 -19.8,13.3 -10,-0.6 -17,-0.6 -18.6,-15.3 -1,-9 0,-12.5 0.8,-13.6 0.8,-1.1 3.5,-4.3 19,-3.7s17.8,4 18.7,5.6c1,1.6 1.7,5.2 -0.1,13.6zM67.9,47s1.4,11.4 6,19.3c4.5,7.9 14,7.1 14,7.1s23,2.4 27.6,-6.9c3,-6 3.8,-18.6 5.7,-20.9 1.8,-2.2 4.7,-3 4.7,-3l-0.2,-7.3s-1,-1.8 -20.1,-3.5c-28.7,-2.7 -36.7,6.6 -36.7,6.6L68,47zM75.5,41.6c0.9,-1.6 3.1,-5 18.7,-5.6 15.5,-0.6 18.2,2.6 19,3.7 0.7,1 1.8,4.5 0.8,13.6 -1.6,14.7 -8.6,14.7 -18.6,15.3 -15.6,0.8 -18,-5 -19.8,-13.3 -1.8,-8.5 -1,-12.1 -0.1,-13.7z"/>
|
||||
<path android:pathData="M117.5,35.6h0z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient android:endX="117.600006" android:endY="35.6"
|
||||
android:startX="117.600006" android:startY="35.7" android:type="linear">
|
||||
<item android:color="#FF9E9E9E" android:offset="0"/>
|
||||
<item android:color="#FF616161" android:offset="1"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path android:pathData="M118.2,35.9z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient android:endX="118.00001" android:endY="35.7"
|
||||
android:startX="118.00001" android:startY="35.9" android:type="linear">
|
||||
<item android:color="#FF9E9E9E" android:offset="0"/>
|
||||
<item android:color="#FF616161" android:offset="1"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path android:fillColor="#ffffff" android:pathData="M7.6,40.3L5.8,40.3a1.55,1.55 0,0 1,0 -3.1h1.8a1.5,1.5 0,0 1,0 3zM122.2,40.3h-1.8a1.55,1.55 0,0 1,0 -3.1h1.8a1.5,1.5 0,0 1,0 3z"/>
|
||||
<path android:fillAlpha="1" android:fillColor="#ed7770"
|
||||
android:pathData="M64,93.301C55.457,93.301 47.764,96.719 42.074,102.205C48.628,105.31 56.065,107.1 64,107.1C72.316,107.1 79.781,105.403 86.219,102.473A31.7,31.7 0,0 0,64 93.301z"
|
||||
android:strokeAlpha="1" android:strokeLineCap="butt"
|
||||
android:strokeLineJoin="miter" android:strokeWidth="1"/>
|
||||
<path android:fillColor="#eb8f00" android:pathData="M45.736,99.158C44.429,100.09 43.197,101.119 42.045,102.232C48.614,105.32 56.063,107.1 64,107.1C72.324,107.1 79.794,105.409 86.236,102.49A31.7,31.7 0,0 0,82.574 99.375C76.899,101.678 70.611,102.9 63.9,102.9A46.7,46.7 0,0 1,45.736 99.158z"/>
|
||||
</vector>
|
|
@ -1,23 +0,0 @@
|
|||
<vector android:height="34dp"
|
||||
android:viewportHeight="128"
|
||||
android:viewportWidth="128"
|
||||
android:width="34dp"
|
||||
xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path
|
||||
android:pathData="M63.7,119c-28,0 -58,-17.5 -58,-55.9s30.1,-55.9 58,-55.9c15.5,0 29.9,5.1 40.4,14.5A53.5,53.5 0,0 1,121.8 63c0,16.9 -6.1,31.2 -17.7,41.4A60.6,60.6 0,0 1,63.7 119z"
|
||||
android:strokeAlpha="1" android:strokeColor="#eb8f00" android:strokeWidth="3.6" android:fillColor="#FFCC32"/>
|
||||
<path android:fillColor="#242424" android:pathData="m89.4,43.1c4,0 7.5,3.3 7.5,8.7 0,5.4 -3.6,8.8 -7.5,8.8 -3.9,0 -7.4,-3.3 -7.4,-8.8 0,-5.5 3.6,-8.7 7.4,-8.7zM38.6,43.1c-4,0 -7.5,3.3 -7.5,8.7 0,5.4 3.6,8.8 7.5,8.8 3.9,0 7.4,-3.3 7.4,-8.8 0,-5.5 -3.5,-8.7 -7.4,-8.7z"/>
|
||||
<path android:fillColor="#242424" android:pathData="M64,69.5c-15.7,0 -30.3,-1.4 -42.5,-3.6 -3,-0.6 -5.7,2 -5,5 4,19.9 23.5,36.2 47.5,36.2 26.2,0 44,-16.8 47.6,-36.2 0.6,-3 -2.1,-5.6 -5.1,-5A238.4,238.4 0,0 1,64 69.5z"/>
|
||||
<path android:fillAlpha="1" android:fillColor="#ffffff" android:pathData="M20.395,65.82C17.878,65.957 15.887,68.275 16.5,70.9C16.543,71.113 16.598,71.322 16.645,71.533C31.288,79.1 47.255,83.301 64,83.301C80.805,83.301 96.747,79.069 111.484,71.451C111.521,71.267 111.565,71.085 111.6,70.9C112.2,67.9 109.5,65.3 106.5,65.9A238.4,238.4 0,0 1,64 69.5C48.3,69.5 33.7,68.1 21.5,65.9C21.125,65.825 20.754,65.801 20.395,65.82z"/>
|
||||
<path android:fillAlpha="1" android:fillColor="#eb8f00" android:pathData="M107.3,65.8C107,65.8 106.7,65.8 106.5,65.9A238.4,238.4 0,0 1,78.2 69A237.6,237.6 0,0 1,64 69.6A238.5,238.5 0,0 1,61 69.5C55.1,69.4 49.4,69.1 43.9,68.7A238.5,238.5 0,0 1,36.2 68C32.3,67.6 28.5,67.1 24.9,66.5A238.5,238.5 0,0 1,20.7 65.9A4.3,4.3 0,0 0,17 67.8A4.3,4.3 0,0 0,17 67.8A4.3,4.3 0,0 0,16.7 68.4C16.4,69.2 16.3,70 16.5,70.9C16.5,71.1 16.6,71.3 16.6,71.5C17.5,72 18.3,72.4 19.1,72.8C20,73.2 20.9,73.6 21.8,74A39.6,39.6 0,0 1,20.7 70C33.6,72.3 48.6,73.6 64,73.6C79.4,73.6 94.4,72.3 107.3,69.9L107.3,70L107.5,70.1A39,39 0,0 1,106.6 73.8C106.6,73.8 106.7,73.8 106.7,73.8C107.5,73.4 108.3,73.1 109,72.7C109,72.7 109,72.7 109.1,72.7C109.9,72.3 110.7,71.9 111.5,71.5C111.5,71.3 111.6,71.1 111.6,70.9C111.7,70.5 111.7,70.2 111.7,69.8A4.3,4.3 0,0 0,111.7 69.8A4.3,4.3 0,0 0,107.3 65.9L107.3,65.8z"/>
|
||||
<path android:fillColor="#FF000000" android:pathData="M75.2,37.5c-0.5,-0.4 -1.2,-0.5 -1.7,-0.2 0,0 -1.8,1 -4.1,0.8H69c-2,-0.2 -3.7,-0.3 -5.7,-0.3h-0.1l-5.4,0.3c-2.3,0.1 -3.8,-0.8 -3.8,-0.8 -0.6,-0.3 -1.3,-0.2 -1.8,0.2s-0.6,1.2 -0.4,1.9l3,9.8c0.2,0.6 0.7,1 1.2,1.1 0.6,0.1 1.2,-0.2 1.5,-0.8 0,0 2,-3.2 6.2,-3.2 4.3,0 6.2,3.1 6.3,3.2 0.3,0.5 0.8,0.8 1.3,0.8h0.2c0.6,0 1,-0.5 1.3,-1.1l2.7,-9.9c0.2,-0.6 0,-1.3 -0.4,-1.8z"/>
|
||||
<path android:fillColor="#FF000000" android:pathData="M59,38.4s-8,-9.3 -36.6,-6.6C3.3,33.5 2.3,35.3 2.3,35.3L2,42.6s2.9,0.8 4.7,3c1.9,2.3 2.7,15 5.7,21 4.7,9.2 27.7,6.8 27.7,6.8s9.4,0.8 14,-7.2c4.5,-7.8 6,-19.2 6,-19.2L59,38.4zM52.4,55.3c-1.9,8.4 -4.2,14.1 -19.8,13.3 -10,-0.6 -17,-0.6 -18.6,-15.3 -1,-9 0,-12.5 0.8,-13.6 0.8,-1.1 3.5,-4.3 19,-3.7s17.8,4 18.7,5.6c1,1.6 1.7,5.2 -0.1,13.6zM67.9,47s1.4,11.4 6,19.3c4.5,7.9 14,7.1 14,7.1s23,2.4 27.6,-6.9c3,-6 3.8,-18.6 5.7,-20.9 1.8,-2.2 4.7,-3 4.7,-3l-0.2,-7.3s-1,-1.8 -20.1,-3.5c-28.7,-2.7 -36.7,6.6 -36.7,6.6L68,47zM75.5,41.6c0.9,-1.6 3.1,-5 18.7,-5.6 15.5,-0.6 18.2,2.6 19,3.7 0.7,1 1.8,4.5 0.8,13.6 -1.6,14.7 -8.6,14.7 -18.6,15.3 -15.6,0.8 -18,-5 -19.8,-13.3 -1.8,-8.5 -1,-12.1 -0.1,-13.7z"/>
|
||||
<path android:pathData="M117.5,35.6h0z" android:fillColor="#FF97F7"/>
|
||||
<path android:pathData="M118.2,35.9z" android:fillColor="#FF97F7"/>
|
||||
<path android:fillColor="#ffffff" android:pathData="M7.6,40.3L5.8,40.3a1.55,1.55 0,0 1,0 -3.1h1.8a1.5,1.5 0,0 1,0 3zM122.2,40.3h-1.8a1.55,1.55 0,0 1,0 -3.1h1.8a1.5,1.5 0,0 1,0 3z"/>
|
||||
<path android:fillAlpha="1" android:fillColor="#ed7770"
|
||||
android:pathData="M64,93.301C55.457,93.301 47.764,96.719 42.074,102.205C48.628,105.31 56.065,107.1 64,107.1C72.316,107.1 79.781,105.403 86.219,102.473A31.7,31.7 0,0 0,64 93.301z"
|
||||
android:strokeAlpha="1" android:strokeLineCap="butt"
|
||||
android:strokeLineJoin="miter" android:strokeWidth="1"/>
|
||||
<path android:fillColor="#eb8f00" android:pathData="M45.736,99.158C44.429,100.09 43.197,101.119 42.045,102.232C48.614,105.32 56.063,107.1 64,107.1C72.324,107.1 79.794,105.409 86.236,102.49A31.7,31.7 0,0 0,82.574 99.375C76.899,101.678 70.611,102.9 63.9,102.9A46.7,46.7 0,0 1,45.736 99.158z"/>
|
||||
</vector>
|
Loading…
Reference in a new issue