Merge branch 'maintenance' into origin/master
This commit is contained in:
commit
f1ebcb6894
|
@ -1,5 +1,5 @@
|
|||
# Built application files
|
||||
/build
|
||||
build/
|
||||
|
||||
# Local configuration file (sdk path, etc)
|
||||
local.properties
|
||||
|
|
|
@ -9,7 +9,7 @@ android:
|
|||
components:
|
||||
- tools
|
||||
- platform-tools
|
||||
- build-tools-29.0.2
|
||||
- build-tools-29.0.3
|
||||
- android-29
|
||||
- extra-android-m2repository
|
||||
- extra-google-m2repository
|
||||
|
|
21
build.gradle
21
build.gradle
|
@ -1,11 +1,12 @@
|
|||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
jcenter()
|
||||
maven { url 'https://plugins.gradle.org/m2/' }
|
||||
maven { url 'https://maven.google.com' }
|
||||
maven { url "https://plugins.gradle.org/m2/" }
|
||||
google()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.6.3'
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
|
@ -14,15 +15,13 @@ buildscript {
|
|||
}
|
||||
|
||||
allprojects {
|
||||
|
||||
ext {
|
||||
projectGroupId = 'org.mariotaku.twidere'
|
||||
projectVersionCode = 508
|
||||
projectVersionName = '4.0.9'
|
||||
projectVersionCode = 509
|
||||
projectVersionName = '4.1.0'
|
||||
|
||||
globalCompileSdkVersion = 29
|
||||
globalBuildToolsVersion = '29.0.2'
|
||||
|
||||
globalBuildToolsVersion = "29.0.3"
|
||||
|
||||
globalMinSdkVersion = 19
|
||||
globalTargetSdkVersion = 29
|
||||
|
@ -31,24 +30,21 @@ allprojects {
|
|||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
maven { url 'https://maven.google.com' }
|
||||
maven { url 'https://jitpack.io' }
|
||||
maven { url "https://jitpack.io" }
|
||||
google()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
subprojects {
|
||||
buildscript {
|
||||
ext {
|
||||
kotlinVersion = '1.3.61'
|
||||
kotlinVersion = '1.3.72'
|
||||
pluginVersions = [
|
||||
AndroidSvgDrawable: '3.0.0',
|
||||
PlayServices : '4.3.3',
|
||||
]
|
||||
libVersions = [
|
||||
Kotlin : "${kotlinVersion}",
|
||||
SupportLib : '26.1.0',
|
||||
SupportTest : '1.0.0',
|
||||
MariotakuCommons : '0.9.20',
|
||||
RestFu : '0.9.60',
|
||||
|
@ -86,6 +82,7 @@ subprojects {
|
|||
AbstractTask : '0.9.5',
|
||||
Dagger : '2.11',
|
||||
StethoBeanShellREPL : '0.1',
|
||||
MessageBubbleView : '3.5',
|
||||
]
|
||||
|
||||
}
|
||||
|
|
Binary file not shown.
|
@ -1,6 +1,5 @@
|
|||
#Mon Apr 20 10:36:29 CEST 2020
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
|
|
@ -1,5 +1,21 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
|
@ -28,16 +44,16 @@ APP_NAME="Gradle"
|
|||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn ( ) {
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die ( ) {
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
|
@ -109,8 +125,8 @@ if $darwin; then
|
|||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
@ -138,35 +154,30 @@ if $cygwin ; then
|
|||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
i=`expr $i + 1`
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
0) set -- ;;
|
||||
1) set -- "$args0" ;;
|
||||
2) set -- "$args0" "$args1" ;;
|
||||
3) set -- "$args0" "$args1" "$args2" ;;
|
||||
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save ( ) {
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=$(save "$@")
|
||||
APP_ARGS=`save "$@"`
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
|
|
|
@ -1,3 +1,19 @@
|
|||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
|
@ -13,8 +29,11 @@ if "%DIRNAME%" == "" set DIRNAME=.
|
|||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
/build
|
|
@ -43,8 +43,12 @@ buildscript {
|
|||
}
|
||||
}
|
||||
|
||||
android {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion globalCompileSdkVersion
|
||||
buildToolsVersion globalBuildToolsVersion
|
||||
|
||||
|
@ -62,26 +66,27 @@ android {
|
|||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
annotationProcessor "com.bluelinelabs:logansquare-compiler:${libVersions['LoganSquare']}"
|
||||
annotationProcessor "com.hannesdorfmann.parcelableplease:processor:${libVersions['ParcelablePlease']}"
|
||||
annotationProcessor "com.github.mariotaku.ObjectCursor:processor:${libVersions['ObjectCursor']}"
|
||||
annotationProcessor "com.github.mariotaku.ExportablePreferences:processor:${libVersions['ExportablePreferences']}"
|
||||
|
||||
/** Android support **/
|
||||
implementation 'androidx.annotation:annotation:1.1.0'
|
||||
|
||||
|
||||
/** Third-party dependencies **/
|
||||
implementation "com.bluelinelabs:logansquare:${libVersions['LoganSquare']}"
|
||||
annotationProcessor "com.bluelinelabs:logansquare-compiler:${libVersions['LoganSquare']}"
|
||||
implementation "com.fasterxml.jackson.core:jackson-core:2.7.4"
|
||||
implementation "com.hannesdorfmann.parcelableplease:annotation:${libVersions['ParcelablePlease']}"
|
||||
annotationProcessor "com.hannesdorfmann.parcelableplease:processor:${libVersions['ParcelablePlease']}"
|
||||
|
||||
|
||||
/** Custom dependencies **/
|
||||
implementation "com.github.mariotaku.RestFu:library:${libVersions['RestFu']}"
|
||||
implementation "com.github.mariotaku.RestFu:oauth:${libVersions['RestFu']}"
|
||||
implementation "com.github.mariotaku.RestFu:oauth2:${libVersions['RestFu']}"
|
||||
implementation "com.hannesdorfmann.parcelableplease:annotation:${libVersions['ParcelablePlease']}"
|
||||
implementation "com.github.mariotaku.ObjectCursor:core:${libVersions['ObjectCursor']}"
|
||||
annotationProcessor "com.github.mariotaku.ObjectCursor:processor:${libVersions['ObjectCursor']}"
|
||||
implementation "com.github.mariotaku.ExportablePreferences:core:${libVersions['ExportablePreferences']}"
|
||||
annotationProcessor "com.github.mariotaku.ExportablePreferences:processor:${libVersions['ExportablePreferences']}"
|
||||
implementation "com.github.mariotaku.CommonsLibrary:objectcursor:${libVersions['MariotakuCommons']}"
|
||||
implementation "com.github.mariotaku.CommonsLibrary:logansquare:${libVersions['MariotakuCommons']}"
|
||||
}
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in /Users/mariotaku/Tools/android-sdk/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the proguardFiles
|
||||
# directive in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
|
@ -1 +0,0 @@
|
|||
/build
|
|
@ -22,21 +22,12 @@
|
|||
apply plugin: 'com.android.library'
|
||||
|
||||
android {
|
||||
|
||||
compileSdkVersion globalCompileSdkVersion
|
||||
buildToolsVersion globalBuildToolsVersion
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion globalMinSdkVersion
|
||||
targetSdkVersion globalTargetSdkVersion
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in /Users/mariotaku/Tools/android-sdk/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the proguardFiles
|
||||
# directive in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
|
@ -1,32 +0,0 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.nyan;
|
||||
|
||||
import android.app.Application;
|
||||
import android.test.ApplicationTestCase;
|
||||
|
||||
/**
|
||||
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
|
||||
*/
|
||||
public class ApplicationTest extends ApplicationTestCase<Application> {
|
||||
public ApplicationTest() {
|
||||
super(Application.class);
|
||||
}
|
||||
}
|
|
@ -9,7 +9,7 @@ buildscript {
|
|||
enableGoogleVariant = project.file('google-services.json').exists()
|
||||
}
|
||||
repositories {
|
||||
maven { url 'https://jitpack.io' }
|
||||
maven { url "https://jitpack.io" }
|
||||
jcenter()
|
||||
if (enableGoogleVariant) {
|
||||
// START Non-FOSS component
|
||||
|
@ -21,7 +21,7 @@ buildscript {
|
|||
dependencies {
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
|
||||
classpath "org.jetbrains.kotlin:kotlin-android-extensions:${kotlinVersion}"
|
||||
classpath 'com.github.mariotaku:imgenie-plugin:0.2.5'
|
||||
classpath 'com.github.mariotaku:imgenie-plugin:0.2.6'
|
||||
|
||||
if (enableGoogleVariant) {
|
||||
// START Non-FOSS component
|
||||
|
@ -31,8 +31,13 @@ buildscript {
|
|||
}
|
||||
}
|
||||
|
||||
android {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
maven { url "https://s3.amazonaws.com/repo.commonsware.com" }
|
||||
flatDir { dirs "$projectDir/lib" }
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion globalCompileSdkVersion
|
||||
buildToolsVersion globalBuildToolsVersion
|
||||
|
||||
|
@ -50,17 +55,7 @@ android {
|
|||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
aaptOptions {
|
||||
additionalParameters "--no-version-vectors"
|
||||
}
|
||||
|
||||
flavorDimensions 'channel'
|
||||
|
||||
productFlavors {
|
||||
if (enableGoogleVariant) {
|
||||
// START Non-FOSS component
|
||||
|
@ -119,6 +114,15 @@ android {
|
|||
it.java.srcDirs += "src/${it.name}/kotlin"
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
aaptOptions {
|
||||
additionalParameters "--no-version-vectors"
|
||||
}
|
||||
|
||||
testOptions {
|
||||
unitTests.returnDefaultValues = true
|
||||
}
|
||||
|
@ -130,13 +134,7 @@ android {
|
|||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude 'META-INF/LICENSE'
|
||||
exclude 'META-INF/NOTICE'
|
||||
exclude 'META-INF/DEPENDENCIES'
|
||||
exclude 'META-INF/README'
|
||||
exclude 'META-INF/INDEX.LIST'
|
||||
exclude 'META-INF/maven/**'
|
||||
exclude 'META-INF/*.kotlin_module'
|
||||
exclude 'META-INF/*'
|
||||
exclude 'kotlin/**.kotlin_builtins'
|
||||
exclude 'org/osmdroid/**.png'
|
||||
exclude 'javax/annotation/**.java'
|
||||
|
@ -150,75 +148,36 @@ android {
|
|||
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
maven { url 'https://s3.amazonaws.com/repo.commonsware.com' }
|
||||
flatDir { dirs "$projectDir/lib" }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// wearApp project(':twidere.wear')
|
||||
kapt "com.bluelinelabs:logansquare-compiler:${libVersions['LoganSquare']}"
|
||||
kapt "com.hannesdorfmann.parcelableplease:processor:${libVersions['ParcelablePlease']}"
|
||||
kapt "com.google.dagger:dagger-compiler:${libVersions['Dagger']}"
|
||||
kapt "com.github.mariotaku.ObjectCursor:processor:${libVersions['ObjectCursor']}"
|
||||
|
||||
implementation project(':twidere.component.common')
|
||||
implementation project(':twidere.component.nyan')
|
||||
|
||||
if (enableGoogleVariant) {
|
||||
// START Non-FOSS component
|
||||
googleImplementation "com.google.android.gms:play-services-maps:${libVersions['PlayServices']}"
|
||||
googleImplementation "com.google.android.gms:play-services-auth:${libVersions['PlayServices']}"
|
||||
googleImplementation "com.google.android.gms:play-services-ads:${libVersions['PlayServices']}"
|
||||
googleImplementation "com.google.maps.android:android-maps-utils:${libVersions['MapsUtils']}"
|
||||
googleImplementation "com.anjlab.android.iab.v3:library:${libVersions['IABv3']}"
|
||||
googleImplementation "com.dropbox.core:dropbox-core-sdk:${libVersions['DropboxCoreSdk']}"
|
||||
googleImplementation("com.google.apis:google-api-services-drive:${libVersions['GoogleDriveApi']}") {
|
||||
exclude group: 'org.apache.httpcomponents'
|
||||
}
|
||||
implementation("com.google.guava:guava:28.2-android")
|
||||
// END Non-FOSS component
|
||||
}
|
||||
/** Kotlin **/
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:${libVersions['Kotlin']}"
|
||||
implementation "nl.komponents.kovenant:kovenant:${libVersions['Kovenant']}"
|
||||
implementation "nl.komponents.kovenant:kovenant-android:${libVersions['Kovenant']}"
|
||||
implementation "nl.komponents.kovenant:kovenant-combine:${libVersions['Kovenant']}"
|
||||
implementation "nl.komponents.kovenant:kovenant-functional:${libVersions['Kovenant']}"
|
||||
|
||||
fdroidImplementation "org.osmdroid:osmdroid-android:${libVersions['OSMDroid']}"
|
||||
fdroidImplementation "ch.acra:acra:${libVersions['ACRA']}"
|
||||
|
||||
debugImplementation "com.facebook.stetho:stetho:${libVersions['Stetho']}"
|
||||
debugImplementation "com.facebook.stetho:stetho-okhttp3:${libVersions['Stetho']}"
|
||||
debugImplementation "com.github.mariotaku:StethoBeanShellREPL:${libVersions['StethoBeanShellREPL']}"
|
||||
debugImplementation "com.squareup.leakcanary:leakcanary-android:${libVersions['LeakCanary']}"
|
||||
debugImplementation('com.jayway.jsonpath:json-path:2.2.0') {
|
||||
exclude group: 'net.minidev', module: 'json-smart'
|
||||
}
|
||||
// Stetho dependency, see https://g.co/androidstudio/app-test-app-conflict
|
||||
debugImplementation "com.google.code.findbugs:jsr305:3.0.2"
|
||||
|
||||
compileOnly 'javax.annotation:jsr250-api:1.0'
|
||||
|
||||
testImplementation 'junit:junit:4.12'
|
||||
|
||||
androidTestImplementation 'androidx.annotation:annotation:1.1.0'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
||||
androidTestImplementation 'androidx.test:rules:1.2.0'
|
||||
// https://g.co/androidstudio/app-test-app-conflict
|
||||
androidTestImplementation "com.google.code.findbugs:jsr305:3.0.2"
|
||||
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
/** Android support **/
|
||||
implementation 'androidx.annotation:annotation:1.1.0'
|
||||
implementation 'androidx.core:core:1.2.0'
|
||||
implementation 'androidx.legacy:legacy-support-core-utils:1.0.0'
|
||||
implementation 'androidx.legacy:legacy-support-core-ui:1.0.0'
|
||||
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
|
||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||
implementation 'androidx.cardview:cardview:1.0.0'
|
||||
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
||||
implementation 'androidx.palette:palette:1.0.0'
|
||||
implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
|
||||
implementation 'androidx.browser:browser:1.2.0'
|
||||
implementation "androidx.drawerlayout:drawerlayout:1.1.0-alpha01"
|
||||
implementation 'com.google.android.material:material:1.1.0'
|
||||
implementation 'androidx.cardview:cardview:1.0.0'
|
||||
implementation 'androidx.core:core:1.2.0'
|
||||
implementation 'androidx.drawerlayout:drawerlayout:1.1.0-alpha01'
|
||||
implementation 'androidx.exifinterface:exifinterface:1.1.0'
|
||||
implementation "androidx.preference:preference:1.1.1"
|
||||
implementation 'androidx.legacy:legacy-support-core-ui:1.0.0'
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
implementation 'androidx.palette:palette:1.0.0'
|
||||
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
||||
implementation 'com.google.android.material:material:1.1.0'
|
||||
|
||||
|
||||
/** Third-party dependencies **/
|
||||
compileOnly 'javax.annotation:jsr250-api:1.0'
|
||||
implementation "com.twitter:twitter-text:${libVersions['TwitterText']}"
|
||||
implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.6.0'
|
||||
implementation 'com.squareup:otto:1.3.8'
|
||||
|
@ -226,7 +185,7 @@ dependencies {
|
|||
implementation 'com.commonsware.cwac:layouts:0.4.3'
|
||||
implementation 'com.rengwuxian.materialedittext:library:2.1.4'
|
||||
implementation 'com.pnikosis:materialish-progress:1.7'
|
||||
implementation 'com.github.mariotaku:MessageBubbleView:1.6'
|
||||
implementation "com.github.mariotaku:MessageBubbleView:${libVersions['MessageBubbleView']}"
|
||||
implementation 'com.github.mariotaku:DragSortListView:0.6.1'
|
||||
implementation 'com.github.uucky:ColorPicker-Android:0.9.7@aar'
|
||||
implementation "pl.droidsonroids.gif:android-gif-drawable:${libVersions['AndroidGIFDrawable']}"
|
||||
|
@ -235,33 +194,35 @@ dependencies {
|
|||
implementation "org.apache.james:apache-mime4j-core:${libVersions['Mime4J']}"
|
||||
implementation "org.apache.james:apache-mime4j-storage:${libVersions['Mime4J']}"
|
||||
implementation "com.bluelinelabs:logansquare:${libVersions['LoganSquare']}"
|
||||
kapt "com.bluelinelabs:logansquare-compiler:${libVersions['LoganSquare']}"
|
||||
implementation "com.fasterxml.jackson.core:jackson-core:2.7.4"
|
||||
implementation "com.hannesdorfmann.parcelableplease:annotation:${libVersions['ParcelablePlease']}"
|
||||
implementation "com.github.mariotaku:PickNCrop:${libVersions['PickNCrop']}"
|
||||
implementation "com.github.mariotaku.RestFu:library:${libVersions['RestFu']}"
|
||||
implementation "com.github.mariotaku.RestFu:oauth:${libVersions['RestFu']}"
|
||||
implementation "com.github.mariotaku.RestFu:oauth2:${libVersions['RestFu']}"
|
||||
implementation "com.github.mariotaku.RestFu:okhttp3:${libVersions['RestFu']}"
|
||||
implementation "com.github.mariotaku.RestFu:logansquare:${libVersions['RestFu']}"
|
||||
kapt "com.hannesdorfmann.parcelableplease:processor:${libVersions['ParcelablePlease']}"
|
||||
implementation "com.squareup.okhttp3:okhttp:${libVersions['OkHttp']}"
|
||||
implementation("com.squareup.okio:okio:2.4.3")
|
||||
implementation "com.squareup.okio:okio:2.4.3"
|
||||
implementation 'com.lnikkila:extendedtouchview:0.1.1'
|
||||
implementation "com.google.dagger:dagger:${libVersions['Dagger']}"
|
||||
kapt "com.google.dagger:dagger-compiler:${libVersions['Dagger']}"
|
||||
implementation 'org.attoparser:attoparser:2.0.4.RELEASE'
|
||||
implementation 'com.getkeepsafe.taptargetview:taptargetview:1.9.1'
|
||||
implementation 'net.ypresto.androidtranscoder:android-transcoder:0.2.0'
|
||||
implementation "com.google.android.exoplayer:exoplayer:${libVersions['Exoplayer']}"
|
||||
implementation "com.google.android.exoplayer:extension-okhttp:${libVersions['Exoplayer']}"
|
||||
implementation "com.github.bumptech.glide:glide:${libVersions['Glide']}"
|
||||
kapt "com.github.bumptech.glide:compiler:${libVersions['Glide']}"
|
||||
implementation "com.github.bumptech.glide:okhttp3-integration:${libVersions['GlideOkHttp3']}@aar"
|
||||
kapt "com.github.bumptech.glide:compiler:${libVersions['Glide']}"
|
||||
implementation "jp.wasabeef:glide-transformations:${libVersions['GlideTransformations']}"
|
||||
implementation "com.theartofdev.edmodo:android-image-cropper:${libVersions['AndroidImageCropper']}"
|
||||
|
||||
|
||||
/** Custom dependencies **/
|
||||
implementation 'com.github.mariotaku:MessageBubbleView:1.6'
|
||||
implementation 'com.github.mariotaku:DragSortListView:0.6.1'
|
||||
implementation "com.github.mariotaku.MediaViewerLibrary:base:${libVersions['MediaViewerLibrary']}"
|
||||
implementation "com.github.mariotaku.MediaViewerLibrary:subsample-image-view:${libVersions['MediaViewerLibrary']}"
|
||||
implementation "com.github.mariotaku:SQLiteQB:${libVersions['SQLiteQB']}"
|
||||
implementation "com.github.mariotaku.ObjectCursor:core:${libVersions['ObjectCursor']}"
|
||||
kapt "com.github.mariotaku.ObjectCursor:processor:${libVersions['ObjectCursor']}"
|
||||
implementation "com.github.mariotaku.ExportablePreferences:core:${libVersions['ExportablePreferences']}"
|
||||
implementation "com.github.mariotaku:AbstractTask:${libVersions['AbstractTask']}"
|
||||
implementation "com.github.mariotaku.CommonsLibrary:parcel:${libVersions['MariotakuCommons']}"
|
||||
|
@ -274,14 +235,53 @@ dependencies {
|
|||
implementation "com.github.mariotaku.CommonsLibrary:objectcursor:${libVersions['MariotakuCommons']}"
|
||||
implementation "com.github.mariotaku.CommonsLibrary:logansquare:${libVersions['MariotakuCommons']}"
|
||||
implementation "com.github.mariotaku:KPreferences:${libVersions['KPreferences']}"
|
||||
implementation "com.github.Tlaster:Chameleon:${libVersions['Chameleon']}"
|
||||
implementation "com.github.mariotaku.UniqR:android:${libVersions['UniqR']}"
|
||||
implementation "com.github.mariotaku:PickNCrop:${libVersions['PickNCrop']}"
|
||||
implementation "com.github.mariotaku.RestFu:library:${libVersions['RestFu']}"
|
||||
implementation "com.github.mariotaku.RestFu:oauth:${libVersions['RestFu']}"
|
||||
implementation "com.github.mariotaku.RestFu:oauth2:${libVersions['RestFu']}"
|
||||
implementation "com.github.mariotaku.RestFu:okhttp3:${libVersions['RestFu']}"
|
||||
implementation "com.github.mariotaku.RestFu:logansquare:${libVersions['RestFu']}"
|
||||
implementation "com.github.Tlaster:Chameleon:${libVersions['Chameleon']}"
|
||||
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:${libVersions['Kotlin']}"
|
||||
implementation "nl.komponents.kovenant:kovenant:${libVersions['Kovenant']}"
|
||||
implementation "nl.komponents.kovenant:kovenant-android:${libVersions['Kovenant']}"
|
||||
implementation "nl.komponents.kovenant:kovenant-functional:${libVersions['Kovenant']}"
|
||||
implementation "nl.komponents.kovenant:kovenant-combine:${libVersions['Kovenant']}"
|
||||
|
||||
/** Flavor dependencies **/
|
||||
fdroidImplementation "org.osmdroid:osmdroid-android:${libVersions['OSMDroid']}"
|
||||
fdroidImplementation "ch.acra:acra:${libVersions['ACRA']}"
|
||||
|
||||
if (enableGoogleVariant) {
|
||||
// START Non-FOSS component
|
||||
googleImplementation "com.google.android.gms:play-services-ads:${libVersions['PlayServices']}"
|
||||
googleImplementation "com.google.android.gms:play-services-auth:${libVersions['PlayServices']}"
|
||||
googleImplementation "com.google.android.gms:play-services-maps:${libVersions['PlayServices']}"
|
||||
googleImplementation "com.google.maps.android:android-maps-utils:${libVersions['MapsUtils']}"
|
||||
googleImplementation "com.anjlab.android.iab.v3:library:${libVersions['IABv3']}"
|
||||
googleImplementation "com.dropbox.core:dropbox-core-sdk:${libVersions['DropboxCoreSdk']}"
|
||||
googleImplementation("com.google.apis:google-api-services-drive:${libVersions['GoogleDriveApi']}") {
|
||||
exclude group: 'org.apache.httpcomponents'
|
||||
}
|
||||
implementation 'com.google.guava:guava:28.2-android'
|
||||
// END Non-FOSS component
|
||||
}
|
||||
|
||||
debugImplementation "com.facebook.stetho:stetho:${libVersions['Stetho']}"
|
||||
debugImplementation "com.facebook.stetho:stetho-okhttp3:${libVersions['Stetho']}"
|
||||
debugImplementation "com.github.mariotaku:StethoBeanShellREPL:${libVersions['StethoBeanShellREPL']}"
|
||||
debugImplementation "com.squareup.leakcanary:leakcanary-android:${libVersions['LeakCanary']}"
|
||||
debugImplementation('com.jayway.jsonpath:json-path:2.2.0') {
|
||||
exclude group: 'net.minidev', module: 'json-smart'
|
||||
}
|
||||
// Stetho dependency, see https://g.co/androidstudio/app-test-app-conflict
|
||||
debugImplementation 'com.google.code.findbugs:jsr305:3.0.2'
|
||||
|
||||
|
||||
/** Testing **/
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.annotation:annotation:1.1.0'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
||||
androidTestImplementation 'androidx.test:rules:1.2.0'
|
||||
// https://g.co/androidstudio/app-test-app-conflict
|
||||
androidTestImplementation 'com.google.code.findbugs:jsr305:3.0.2'
|
||||
}
|
||||
|
||||
if (enableGoogleVariant) {
|
||||
|
|
|
@ -119,6 +119,7 @@
|
|||
android:resizeableActivity="true"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:theme="@style/Theme.Twidere.NoActionBar"
|
||||
tools:ignore="UnusedAttribute">
|
||||
<uses-library
|
||||
|
|
|
@ -31,18 +31,24 @@ fun <T : Dialog> T.applyOnShow(action: T.() -> Unit) {
|
|||
}
|
||||
}
|
||||
|
||||
fun AlertDialog.Builder.positive(@StringRes textId: Int, action: (dialog: AlertDialog) -> Unit) {
|
||||
inline fun AlertDialog.Builder.positive(@StringRes textId: Int, crossinline action: (dialog: AlertDialog) -> Unit) {
|
||||
setPositiveButton(textId) { dialog, _ ->
|
||||
action(dialog as AlertDialog)
|
||||
}
|
||||
}
|
||||
|
||||
fun AlertDialog.Builder.negative(@StringRes textId: Int, action: (dialog: AlertDialog) -> Unit) {
|
||||
inline fun AlertDialog.Builder.negative(@StringRes textId: Int, crossinline action: (dialog: AlertDialog) -> Unit) {
|
||||
setNegativeButton(textId) { dialog, _ ->
|
||||
action(dialog as AlertDialog)
|
||||
}
|
||||
}
|
||||
|
||||
inline fun AlertDialog.Builder.neutral(@StringRes textId: Int, crossinline action: (dialog: AlertDialog) -> Unit) {
|
||||
setNeutralButton(textId) { dialog, _ ->
|
||||
action(dialog as AlertDialog)
|
||||
}
|
||||
}
|
||||
|
||||
fun <T : Dialog> T.onShow(action: (dialog: T) -> Unit) {
|
||||
setOnShowListener { dialog ->
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
package org.mariotaku.twidere.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.preference.Preference
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.SharedPreferenceConstants.*
|
||||
import org.mariotaku.twidere.preference.notification.AccountNotificationChannelsPreference
|
||||
|
@ -38,7 +39,7 @@ class AccountNotificationSettingsFragment : BaseAccountPreferenceFragment() {
|
|||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
val account = this.account
|
||||
findPreference(KEY_NOTIFICATION_LIGHT_COLOR)?.let {
|
||||
findPreference<Preference>(KEY_NOTIFICATION_LIGHT_COLOR)?.let {
|
||||
if (account != null) {
|
||||
it.setDefaultValue(account.color)
|
||||
}
|
||||
|
|
|
@ -93,11 +93,10 @@ abstract class BasePreferenceFragment : PreferenceFragmentCompat(), IBaseFragmen
|
|||
REQUEST_PICK_RINGTONE -> {
|
||||
if (resultCode == Activity.RESULT_OK && data != null) {
|
||||
val ringtone = data.getParcelableExtra<Uri>(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)
|
||||
if (ringtonePreferenceKey != null) {
|
||||
val ringtonePreference = findPreference(ringtonePreferenceKey) as RingtonePreference?
|
||||
if (ringtonePreference != null) {
|
||||
ringtonePreference.value = ringtone?.toString()
|
||||
}
|
||||
ringtonePreferenceKey?.let {
|
||||
findPreference<RingtonePreference>(it)
|
||||
}?.let {
|
||||
it.value = ringtone?.toString()
|
||||
}
|
||||
ringtonePreferenceKey = null
|
||||
}
|
||||
|
|
|
@ -22,9 +22,10 @@ package org.mariotaku.twidere.fragment
|
|||
import android.content.SharedPreferences
|
||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
||||
import android.os.Bundle
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.preference.PreferenceScreen
|
||||
import android.view.View
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceScreen
|
||||
import org.mariotaku.twidere.Constants.*
|
||||
import org.mariotaku.twidere.activity.SettingsActivity
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_SHOULD_TERMINATE
|
||||
|
@ -76,7 +77,7 @@ class SettingsDetailsFragment : BasePreferenceFragment(), OnSharedPreferenceChan
|
|||
}
|
||||
|
||||
override fun onSharedPreferenceChanged(preferences: SharedPreferences, key: String) {
|
||||
val preference = findPreference(key) ?: return
|
||||
val preference = findPreference<Preference>(key) ?: return
|
||||
val currentActivity = activity ?: return
|
||||
val extras = preference.extras
|
||||
if (extras != null) {
|
||||
|
|
|
@ -54,6 +54,7 @@ import org.mariotaku.twidere.app.TwidereApplication
|
|||
import org.mariotaku.twidere.constant.newDocumentApiKey
|
||||
import org.mariotaku.twidere.extension.applyTheme
|
||||
import org.mariotaku.twidere.extension.model.api.microblog.toParcelable
|
||||
import org.mariotaku.twidere.extension.neutral
|
||||
import org.mariotaku.twidere.extension.onShow
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowInsetsCallback
|
||||
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback
|
||||
|
@ -405,6 +406,10 @@ class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
|||
builder.setTitle(userList.name)
|
||||
builder.setMessage(userList.description)
|
||||
builder.setPositiveButton(android.R.string.ok, null)
|
||||
builder.neutral(R.string.action_list_creator) {
|
||||
startActivity(IntentUtils.userProfile(userList.account_key, userList.user_key,
|
||||
userList.user_screen_name))
|
||||
}
|
||||
val dialog = builder.create()
|
||||
dialog.onShow { it.applyTheme() }
|
||||
return dialog
|
||||
|
|
|
@ -154,16 +154,16 @@ class ConversationLoader(
|
|||
if (loadReplies || noSinceMaxId || sinceId != null && sinceSortId > status.sort_id) {
|
||||
// Load replies
|
||||
var repliesLoaded = false
|
||||
try {
|
||||
if (details.type == AccountType.TWITTER) {
|
||||
if (noSinceMaxId) {
|
||||
statuses.addAll(loadTwitterWebReplies(details, twitter))
|
||||
}
|
||||
repliesLoaded = true
|
||||
}
|
||||
} catch (e: MicroBlogException) {
|
||||
// Ignore
|
||||
}
|
||||
// try {
|
||||
// if (details.type == AccountType.TWITTER) {
|
||||
// if (noSinceMaxId) {
|
||||
// statuses.addAll(loadTwitterWebReplies(details, twitter))
|
||||
// }
|
||||
// repliesLoaded = true
|
||||
// }
|
||||
// } catch (e: MicroBlogException) {
|
||||
// // Ignore
|
||||
// }
|
||||
if (!repliesLoaded) {
|
||||
val query = SearchQuery()
|
||||
query.count(100)
|
||||
|
|
|
@ -144,18 +144,14 @@ abstract class SaveFileTask(
|
|||
internal fun getFileNameWithExtension(name: String, extension: String?,
|
||||
specialCharacter: Char, suffix: String?): String {
|
||||
val sb = StringBuilder()
|
||||
var end = name.length
|
||||
if (extension != null) {
|
||||
if (name.endsWith(extension)) {
|
||||
for (i in end - extension.length - 1 downTo 0) {
|
||||
if (name[i] != specialCharacter) {
|
||||
end = i + 1
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
sb.append(name
|
||||
.removeSuffix(extension)
|
||||
.removeSuffix(".")
|
||||
.takeLastWhile { it != specialCharacter })
|
||||
} else {
|
||||
sb.append(name)
|
||||
}
|
||||
sb.append(name, 0, end)
|
||||
if (suffix != null) {
|
||||
sb.append(suffix)
|
||||
}
|
||||
|
|
|
@ -168,7 +168,7 @@ class GetMessagesTask(
|
|||
directMessage[DirectMessage::class.java.getDeclaredField("recipient")] = users.firstOrNull { user -> it.messageCreate.target.recipientId == user.id }
|
||||
directMessage[DirectMessage::class.java.getDeclaredField("createdAt")] = Date(it.createdTimestamp.toLong())
|
||||
}
|
||||
}.filter { it.sender != null }
|
||||
}.filter { it.sender != null && it.recipient != null }
|
||||
|
||||
val insertMessages = arrayListOf<ParcelableMessage>()
|
||||
val conversations = hashMapOf<String, ParcelableMessageConversation>()
|
||||
|
|
|
@ -72,7 +72,10 @@ class MessageViewHolder(itemView: View, adapter: MessagesConversationAdapter) :
|
|||
}
|
||||
messageBubble.setOutgoing(message.is_outgoing)
|
||||
|
||||
text.setTextColor(ThemeUtils.getColorDependent(messageBubble.bubbleColor.defaultColor))
|
||||
val bubbleColor = messageBubble.bubbleColor
|
||||
if (bubbleColor != null) {
|
||||
text.setTextColor(ThemeUtils.getColorDependent(bubbleColor.defaultColor))
|
||||
}
|
||||
|
||||
// Loop through text and spans to found non-space char count
|
||||
val hideText = run {
|
||||
|
@ -128,7 +131,11 @@ class MessageViewHolder(itemView: View, adapter: MessagesConversationAdapter) :
|
|||
const val layoutResource = R.layout.list_item_message_conversation_text
|
||||
|
||||
fun MessageBubbleView.setOutgoing(outgoing: Boolean) {
|
||||
setCaretPosition(if (outgoing) MessageBubbleView.TOP_END else MessageBubbleView.BOTTOM_START)
|
||||
caretPosition = if (outgoing) {
|
||||
MessageBubbleView.TOP or MessageBubbleView.END
|
||||
} else {
|
||||
MessageBubbleView.BOTTOM or MessageBubbleView.START
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,35 +62,41 @@
|
|||
app:caretHeight="@dimen/element_spacing_normal"
|
||||
app:caretPosition="bottomStart"
|
||||
app:caretWidth="@dimen/element_spacing_normal"
|
||||
app:cornerRadius="2dp">
|
||||
app:cornerRadius="2dp"
|
||||
app:wrapContentMaxWidthPercent="85%p">
|
||||
|
||||
<RelativeLayout
|
||||
<org.mariotaku.twidere.view.CardMediaContainer
|
||||
android:id="@+id/mediaPreview"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/mediaPreview"
|
||||
android:padding="@dimen/element_spacing_normal">
|
||||
android:layout_marginLeft="@dimen/element_spacing_normal"
|
||||
android:layout_marginRight="@dimen/element_spacing_normal"
|
||||
android:layout_marginTop="@dimen/element_spacing_normal"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
<org.mariotaku.twidere.view.CardMediaContainer
|
||||
android:id="@+id/mediaPreview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/element_spacing_normal"
|
||||
android:visibility="gone">
|
||||
<include layout="@layout/layout_card_media_preview"/>
|
||||
|
||||
<include layout="@layout/layout_card_media_preview"/>
|
||||
</org.mariotaku.twidere.view.CardMediaContainer>
|
||||
|
||||
</org.mariotaku.twidere.view.CardMediaContainer>
|
||||
|
||||
<org.mariotaku.twidere.view.TimelineContentTextView
|
||||
android:id="@+id/text"
|
||||
<android.widget.Space
|
||||
android:id="@+id/mediaTextSpace"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/mediaPreview"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
tools:text="@string/sample_status_text"/>
|
||||
android:layout_height="@dimen/element_spacing_normal"
|
||||
android:layout_below="@+id/mediaPreview"/>
|
||||
|
||||
<org.mariotaku.twidere.view.TimelineContentTextView
|
||||
android:id="@+id/text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/mediaTextSpace"
|
||||
android:layout_marginBottom="@dimen/element_spacing_normal"
|
||||
android:layout_marginLeft="@dimen/element_spacing_normal"
|
||||
android:layout_marginRight="@dimen/element_spacing_normal"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
tools:text="@string/sample_status_text"/>
|
||||
|
||||
</RelativeLayout>
|
||||
</org.mariotaku.messagebubbleview.library.MessageBubbleView>
|
||||
|
||||
<org.mariotaku.twidere.view.FixedTextView
|
||||
|
|
|
@ -78,6 +78,7 @@
|
|||
<string name="action_leave_conversation">Leave conversation</string>
|
||||
<!-- [verb] e.g. An action label on a tweet to like this tweet. Formerly Twitter favorite. -->
|
||||
<string name="action_like">Like</string>
|
||||
<string name="action_list_creator">List creator</string>
|
||||
<string name="action_location">Location</string>
|
||||
<string name="action_manage_in_buffer">Manage in Buffer</string>
|
||||
<string name="action_mark_as_read">Mark as read</string>
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<domain-config cleartextTrafficPermitted="true">
|
||||
<domain includeSubdomains="true">fanfou.com</domain>
|
||||
</domain-config>
|
||||
</network-security-config>
|
Loading…
Reference in New Issue