Bug 1580356 - Remove Fennec (Firefox for Android). r=snorp,mshal
This does many things: 1) stops producing (and consuming) `FennecJNI*` JNI wrappers 2) removes the :app and :thirdparty Gradle projects 3) removes relevant pieces of the Gradle target configuration 4) updates lints 5) purges old configurations After this commit, the `mobile/android` project/application builds only GeckoView. Differential Revision: https://phabricator.services.mozilla.com/D46536 --HG-- extra : moz-landing-system : lando
@ -140,7 +140,6 @@ media/webrtc/trunk/.*
|
||||
mfbt/double-conversion/double-conversion/.*
|
||||
mfbt/lz4/.*
|
||||
mobile/android/geckoview/src/thirdparty/.*
|
||||
mobile/android/thirdparty/.*
|
||||
modules/brotli/.*
|
||||
modules/fdlibm/.*
|
||||
modules/freetype2/.*
|
||||
|
76
build.gradle
@ -157,26 +157,6 @@ class MachExec extends Exec {
|
||||
}
|
||||
}
|
||||
|
||||
task machBuildGeneratedAndroidCodeAndResources(type: MachExec) {
|
||||
onlyIf rootProject.ext.geckoBinariesOnlyIf
|
||||
|
||||
workingDir "${topsrcdir}"
|
||||
|
||||
commandLine mozconfig.substs.PYTHON
|
||||
args "${topsrcdir}/mach"
|
||||
args 'build'
|
||||
args 'mobile/android/base/generated_android_code_and_resources'
|
||||
|
||||
// Add `-v` if we're running under `--info` (or `--debug`).
|
||||
if (project.logger.isEnabled(LogLevel.INFO)) {
|
||||
args '-v'
|
||||
}
|
||||
|
||||
// `path` is like `:machBuildGeneratedAndroidCodeAndResources`.
|
||||
standardOutput = new TaggedLogOutputStream("${path}>", logger)
|
||||
errorOutput = standardOutput
|
||||
}
|
||||
|
||||
// Why |mach build mobile/android/base/...| and |mach build faster|? |mach
|
||||
// build faster| generates dependentlibs.list, which in turn depends on compiled
|
||||
// code. That causes a circular dependency between Java compilation/JNI wrapper
|
||||
@ -243,43 +223,21 @@ createMachStagePackageTask("machStagePackageForGeckoview").with {
|
||||
|
||||
afterEvaluate {
|
||||
subprojects { project ->
|
||||
if (project.name != 'thirdparty') {
|
||||
tasks.withType(JavaCompile) {
|
||||
// Add compiler args for all code except third-party code.
|
||||
options.compilerArgs += [
|
||||
// Turn on all warnings, except...
|
||||
"-Xlint:all",
|
||||
// Deprecation, because we do use deprecated API for compatibility.
|
||||
"-Xlint:-deprecation",
|
||||
// Serial, because we don't use Java serialization.
|
||||
"-Xlint:-serial",
|
||||
// Classfile, because javac has a bug with MethodParameters attributes
|
||||
// with Java 7. https://bugs.openjdk.java.net/browse/JDK-8190452
|
||||
"-Xlint:-classfile",
|
||||
// Turn all remaining warnings into errors,
|
||||
// unless marked by @SuppressWarnings.
|
||||
"-Werror"]
|
||||
}
|
||||
if (project.name == 'app') {
|
||||
tasks.withType(JavaCompile) {
|
||||
// Turn off classfile warnings because upon updating to play services 15.0.0
|
||||
// a warning is being thrown from play-services-base which fails the build
|
||||
// (com/google/android/gms/common/api/GoogleApiClient.class):
|
||||
// warning: Cannot find annotation method 'value()' in type 'GuardedBy':
|
||||
// class file for javax.annotation.concurrent.GuardedBy not found
|
||||
options.compilerArgs += ["-Xlint:-classfile"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasProperty('android')) {
|
||||
return
|
||||
}
|
||||
android.applicationVariants.all {
|
||||
preBuild.dependsOn rootProject.machBuildGeneratedAndroidCodeAndResources
|
||||
}
|
||||
android.libraryVariants.all {
|
||||
preBuild.dependsOn rootProject.machBuildGeneratedAndroidCodeAndResources
|
||||
tasks.withType(JavaCompile) {
|
||||
// Add compiler args for all code except third-party code.
|
||||
options.compilerArgs += [
|
||||
// Turn on all warnings, except...
|
||||
"-Xlint:all",
|
||||
// Deprecation, because we do use deprecated API for compatibility.
|
||||
"-Xlint:-deprecation",
|
||||
// Serial, because we don't use Java serialization.
|
||||
"-Xlint:-serial",
|
||||
// Classfile, because javac has a bug with MethodParameters attributes
|
||||
// with Java 7. https://bugs.openjdk.java.net/browse/JDK-8190452
|
||||
"-Xlint:-classfile",
|
||||
// Turn all remaining warnings into errors,
|
||||
// unless marked by @SuppressWarnings.
|
||||
"-Werror"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -311,9 +269,5 @@ idea {
|
||||
excludeDirs += files(file(topobjdir).listFiles())
|
||||
excludeDirs -= file("${topobjdir}/gradle")
|
||||
}
|
||||
|
||||
if (!mozconfig.substs.MOZ_INSTALL_TRACKING) {
|
||||
excludeDirs += file("${topsrcdir}/mobile/android/thirdparty/com/adjust")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -171,8 +171,7 @@ accessible/xpcom/export: xpcom/xpidl/export
|
||||
widget/android/bindings/export: mobile/android/base/export
|
||||
|
||||
# The widget JNI wrapper generator code needs to build the GeckoView
|
||||
# and Fennec source code in order to find JNI wrapper annotations.
|
||||
widget/android/fennec/export: mobile/android/base/export
|
||||
# source code in order to find JNI wrapper annotations.
|
||||
widget/android/export: mobile/android/base/export
|
||||
|
||||
# .xpt generation needs the xpidl lex/yacc files
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include "mozilla/dom/nsCSPContext.h"
|
||||
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
# include "FennecJNIWrappers.h"
|
||||
# include "GeneratedJNIWrappers.h"
|
||||
#endif
|
||||
|
||||
namespace mozilla {
|
||||
@ -301,52 +301,52 @@ void WaitForLoad(const ClientOpenWindowArgs& aArgs,
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
|
||||
void GeckoViewOpenWindow(const ClientOpenWindowArgs& aArgs,
|
||||
ClientOpPromise::Private* aPromise) {
|
||||
|
||||
ClientOpPromise::Private* aPromise) {
|
||||
RefPtr<ClientOpPromise::Private> promise = aPromise;
|
||||
|
||||
// passes the request to open a new window to GeckoView. Allowing the application
|
||||
// to decide how to hand the open window request.
|
||||
auto genericResult = java::GeckoRuntime::ServiceWorkerOpenWindow(aArgs.baseURL(), aArgs.url());
|
||||
// passes the request to open a new window to GeckoView. Allowing the
|
||||
// application to decide how to hand the open window request.
|
||||
auto genericResult =
|
||||
java::GeckoRuntime::ServiceWorkerOpenWindow(aArgs.baseURL(), aArgs.url());
|
||||
auto typedResult = java::GeckoResult::LocalRef(std::move(genericResult));
|
||||
|
||||
// MozPromise containing the ID for the handling GeckoSession
|
||||
auto promiseResult = mozilla::MozPromise<nsString, nsString, false>::FromGeckoResult(typedResult);
|
||||
auto promiseResult =
|
||||
mozilla::MozPromise<nsString, nsString, false>::FromGeckoResult(
|
||||
typedResult);
|
||||
|
||||
promiseResult->Then(
|
||||
SystemGroup::EventTargetFor(TaskCategory::Other),
|
||||
__func__,
|
||||
[aArgs, promise](nsString sessionId){
|
||||
SystemGroup::EventTargetFor(TaskCategory::Other), __func__,
|
||||
[aArgs, promise](nsString sessionId) {
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIWindowWatcher> wwatch =
|
||||
do_GetService(NS_WINDOWWATCHER_CONTRACTID, &rv);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
promise->Reject(rv, __func__);
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIWindowWatcher> wwatch = do_GetService(NS_WINDOWWATCHER_CONTRACTID, &rv);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
promise->Reject(rv, __func__);
|
||||
return rv;
|
||||
}
|
||||
// Retrieve the window by using the GeckoSession ID. The window is named
|
||||
// the same as the ID of the GeckoSession it is associated with.
|
||||
nsCOMPtr<mozIDOMWindowProxy> domWindow;
|
||||
wwatch->GetWindowByName(sessionId, nullptr, getter_AddRefs(domWindow));
|
||||
if (!domWindow) {
|
||||
promise->Reject(NS_ERROR_FAILURE, __func__);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
// Retrieve the window by using the GeckoSession ID. The window is named the same as the ID of
|
||||
// the GeckoSession it is associated with.
|
||||
nsCOMPtr<mozIDOMWindowProxy> domWindow;
|
||||
wwatch->GetWindowByName(sessionId, nullptr, getter_AddRefs(domWindow));
|
||||
if (!domWindow) {
|
||||
promise->Reject(NS_ERROR_FAILURE, __func__);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
nsCOMPtr<nsPIDOMWindowOuter> outerWindow = do_QueryInterface(domWindow);
|
||||
if (NS_WARN_IF(!outerWindow)) {
|
||||
promise->Reject(NS_ERROR_FAILURE, __func__);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsPIDOMWindowOuter> outerWindow = do_QueryInterface(domWindow);
|
||||
if (NS_WARN_IF(!outerWindow)) {
|
||||
promise->Reject(NS_ERROR_FAILURE, __func__);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
WaitForLoad(aArgs, outerWindow, promise);
|
||||
return NS_OK;
|
||||
},
|
||||
[promise](nsString aResult){
|
||||
promise->Reject(NS_ERROR_FAILURE, __func__);
|
||||
}
|
||||
);
|
||||
WaitForLoad(aArgs, outerWindow, promise);
|
||||
return NS_OK;
|
||||
},
|
||||
[promise](nsString aResult) {
|
||||
promise->Reject(NS_ERROR_FAILURE, __func__);
|
||||
});
|
||||
}
|
||||
|
||||
class LaunchObserver final : public nsIObserver {
|
||||
@ -410,18 +410,9 @@ RefPtr<ClientOpPromise> ClientOpenWindowInCurrentProcess(
|
||||
new ClientOpPromise::Private(__func__);
|
||||
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
|
||||
// If we are on android but aren't Fennec, we must be GeckoView
|
||||
if (!jni::IsFennec()) {
|
||||
GeckoViewOpenWindow(aArgs, promise);
|
||||
return promise.forget();
|
||||
}
|
||||
|
||||
// This fires an intent that will start launching Fennec and foreground it,
|
||||
// if necessary. We create an observer so that we can determine when
|
||||
// the launch has completed.
|
||||
RefPtr<LaunchObserver> launchObserver = LaunchObserver::Create();
|
||||
java::GeckoApp::LaunchOrBringToFront();
|
||||
// If we are on Android we are GeckoView.
|
||||
GeckoViewOpenWindow(aArgs, promise);
|
||||
return promise.forget();
|
||||
#endif // MOZ_WIDGET_ANDROID
|
||||
|
||||
RefPtr<BrowsingContext> bc;
|
||||
@ -429,41 +420,6 @@ RefPtr<ClientOpPromise> ClientOpenWindowInCurrentProcess(
|
||||
|
||||
nsCOMPtr<nsPIDOMWindowOuter> outerWindow(bc->GetDOMWindow());
|
||||
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
// If we get the NOT_AVAILABLE error that means the browser is still
|
||||
// launching on android. Use the observer we created above to wait
|
||||
// until the launch completes and then try to open the window again.
|
||||
if (rv == NS_ERROR_NOT_AVAILABLE && launchObserver) {
|
||||
RefPtr<GenericPromise> p = launchObserver->Promise();
|
||||
p->Then(
|
||||
SystemGroup::EventTargetFor(TaskCategory::Other), __func__,
|
||||
[aArgs, promise](bool aResult) {
|
||||
RefPtr<BrowsingContext> bc;
|
||||
nsresult rv = OpenWindow(aArgs, getter_AddRefs(bc));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
promise->Reject(rv, __func__);
|
||||
return;
|
||||
}
|
||||
nsCOMPtr<nsPIDOMWindowOuter> outerWindow(bc->GetDOMWindow());
|
||||
if (NS_WARN_IF(!outerWindow)) {
|
||||
promise->Reject(NS_ERROR_FAILURE, __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
WaitForLoad(aArgs, outerWindow, promise);
|
||||
},
|
||||
[promise](nsresult aResult) { promise->Reject(aResult, __func__); });
|
||||
return promise.forget();
|
||||
}
|
||||
|
||||
// If we didn't get the NOT_AVAILABLE error then there is no need
|
||||
// wait for the browser to launch. Cancel the observer so that it
|
||||
// will release.
|
||||
if (launchObserver) {
|
||||
launchObserver->Cancel();
|
||||
}
|
||||
#endif // MOZ_WIDGET_ANDROID
|
||||
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
promise->Reject(rv, __func__);
|
||||
return promise.forget();
|
||||
|
@ -34,7 +34,6 @@
|
||||
#endif
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
# include "AndroidDecoderModule.h"
|
||||
# include "FennecJNIWrappers.h"
|
||||
# include "GeneratedJNIWrappers.h"
|
||||
#endif
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
#include "MediaDrmProxySupport.h"
|
||||
#include "mozilla/EMEUtils.h"
|
||||
#include "FennecJNINatives.h"
|
||||
#include "GeneratedJNINatives.h"
|
||||
#include "MediaCodec.h" // For MediaDrm::KeyStatus
|
||||
|
||||
using namespace mozilla::java;
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
#include "mozilla/DecryptorProxyCallback.h"
|
||||
#include "mozilla/Logging.h"
|
||||
#include "FennecJNIWrappers.h"
|
||||
#include "GeneratedJNIWrappers.h"
|
||||
#include "nsString.h"
|
||||
|
||||
namespace mozilla {
|
||||
|
@ -9,7 +9,7 @@
|
||||
#include "PlatformEncoderModule.h"
|
||||
#include "TimeUnits.h"
|
||||
|
||||
#include "FennecJNIWrappers.h"
|
||||
#include "GeneratedJNIWrappers.h"
|
||||
#include "JavaCallbacksSupport.h"
|
||||
|
||||
#include "mozilla/Maybe.h"
|
||||
|
@ -6,7 +6,7 @@
|
||||
#define RemoteDataDecoder_h_
|
||||
|
||||
#include "AndroidDecoderModule.h"
|
||||
#include "FennecJNIWrappers.h"
|
||||
#include "GeneratedJNIWrappers.h"
|
||||
#include "SurfaceTexture.h"
|
||||
#include "TimeUnits.h"
|
||||
#include "mozilla/Maybe.h"
|
||||
|
@ -7,7 +7,6 @@
|
||||
#include "OSPreferences.h"
|
||||
#include "mozilla/Preferences.h"
|
||||
|
||||
#include "FennecJNIWrappers.h"
|
||||
#include "GeneratedJNIWrappers.h"
|
||||
|
||||
using namespace mozilla::intl;
|
||||
@ -24,9 +23,7 @@ bool OSPreferences::ReadSystemLocales(nsTArray<nsCString>& aLocaleList) {
|
||||
// XXX: Notice, this value may be empty on an early read. In that case
|
||||
// we won't add anything to the return list so that it doesn't get
|
||||
// cached in mSystemLocales.
|
||||
auto locales = mozilla::jni::IsFennec()
|
||||
? java::BrowserLocaleManager::GetLocales()
|
||||
: java::GeckoAppShell::GetDefaultLocales();
|
||||
auto locales = java::GeckoAppShell::GetDefaultLocales();
|
||||
if (locales) {
|
||||
for (size_t i = 0; i < locales->Length(); i++) {
|
||||
jni::String::LocalRef locale = locales->GetElement(i);
|
||||
|
@ -1,525 +0,0 @@
|
||||
buildDir "${topobjdir}/gradle/build/mobile/android/app"
|
||||
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'checkstyle'
|
||||
apply plugin: 'findbugs'
|
||||
|
||||
if (mozconfig.substs.MOZILLA_OFFICIAL) {
|
||||
apply plugin: 'com.getkeepsafe.dexcount'
|
||||
}
|
||||
|
||||
apply from: "${topsrcdir}/mobile/android/gradle/product_flavors.gradle"
|
||||
|
||||
if (mozconfig.substs.MOZILLA_OFFICIAL) {
|
||||
dexcount {
|
||||
format = "tree"
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion project.ext.compileSdkVersion
|
||||
|
||||
useLibrary 'android.test.runner'
|
||||
useLibrary 'android.test.base'
|
||||
useLibrary 'android.test.mock'
|
||||
|
||||
defaultConfig {
|
||||
targetSdkVersion project.ext.targetSdkVersion
|
||||
minSdkVersion project.ext.minSdkVersion
|
||||
manifestPlaceholders = project.ext.manifestPlaceholders
|
||||
|
||||
applicationId mozconfig.substs.ANDROID_PACKAGE_NAME
|
||||
// Used by Robolectric based tests; see TestRunner.
|
||||
buildConfigField 'String', 'BUILD_DIR', "\"${project.buildDir}\"".tr(File.separator, "/")
|
||||
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
multiDexEnabled true
|
||||
}
|
||||
|
||||
aaptOptions {
|
||||
// The omnijar is already a compressed file itself and Gecko expects it to be
|
||||
// STORED within the APK rather than DEFLATED.
|
||||
noCompress 'ja'
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
dexOptions {
|
||||
javaMaxHeapSize "6g"
|
||||
jumboMode = true
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
abortOnError true
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
// We have the following difficult situation. Minification (Proguard) is only available per
|
||||
// Android-Gradle `buildType`. Instrumentation (Robocop) is only available for exactly one
|
||||
// `buildType` (see Android-Gradle `testBuildType`, which defaults to "debug"). Local
|
||||
// developers expect to build and run tests against the "debug" build type. Automation
|
||||
// needs to produce an instrumentation (Robocop) APK against a Fennec APK that will ship.
|
||||
// (This is very unusual; usually, instrumentation tests do _not_ run against a shipping
|
||||
// APK.)
|
||||
//
|
||||
// Given these constraints, we should not change `testBuildType` to avoid confusing local
|
||||
// developers. Also, we should not Proguard any "debug" builds, because we don't want local
|
||||
// developers to incur the cost of Proguard. However, we still need to find a way to
|
||||
// Proguard a shipping APK and produce an instrumentation (Robocop APK) against it. To
|
||||
// achieve this, we make "debug" builds Proguard in automation alone. This does have the
|
||||
// unfortunate side effect of Proguarding the instrumentation (Robocop) APK, but nothing
|
||||
// uses runtime inspection or class-loading with that APK, so it shouldn't be a problem.
|
||||
def configureMinifyClosure = {
|
||||
// Bug 1229269: we can't yet shrinkResources effectively. Be sure
|
||||
// to use -stripped.ap_ after enabling this.
|
||||
// shrinkResources true
|
||||
minifyEnabled true
|
||||
proguardFile "${topsrcdir}/mobile/android/config/proguard/proguard.cfg"
|
||||
}
|
||||
release configureMinifyClosure
|
||||
if (mozconfig.substs.MOZILLA_OFFICIAL) {
|
||||
debug configureMinifyClosure
|
||||
}
|
||||
|
||||
def isDebuggable = (!mozconfig.substs.MOZILLA_OFFICIAL) || (mozconfig.substs.NIGHTLY_BUILD && mozconfig.substs.MOZ_DEBUG)
|
||||
debug {
|
||||
debuggable isDebuggable
|
||||
}
|
||||
release {
|
||||
debuggable isDebuggable
|
||||
}
|
||||
}
|
||||
|
||||
project.configureProductFlavors.delegate = it
|
||||
project.configureProductFlavors()
|
||||
|
||||
flavorDimensions "geckoBinaries"
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
aidl {
|
||||
srcDir "${topsrcdir}/mobile/android/base/aidl"
|
||||
}
|
||||
|
||||
java {
|
||||
srcDir "${topsrcdir}/mobile/android/base/java"
|
||||
srcDir "${topsrcdir}/mobile/android/services/src/main/java"
|
||||
|
||||
if (mozconfig.substs.MOZ_ANDROID_MLS_STUMBLER) {
|
||||
srcDir "${topsrcdir}/mobile/android/stumbler/java"
|
||||
}
|
||||
|
||||
if (!mozconfig.substs.MOZ_CRASHREPORTER) {
|
||||
exclude 'org/mozilla/gecko/CrashReporterActivity.java'
|
||||
exclude 'org/mozilla/gecko/CrashHandlerService.java'
|
||||
}
|
||||
|
||||
if (!mozconfig.substs.MOZ_NATIVE_DEVICES) {
|
||||
exclude 'org/mozilla/gecko/ChromeCastDisplay.java'
|
||||
exclude 'org/mozilla/gecko/ChromeCastPlayer.java'
|
||||
exclude 'org/mozilla/gecko/GeckoMediaPlayer.java'
|
||||
exclude 'org/mozilla/gecko/GeckoPresentationDisplay.java'
|
||||
exclude 'org/mozilla/gecko/MediaPlayerManager.java'
|
||||
exclude 'org/mozilla/gecko/RemotePresentationService.java'
|
||||
exclude 'org/mozilla/gecko/VirtualPresentation.java'
|
||||
}
|
||||
|
||||
if (mozconfig.substs.MOZ_INSTALL_TRACKING) {
|
||||
exclude 'org/mozilla/gecko/adjust/StubAdjustHelper.java'
|
||||
} else {
|
||||
exclude 'org/mozilla/gecko/adjust/AdjustHelper.java'
|
||||
}
|
||||
|
||||
if (mozconfig.substs.MOZ_ANDROID_MMA) {
|
||||
exclude 'org/mozilla/gecko/mma/MmaStubImp.java'
|
||||
} else {
|
||||
exclude 'org/mozilla/gecko/mma/MmaLeanplumImp.java'
|
||||
exclude 'org/mozilla/gecko/mma/LeanplumVariables.java'
|
||||
}
|
||||
|
||||
if (!mozconfig.substs.MOZ_ANDROID_GCM) {
|
||||
exclude 'org/mozilla/gecko/gcm/**/*.java'
|
||||
exclude 'org/mozilla/gecko/push/**/*.java'
|
||||
exclude 'org/mozilla/gecko/advertising/**'
|
||||
}
|
||||
|
||||
if (!mozconfig.substs.MOZ_ANDROID_GOOGLE_PLAY_SERVICES) {
|
||||
exclude 'org/mozilla/gecko/util/WebAuthnUtils.java'
|
||||
}
|
||||
}
|
||||
|
||||
res {
|
||||
srcDir "${topsrcdir}/${mozconfig.substs.MOZ_BRANDING_DIRECTORY}/res"
|
||||
srcDir "${topsrcdir}/mobile/android/services/src/main/res"
|
||||
if (mozconfig.substs.MOZ_CRASHREPORTER) {
|
||||
srcDir "${topsrcdir}/mobile/android/base/crashreporter/res"
|
||||
}
|
||||
}
|
||||
|
||||
assets {
|
||||
if (mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY) {
|
||||
srcDir "${mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY}/assets"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
test {
|
||||
java {
|
||||
// Bug 1229149 tracks pushing this into a :services Gradle project.
|
||||
srcDir "${topsrcdir}/mobile/android/services/src/test/java"
|
||||
|
||||
if (!mozconfig.substs.MOZ_ANDROID_GCM) {
|
||||
exclude 'org/mozilla/gecko/gcm/**/*.java'
|
||||
exclude 'org/mozilla/gecko/push/**/*.java'
|
||||
exclude 'org/mozilla/gecko/advertising/**'
|
||||
}
|
||||
}
|
||||
resources {
|
||||
// Bug 1229149 tracks pushing this into a :services Gradle project.
|
||||
srcDir "${topsrcdir}/mobile/android/services/src/test/resources"
|
||||
}
|
||||
}
|
||||
|
||||
androidTest {
|
||||
java {
|
||||
// Bug 1229149 tracks pushing this into a :services Gradle project.
|
||||
srcDir "${topsrcdir}/mobile/android/services/src/androidTest/java"
|
||||
srcDir "${topsrcdir}/mobile/android/tests/browser/junit3/src"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
testOptions {
|
||||
// For Robolectric: see https://github.com/robolectric/robolectric/issues/3333#issuecomment-324300418.
|
||||
unitTests.includeAndroidResources true
|
||||
|
||||
unitTests.all {
|
||||
// We'd like to use (Runtime.runtime.availableProcessors()/2), but
|
||||
// we have tests that start test servers and the bound ports
|
||||
// collide. We'll fix this soon to have much faster test cycles.
|
||||
maxParallelForks 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "com.android.support:support-v4:$support_library_version"
|
||||
implementation "com.android.support:appcompat-v7:$support_library_version"
|
||||
implementation "com.android.support:cardview-v7:$support_library_version"
|
||||
implementation "com.android.support:recyclerview-v7:$support_library_version"
|
||||
implementation "com.android.support:design:$support_library_version"
|
||||
implementation "com.android.support:customtabs:$support_library_version"
|
||||
implementation "com.android.support:palette-v7:$support_library_version"
|
||||
|
||||
// We always include support for multidexing even when we don't enable it at runtime.
|
||||
// We could conditionally include support, but we'd need
|
||||
// to generate the `Application` class or fork the file on disk.
|
||||
implementation "com.android.support:multidex:1.0.3"
|
||||
|
||||
if (mozconfig.substs.MOZ_NATIVE_DEVICES) {
|
||||
implementation "com.android.support:mediarouter-v7:$support_library_version"
|
||||
implementation "com.google.android.gms:play-services-basement:$google_play_services_version"
|
||||
implementation "com.google.android.gms:play-services-base:$google_play_services_version"
|
||||
implementation "com.google.android.gms:play-services-cast:$google_play_services_cast_version"
|
||||
}
|
||||
|
||||
if (mozconfig.substs.MOZ_INSTALL_TRACKING) {
|
||||
implementation "com.google.android.gms:play-services-ads-identifier:$google_play_services_version"
|
||||
implementation "com.google.android.gms:play-services-basement:$google_play_services_version"
|
||||
}
|
||||
|
||||
if (mozconfig.substs.MOZ_ANDROID_GCM) {
|
||||
implementation "com.google.android.gms:play-services-basement:$google_play_services_version"
|
||||
implementation "com.google.android.gms:play-services-base:$google_play_services_version"
|
||||
implementation "com.google.android.gms:play-services-gcm:$google_play_services_version"
|
||||
implementation "com.google.android.gms:play-services-ads-identifier:$google_play_services_version"
|
||||
implementation "org.mindrot:jbcrypt:0.4"
|
||||
}
|
||||
|
||||
if (mozconfig.substs.MOZ_ANDROID_GOOGLE_PLAY_SERVICES) {
|
||||
implementation "com.google.android.gms:play-services-fido:$google_play_services_fido_version"
|
||||
}
|
||||
|
||||
// Include LeakCanary in local builds, but not in official builds.
|
||||
if (mozconfig.substs.MOZILLA_OFFICIAL) {
|
||||
implementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta1'
|
||||
} else {
|
||||
implementation 'com.squareup.leakcanary:leakcanary-android:1.4-beta1'
|
||||
}
|
||||
testImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta1'
|
||||
|
||||
implementation project(path: ':geckoview')
|
||||
implementation project(path: ':thirdparty')
|
||||
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation 'org.robolectric:robolectric:4.3'
|
||||
testImplementation 'org.simpleframework:simple-http:6.0.1'
|
||||
testImplementation 'org.mockito:mockito-core:1.10.19'
|
||||
}
|
||||
|
||||
// TODO: (bug 1261486): This impl is not robust -
|
||||
// we just wanted to land something.
|
||||
task checkstyle(type: Checkstyle) {
|
||||
configFile file("checkstyle.xml")
|
||||
// TODO: should use sourceSets from project instead of hard-coded str.
|
||||
source = ['../base/java/','../geckoview/src/main/java/']
|
||||
// TODO: This ignores our pre-processed resources.
|
||||
include '**/*.java'
|
||||
// TODO: classpath should probably be something.
|
||||
classpath = files()
|
||||
}
|
||||
|
||||
// The localization system uses the moz.build preprocessor to interpolate a .dtd
|
||||
// file of XML entity definitions into an XML file of elements referencing those
|
||||
// entities. (Each locale produces its own .dtd file, backstopped by the en-US
|
||||
// .dtd file in tree.) Android Studio (and IntelliJ) don't handle these inline
|
||||
// entities smoothly. This filter merely expands the entities in place, making
|
||||
// them appear properly throughout the IDE. Be aware that this assumes that the
|
||||
// JVM's file.encoding is utf-8. See comments in
|
||||
// mobile/android/mach_commands.py.
|
||||
class ExpandXMLEntitiesFilter extends FilterReader {
|
||||
ExpandXMLEntitiesFilter(Reader input) {
|
||||
// Extremely inefficient, but whatever.
|
||||
super(new StringReader(groovy.xml.XmlUtil.serialize(new XmlParser(false, false, true).parse(input))))
|
||||
}
|
||||
}
|
||||
|
||||
apply from: "${topsrcdir}/mobile/android/gradle/with_gecko_binaries.gradle"
|
||||
|
||||
android.applicationVariants.all { variant ->
|
||||
def syncPreprocessedJava = task("syncPreprocessedJavaFor${variant.name.capitalize()}", type: Sync) {
|
||||
into("${project.buildDir}/moz.build/src/${variant.name}/java")
|
||||
from("${topobjdir}/mobile/android/base/generated/preprocessed")
|
||||
exclude('**/*.mkdir.done')
|
||||
}
|
||||
// This is an Android-Gradle plugin 3+-ism. Culted from reading the source,
|
||||
// searching for "registerJavaGeneratingTask", and finding
|
||||
// https://github.com/GoogleCloudPlatform/endpoints-framework-gradle-plugin/commit/2f2b91476fb1c6647791e2c6fe531a47615a1e85.
|
||||
// The added directory doesn't appear in the paths listed by the
|
||||
// `sourceSets` task, for reasons unknown.
|
||||
variant.registerJavaGeneratingTask(syncPreprocessedJava, syncPreprocessedJava.destinationDir)
|
||||
|
||||
def syncPreprocessedRes = task("syncPreprocessedResFor${variant.name.capitalize()}", type: Sync) {
|
||||
into("${project.buildDir}/moz.build/src/${variant.name}/res")
|
||||
from("${topobjdir}/mobile/android/base/res")
|
||||
filesMatching('**/strings.xml') {
|
||||
filter(ExpandXMLEntitiesFilter)
|
||||
}
|
||||
exclude('**/*.mkdir.done')
|
||||
|
||||
// Bug 1478411: We want to turn XML entity expansion errors into the "error:" strings that
|
||||
// Tree Herder parses. It's surprisingly difficult to do useful things with exceptions in a
|
||||
// filter, but it appears that something deep in the XML parser prints errors to stderr, so
|
||||
// we amplify those error outputs to achieve the goal.
|
||||
def listener = {
|
||||
def matches = (it =~ /\[Fatal Error\] +(.*)/)
|
||||
if (matches) {
|
||||
def (_, message) = matches[0]
|
||||
logger.lifecycle "error: ${topobjdir}/mobile/android/base/res/values/strings.xml${message}"
|
||||
}
|
||||
} as StandardOutputListener
|
||||
|
||||
doFirst {
|
||||
logging.addStandardErrorListener(listener)
|
||||
}
|
||||
doLast {
|
||||
logging.removeStandardErrorListener(listener)
|
||||
}
|
||||
}
|
||||
|
||||
// This is an Android-Gradle plugin 3+-ism. Determined by reading the
|
||||
// source. The added directory doesn't appear in the paths listed by the
|
||||
// `sourceSets` task, for reasons unknown.
|
||||
variant.registerGeneratedResFolders(project.files(syncPreprocessedRes.destinationDir).builtBy(syncPreprocessedRes))
|
||||
|
||||
// It's not easy -- see the backout in Bug 1242213 -- to change the
|
||||
// <manifest> package for Fennec. Gradle has grown a mechanism to achieve
|
||||
// what we want for Fennec, however, with applicationId. To use the same
|
||||
// manifest as moz.build, we replace the package with org.mozilla.gecko (the
|
||||
// eventual package) here.
|
||||
def rewriteManifestPackage = task("rewriteManifestPackageFor${variant.name.capitalize()}", type: Copy, dependsOn: rootProject.machBuildGeneratedAndroidCodeAndResources) {
|
||||
into("${project.buildDir}/moz.build/src/${variant.name}")
|
||||
from("${topobjdir}/mobile/android/base/AndroidManifest.xml")
|
||||
filter { it.replaceFirst(/package=".*?"/, 'package="org.mozilla.gecko"') }
|
||||
exclude('**/*.mkdir.done')
|
||||
}
|
||||
|
||||
// Every configuration needs the stub manifest at
|
||||
// src/main/AndroidManifest.xml and the generated manifest. We can't use
|
||||
// the main sourceSet without losing the stub, so we cover all the
|
||||
// configurations here.
|
||||
android.sourceSets."${variant.name}".manifest.srcFile "${rewriteManifestPackage.destinationDir}/AndroidManifest.xml"
|
||||
variant.preBuildProvider.configure {
|
||||
dependsOn rewriteManifestPackage
|
||||
}
|
||||
|
||||
// Local (read, not 'official') builds want to reflect developer changes to
|
||||
// AndroidManifest.xml.in, strings.xml, and preprocessed Java code. To do
|
||||
// this, the Gradle build calls out to the moz.build system, which can be
|
||||
// re-entrant. Official builds are driven by the moz.build system and
|
||||
// should never be re-entrant in this way.
|
||||
if (!mozconfig.substs.MOZILLA_OFFICIAL) {
|
||||
syncPreprocessedJava.dependsOn rootProject.machBuildGeneratedAndroidCodeAndResources
|
||||
syncPreprocessedRes.dependsOn rootProject.machBuildGeneratedAndroidCodeAndResources
|
||||
rewriteManifestPackage.dependsOn rootProject.machBuildGeneratedAndroidCodeAndResources
|
||||
}
|
||||
|
||||
// When driven from moz.build via |mach build|, Gradle does not require or
|
||||
// use Gecko binaries. It's only |mach package| that packs the Gecko
|
||||
// binaries into the resulting APK. The "withoutGeckoBinaries" variants
|
||||
// handle this. When driven from Android Studio or Gradle, the
|
||||
// "withGeckoBinaries" variants handle packing the Gecko binaries into the
|
||||
// resulting APK (for on-device deployment). They also update the Omnijars
|
||||
// as necessary, smoothing out the edit-compile-test development cycle.
|
||||
// They do what they say on the tin!
|
||||
if ((variant.productFlavors*.name).contains('withGeckoBinaries')) {
|
||||
configureVariantWithGeckoBinaries(variant)
|
||||
}
|
||||
}
|
||||
|
||||
android.applicationVariants.all { variant ->
|
||||
if (variant.name == mozconfig.substs.GRADLE_ANDROID_APP_VARIANT_NAME) {
|
||||
configureApplicationVariantWithJNIWrappers(variant, "Fennec")
|
||||
}
|
||||
}
|
||||
|
||||
if (gradle.startParameter.taskNames.any { it.endsWith('UnitTest') }) {
|
||||
// Approach cribbed from https://github.com/rwinch/jce-checker.
|
||||
int maxKeyLen = javax.crypto.Cipher.getMaxAllowedKeyLength("AES")
|
||||
if (maxKeyLen <= 128) {
|
||||
throw new GradleException(
|
||||
"Android unit tests require " +
|
||||
"Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy, see " +
|
||||
"http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html")
|
||||
}
|
||||
}
|
||||
|
||||
// Bug 1320035: Gradle configuration for running findbugs. Findbugs only allows
|
||||
// to generate one report per invocation: https://stackoverflow.com/a/42720235.
|
||||
// Run two tasks, accepting the cost of duplicate work.
|
||||
android.applicationVariants.all { variant ->
|
||||
def jarTask = tasks["bundle${variant.name.capitalize()}Classes"]
|
||||
def bundleJar = jarTask.outputs.files.find({ it.name == 'classes.jar' })
|
||||
|
||||
task("findbugsHtml${variant.name.capitalize()}", type: FindBugs) {
|
||||
outputs.upToDateWhen { false } // We always want to re-run findbugs when asked.
|
||||
|
||||
// TODO: figure out how to share the shared configuration.
|
||||
description "Analyze ${variant.name} code with findbugs (HTML report)"
|
||||
group "Verification"
|
||||
|
||||
ignoreFailures = false // We want builds to fail when running this task and issues are found
|
||||
effort = "max" // Using more memory and time to find issues is acceptable in automation
|
||||
reportLevel = "high" // For now we only care about high priority bugs. After we have fixed
|
||||
// the issues with medium/low priority we can lower the report level here.
|
||||
|
||||
classes = files(bundleJar)
|
||||
source = variant.javaCompileProvider.get().source
|
||||
classpath = variant.javaCompileProvider.get().classpath + files(android.bootClasspath)
|
||||
|
||||
excludeFilter = file("findbugs-exclude.xml")
|
||||
dependsOn jarTask
|
||||
|
||||
reports {
|
||||
html.enabled = true // HTML reports for humans.
|
||||
html.destination = file("$project.buildDir/reports/findbugs/findbugs-${variant.name}-output.html")
|
||||
xml.enabled = false
|
||||
}
|
||||
}
|
||||
|
||||
task("findbugsXml${variant.name.capitalize()}", type: FindBugs) {
|
||||
outputs.upToDateWhen { false } // We always want to re-run findbugs when asked.
|
||||
|
||||
// TODO: figure out how to share the shared configuration.
|
||||
description "Analyze ${variant.name} code with findbugs (XML report)"
|
||||
group "Verification"
|
||||
|
||||
ignoreFailures = false // We want builds to fail when running this task and issues are found
|
||||
effort = "max" // Using more memory and time to find issues is acceptable in automation
|
||||
reportLevel = "high" // For now we only care about high priority bugs. After we have fixed
|
||||
// the issues with medium/low priority we can lower the report level here.
|
||||
|
||||
classes = files(bundleJar)
|
||||
source = variant.javaCompileProvider.get().source
|
||||
classpath = variant.javaCompileProvider.get().classpath + files(android.bootClasspath)
|
||||
|
||||
excludeFilter = file("findbugs-exclude.xml")
|
||||
dependsOn jarTask
|
||||
|
||||
reports {
|
||||
xml.enabled = true // XML reports for machines.
|
||||
xml.destination = file("$project.buildDir/reports/findbugs/findbugs-${variant.name}-output.xml")
|
||||
html.enabled = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Bug 1353055 - Strip 'vars' debugging information to agree with moz.build.
|
||||
apply from: "${topsrcdir}/mobile/android/gradle/debug_level.gradle"
|
||||
android.applicationVariants.all configureVariantDebugLevel
|
||||
|
||||
|
||||
// Bug 1320310 - Hack up the manifest produced by Gradle to match that produced
|
||||
// by moz.build. Per https://bugzilla.mozilla.org/show_bug.cgi?id=1320310#c14,
|
||||
// this breaks launching in Android Studio; therefore, we only do this for
|
||||
// official automation builds and not for local developer builds.
|
||||
import groovy.xml.XmlUtil
|
||||
|
||||
// Workaround for fixing sub-dependencies upon gradle error:
|
||||
// All gms/firebase (except play-services-cast since it has sub-dependencies in 15.0.0)
|
||||
// libraries must use the exact same version specification (mixing versions can
|
||||
// lead to runtime crashes). Found versions 15.0.1, 15.0.0. Examples include
|
||||
// com.google.android.gms:play-services-base:15.0.1 and com.google.android.gms:play-services-basement:15.0.0
|
||||
configurations.all {
|
||||
resolutionStrategy {
|
||||
eachDependency { DependencyResolveDetails details ->
|
||||
if (details.requested.group == 'com.google.android.gms'
|
||||
&& details.requested.name != 'play-services-cast'
|
||||
&& details.requested.name != 'play-services-fido') {
|
||||
details.useVersion "$google_play_services_version"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
android.applicationVariants.all { variant ->
|
||||
if (!mozconfig.substs.MOZILLA_OFFICIAL) {
|
||||
return
|
||||
}
|
||||
|
||||
variant.outputs.each { output ->
|
||||
output.processManifest.doLast {
|
||||
[file("${manifestOutputDirectory}/AndroidManifest.xml"),
|
||||
].each({ File manifestOutFile ->
|
||||
if (manifestOutFile.exists()) {
|
||||
def contents = manifestOutFile.getText('UTF-8')
|
||||
|
||||
// A non-validating, non-namespace aware XML processor.
|
||||
def xml = new XmlSlurper(false, false).parseText(contents)
|
||||
|
||||
// First, reinstate our <activity-alias android:name=".App">.
|
||||
xml.depthFirst()
|
||||
.findAll { it.name() == 'activity-alias' && it.'@android:name' == 'org.mozilla.gecko.App' }
|
||||
.each { it.'@android:name' = '.App' }
|
||||
|
||||
manifestOutFile.write(XmlUtil.serialize(xml), 'UTF-8')
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Bug 1415298: make Robolectric find assets. Fix adapted from
|
||||
// https://github.com/robolectric/robolectric/issues/2647.
|
||||
android.applicationVariants.all { variant ->
|
||||
def productFlavor = ""
|
||||
variant.productFlavors.each {
|
||||
productFlavor += "${it.name.capitalize()}"
|
||||
}
|
||||
def buildType = "${variant.buildType.name.capitalize()}"
|
||||
tasks["compile${productFlavor}${buildType}UnitTestSources"].dependsOn(tasks["merge${productFlavor}${buildType}Assets"])
|
||||
}
|
||||
|
@ -1,63 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<!DOCTYPE module PUBLIC
|
||||
"-//Puppy Crawl//DTD Check Configuration 1.2//EN"
|
||||
"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
|
||||
|
||||
<!-- TODO: Clean up code & add checks:
|
||||
- WhitespaceAround
|
||||
- EmptyLineSeparator
|
||||
- NeedBraces
|
||||
- LeftCurly // placement of "{" in new scope or literal
|
||||
- RightCurly // placement of "}" in close scope or literal
|
||||
- Indentation
|
||||
- OneStatementPerLine
|
||||
- OperatorWrap
|
||||
- SeparatorWrap
|
||||
- MultipleVariableDeclarations
|
||||
- FallThrough
|
||||
(I spent too much time already)
|
||||
|
||||
Maybe add:
|
||||
- OverloadMethodsDeclarationOrder
|
||||
- Empty*Block // better to catch errors!
|
||||
(I spent too much time already)
|
||||
|
||||
See http://checkstyle.sourceforge.net/google_style.html
|
||||
for a good set of defaults.
|
||||
-->
|
||||
|
||||
<module name="Checker">
|
||||
<property name="charset" value="UTF-8"/>
|
||||
|
||||
<!-- TODO: <property name="fileExtensions" value="java, properties, xml"/> -->
|
||||
|
||||
<module name="FileTabCharacter"> <!-- No tabs! -->
|
||||
<property name="eachLine" value="true"/>
|
||||
</module>
|
||||
<module name="RegexpSingleline"> <!-- excess whitespace -->
|
||||
<property name="format" value="\s+$"/>
|
||||
<property name="message" value="Trailing whitespace"/>
|
||||
</module>
|
||||
|
||||
<module name="TreeWalker">
|
||||
<module name="GenericWhitespace"/> <!-- whitespace for generics -->
|
||||
<module name="NoLineWrap">
|
||||
<property name="tokens" value="IMPORT,PACKAGE_DEF"/>
|
||||
</module>
|
||||
<module name="OuterTypeFilename"/> <!-- `class Lol` only in Lol.java -->
|
||||
<module name="WhitespaceAfter">
|
||||
<!-- TODO: (bug 1263059) Remove specific tokens to enable CAST check. -->
|
||||
<property name="tokens" value="COMMA, SEMI"/>
|
||||
</module>
|
||||
<module name="WhitespaceAround">
|
||||
<property name="allowEmptyConstructors" value="true"/>
|
||||
<property name="allowEmptyMethods" value="true"/>
|
||||
<property name="allowEmptyTypes" value="true"/>
|
||||
</module>
|
||||
<module name="OneTopLevelClass"/>
|
||||
</module>
|
||||
|
||||
</module>
|
@ -1,68 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<FindBugsFilter>
|
||||
|
||||
<!-- Bug 1316008 -->
|
||||
<Match>
|
||||
<Bug pattern="DM_DEFAULT_ENCODING" />
|
||||
</Match>
|
||||
|
||||
<!-- Bug 1320298 -->
|
||||
<Match>
|
||||
<Bug pattern="MS_MUTABLE_ARRAY" />
|
||||
</Match>
|
||||
|
||||
<!-- Bug 1316009 -->
|
||||
<Match>
|
||||
<Bug pattern="MS_SHOULD_BE_FINAL" />
|
||||
</Match>
|
||||
|
||||
<!-- Bug 1316010 -->
|
||||
<Match>
|
||||
<Bug pattern="UL_UNRELEASED_LOCK" />
|
||||
</Match>
|
||||
|
||||
<!-- Bug 1316021 -->
|
||||
<Match>
|
||||
<Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
|
||||
</Match>
|
||||
|
||||
<!-- Bug 1320316 -->
|
||||
<Match>
|
||||
<Bug pattern="DM_BOXED_PRIMITIVE_TOSTRING" />
|
||||
</Match>
|
||||
<Match>
|
||||
<Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" />
|
||||
</Match>
|
||||
<Match>
|
||||
<Bug pattern="NP_NULL_ON_SOME_PATH" />
|
||||
</Match>
|
||||
<Match>
|
||||
<Bug pattern="NP_NULL_PARAM_DEREF_NONVIRTUAL" />
|
||||
</Match>
|
||||
|
||||
<!-- We explicitly want to swallow exceptions in releaseProviders() (Bug 1315982) -->
|
||||
<Match>
|
||||
<Class name="org.mozilla.gecko.sync.repositories.android.FennecTabsRepository$FennecTabsRepositorySession" />
|
||||
<Method name="releaseProviders" />
|
||||
<Bug pattern="DE_MIGHT_IGNORE" />
|
||||
</Match>
|
||||
|
||||
<!-- Ignore false positive in SerialRecordConsumer (Bug 1316011) -->
|
||||
<Match>
|
||||
<Class name="org.mozilla.gecko.sync.synchronizer.SerialRecordConsumer" />
|
||||
<Method name="stored" />
|
||||
<Bug pattern="VO_VOLATILE_INCREMENT" />
|
||||
</Match>
|
||||
|
||||
<!-- FindBugs doesn't like the resource classes provided by both ourselves, and the android
|
||||
support libraries. -->
|
||||
<Match>
|
||||
<Class name="~.*\.R\$.*"/>
|
||||
</Match>
|
||||
<Match>
|
||||
<Class name="~.*\.Manifest\$.*"/>
|
||||
</Match>
|
||||
</FindBugsFilter>
|
@ -1,271 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<lint>
|
||||
<!-- Enable relevant checks disabled by default -->
|
||||
<issue id="NegativeMargin" severity="warning" />
|
||||
|
||||
<!-- We have a custom menu and don't conform to the recommended styles. -->
|
||||
<issue id="IconColors" severity="ignore" />
|
||||
|
||||
<!-- We use our own preprocessing to either add or remove
|
||||
`android:debuggable` when building with mach so it's
|
||||
not actually hard-coded. We can probably remove this
|
||||
warning when we switch to gradle. -->
|
||||
<issue id="HardcodedDebugMode" severity="ignore" />
|
||||
|
||||
<!-- We have our own l10n system & don't use the platform's plurals. -->
|
||||
<issue id="PluralsCandidate" severity="ignore" />
|
||||
|
||||
<!-- We don't want to have to follow the SDK release schedule: we can keep
|
||||
the warning in order to not forget that there's a new SDK, but there's
|
||||
no need to break on update. -->
|
||||
<issue id="OldTargetApi" severity="warning" />
|
||||
|
||||
<!-- We want all lint warnings to be fatal errors.
|
||||
Right now, we set these to lint warnings so:
|
||||
|
||||
DO NOT ADD TO THIS LIST.
|
||||
|
||||
We did this so we can land lint in automation
|
||||
and not fail everything. -->
|
||||
<issue id="AppCompatResource" severity="warning" />
|
||||
<issue id="GoogleAppIndexingDeepLinkError" severity="warning" />
|
||||
<issue id="GoogleAppIndexingUrlError" severity="warning" />
|
||||
<issue id="Instantiatable" severity="warning" />
|
||||
<issue id="LongLogTag" severity="warning" />
|
||||
<issue id="MissingPermission" severity="warning" />
|
||||
<issue id="OnClick" severity="warning" />
|
||||
<issue id="ProtectedPermissions" severity="warning" />
|
||||
<issue id="ReferenceType" severity="warning" />
|
||||
<issue id="ResourceAsColor" severity="warning" />
|
||||
<issue id="ResourceType" severity="warning" />
|
||||
<issue id="ValidFragment" severity="warning" />
|
||||
|
||||
<!-- New Android-Gradle lint integration regressed this check. -->
|
||||
<issue id="MissingRegistered" severity="warning" />
|
||||
|
||||
<!-- Fixes are in progress but we would like to block future candidates.
|
||||
The ** in the path are wildcards. We need these wildcards to not change our code structure.
|
||||
See: http://stackoverflow.com/questions/43994420/what-path-is-the-issue-ignore-path-element-in-lint-xml-relative-to -->
|
||||
<issue id="NewApi" severity="error">
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/activitystream/ActivityStreamPreference.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/dlc/DownloadContentTelemetry.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/preferences/LocaleListPreference.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/media/GeckoMediaControlAgent.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/animation/PropertyAnimator.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/RemotePresentationService.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/VirtualPresentation.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/db/SharedBrowserDatabaseProvider.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/tabs/TabPanelBackButton.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/toolbar/ToolbarEditText.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/util/ViewUtil.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/IntentHelper.java"/>
|
||||
<ignore path="**/media/webrtc/trunk/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioEffects.java"/>
|
||||
<ignore path="**/media/webrtc/trunk/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java"/>
|
||||
<ignore path="src/main/res/values/styles.xml"/>
|
||||
</issue>
|
||||
|
||||
<!-- We fixed all "Registered" lint errors. However the current gradle plugin has a bug where
|
||||
it ignores @SuppressLint annotations for this check. See CrashReporterActivity class and
|
||||
https://code.google.com/p/android/issues/detail?id=204846 -->
|
||||
<issue id="Registered" severity="warning" />
|
||||
|
||||
<issue id="ObjectAnimatorBinding" severity="error">
|
||||
<!-- Two animated properties are provided by the underlying
|
||||
View implementation. -->
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java"/>
|
||||
</issue>
|
||||
|
||||
<!-- Tracked by Bug 1409550. -->
|
||||
<issue id="AppCompatCustomView" severity="error">
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/home/PanelHeaderView.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/menu/MenuItemDefault.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/tabs/TabPanelBackButton.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/AllCapsTextView.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/ClickableWhenDisabledEditText.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/EllipsisTextView.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/SquaredImageView.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/themed/ThemedEditText.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/themed/ThemedImageButton.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/themed/ThemedImageView.java"/>
|
||||
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/themed/ThemedTextView.java"/>
|
||||
</issue>
|
||||
|
||||
<!-- WHEN YOU FIX A LINT WARNING, ADD IT TO THIS LIST.
|
||||
|
||||
We want all lint warnings to be fatal errors.
|
||||
This is the list of checks that we've explicitly
|
||||
set as errors. Ideally, once we have no more warnings,
|
||||
we switch to the `warningsAsErrors` lint option
|
||||
(bug 1253737) rather than listing everything explicitly. -->
|
||||
<issue id="AaptCrash" severity="error" />
|
||||
<issue id="Accessibility" severity="error" />
|
||||
<issue id="AccidentalOctal" severity="error" />
|
||||
<issue id="AdapterViewChildren" severity="error" />
|
||||
<issue id="AddJavascriptInterface" severity="error" />
|
||||
<issue id="AllowBackup" severity="error" />
|
||||
<issue id="AlwaysShowAction" severity="error" />
|
||||
<issue id="AndroidGradlePluginVersion" severity="error" />
|
||||
<issue id="AppCompatMethod" severity="error" />
|
||||
<issue id="AppIndexingError" severity="error" />
|
||||
<issue id="AppIndexingWarning" severity="error" />
|
||||
<issue id="Assert" severity="error" />
|
||||
<issue id="ButtonCase" severity="error" />
|
||||
<issue id="ButtonOrder" severity="error" />
|
||||
<issue id="ByteOrderMark" severity="error" />
|
||||
<issue id="CheckResult" severity="error" />
|
||||
<issue id="Correctness" severity="error" />
|
||||
<issue id="CutPasteId" severity="error" />
|
||||
<issue id="DalvikOverride" severity="error" />
|
||||
<issue id="DeviceAdmin" severity="error" />
|
||||
<issue id="DisableBaselineAlignment" severity="error" />
|
||||
<issue id="DrawAllocation" severity="error" />
|
||||
<issue id="DuplicateActivity" severity="error" />
|
||||
<issue id="DuplicateDefinition" severity="error" />
|
||||
<issue id="DuplicateIds" severity="error" />
|
||||
<issue id="DuplicateIncludedIds" severity="error" />
|
||||
<issue id="DuplicateUsesFeature" severity="error" />
|
||||
<issue id="ExportedContentProvider" severity="error" />
|
||||
<issue id="ExportedPreferenceActivity" severity="error" />
|
||||
<issue id="ExtraText" severity="error" />
|
||||
<issue id="ExtraTranslation" severity="error" />
|
||||
<issue id="FloatMath" severity="error" />
|
||||
<issue id="FullBackupContent" severity="error" />
|
||||
<issue id="GetInstance" severity="error" />
|
||||
<issue id="GifUsage" severity="error" />
|
||||
<issue id="GradleCompatible" severity="error" />
|
||||
<issue id="GradleDependency" severity="error" />
|
||||
<issue id="GradleDeprecated" severity="error" />
|
||||
<issue id="GradleDynamicVersion" severity="error" />
|
||||
<issue id="GradleGetter" severity="error" />
|
||||
<issue id="GradleIdeError" severity="error" />
|
||||
<issue id="GradlePath" severity="error" />
|
||||
<issue id="GrantAllUris" severity="error" />
|
||||
<issue id="GridLayout" severity="error" />
|
||||
<issue id="HandlerLeak" severity="error" />
|
||||
<issue id="HardcodedText" severity="error" />
|
||||
<issue id="IconExtension" severity="error" />
|
||||
<issue id="IconLauncherShape" severity="error" />
|
||||
<issue id="IconMixedNinePatch" severity="error" />
|
||||
<issue id="IconNoDpi" severity="error" />
|
||||
<issue id="IllegalResourceRef" severity="error" />
|
||||
<issue id="ImpliedQuantity" severity="error" />
|
||||
<issue id="InOrMmUsage" severity="error" />
|
||||
<issue id="IncludeLayoutParam" severity="error" />
|
||||
<issue id="InconsistentArrays" severity="error" />
|
||||
<issue id="InefficientWeight" severity="error" />
|
||||
<issue id="InnerclassSeparator" severity="error" />
|
||||
<issue id="Internationalization" severity="error" />
|
||||
<issue id="InvalidId" severity="error" />
|
||||
<issue id="InvalidPackage" severity="error" />
|
||||
<issue id="InvalidResourceFolder" severity="error" />
|
||||
<issue id="JavascriptInterface" severity="error" />
|
||||
<issue id="LabelFor" severity="error" />
|
||||
<issue id="LibraryCustomView" severity="error" />
|
||||
<issue id="LocalSuppress" severity="error" />
|
||||
<issue id="LocaleFolder" severity="error" />
|
||||
<issue id="LogTagMismatch" severity="error" />
|
||||
<issue id="MangledCRLF" severity="error" />
|
||||
<issue id="ManifestOrder" severity="error" />
|
||||
<issue id="ManifestTypo" severity="error" />
|
||||
<issue id="MenuTitle" severity="error" />
|
||||
<issue id="MergeRootFrame" severity="error" />
|
||||
<issue id="MipmapIcons" severity="error" />
|
||||
<issue id="MissingApplicationIcon" severity="error" />
|
||||
<issue id="MissingId" severity="error" />
|
||||
<issue id="MissingPrefix" severity="error" />
|
||||
<issue id="MissingQuantity" severity="error" />
|
||||
<issue id="MissingSuperCall" severity="error" />
|
||||
<issue id="MissingTranslation" severity="error" />
|
||||
<issue id="MissingVersion" severity="error" />
|
||||
<issue id="MockLocation" severity="error" />
|
||||
<issue id="MultipleUsesSdk" severity="error" />
|
||||
<issue id="NamespaceTypo" severity="error" />
|
||||
<issue id="NestedScrolling" severity="error" />
|
||||
<issue id="NfcTechWhitespace" severity="error" />
|
||||
<issue id="NotSibling" severity="error" />
|
||||
<issue id="ObsoleteLayoutParam" severity="error" />
|
||||
<issue id="OnClick" severity="error" />
|
||||
<issue id="Orientation" severity="error" />
|
||||
<issue id="Override" severity="error" />
|
||||
<issue id="OverrideAbstract" severity="error" />
|
||||
<issue id="PackagedPrivateKey" severity="error" />
|
||||
<issue id="ParcelCreator" severity="error" />
|
||||
<issue id="Performance" severity="error" />
|
||||
<issue id="Proguard" severity="error" />
|
||||
<issue id="ProguardSplit" severity="error" />
|
||||
<issue id="PropertyEscape" severity="error" />
|
||||
<issue id="PxUsage" severity="error" />
|
||||
<issue id="Range" severity="error" />
|
||||
<issue id="RelativeOverlap" severity="error" />
|
||||
<issue id="RequiredSize" severity="error" />
|
||||
<issue id="ResAuto" severity="error" />
|
||||
<issue id="ResourceCycle" severity="error" />
|
||||
<issue id="ResourceName" severity="error" />
|
||||
<issue id="ResourceType" severity="error" />
|
||||
<issue id="RtlCompat" severity="error" />
|
||||
<issue id="RtlEnabled" severity="error" />
|
||||
<issue id="ScrollViewCount" severity="error" />
|
||||
<issue id="ScrollViewSize" severity="error" />
|
||||
<issue id="SecureRandom" severity="error" />
|
||||
<issue id="Security" severity="error" />
|
||||
<issue id="ServiceCast" severity="error" />
|
||||
<issue id="SetJavaScriptEnabled" severity="error" />
|
||||
<issue id="ShiftFlags" severity="error" />
|
||||
<issue id="ShortAlarm" severity="error" />
|
||||
<issue id="ShowToast" severity="error" />
|
||||
<issue id="SignatureOrSystemPermissions" severity="error" />
|
||||
<issue id="StringFormatCount" severity="error" />
|
||||
<issue id="StringFormatInvalid" severity="error" />
|
||||
<issue id="StringFormatMatches" severity="error" />
|
||||
<issue id="StringShouldBeInt" severity="error" />
|
||||
<issue id="SuspiciousImport" severity="error" />
|
||||
<issue id="TextFields" severity="error" />
|
||||
<issue id="TextViewEdits" severity="error" />
|
||||
<issue id="TooDeepLayout" severity="error" />
|
||||
<issue id="TooManyViews" severity="error" />
|
||||
<issue id="TrulyRandom" severity="error" />
|
||||
<issue id="TypographyDashes" severity="error" />
|
||||
<issue id="TypographyFractions" severity="error" />
|
||||
<issue id="TypographyOther" severity="error" />
|
||||
<issue id="Typos" severity="error" />
|
||||
<issue id="UniqueConstants" severity="error" />
|
||||
<issue id="UniquePermission" severity="error" />
|
||||
<issue id="UnknownId" severity="error" />
|
||||
<issue id="UnknownIdInLayout" severity="error" />
|
||||
<issue id="UnlocalizedSms" severity="error" />
|
||||
<issue id="UnusedNamespace" severity="error" />
|
||||
<issue id="UnusedQuantity" severity="error" />
|
||||
<issue id="UnusedResources" severity="error">
|
||||
<!-- The moz.build based build system leaves a .mkdir.done file lying around in the
|
||||
preprocessed_resources res/raw folder. Lint reports it as unused. We should get
|
||||
rid of the file eventually. See bug 1268948. -->
|
||||
<ignore path="**/raw/.mkdir.done" />
|
||||
<!-- Ignore drawables used for localized Top Sites. -->
|
||||
<ignore regexp="^.*?/res/drawable-[xhmdpi]+/suggestedsites_[a-z]+.png$" />
|
||||
<ignore regexp="activity_stream_signin_title|activity_stream_signin_description|activity_stream_signup_button|
|
||||
activity_stream_signin_prompt|activity_stream_signin_prompt_button|firstrun_sendtab_title|firstrun_sendtab_message" />
|
||||
</issue>
|
||||
<issue id="Usability" severity="error" />
|
||||
<issue id="UseCheckPermission" severity="error" />
|
||||
<issue id="UseCompoundDrawables" severity="error" />
|
||||
<issue id="UselessLeaf" severity="error" />
|
||||
<issue id="UsesMinSdkAttributes" severity="error" />
|
||||
<issue id="UsingHttp" severity="error" />
|
||||
<issue id="ViewHolder" severity="error" />
|
||||
<issue id="ViewTag" severity="error" />
|
||||
<issue id="Wakelock" severity="error" />
|
||||
<issue id="WebViewLayout" severity="error" />
|
||||
<issue id="WorldReadableFiles" severity="error" />
|
||||
<issue id="WorldWriteableFiles" severity="error" />
|
||||
<issue id="WrongCall" severity="error" />
|
||||
<issue id="WrongCase" severity="error" />
|
||||
<issue id="WrongConstant" severity="error" />
|
||||
<issue id="WrongFolder" severity="error" />
|
||||
<issue id="WrongManifestParent" severity="error" />
|
||||
<issue id="WrongRegion" severity="error" />
|
||||
<issue id="WrongThread" severity="error" />
|
||||
<issue id="WrongViewCast" severity="error" />
|
||||
|
||||
</lint>
|
Before Width: | Height: | Size: 4.2 KiB |
@ -7,27 +7,12 @@
|
||||
with Files('**'):
|
||||
BUG_COMPONENT = ('Firefox for Android', 'Build Config & IDE Support')
|
||||
|
||||
with Files('findbugs-exclude.xml'):
|
||||
BUG_COMPONENT = ('Firefox for Android', 'General')
|
||||
|
||||
with Files('lint*'):
|
||||
BUG_COMPONENT = ('Firefox for Android', 'General')
|
||||
|
||||
with Files('mobile*'):
|
||||
BUG_COMPONENT = ('Firefox for Android', 'General')
|
||||
|
||||
with Files('omnijar/**'):
|
||||
BUG_COMPONENT = ('Firefox for Android', 'Build Config & IDE Support')
|
||||
|
||||
with Files('src/main/**'):
|
||||
BUG_COMPONENT = ('Firefox for Android', 'General')
|
||||
|
||||
with Files('src/androidTest/**'):
|
||||
BUG_COMPONENT = ('Firefox for Android', 'Testing')
|
||||
|
||||
with Files('src/test/**'):
|
||||
BUG_COMPONENT = ('Firefox for Android', 'Build Config & IDE Support')
|
||||
|
||||
for var in ('APP_NAME', 'APP_VERSION'):
|
||||
DEFINES[var] = CONFIG['MOZ_%s' % var]
|
||||
|
||||
|
@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This is not the real manifest; it's a stub to satisfy the
|
||||
Android-Gradle plugin. The real manifest is generated from
|
||||
mobile/android/base/AndroidManifest.xml.in. -->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.mozilla.gecko">
|
||||
</manifest>
|
@ -1 +0,0 @@
|
||||
This is an example asset.
|
Before Width: | Height: | Size: 167 B |
@ -1,19 +0,0 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.geckoview;
|
||||
|
||||
import android.support.annotation.AnyThread;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import org.mozilla.gecko.EventDispatcher;
|
||||
|
||||
/** This class exists so that Fennec can have access to getEventDispatcher without giving access to
|
||||
* it to any other GV consumer. */
|
||||
public class GeckoViewBridge {
|
||||
@AnyThread
|
||||
public static @NonNull EventDispatcher getEventDispatcher(GeckoView geckoView) {
|
||||
return geckoView.getEventDispatcher();
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<scale android:fromXScale="1.0"
|
||||
android:toXScale="1.0"
|
||||
android:fromYScale="0.3"
|
||||
android:toYScale="1.0"
|
||||
android:pivotX="0%"
|
||||
android:pivotY="0%"
|
||||
android:duration="150"/>
|
||||
|
||||
<alpha android:interpolator="@android:anim/decelerate_interpolator"
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0"
|
||||
android:duration="150"/>
|
||||
|
||||
</set>
|
@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<alpha
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:duration="250"
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0" />
|
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<alpha
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:duration="250"
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0"
|
||||
android:fillAfter="true" />
|
@ -1,25 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fillAfter="true" >
|
||||
|
||||
<scale
|
||||
android:duration="300"
|
||||
android:fromXScale="1"
|
||||
android:fromYScale="1"
|
||||
android:pivotX="50%"
|
||||
android:pivotY="50%"
|
||||
android:toXScale="2"
|
||||
android:toYScale="2" >
|
||||
</scale>
|
||||
|
||||
<scale
|
||||
android:duration="300"
|
||||
android:fromXScale="1"
|
||||
android:fromYScale="1"
|
||||
android:pivotX="50%"
|
||||
android:pivotY="50%"
|
||||
android:toXScale="0.5"
|
||||
android:toYScale="0.5" >
|
||||
</scale>
|
||||
|
||||
</set>
|
@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<translate xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:duration="@android:integer/config_longAnimTime"
|
||||
android:fromYDelta="0"
|
||||
android:toYDelta="100%p"
|
||||
android:fillAfter="true" />
|
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<translate xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:duration="@android:integer/config_longAnimTime"
|
||||
android:fromYDelta="100%p"
|
||||
android:toYDelta="0" />
|
@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:interpolator="@android:anim/decelerate_interpolator"
|
||||
android:duration="150">
|
||||
|
||||
<translate android:fromYDelta="-0"
|
||||
android:toYDelta="-20"/>
|
||||
|
||||
<alpha android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0"/>
|
||||
|
||||
</set>
|
@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:interpolator="@android:anim/decelerate_interpolator"
|
||||
android:duration="150">
|
||||
|
||||
<translate android:fromYDelta="-20"
|
||||
android:toYDelta="0"/>
|
||||
|
||||
<alpha android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0"/>
|
||||
|
||||
</set>
|
@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:fromXDelta="-100%p" android:toXDelta="0"
|
||||
android:duration="@android:integer/config_shortAnimTime"/>
|
||||
</set>
|
@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:fromXDelta="100%p" android:toXDelta="0"
|
||||
android:duration="@android:integer/config_shortAnimTime"/>
|
||||
</set>
|
@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:fromXDelta="0" android:toXDelta="-100%p"
|
||||
android:duration="@android:integer/config_shortAnimTime"/>
|
||||
</set>
|
@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:fromXDelta="0" android:toXDelta="100%p"
|
||||
android:duration="@android:integer/config_shortAnimTime"/>
|
||||
</set>
|
@ -1,22 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item gecko:state_private="true"
|
||||
android:state_enabled="false"
|
||||
android:color="@color/photon_icon_private_disabled"/>
|
||||
|
||||
<item gecko:state_private="true"
|
||||
android:state_enabled="true"
|
||||
android:color="@color/photon_icon_private"/>
|
||||
|
||||
<item android:state_enabled="false"
|
||||
android:color="@color/photon_icon_disabled"/>
|
||||
|
||||
<item android:color="@color/photon_icon"/>
|
||||
|
||||
</selector>
|
@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item android:state_enabled="false"
|
||||
android:color="@color/disabled_grey"
|
||||
/>
|
||||
|
||||
<item android:color="@color/toolbar_icon_grey" />
|
||||
|
||||
</selector>
|
@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:state_activated="true"
|
||||
android:color="@color/dtp_selection" />
|
||||
|
||||
<item
|
||||
android:state_activated="false"
|
||||
android:color="?android:attr/textColorPrimary" />
|
||||
</selector>
|
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item android:color="@color/menu_item_tint_private"
|
||||
gecko:state_private="true"/>
|
||||
|
||||
<item android:color="@color/menu_item_tint"/>
|
||||
|
||||
</selector>
|
@ -1,14 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:state_pressed="true"
|
||||
android:color="@color/about_page_header_grey"
|
||||
android:drawable="@color/about_page_header_grey" />
|
||||
|
||||
<item android:color="@android:color/transparent"
|
||||
android:drawable="@android:color/transparent"/>
|
||||
|
||||
</selector>
|
@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:state_enabled="false" android:color="@color/text_color_primary_disable_only" />
|
||||
<item android:color="@color/placeholder_active_grey"/>
|
||||
|
||||
</selector>
|
@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:state_enabled="false" android:color="@color/disabled_grey" />
|
||||
<item android:color="@color/text_and_tabs_tray_grey" />
|
||||
|
||||
</selector>
|
@ -1,14 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:state_pressed="true"
|
||||
android:color="@color/highlight"
|
||||
android:drawable="@color/highlight" />
|
||||
|
||||
<item android:color="@android:color/transparent"
|
||||
android:drawable="@android:color/transparent"/>
|
||||
|
||||
</selector>
|
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item android:color="@color/photon_search_item_text_private"
|
||||
gecko:state_private="true"/>
|
||||
|
||||
<item android:color="@color/photon_search_item_text"/>
|
||||
|
||||
</selector>
|
@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:state_enabled="false" android:color="@color/text_color_primary_disable_only" />
|
||||
<item android:color="@color/placeholder_grey"/>
|
||||
|
||||
</selector>
|
@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:state_enabled="false" android:color="#999" />
|
||||
<item android:color="#000"/>
|
||||
|
||||
</selector>
|
@ -1,14 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:state_pressed="true"
|
||||
android:color="@color/toolbar_grey_pressed"
|
||||
android:drawable="@color/toolbar_grey_pressed" />
|
||||
|
||||
<item android:color="@android:color/transparent"
|
||||
android:drawable="@android:color/transparent"/>
|
||||
|
||||
</selector>
|
@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:state_checked="true"
|
||||
android:color="@color/about_page_header_grey"/>
|
||||
|
||||
<item android:state_pressed="true"
|
||||
android:color="@color/about_page_header_grey"/>
|
||||
|
||||
<item android:color="@color/tabs_tray_icon_grey"/>
|
||||
|
||||
</selector>
|
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item android:color="@color/photon_highlight_private"
|
||||
gecko:state_private="true"/>
|
||||
|
||||
<item android:color="@color/photon_highlight"/>
|
||||
|
||||
</selector>
|
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item gecko:state_light="true"
|
||||
android:color="@color/photon_icon"/>
|
||||
|
||||
<item android:color="@color/photon_icon_private"/>
|
||||
|
||||
</selector>
|
@ -1,31 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item android:color="@color/photon_text_main_private"
|
||||
android:state_checked="true"
|
||||
gecko:state_private="true"/>
|
||||
|
||||
<item android:color="@color/photon_text_secondary_private"
|
||||
gecko:state_private="true"/>
|
||||
|
||||
<item android:color="@color/tab_strip_title_lwt_checked"
|
||||
android:state_checked="true"
|
||||
gecko:state_dark="true"/>
|
||||
|
||||
<item android:color="@color/tab_strip_title_lwt"
|
||||
gecko:state_dark="true"/>
|
||||
|
||||
<item android:color="@color/tab_strip_title_lwt_checked"
|
||||
android:state_checked="true"
|
||||
gecko:state_light="true"/>
|
||||
|
||||
<item android:color="@color/tab_strip_title_lwt"
|
||||
gecko:state_light="true"/>
|
||||
|
||||
<item android:color="@color/photon_text_main"
|
||||
android:state_checked="true"/>
|
||||
|
||||
<item android:color="@color/photon_text_secondary"/>
|
||||
|
||||
</selector>
|
@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_pressed="true"
|
||||
android:color="@color/placeholder_grey" />
|
||||
|
||||
<item android:color="@color/panel_tab_text_normal"/>
|
||||
</selector>
|
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item android:color="@color/menu_item_tint_private"
|
||||
gecko:state_private="true"/>
|
||||
|
||||
<item android:color="@color/menu_item_tint"/>
|
||||
|
||||
</selector>
|
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item android:color="@color/photon_toolbar_text_color_private"
|
||||
gecko:state_private="true"/>
|
||||
|
||||
<item android:color="@color/photon_toolbar_text_color"/>
|
||||
|
||||
</selector>
|
@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:state_enabled="false" android:color="@color/text_color_primary_disable_only" />
|
||||
<item android:color="@color/text_color_tertiary"/>
|
||||
|
||||
</selector>
|
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:state_activated="true"
|
||||
android:color="@color/dtp_header_text_active"
|
||||
/>
|
||||
|
||||
<item android:state_activated="false"
|
||||
android:color="@color/dtp_header_text_inactive"
|
||||
/>
|
||||
</selector>
|
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:state_activated="true"
|
||||
android:color="@color/dtp_selection"
|
||||
/>
|
||||
<item
|
||||
android:state_activated="false"
|
||||
android:color="?android:attr/textColorSecondary"
|
||||
/>
|
||||
</selector>
|
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:state_activated="true"
|
||||
android:color="@color/dtp_selection"
|
||||
/>
|
||||
<item
|
||||
android:state_activated="false"
|
||||
android:color="?android:attr/textColorPrimary"
|
||||
/>
|
||||
</selector>
|
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<!-- empty with no url -->
|
||||
<item android:state_empty="true" android:color="#80777777" />
|
||||
|
||||
<!-- default -->
|
||||
<item android:color="@color/placeholder_grey"/>
|
||||
|
||||
</selector>
|
@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<!-- private browsing mode -->
|
||||
<item android:color="@color/photon_text_main_private"
|
||||
gecko:state_private="true"/>
|
||||
|
||||
<!-- normal mode -->
|
||||
<item android:color="@color/photon_text_main"/>
|
||||
|
||||
</selector>
|
@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<!-- private browsing mode -->
|
||||
<item android:color="@color/photon_text_secondary_private"
|
||||
gecko:state_private="true"/>
|
||||
|
||||
<!-- normal mode -->
|
||||
<item android:color="@color/photon_text_secondary"/>
|
||||
|
||||
</selector>
|
@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
<item android:color="@color/photon_toolbar_image_tint_private" android:state_enabled="false" gecko:state_private="true" />
|
||||
<item android:color="@color/photon_toolbar_image_tint_private" android:state_enabled="true" gecko:state_private="true" />
|
||||
<item android:color="@color/photon_toolbar_image_tint" android:state_enabled="false" gecko:state_private="false" />
|
||||
<item android:color="@color/photon_toolbar_image_tint" />
|
||||
</selector>
|
@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<!-- private browsing mode -->
|
||||
<item android:color="@color/photon_text_main_private" gecko:state_private="true" />
|
||||
|
||||
<!-- normal mode -->
|
||||
<item android:color="@color/photon_text_main" />
|
||||
|
||||
</selector>
|
@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<!-- private browsing mode -->
|
||||
<item android:color="@color/photon_text_selected_highlight_private" gecko:state_private="true" />
|
||||
|
||||
<!-- normal mode -->
|
||||
<item android:color="@color/photon_text_selected_highlight" />
|
||||
|
||||
</selector>
|
@ -1,21 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<!-- private browsing mode -->
|
||||
<item android:color="@color/photon_text_placeholder_private" gecko:state_private="true" />
|
||||
|
||||
<!-- dark theme -->
|
||||
<item android:color="@color/photon_text_placeholder_private" gecko:state_dark="true" />
|
||||
|
||||
<!-- light theme -->
|
||||
<item android:color="@color/photon_text_placeholder_private" gecko:state_light="true" />
|
||||
|
||||
<!-- normal mode -->
|
||||
<item android:color="@color/photon_text_placeholder" />
|
||||
|
||||
</selector>
|
Before Width: | Height: | Size: 267 B |
Before Width: | Height: | Size: 259 B |
Before Width: | Height: | Size: 801 B |
Before Width: | Height: | Size: 474 B |
Before Width: | Height: | Size: 242 B |
Before Width: | Height: | Size: 335 B |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 344 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 480 B |
Before Width: | Height: | Size: 867 B |
Before Width: | Height: | Size: 694 B |
Before Width: | Height: | Size: 495 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 417 B |
Before Width: | Height: | Size: 573 B |
Before Width: | Height: | Size: 486 B |
Before Width: | Height: | Size: 644 B |
Before Width: | Height: | Size: 298 B |
Before Width: | Height: | Size: 189 B |
Before Width: | Height: | Size: 200 B |
Before Width: | Height: | Size: 187 B |
Before Width: | Height: | Size: 215 B |
Before Width: | Height: | Size: 183 B |
Before Width: | Height: | Size: 189 B |
Before Width: | Height: | Size: 296 B |
Before Width: | Height: | Size: 147 B |
Before Width: | Height: | Size: 176 B |
Before Width: | Height: | Size: 323 B |
Before Width: | Height: | Size: 82 B |
Before Width: | Height: | Size: 589 B |
Before Width: | Height: | Size: 624 B |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 594 B |
Before Width: | Height: | Size: 121 B |
Before Width: | Height: | Size: 157 B |
Before Width: | Height: | Size: 242 B |