Merge pull request #40 from TacoTheDank/master

Code cleanup and improvements
This commit is contained in:
VancedOfficial 2020-09-01 20:33:02 +03:00 committed by GitHub
commit 9f701dabdd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
130 changed files with 511 additions and 622 deletions

Binary file not shown.

View File

@ -1,6 +1,5 @@
#Tue Jul 21 13:31:11 GET 2020
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip

149
gradlew vendored
View File

@ -1,4 +1,20 @@
#!/usr/bin/env bash #!/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.
#
############################################################################## ##############################################################################
## ##
@ -6,47 +22,6 @@
## ##
############################################################################## ##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME # Attempt to set APP_HOME
# Resolve links: $0 may be a link # Resolve links: $0 may be a link
PRG="$0" PRG="$0"
@ -61,12 +36,53 @@ while [ -h "$PRG" ] ; do
fi fi
done done
SAVED="`pwd`" SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&- cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`" APP_HOME="`pwd -P`"
cd "$SAVED" >&- cd "$SAVED" >/dev/null
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='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM. # Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
@ -90,7 +106,7 @@ location of your Java installation."
fi fi
# Increase the maximum file descriptors if we can. # Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n` MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
@ -110,10 +126,12 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi fi
# For Cygwin, switch paths to Windows format before running java # For Cygwin or MSYS, switch paths to Windows format before running java
if $cygwin ; then if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"` APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath # We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
@ -138,27 +156,30 @@ if $cygwin ; then
else else
eval `echo args$i`="\"$arg\"" eval `echo args$i`="\"$arg\""
fi fi
i=$((i+1)) i=`expr $i + 1`
done done
case $i in case $i in
(0) set -- ;; 0) set -- ;;
(1) set -- "$args0" ;; 1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;; 2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;; 3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;; 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac esac
fi fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules # Escape application args
function splitJvmOpts() { save () {
JVM_OPTS=("$@") for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
} }
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS APP_ARGS=`save "$@"`
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" # 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"
exec "$JAVACMD" "$@"

104
gradlew.bat vendored Normal file
View File

@ -0,0 +1,104 @@
@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
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
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="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@ -19,5 +19,5 @@ package com.google.android.gms.auth;
import org.microg.safeparcel.AutoSafeParcelable; import org.microg.safeparcel.AutoSafeParcelable;
public class AccountChangeEvent extends AutoSafeParcelable { public class AccountChangeEvent extends AutoSafeParcelable {
public static Creator<AccountChangeEvent> CREATOR = new AutoCreator<AccountChangeEvent>(AccountChangeEvent.class); public static Creator<AccountChangeEvent> CREATOR = new AutoCreator<>(AccountChangeEvent.class);
} }

View File

@ -27,6 +27,6 @@ public class AccountChangeEventsRequest extends AutoSafeParcelable {
@SafeParceled(3) @SafeParceled(3)
private String s; private String s;
public static Creator<AccountChangeEventsRequest> CREATOR = new AutoCreator<AccountChangeEventsRequest>(AccountChangeEventsRequest.class); public static Creator<AccountChangeEventsRequest> CREATOR = new AutoCreator<>(AccountChangeEventsRequest.class);
} }

View File

@ -29,8 +29,8 @@ public class AccountChangeEventsResponse extends AutoSafeParcelable {
private List<AccountChangeEvent> events; private List<AccountChangeEvent> events;
public AccountChangeEventsResponse() { public AccountChangeEventsResponse() {
events = new ArrayList<AccountChangeEvent>(); events = new ArrayList<>();
} }
public static Creator<AccountChangeEventsResponse> CREATOR = new AutoCreator<AccountChangeEventsResponse>(AccountChangeEventsResponse.class); public static Creator<AccountChangeEventsResponse> CREATOR = new AutoCreator<>(AccountChangeEventsResponse.class);
} }

View File

@ -60,5 +60,5 @@ public class TokenData extends AutoSafeParcelable {
this.scopes = null; this.scopes = null;
} }
public static final Creator<TokenData> CREATOR = new AutoCreator<TokenData>(TokenData.class); public static final Creator<TokenData> CREATOR = new AutoCreator<>(TokenData.class);
} }

View File

@ -26,6 +26,7 @@ import org.microg.safeparcel.SafeParceled;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Objects;
@PublicApi @PublicApi
public class Credential extends AutoSafeParcelable { public class Credential extends AutoSafeParcelable {
@ -139,19 +140,19 @@ public class Credential extends AutoSafeParcelable {
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) return true; if (this == o) return true;
if (o == null || !(o instanceof Credential)) return false; if (!(o instanceof Credential)) return false;
Credential that = (Credential) o; Credential that = (Credential) o;
if (id != null ? !id.equals(that.id) : that.id != null) return false; if (!Objects.equals(id, that.id)) return false;
if (name != null ? !name.equals(that.name) : that.name != null) return false; if (!Objects.equals(name, that.name)) return false;
if (profilePictureUri != null ? !profilePictureUri.equals(that.profilePictureUri) : that.profilePictureUri != null) if (!Objects.equals(profilePictureUri, that.profilePictureUri))
return false; return false;
if (password != null ? !password.equals(that.password) : that.password != null) if (!Objects.equals(password, that.password))
return false; return false;
if (accountType != null ? !accountType.equals(that.accountType) : that.accountType != null) if (!Objects.equals(accountType, that.accountType))
return false; return false;
return generatedPassword != null ? generatedPassword.equals(that.generatedPassword) : that.generatedPassword == null; return Objects.equals(generatedPassword, that.generatedPassword);
} }
@ -245,5 +246,5 @@ public class Credential extends AutoSafeParcelable {
} }
} }
public static final Creator<Credential> CREATOR = new AutoCreator<Credential>(Credential.class); public static final Creator<Credential> CREATOR = new AutoCreator<>(Credential.class);
} }

View File

@ -54,7 +54,7 @@ public class CredentialPickerConfig extends AutoSafeParcelable {
return showCancelButton; return showCancelButton;
} }
public class Builder { public static class Builder {
private boolean showAddAccountButton; private boolean showAddAccountButton;
private boolean showCancelButton; private boolean showCancelButton;
private boolean forNewAccount; private boolean forNewAccount;
@ -88,5 +88,5 @@ public class CredentialPickerConfig extends AutoSafeParcelable {
} }
} }
public static final Creator<CredentialPickerConfig> CREATOR = new AutoCreator<CredentialPickerConfig>(CredentialPickerConfig.class); public static final Creator<CredentialPickerConfig> CREATOR = new AutoCreator<>(CredentialPickerConfig.class);
} }

View File

@ -71,5 +71,5 @@ public class CredentialRequest extends AutoSafeParcelable {
return passwordLoginSupported; return passwordLoginSupported;
} }
public static final Creator<CredentialRequest> CREATOR = new AutoCreator<CredentialRequest>(CredentialRequest.class); public static final Creator<CredentialRequest> CREATOR = new AutoCreator<>(CredentialRequest.class);
} }

View File

@ -54,5 +54,5 @@ public class IdToken extends AutoSafeParcelable {
return id; return id;
} }
public static final Creator<IdToken> CREATOR = new AutoCreator<IdToken>(IdToken.class); public static final Creator<IdToken> CREATOR = new AutoCreator<>(IdToken.class);
} }

View File

@ -19,5 +19,5 @@ package com.google.android.gms.auth.api.credentials.internal;
import org.microg.safeparcel.AutoSafeParcelable; import org.microg.safeparcel.AutoSafeParcelable;
public class DeleteRequest extends AutoSafeParcelable { public class DeleteRequest extends AutoSafeParcelable {
public static final Creator<DeleteRequest> CREATOR = new AutoCreator<DeleteRequest>(DeleteRequest.class); public static final Creator<DeleteRequest> CREATOR = new AutoCreator<>(DeleteRequest.class);
} }

View File

@ -19,5 +19,5 @@ package com.google.android.gms.auth.api.credentials.internal;
import org.microg.safeparcel.AutoSafeParcelable; import org.microg.safeparcel.AutoSafeParcelable;
public class GeneratePasswordRequest extends AutoSafeParcelable { public class GeneratePasswordRequest extends AutoSafeParcelable {
public static final Creator<GeneratePasswordRequest> CREATOR = new AutoCreator<GeneratePasswordRequest>(GeneratePasswordRequest.class); public static final Creator<GeneratePasswordRequest> CREATOR = new AutoCreator<>(GeneratePasswordRequest.class);
} }

View File

@ -19,5 +19,5 @@ package com.google.android.gms.auth.api.credentials.internal;
import org.microg.safeparcel.AutoSafeParcelable; import org.microg.safeparcel.AutoSafeParcelable;
public class SaveRequest extends AutoSafeParcelable { public class SaveRequest extends AutoSafeParcelable {
public static final Creator<SaveRequest> CREATOR = new AutoCreator<SaveRequest>(SaveRequest.class); public static final Creator<SaveRequest> CREATOR = new AutoCreator<>(SaveRequest.class);
} }

View File

@ -42,5 +42,5 @@ public class AccountRecoveryGuidanceRequest extends AutoSafeParcelable {
this.account = account; this.account = account;
} }
public static final Creator<AccountRecoveryGuidanceRequest> CREATOR = new AutoCreator<AccountRecoveryGuidanceRequest>(AccountRecoveryGuidanceRequest.class); public static final Creator<AccountRecoveryGuidanceRequest> CREATOR = new AutoCreator<>(AccountRecoveryGuidanceRequest.class);
} }

View File

@ -42,5 +42,5 @@ public class AccountRemovalRequest extends AutoSafeParcelable {
this.account = account; this.account = account;
} }
public static final Creator<AccountRemovalRequest> CREATOR = new AutoCreator<AccountRemovalRequest>(AccountRemovalRequest.class); public static final Creator<AccountRemovalRequest> CREATOR = new AutoCreator<>(AccountRemovalRequest.class);
} }

View File

@ -30,5 +30,5 @@ public class ConfirmCredentialsRequest extends AutoSafeParcelable {
@SafeParceled(3) @SafeParceled(3)
public CaptchaSolution captchaSolution; public CaptchaSolution captchaSolution;
public static final Creator<ConfirmCredentialsRequest> CREATOR = new AutoCreator<ConfirmCredentialsRequest>(ConfirmCredentialsRequest.class); public static final Creator<ConfirmCredentialsRequest> CREATOR = new AutoCreator<>(ConfirmCredentialsRequest.class);
} }

View File

@ -40,5 +40,5 @@ public class TokenRequest extends AutoSafeParcelable{
return new Account(accountName, accountType); return new Account(accountName, accountType);
} }
public static final Creator<TokenRequest> CREATOR = new AutoCreator<TokenRequest>(TokenRequest.class); public static final Creator<TokenRequest> CREATOR = new AutoCreator<>(TokenRequest.class);
} }

View File

@ -39,5 +39,5 @@ public class ConfirmCredentialsWorkflowRequest extends AutoSafeParcelable {
@SafeParceled(6) @SafeParceled(6)
public AccountAuthenticatorResponse accountAuthenticatorResponse; public AccountAuthenticatorResponse accountAuthenticatorResponse;
public static final Creator<ConfirmCredentialsWorkflowRequest> CREATOR = new AutoCreator<ConfirmCredentialsWorkflowRequest>(ConfirmCredentialsWorkflowRequest.class); public static final Creator<ConfirmCredentialsWorkflowRequest> CREATOR = new AutoCreator<>(ConfirmCredentialsWorkflowRequest.class);
} }

View File

@ -34,5 +34,5 @@ public class AccountCredentials extends AutoSafeParcelable {
return new Account(accountName, accountType); return new Account(accountName, accountType);
} }
public static final Creator<AccountCredentials> CREATOR = new AutoCreator<AccountCredentials>(AccountCredentials.class); public static final Creator<AccountCredentials> CREATOR = new AutoCreator<>(AccountCredentials.class);
} }

View File

@ -31,5 +31,5 @@ public class AppDescription extends AutoSafeParcelable {
@SafeParceled(5) @SafeParceled(5)
public String callingPkg; public String callingPkg;
public static final Creator<AppDescription> CREATOR = new AutoCreator<AppDescription>(AppDescription.class); public static final Creator<AppDescription> CREATOR = new AutoCreator<>(AppDescription.class);
} }

View File

@ -25,5 +25,5 @@ public class CaptchaSolution extends AutoSafeParcelable {
@SafeParceled(1) @SafeParceled(1)
private int versionCode = 1; private int versionCode = 1;
public static final Creator<CaptchaSolution> CREATOR = new AutoCreator<CaptchaSolution>(CaptchaSolution.class); public static final Creator<CaptchaSolution> CREATOR = new AutoCreator<>(CaptchaSolution.class);
} }

View File

@ -25,8 +25,8 @@ import org.microg.safeparcel.SafeParceled;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.CharBuffer; import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetDecoder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays; import java.util.Arrays;
public class LogEventParcelable extends AutoSafeParcelable { public class LogEventParcelable extends AutoSafeParcelable {
@ -92,7 +92,7 @@ public class LogEventParcelable extends AutoSafeParcelable {
private String getBytesAsString() { private String getBytesAsString() {
if (bytes == null) return "null"; if (bytes == null) return "null";
try { try {
CharsetDecoder d = Charset.forName("US-ASCII").newDecoder(); CharsetDecoder d = StandardCharsets.US_ASCII.newDecoder();
CharBuffer r = d.decode(ByteBuffer.wrap(bytes)); CharBuffer r = d.decode(ByteBuffer.wrap(bytes));
return r.toString(); return r.toString();
} catch (Exception e) { } catch (Exception e) {
@ -100,5 +100,5 @@ public class LogEventParcelable extends AutoSafeParcelable {
} }
} }
public static final Creator<LogEventParcelable> CREATOR = new AutoCreator<LogEventParcelable>(LogEventParcelable.class); public static final Creator<LogEventParcelable> CREATOR = new AutoCreator<>(LogEventParcelable.class);
} }

View File

@ -71,5 +71,5 @@ public class GoogleCertificatesQuery extends AutoSafeParcelable {
return certData; return certData;
} }
public static final Creator<GoogleCertificatesQuery> CREATOR = new AutoCreator<GoogleCertificatesQuery>(GoogleCertificatesQuery.class); public static final Creator<GoogleCertificatesQuery> CREATOR = new AutoCreator<>(GoogleCertificatesQuery.class);
} }

View File

@ -20,5 +20,5 @@ import org.microg.safeparcel.AutoSafeParcelable;
public class FavaDiagnosticsEntity extends AutoSafeParcelable { public class FavaDiagnosticsEntity extends AutoSafeParcelable {
public static final Creator<FavaDiagnosticsEntity> CREATOR = new AutoCreator<FavaDiagnosticsEntity>(FavaDiagnosticsEntity.class); public static final Creator<FavaDiagnosticsEntity> CREATOR = new AutoCreator<>(FavaDiagnosticsEntity.class);
} }

View File

@ -32,5 +32,5 @@ public class ParcelableLoadImageOptions extends AutoSafeParcelable {
@SafeParceled(3) @SafeParceled(3)
public boolean useLargePictureForCp2Images; public boolean useLargePictureForCp2Images;
public static final Creator<ParcelableLoadImageOptions> CREATOR = new AutoCreator<ParcelableLoadImageOptions>(ParcelableLoadImageOptions.class); public static final Creator<ParcelableLoadImageOptions> CREATOR = new AutoCreator<>(ParcelableLoadImageOptions.class);
} }

View File

@ -36,5 +36,5 @@ public class AccountMetadata extends AutoSafeParcelable {
@SafeParceled(5) @SafeParceled(5)
public boolean hasFeature4 = true; public boolean hasFeature4 = true;
public static Creator<AccountMetadata> CREATOR = new AutoCreator<AccountMetadata>(AccountMetadata.class); public static Creator<AccountMetadata> CREATOR = new AutoCreator<>(AccountMetadata.class);
} }

View File

@ -30,5 +30,5 @@ public class AvatarReference extends AutoSafeParcelable {
@SafeParceled(2) @SafeParceled(2)
public String location; public String location;
public static final Creator<AvatarReference> CREATOR = new AutoCreator<AvatarReference>(AvatarReference.class); public static final Creator<AvatarReference> CREATOR = new AutoCreator<>(AvatarReference.class);
} }

View File

@ -50,5 +50,5 @@ public class LogEvent extends AutoSafeParcelable {
'}'; '}';
} }
public static Creator<LogEvent> CREATOR = new AutoCreator<LogEvent>(LogEvent.class); public static Creator<LogEvent> CREATOR = new AutoCreator<>(LogEvent.class);
} }

View File

@ -83,19 +83,18 @@ public class PlayLoggerContext extends AutoSafeParcelable {
@Override @Override
public String toString() { public String toString() {
final StringBuilder sb = new StringBuilder("PlayLoggerContext[").append(versionCode); return "PlayLoggerContext[" + versionCode +
sb.append(", package=").append(packageName); ", package=" + packageName +
sb.append(", packageVersionCode=").append(packageVersionCode); ", packageVersionCode=" + packageVersionCode +
sb.append(", logSource=").append(logSource); ", logSource=" + logSource +
sb.append(", uploadAccount=").append(uploadAccount); ", uploadAccount=" + uploadAccount +
sb.append(", loggingId=").append(loggingId); ", loggingId=" + loggingId +
sb.append(", logAndroidId=").append(logAndroidId); ", logAndroidId=" + logAndroidId +
sb.append(", logSourceName=").append(logSourceName); ", logSourceName=" + logSourceName +
sb.append(", isAnonymous=").append(isAnonymous); ", isAnonymous=" + isAnonymous +
sb.append(", qosTier=").append(qosTier); ", qosTier=" + qosTier +
sb.append(']'); ']';
return sb.toString();
} }
public static Creator<PlayLoggerContext> CREATOR = new AutoCreator<PlayLoggerContext>(PlayLoggerContext.class); public static Creator<PlayLoggerContext> CREATOR = new AutoCreator<>(PlayLoggerContext.class);
} }

View File

@ -8,5 +8,5 @@ package com.google.android.gms.auth.api.signin;
import org.microg.safeparcel.AutoSafeParcelable; import org.microg.safeparcel.AutoSafeParcelable;
public class GoogleSignInAccount extends AutoSafeParcelable { public class GoogleSignInAccount extends AutoSafeParcelable {
public static final Creator<GoogleSignInAccount> CREATOR = new AutoCreator<GoogleSignInAccount>(GoogleSignInAccount.class); public static final Creator<GoogleSignInAccount> CREATOR = new AutoCreator<>(GoogleSignInAccount.class);
} }

View File

@ -211,7 +211,7 @@ public class DataHolder extends AutoSafeParcelable implements Closeable {
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
private static CursorWindow[] createCursorWindows(Builder builder) { private static CursorWindow[] createCursorWindows(Builder builder) {
if (builder.columns.length == 0) return new CursorWindow[0]; if (builder.columns.length == 0) return new CursorWindow[0];
List<CursorWindow> windows = new ArrayList<CursorWindow>(); List<CursorWindow> windows = new ArrayList<>();
try { try {
CursorWindow current = null; CursorWindow current = null;
for (int rowIndex = 0; rowIndex < builder.rows.size(); rowIndex++) { for (int rowIndex = 0; rowIndex < builder.rows.size(); rowIndex++) {
@ -223,7 +223,7 @@ public class DataHolder extends AutoSafeParcelable implements Closeable {
windows.add(current); windows.add(current);
if (!current.allocRow()) { if (!current.allocRow()) {
windows.remove(current); windows.remove(current);
return windows.toArray(new CursorWindow[windows.size()]); return windows.toArray(new CursorWindow[0]);
} }
} }
for (int columnIndex = 0; columnIndex < builder.columns.length; columnIndex++) { for (int columnIndex = 0; columnIndex < builder.columns.length; columnIndex++) {
@ -256,12 +256,12 @@ public class DataHolder extends AutoSafeParcelable implements Closeable {
} }
throw e; throw e;
} }
return windows.toArray(new CursorWindow[windows.size()]); return windows.toArray(new CursorWindow[0]);
} }
private static CursorWindow[] createCursorWindows(Cursor cursor) { private static CursorWindow[] createCursorWindows(Cursor cursor) {
if (cursor.getColumnCount() == 0) return new CursorWindow[0]; if (cursor.getColumnCount() == 0) return new CursorWindow[0];
List<CursorWindow> windows = new ArrayList<CursorWindow>(); List<CursorWindow> windows = new ArrayList<>();
CursorWindow current = null; CursorWindow current = null;
int rowIndex = 0; int rowIndex = 0;
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
@ -272,7 +272,7 @@ public class DataHolder extends AutoSafeParcelable implements Closeable {
windows.add(current); windows.add(current);
if (!current.allocRow()) { if (!current.allocRow()) {
windows.remove(current); windows.remove(current);
return windows.toArray(new CursorWindow[windows.size()]); return windows.toArray(new CursorWindow[0]);
} }
} }
for (int i = 0; i < cursor.getColumnCount(); i++) { for (int i = 0; i < cursor.getColumnCount(); i++) {
@ -297,7 +297,7 @@ public class DataHolder extends AutoSafeParcelable implements Closeable {
rowIndex++; rowIndex++;
} }
cursor.close(); cursor.close();
return windows.toArray(new CursorWindow[windows.size()]); return windows.toArray(new CursorWindow[0]);
} }
/** /**
@ -436,7 +436,7 @@ public class DataHolder extends AutoSafeParcelable implements Closeable {
} }
public void validateContents() { public void validateContents() {
columnIndices = new HashMap<String, Integer>(); columnIndices = new HashMap<>();
for (int i = 0; i < columns.length; i++) { for (int i = 0; i < columns.length; i++) {
columnIndices.put(columns[i], i); columnIndices.put(columns[i], i);
} }
@ -455,9 +455,9 @@ public class DataHolder extends AutoSafeParcelable implements Closeable {
private Builder(String[] columns, String uniqueColumn) { private Builder(String[] columns, String uniqueColumn) {
this.columns = columns; this.columns = columns;
this.rows = new ArrayList<Map<String, Object>>(); this.rows = new ArrayList<>();
this.uniqueColumn = uniqueColumn; this.uniqueColumn = uniqueColumn;
this.uniqueIndizes = new HashMap<Object, Integer>(); this.uniqueIndizes = new HashMap<>();
} }
/** /**
@ -509,7 +509,7 @@ public class DataHolder extends AutoSafeParcelable implements Closeable {
* @return {@link DataHolder.Builder} to continue construction. * @return {@link DataHolder.Builder} to continue construction.
*/ */
public Builder withRow(ContentValues values) { public Builder withRow(ContentValues values) {
HashMap<String, Object> row = new HashMap<String, Object>(); HashMap<String, Object> row = new HashMap<>();
for (Map.Entry<String, Object> entry : values.valueSet()) { for (Map.Entry<String, Object> entry : values.valueSet()) {
row.put(entry.getKey(), entry.getValue()); row.put(entry.getKey(), entry.getValue());
} }

View File

@ -24,7 +24,7 @@ import org.microg.safeparcel.AutoSafeParcelable;
import org.microg.safeparcel.SafeParceled; import org.microg.safeparcel.SafeParceled;
public class WebImage extends AutoSafeParcelable { public class WebImage extends AutoSafeParcelable {
public static final Creator<WebImage> CREATOR = new AutoCreator<WebImage>(WebImage.class); public static final Creator<WebImage> CREATOR = new AutoCreator<>(WebImage.class);
public WebImage () { public WebImage () {
this.uri = null; this.uri = null;
@ -59,6 +59,6 @@ public class WebImage extends AutoSafeParcelable {
} }
public String toString() { public String toString() {
return String.format(Locale.getDefault(), "Image %dx%d %s", new Object[]{Integer.valueOf(width), Integer.valueOf(height), uri.toString()}); return String.format(Locale.getDefault(), "Image %dx%d %s", width, height, uri.toString());
} }
} }

View File

@ -20,5 +20,5 @@ import org.microg.safeparcel.AutoSafeParcelable;
@Deprecated @Deprecated
public class AccountInfo extends AutoSafeParcelable { public class AccountInfo extends AutoSafeParcelable {
public static final Creator<AccountInfo> CREATOR = new AutoCreator<AccountInfo>(AccountInfo.class); public static final Creator<AccountInfo> CREATOR = new AutoCreator<>(AccountInfo.class);
} }

View File

@ -143,7 +143,7 @@ public interface GoogleApiClient {
* @see #registerConnectionFailedListener(OnConnectionFailedListener) * @see #registerConnectionFailedListener(OnConnectionFailedListener)
* @see #unregisterConnectionFailedListener(OnConnectionFailedListener) * @see #unregisterConnectionFailedListener(OnConnectionFailedListener)
*/ */
public boolean isConnectionFailedListenerRegistered(OnConnectionFailedListener listener); boolean isConnectionFailedListenerRegistered(OnConnectionFailedListener listener);
/** /**
* Closes the current connection to Google Play services and creates a new connection. * Closes the current connection to Google Play services and creates a new connection.
@ -198,7 +198,7 @@ public interface GoogleApiClient {
* @param listener the listener where the results of the asynchronous {@link #connect()} call * @param listener the listener where the results of the asynchronous {@link #connect()} call
* are delivered. * are delivered.
*/ */
public void registerConnectionFailedListener(OnConnectionFailedListener listener); void registerConnectionFailedListener(OnConnectionFailedListener listener);
/** /**
* Disconnects the client and stops automatic lifecycle management. Use this before creating a * Disconnects the client and stops automatic lifecycle management. Use this before creating a
@ -241,10 +241,10 @@ public interface GoogleApiClient {
@PublicApi @PublicApi
class Builder { class Builder {
private final Context context; private final Context context;
private final Map<Api, Api.ApiOptions> apis = new HashMap<Api, Api.ApiOptions>(); private final Map<Api, Api.ApiOptions> apis = new HashMap<>();
private final Set<ConnectionCallbacks> connectionCallbacks = new HashSet<ConnectionCallbacks>(); private final Set<ConnectionCallbacks> connectionCallbacks = new HashSet<>();
private final Set<OnConnectionFailedListener> connectionFailedListeners = new HashSet<OnConnectionFailedListener>(); private final Set<OnConnectionFailedListener> connectionFailedListeners = new HashSet<>();
private final Set<String> scopes = new HashSet<String>(); private final Set<String> scopes = new HashSet<>();
private String accountName; private String accountName;
private int clientId = -1; private int clientId = -1;
private FragmentActivity fragmentActivity; private FragmentActivity fragmentActivity;

View File

@ -40,20 +40,20 @@ public interface PendingResult<R extends Result> {
* Blocks until the task is completed. This is not allowed on the UI thread. The returned * Blocks until the task is completed. This is not allowed on the UI thread. The returned
* result object can have an additional failure mode of INTERRUPTED. * result object can have an additional failure mode of INTERRUPTED.
*/ */
public R await(); R await();
/** /**
* Blocks until the task is completed or has timed out waiting for the result. This is not * Blocks until the task is completed or has timed out waiting for the result. This is not
* allowed on the UI thread. The returned result object can have an additional failure mode * allowed on the UI thread. The returned result object can have an additional failure mode
* of either INTERRUPTED or TIMEOUT. * of either INTERRUPTED or TIMEOUT.
*/ */
public R await(long time, TimeUnit unit); R await(long time, TimeUnit unit);
public void cancel(); void cancel();
public boolean isCanceled(); boolean isCanceled();
public void setResultCallback(ResultCallback<R> callback, long time, TimeUnit unit); void setResultCallback(ResultCallback<R> callback, long time, TimeUnit unit);
public void setResultCallback(ResultCallback<R> callback); void setResultCallback(ResultCallback<R> callback);
} }

View File

@ -44,7 +44,7 @@ public class GmsConnector<C extends ApiClient, R extends Result> {
} }
public static <C extends ApiClient, R extends Result> PendingResult<R> call(GoogleApiClient client, Api api, GmsConnector.Callback<C, R> callback) { public static <C extends ApiClient, R extends Result> PendingResult<R> call(GoogleApiClient client, Api api, GmsConnector.Callback<C, R> callback) {
return new GmsConnector<C, R>(client, api, callback).connect(); return new GmsConnector<>(client, api, callback).connect();
} }
public AbstractPendingResult<R> connect() { public AbstractPendingResult<R> connect() {
@ -52,7 +52,7 @@ public class GmsConnector<C extends ApiClient, R extends Result> {
apiClient.incrementUsageCounter(); apiClient.incrementUsageCounter();
apiClient.getApiConnection(api); apiClient.getApiConnection(api);
Looper looper = apiClient.getLooper(); Looper looper = apiClient.getLooper();
final AbstractPendingResult<R> result = new AbstractPendingResult<R>(looper); final AbstractPendingResult<R> result = new AbstractPendingResult<>(looper);
Message msg = new Message(); Message msg = new Message();
msg.obj = result; msg.obj = result;
new Handler(looper).sendMessage(msg); new Handler(looper).sendMessage(msg);
@ -78,12 +78,9 @@ public class GmsConnector<C extends ApiClient, R extends Result> {
final AbstractPendingResult<R> result = (AbstractPendingResult<R>) msg.obj; final AbstractPendingResult<R> result = (AbstractPendingResult<R>) msg.obj;
try { try {
C connection = (C) apiClient.getApiConnection(api); C connection = (C) apiClient.getApiConnection(api);
callback.onClientAvailable(connection, new GmsConnector.Callback.ResultProvider<R>() { callback.onClientAvailable(connection, realResult -> {
@Override result.deliverResult(realResult);
public void onResultAvailable(R realResult) { apiClient.decrementUsageCounter();
result.deliverResult(realResult);
apiClient.decrementUsageCounter();
}
}); });
} catch (RemoteException ignored) { } catch (RemoteException ignored) {

View File

@ -39,7 +39,7 @@ public class MultiConnectionKeeper {
private static MultiConnectionKeeper INSTANCE; private static MultiConnectionKeeper INSTANCE;
private final Context context; private final Context context;
private final Map<String, Connection> connections = new HashMap<String, Connection>(); private final Map<String, Connection> connections = new HashMap<>();
public MultiConnectionKeeper(Context context) { public MultiConnectionKeeper(Context context) {
this.context = context; this.context = context;
@ -83,7 +83,7 @@ public class MultiConnectionKeeper {
public class Connection { public class Connection {
private final String actionString; private final String actionString;
private final Set<ServiceConnection> connectionForwards = new HashSet<ServiceConnection>(); private final Set<ServiceConnection> connectionForwards = new HashSet<>();
private boolean bound = false; private boolean bound = false;
private boolean connected = false; private boolean connected = false;
private IBinder binder; private IBinder binder;

View File

@ -34,7 +34,7 @@ public class AbstractPendingResult<R extends Result> implements PendingResult<R>
private ResultCallback<R> resultCallback; private ResultCallback<R> resultCallback;
public AbstractPendingResult(Looper looper) { public AbstractPendingResult(Looper looper) {
handler = new ResultCallbackHandler<R>(looper); handler = new ResultCallbackHandler<>(looper);
} }
private R getResult() { private R getResult() {

View File

@ -19,12 +19,10 @@ package org.microg.gms.common.api;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.os.Looper; import android.os.Looper;
import android.os.Message; import android.util.Log;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import android.util.Log;
import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.Api; import com.google.android.gms.common.api.Api;
import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.GoogleApiClient;
@ -43,10 +41,10 @@ public class GoogleApiClientImpl implements GoogleApiClient {
private final Context context; private final Context context;
private final Looper looper; private final Looper looper;
private final ApiClientSettings clientSettings; private final ApiClientSettings clientSettings;
private final Map<Api, Api.ApiOptions> apis = new HashMap<Api, Api.ApiOptions>(); private final Map<Api, Api.ApiOptions> apis = new HashMap<>();
private final Map<Api, ApiClient> apiConnections = new HashMap<Api, ApiClient>(); private final Map<Api, ApiClient> apiConnections = new HashMap<>();
private final Set<ConnectionCallbacks> connectionCallbacks = new HashSet<ConnectionCallbacks>(); private final Set<ConnectionCallbacks> connectionCallbacks = new HashSet<>();
private final Set<OnConnectionFailedListener> connectionFailedListeners = new HashSet<OnConnectionFailedListener>(); private final Set<OnConnectionFailedListener> connectionFailedListeners = new HashSet<>();
private final int clientId; private final int clientId;
private final ConnectionCallbacks baseConnectionCallbacks = new ConnectionCallbacks() { private final ConnectionCallbacks baseConnectionCallbacks = new ConnectionCallbacks() {
@Override @Override
@ -65,16 +63,12 @@ public class GoogleApiClientImpl implements GoogleApiClient {
} }
} }
}; };
private final OnConnectionFailedListener baseConnectionFailedListener = new private final OnConnectionFailedListener baseConnectionFailedListener = result -> {
OnConnectionFailedListener() { Log.d(TAG, "OnConnectionFailedListener : onConnectionFailed()");
@Override for (OnConnectionFailedListener listener : connectionFailedListeners) {
public void onConnectionFailed(ConnectionResult result) { listener.onConnectionFailed(result);
Log.d(TAG, "OnConnectionFailedListener : onConnectionFailed()"); }
for (OnConnectionFailedListener listener : connectionFailedListeners) { };
listener.onConnectionFailed(result);
}
}
};
private int usageCounter = 0; private int usageCounter = 0;
private boolean shouldDisconnect = false; private boolean shouldDisconnect = false;

View File

@ -17,6 +17,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
public class GoogleApiManager { public class GoogleApiManager {
private static GoogleApiManager instance; private static GoogleApiManager instance;
@ -52,7 +53,7 @@ public class GoogleApiManager {
if (connected) { if (connected) {
apiCall.execute(client, completionSource); apiCall.execute(client, completionSource);
} else { } else {
waitingApiCallMap.get(new ApiInstance(api)).add(new WaitingApiCall<R>((PendingGoogleApiCall<R, ApiClient>) apiCall, completionSource)); waitingApiCallMap.get(new ApiInstance(api)).add(new WaitingApiCall<>((PendingGoogleApiCall<R, ApiClient>) apiCall, completionSource));
if (!connecting) { if (!connecting) {
client.connect(); client.connect();
} }
@ -134,8 +135,8 @@ public class GoogleApiManager {
WaitingApiCall<?> that = (WaitingApiCall<?>) o; WaitingApiCall<?> that = (WaitingApiCall<?>) o;
if (apiCall != null ? !apiCall.equals(that.apiCall) : that.apiCall != null) return false; if (!Objects.equals(apiCall, that.apiCall)) return false;
return completionSource != null ? completionSource.equals(that.completionSource) : that.completionSource == null; return Objects.equals(completionSource, that.completionSource);
} }
@Override @Override
@ -166,8 +167,8 @@ public class GoogleApiManager {
ApiInstance that = (ApiInstance) o; ApiInstance that = (ApiInstance) o;
if (apiClass != null ? !apiClass.equals(that.apiClass) : that.apiClass != null) return false; if (!Objects.equals(apiClass, that.apiClass)) return false;
return apiOptions != null ? apiOptions.equals(that.apiOptions) : that.apiOptions == null; return Objects.equals(apiOptions, that.apiOptions);
} }
@Override @Override

View File

@ -50,7 +50,7 @@ class ResultCallbackHandler<R extends Result> extends Handler {
public void sendResultCallback(ResultCallback<R> callback, R result) { public void sendResultCallback(ResultCallback<R> callback, R result) {
Message message = new Message(); Message message = new Message();
message.what = CALLBACK_ON_COMPLETE; message.what = CALLBACK_ON_COMPLETE;
message.obj = new OnCompleteObject<R>(callback, result); message.obj = new OnCompleteObject<>(callback, result);
sendMessage(message); sendMessage(message);
} }

View File

@ -23,5 +23,5 @@ import org.microg.gms.common.PublicApi;
*/ */
@PublicApi @PublicApi
public interface Result { public interface Result {
public Status getStatus(); Status getStatus();
} }

View File

@ -29,5 +29,5 @@ public interface ResultCallback<R extends Result> {
* *
* @param result The result from the API call. May not be null. * @param result The result from the API call. May not be null.
*/ */
public void onResult(R result); void onResult(R result);
} }

View File

@ -61,5 +61,5 @@ public class Scope extends AutoSafeParcelable {
return scopeUri; return scopeUri;
} }
public static final Creator<Scope> CREATOR = new AutoCreator<Scope>(Scope.class); public static final Creator<Scope> CREATOR = new AutoCreator<>(Scope.class);
} }

View File

@ -176,5 +176,5 @@ public final class Status extends AutoSafeParcelable implements Result {
} }
} }
public static final Creator<Status> CREATOR = new AutoCreator<Status>(Status.class); public static final Creator<Status> CREATOR = new AutoCreator<>(Status.class);
} }

View File

@ -79,5 +79,5 @@ public class GetServiceRequest extends AutoSafeParcelable {
'}'; '}';
} }
public static Creator<GetServiceRequest> CREATOR = new AutoCreator<GetServiceRequest>(GetServiceRequest.class); public static Creator<GetServiceRequest> CREATOR = new AutoCreator<>(GetServiceRequest.class);
} }

View File

@ -19,5 +19,5 @@ package com.google.android.gms.common.internal;
import org.microg.safeparcel.AutoSafeParcelable; import org.microg.safeparcel.AutoSafeParcelable;
public class ValidateAccountRequest extends AutoSafeParcelable { public class ValidateAccountRequest extends AutoSafeParcelable {
public static Creator<ValidateAccountRequest> CREATOR = new AutoCreator<ValidateAccountRequest>(ValidateAccountRequest.class); public static Creator<ValidateAccountRequest> CREATOR = new AutoCreator<>(ValidateAccountRequest.class);
} }

View File

@ -72,6 +72,6 @@ public class ObjectWrapper<T> extends IObjectWrapper.Stub {
} }
public static <T> ObjectWrapper<T> wrap(T t) { public static <T> ObjectWrapper<T> wrap(T t) {
return new ObjectWrapper<T>(t); return new ObjectWrapper<>(t);
} }
} }

View File

@ -81,5 +81,5 @@ public class ApplicationMetadata extends AutoSafeParcelable {
return sb.toString(); return sb.toString();
} }
public static final Creator<ApplicationMetadata> CREATOR = new AutoCreator<ApplicationMetadata>(ApplicationMetadata.class); public static final Creator<ApplicationMetadata> CREATOR = new AutoCreator<>(ApplicationMetadata.class);
} }

View File

@ -32,5 +32,5 @@ public class ApplicationStatus extends AutoSafeParcelable {
@SafeParceled(2) @SafeParceled(2)
private String applicationStatus; private String applicationStatus;
public static final Creator<ApplicationStatus> CREATOR = new AutoCreator<ApplicationStatus>(ApplicationStatus.class); public static final Creator<ApplicationStatus> CREATOR = new AutoCreator<>(ApplicationStatus.class);
} }

View File

@ -27,7 +27,6 @@ import org.microg.safeparcel.AutoSafeParcelable;
import org.microg.safeparcel.SafeParceled; import org.microg.safeparcel.SafeParceled;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.Inet4Address;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -47,7 +46,7 @@ public class CastDevice extends AutoSafeParcelable {
this.servicePort = port; this.servicePort = port;
this.deviceVersion = deviceVersion; this.deviceVersion = deviceVersion;
this.friendlyName = friendlyName; this.friendlyName = friendlyName;
this.icons = new ArrayList<WebImage>(); this.icons = new ArrayList<>();
this.icons.add(new WebImage(Uri.parse(String.format("http://%s:8008%s", this.address, iconPath)))); this.icons.add(new WebImage(Uri.parse(String.format("http://%s:8008%s", this.address, iconPath))));
this.modelName = modelName; this.modelName = modelName;
this.capabilities = capabilities; this.capabilities = capabilities;
@ -190,5 +189,5 @@ public class CastDevice extends AutoSafeParcelable {
"}"; "}";
} }
public static Creator<CastDevice> CREATOR = new AutoCreator<CastDevice>(CastDevice.class); public static Creator<CastDevice> CREATOR = new AutoCreator<>(CastDevice.class);
} }

View File

@ -45,5 +45,5 @@ public class CastDeviceStatus extends AutoSafeParcelable {
@SafeParceled(6) @SafeParceled(6)
private int standbyState; private int standbyState;
public static final Creator<CastDeviceStatus> CREATOR = new AutoCreator<CastDeviceStatus>(CastDeviceStatus.class); public static final Creator<CastDeviceStatus> CREATOR = new AutoCreator<>(CastDeviceStatus.class);
} }

View File

@ -25,5 +25,5 @@ public class JoinOptions extends AutoSafeParcelable {
@SafeParceled(2) @SafeParceled(2)
private int connectionType = 0; private int connectionType = 0;
public static Creator<JoinOptions> CREATOR = new AutoCreator<JoinOptions>(JoinOptions.class); public static Creator<JoinOptions> CREATOR = new AutoCreator<>(JoinOptions.class);
} }

View File

@ -43,5 +43,5 @@ public class LaunchOptions extends AutoSafeParcelable {
this.relaunchIfRunning = relaunchIfRunning; this.relaunchIfRunning = relaunchIfRunning;
} }
public static Creator<LaunchOptions> CREATOR = new AutoCreator<LaunchOptions>(LaunchOptions.class); public static Creator<LaunchOptions> CREATOR = new AutoCreator<>(LaunchOptions.class);
} }

View File

@ -23,7 +23,6 @@ import com.google.android.gms.cast.framework.media.CastMediaOptions;
import com.google.android.gms.cast.LaunchOptions; import com.google.android.gms.cast.LaunchOptions;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
public class CastOptions extends AutoSafeParcelable { public class CastOptions extends AutoSafeParcelable {
@SafeParceled(1) @SafeParceled(1)
@ -61,5 +60,5 @@ public class CastOptions extends AutoSafeParcelable {
return this.launchOptions; return this.launchOptions;
} }
public static Creator<CastOptions> CREATOR = new AutoCreator<CastOptions>(CastOptions.class); public static Creator<CastOptions> CREATOR = new AutoCreator<>(CastOptions.class);
} }

View File

@ -32,5 +32,5 @@ public class CastMediaOptions extends AutoSafeParcelable {
@SafeParceled(5) @SafeParceled(5)
public NotificationOptions notificationOptions; public NotificationOptions notificationOptions;
public static Creator<CastMediaOptions> CREATOR = new AutoCreator<CastMediaOptions>(CastMediaOptions.class); public static Creator<CastMediaOptions> CREATOR = new AutoCreator<>(CastMediaOptions.class);
} }

View File

@ -92,5 +92,5 @@ public class NotificationOptions extends AutoSafeParcelable {
@SafeParceled(33) @SafeParceled(33)
public INotificationActionsProvider notificationActionsProvider; public INotificationActionsProvider notificationActionsProvider;
public static Creator<NotificationOptions> CREATOR = new AutoCreator<NotificationOptions>(NotificationOptions.class); public static Creator<NotificationOptions> CREATOR = new AutoCreator<>(NotificationOptions.class);
} }

View File

@ -89,7 +89,7 @@ public final class Cast {
/** /**
* Token to pass to {@link GoogleApiClient.Builder#addApi(Api)} to enable the Cast features. * Token to pass to {@link GoogleApiClient.Builder#addApi(Api)} to enable the Cast features.
*/ */
public static final Api<CastOptions> API = new Api<CastOptions>(new CastApiClientBuilder()); public static final Api<CastOptions> API = new Api<>(new CastApiClientBuilder());
/** /**
* An implementation of the CastApi interface. The interface is used to interact with a cast device. * An implementation of the CastApi interface. The interface is used to interact with a cast device.

View File

@ -32,7 +32,7 @@ public final class CastRemoteDisplay {
/** /**
* Token to pass to {@link GoogleApiClient.Builder#addApi(Api)} to enable the CastRemoteDisplay features. * Token to pass to {@link GoogleApiClient.Builder#addApi(Api)} to enable the CastRemoteDisplay features.
*/ */
public static final Api<CastRemoteDisplayOptions> API = new Api<CastRemoteDisplayOptions>(new CastRemoteDisplayApiClientBuilder()); public static final Api<CastRemoteDisplayOptions> API = new Api<>(new CastRemoteDisplayApiClientBuilder());
/** /**
* An implementation of the CastRemoteDisplayAPI interface. The interface is used to interact with a cast device. * An implementation of the CastRemoteDisplayAPI interface. The interface is used to interact with a cast device.

View File

@ -102,10 +102,10 @@ public abstract class AbstractAboutFragment extends Fragment {
aboutRoot.findViewById(android.R.id.summary).setVisibility(View.VISIBLE); aboutRoot.findViewById(android.R.id.summary).setVisibility(View.VISIBLE);
} }
List<Library> libraries = new ArrayList<Library>(); List<Library> libraries = new ArrayList<>();
collectLibraries(libraries); collectLibraries(libraries);
Collections.sort(libraries); Collections.sort(libraries);
((ListView) aboutRoot.findViewById(android.R.id.list)).setAdapter(new LibraryAdapter(getContext(), libraries.toArray(new Library[libraries.size()]))); ((ListView) aboutRoot.findViewById(android.R.id.list)).setAdapter(new LibraryAdapter(getContext(), libraries.toArray(new Library[0])));
return aboutRoot; return aboutRoot;
} }

View File

@ -12,7 +12,7 @@ import java.util.List;
public abstract class AbstractDashboardActivity extends AppCompatActivity { public abstract class AbstractDashboardActivity extends AppCompatActivity {
protected int preferencesResource = 0; protected int preferencesResource = 0;
private final List<Condition> conditions = new ArrayList<Condition>(); private final List<Condition> conditions = new ArrayList<>();
private ViewGroup conditionContainer; private ViewGroup conditionContainer;
@Override @Override
@ -47,19 +47,13 @@ public abstract class AbstractDashboardActivity extends AppCompatActivity {
private void evaluateConditionAsync(final Condition condition) { private void evaluateConditionAsync(final Condition condition) {
if (condition.willBeEvaluating()) { if (condition.willBeEvaluating()) {
new Thread(new Runnable() { new Thread(() -> {
@Override if (condition.isActive(AbstractDashboardActivity.this)) {
public void run() { runOnUiThread(() -> {
if (condition.isActive(AbstractDashboardActivity.this)) { if (conditions.contains(condition) && condition.isEvaluated()) {
runOnUiThread(new Runnable() { addConditionToView(condition);
@Override }
public void run() { });
if (conditions.contains(condition) && condition.isEvaluated()) {
addConditionToView(condition);
}
}
});
}
} }
}).start(); }).start();
} }

View File

@ -108,16 +108,13 @@ public class Condition {
} }
final View detailGroup = view.findViewById(R.id.detail_group); final View detailGroup = view.findViewById(R.id.detail_group);
final ImageView expandIndicator = (ImageView) view.findViewById(R.id.expand_indicator); final ImageView expandIndicator = (ImageView) view.findViewById(R.id.expand_indicator);
View.OnClickListener expandListener = new View.OnClickListener() { View.OnClickListener expandListener = v -> {
@Override if (detailGroup.getVisibility() == View.VISIBLE) {
public void onClick(View v) { expandIndicator.setImageDrawable(ResourcesCompat.getDrawable(context.getResources(), R.drawable.ic_expand_more, context.getTheme()));
if (detailGroup.getVisibility() == View.VISIBLE) { detailGroup.setVisibility(View.GONE);
expandIndicator.setImageDrawable(ResourcesCompat.getDrawable(context.getResources(), R.drawable.ic_expand_more, context.getTheme())); } else {
detailGroup.setVisibility(View.GONE); expandIndicator.setImageDrawable(ResourcesCompat.getDrawable(context.getResources(), R.drawable.ic_expand_less, context.getTheme()));
} else { detailGroup.setVisibility(View.VISIBLE);
expandIndicator.setImageDrawable(ResourcesCompat.getDrawable(context.getResources(), R.drawable.ic_expand_less, context.getTheme()));
detailGroup.setVisibility(View.VISIBLE);
}
} }
}; };
view.findViewById(R.id.collapsed_group).setOnClickListener(expandListener); view.findViewById(R.id.collapsed_group).setOnClickListener(expandListener);

View File

@ -40,7 +40,7 @@ import static android.os.Build.VERSION.SDK_INT;
public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedChangeListener, public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedChangeListener,
View.OnClickListener { View.OnClickListener {
public static interface OnSwitchChangeListener { public interface OnSwitchChangeListener {
/** /**
* Called when the checked state of the Switch has changed. * Called when the checked state of the Switch has changed.
* *
@ -58,7 +58,7 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC
private String mSummary; private String mSummary;
private ArrayList<OnSwitchChangeListener> mSwitchChangeListeners = private ArrayList<OnSwitchChangeListener> mSwitchChangeListeners =
new ArrayList<OnSwitchChangeListener>(); new ArrayList<>();
public SwitchBar(Context context) { public SwitchBar(Context context) {
this(context, null); this(context, null);
@ -85,12 +85,7 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC
mSwitch.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO); mSwitch.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
} }
addOnSwitchChangeListener(new OnSwitchChangeListener() { addOnSwitchChangeListener((switchView, isChecked) -> setTextViewLabel(isChecked));
@Override
public void onSwitchChanged(SwitchCompat switchView, boolean isChecked) {
setTextViewLabel(isChecked);
}
});
setOnClickListener(this); setOnClickListener(this);

View File

@ -30,7 +30,6 @@ import com.google.android.gms.cast.framework.CastOptions;
import com.google.android.gms.cast.framework.IAppVisibilityListener; import com.google.android.gms.cast.framework.IAppVisibilityListener;
import com.google.android.gms.cast.framework.ICastContext; import com.google.android.gms.cast.framework.ICastContext;
import com.google.android.gms.cast.framework.IDiscoveryManager; import com.google.android.gms.cast.framework.IDiscoveryManager;
import com.google.android.gms.cast.framework.ISessionManager;
import com.google.android.gms.cast.framework.ISessionProvider; import com.google.android.gms.cast.framework.ISessionProvider;
import com.google.android.gms.dynamic.IObjectWrapper; import com.google.android.gms.dynamic.IObjectWrapper;
import com.google.android.gms.dynamic.ObjectWrapper; import com.google.android.gms.dynamic.ObjectWrapper;

View File

@ -16,7 +16,6 @@
package com.google.android.gms.cast.framework.internal; package com.google.android.gms.cast.framework.internal;
import android.content.Context;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Log; import android.util.Log;
@ -30,7 +29,6 @@ import com.google.android.gms.cast.framework.ISessionProxy;
import com.google.android.gms.cast.framework.media.CastMediaOptions; import com.google.android.gms.cast.framework.media.CastMediaOptions;
import com.google.android.gms.cast.framework.internal.CastContextImpl; import com.google.android.gms.cast.framework.internal.CastContextImpl;
import com.google.android.gms.cast.framework.internal.CastSessionImpl; import com.google.android.gms.cast.framework.internal.CastSessionImpl;
import com.google.android.gms.cast.framework.internal.MediaRouterCallbackImpl;
import com.google.android.gms.cast.framework.internal.SessionImpl; import com.google.android.gms.cast.framework.internal.SessionImpl;
import com.google.android.gms.cast.framework.media.IMediaNotificationService; import com.google.android.gms.cast.framework.media.IMediaNotificationService;
import com.google.android.gms.cast.framework.media.internal.IFetchBitmapTask; import com.google.android.gms.cast.framework.media.internal.IFetchBitmapTask;

View File

@ -16,14 +16,11 @@
package com.google.android.gms.cast.framework.internal; package com.google.android.gms.cast.framework.internal;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Log; import android.util.Log;
import com.google.android.gms.cast.CastDevice; import com.google.android.gms.cast.CastDevice;
import com.google.android.gms.cast.framework.ISession;
import com.google.android.gms.dynamic.IObjectWrapper;
import com.google.android.gms.dynamic.ObjectWrapper; import com.google.android.gms.dynamic.ObjectWrapper;
public class MediaRouterCallbackImpl extends IMediaRouterCallback.Stub { public class MediaRouterCallbackImpl extends IMediaRouterCallback.Stub {

View File

@ -22,7 +22,6 @@ import android.util.Log;
import com.google.android.gms.cast.framework.CastState; import com.google.android.gms.cast.framework.CastState;
import com.google.android.gms.cast.framework.ICastStateListener; import com.google.android.gms.cast.framework.ICastStateListener;
import com.google.android.gms.cast.framework.ISession;
import com.google.android.gms.cast.framework.ISessionManager; import com.google.android.gms.cast.framework.ISessionManager;
import com.google.android.gms.cast.framework.ISessionManagerListener; import com.google.android.gms.cast.framework.ISessionManagerListener;
import com.google.android.gms.cast.framework.internal.CastContextImpl; import com.google.android.gms.cast.framework.internal.CastContextImpl;
@ -44,7 +43,7 @@ public class SessionManagerImpl extends ISessionManager.Stub {
private Set<ISessionManagerListener> sessionManagerListeners = new HashSet<ISessionManagerListener>(); private Set<ISessionManagerListener> sessionManagerListeners = new HashSet<ISessionManagerListener>();
private Set<ICastStateListener> castStateListeners = new HashSet<ICastStateListener>(); private Set<ICastStateListener> castStateListeners = new HashSet<ICastStateListener>();
private Map<String, SessionImpl> routeSessions = new HashMap<String, SessionImpl>(); private Map<String, SessionImpl> routeSessions = new HashMap<>();
private SessionImpl currentSession; private SessionImpl currentSession;

View File

@ -18,8 +18,6 @@ package com.google.android.gms.cast.media;
import org.microg.gms.cast.CastMediaRouteProvider; import org.microg.gms.cast.CastMediaRouteProvider;
import android.util.Log;
import androidx.mediarouter.media.MediaRouteProvider; import androidx.mediarouter.media.MediaRouteProvider;
import androidx.mediarouter.media.MediaRouteProviderService; import androidx.mediarouter.media.MediaRouteProviderService;

View File

@ -25,7 +25,6 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html; import android.text.Html;
import android.util.Log; import android.util.Log;
@ -39,7 +38,6 @@ import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
import com.mgoogle.android.gms.R; import com.mgoogle.android.gms.R;
import com.squareup.wire.Wire;
import org.microg.gms.common.PackageUtils; import org.microg.gms.common.PackageUtils;
import org.microg.gms.people.PeopleManager; import org.microg.gms.people.PeopleManager;
@ -119,18 +117,10 @@ public class AskPermissionActivity extends AccountAuthenticatorActivity {
if (profileIcon != null) { if (profileIcon != null) {
((ImageView) findViewById(R.id.account_photo)).setImageBitmap(profileIcon); ((ImageView) findViewById(R.id.account_photo)).setImageBitmap(profileIcon);
} else { } else {
new Thread(new Runnable() { new Thread(() -> {
@Override final Bitmap profileIcon1 = PeopleManager.getOwnerAvatarBitmap(AskPermissionActivity.this, account.name, true);
public void run() { runOnUiThread(() -> ((ImageView) findViewById(R.id.account_photo)).setImageBitmap(profileIcon1));
final Bitmap profileIcon = PeopleManager.getOwnerAvatarBitmap(AskPermissionActivity.this, account.name, true);
runOnUiThread(new Runnable() {
@Override
public void run() {
((ImageView) findViewById(R.id.account_photo)).setImageBitmap(profileIcon);
}
});
}
}).start(); }).start();
} }
@ -140,18 +130,8 @@ public class AskPermissionActivity extends AccountAuthenticatorActivity {
} else { } else {
((TextView) findViewById(R.id.title)).setText(getString(R.string.ask_service_permission_title, appLabel)); ((TextView) findViewById(R.id.title)).setText(getString(R.string.ask_service_permission_title, appLabel));
} }
findViewById(android.R.id.button1).setOnClickListener(new View.OnClickListener() { findViewById(android.R.id.button1).setOnClickListener(v -> onAllow());
@Override findViewById(android.R.id.button2).setOnClickListener(v -> onDeny());
public void onClick(View v) {
onAllow();
}
});
findViewById(android.R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onDeny();
}
});
((ListView) findViewById(R.id.permissions)).setAdapter(new PermissionAdapter()); ((ListView) findViewById(R.id.permissions)).setAdapter(new PermissionAdapter());
} }
@ -161,24 +141,21 @@ public class AskPermissionActivity extends AccountAuthenticatorActivity {
findViewById(android.R.id.button2).setEnabled(false); findViewById(android.R.id.button2).setEnabled(false);
findViewById(R.id.progress_bar).setVisibility(VISIBLE); findViewById(R.id.progress_bar).setVisibility(VISIBLE);
findViewById(R.id.no_progress_bar).setVisibility(GONE); findViewById(R.id.no_progress_bar).setVisibility(GONE);
new Thread(new Runnable() { new Thread(() -> {
@Override try {
public void run() { AuthResponse response = authManager.requestAuth(fromAccountManager);
try { Bundle result = new Bundle();
AuthResponse response = authManager.requestAuth(fromAccountManager); result.putString(KEY_AUTHTOKEN, response.auth);
Bundle result = new Bundle(); result.putString(KEY_ACCOUNT_NAME, account.name);
result.putString(KEY_AUTHTOKEN, response.auth); result.putString(KEY_ACCOUNT_TYPE, account.type);
result.putString(KEY_ACCOUNT_NAME, account.name); result.putString(KEY_ANDROID_PACKAGE_NAME, packageName);
result.putString(KEY_ACCOUNT_TYPE, account.type); result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
result.putString(KEY_ANDROID_PACKAGE_NAME, packageName); setAccountAuthenticatorResult(result);
result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true); } catch (IOException e) {
setAccountAuthenticatorResult(result); Log.w(TAG, e);
} catch (IOException e) {
Log.w(TAG, e);
}
finish();
} }
finish();
}).start(); }).start();
} }

View File

@ -21,9 +21,10 @@ import android.accounts.AccountManager;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Build; import android.os.Build;
import android.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import androidx.preference.PreferenceManager;
import org.microg.gms.common.PackageUtils; import org.microg.gms.common.PackageUtils;
import java.io.IOException; import java.io.IOException;
@ -117,10 +118,7 @@ public class AuthManager {
} }
} }
String perm = getUserData(buildPermKey()); String perm = getUserData(buildPermKey());
if (!"1".equals(perm)) { return "1".equals(perm);
return false;
}
return true;
} }
public void setExpiry(long expiry) { public void setExpiry(long expiry) {

View File

@ -137,7 +137,7 @@ public class AuthManagerServiceImpl extends IAuthManagerService.Stub {
private List<Scope> getScopes(String scope) { private List<Scope> getScopes(String scope) {
if (!scope.startsWith("oauth2:")) return null; if (!scope.startsWith("oauth2:")) return null;
String[] strings = scope.substring(7).split(" "); String[] strings = scope.substring(7).split(" ");
List<Scope> res = new ArrayList<Scope>(); List<Scope> res = new ArrayList<>();
for (String string : strings) { for (String string : strings) {
res.add(new Scope(string)); res.add(new Scope(string));
} }

View File

@ -23,7 +23,6 @@ import android.os.Bundle;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
@ -39,18 +38,8 @@ public abstract class AssistantActivity extends Activity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.login_assistant); setContentView(R.layout.login_assistant);
formatTitle(); formatTitle();
findViewById(R.id.next_button).setOnClickListener(new View.OnClickListener() { findViewById(R.id.next_button).setOnClickListener(v -> onNextButtonClicked());
@Override findViewById(R.id.back_button).setOnClickListener(v -> onBackButtonClicked());
public void onClick(View v) {
onNextButtonClicked();
}
});
findViewById(R.id.back_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackButtonClicked();
}
});
} }
@SuppressLint("WrongViewCast") @SuppressLint("WrongViewCast")

View File

@ -21,7 +21,6 @@ import android.accounts.AccountManager;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color; import android.graphics.Color;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
@ -36,7 +35,6 @@ import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.webkit.CookieManager; import android.webkit.CookieManager;
import android.webkit.JavascriptInterface; import android.webkit.JavascriptInterface;
import android.webkit.ValueCallback;
import android.webkit.WebSettings; import android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
import android.webkit.WebViewClient; import android.webkit.WebViewClient;

View File

@ -27,8 +27,6 @@ import android.os.Bundle;
import android.util.Base64; import android.util.Base64;
import android.util.Log; import android.util.Log;
import com.mgoogle.android.gms.R;
import org.microg.gms.auth.AskPermissionActivity; import org.microg.gms.auth.AskPermissionActivity;
import org.microg.gms.auth.AuthConstants; import org.microg.gms.auth.AuthConstants;
import org.microg.gms.auth.AuthManager; import org.microg.gms.auth.AuthManager;
@ -147,8 +145,10 @@ class AccountAuthenticator extends AbstractAccountAuthenticator {
if (services != null) { if (services != null) {
List<String> servicesList = Arrays.asList(services.split(",")); List<String> servicesList = Arrays.asList(services.split(","));
for (String feature : features) { for (String feature : features) {
if (feature.startsWith("service_") && !servicesList.contains(feature.substring(8))) if (feature.startsWith("service_") && !servicesList.contains(feature.substring(8))) {
res = false; res = false;
break;
}
} }
} else { } else {
res = false; res = false;

View File

@ -18,14 +18,10 @@ package org.microg.gms.cast;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import android.content.Context; import android.content.Context;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcel;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Base64;
import android.util.Log; import android.util.Log;
import com.google.android.gms.cast.ApplicationMetadata; import com.google.android.gms.cast.ApplicationMetadata;
@ -37,10 +33,7 @@ import com.google.android.gms.cast.LaunchOptions;
import com.google.android.gms.cast.internal.ICastDeviceController; import com.google.android.gms.cast.internal.ICastDeviceController;
import com.google.android.gms.cast.internal.ICastDeviceControllerListener; import com.google.android.gms.cast.internal.ICastDeviceControllerListener;
import com.google.android.gms.common.api.CommonStatusCodes; import com.google.android.gms.common.api.CommonStatusCodes;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.common.images.WebImage;
import com.google.android.gms.common.internal.BinderWrapper; import com.google.android.gms.common.internal.BinderWrapper;
import com.google.android.gms.common.internal.GetServiceRequest;
import su.litvak.chromecast.api.v2.Application; import su.litvak.chromecast.api.v2.Application;
import su.litvak.chromecast.api.v2.ChromeCast; import su.litvak.chromecast.api.v2.ChromeCast;
@ -51,7 +44,6 @@ import su.litvak.chromecast.api.v2.ChromeCastRawMessageListener;
import su.litvak.chromecast.api.v2.ChromeCastConnectionEvent; import su.litvak.chromecast.api.v2.ChromeCastConnectionEvent;
import su.litvak.chromecast.api.v2.ChromeCastSpontaneousEvent; import su.litvak.chromecast.api.v2.ChromeCastSpontaneousEvent;
import su.litvak.chromecast.api.v2.ChromeCastRawMessage; import su.litvak.chromecast.api.v2.ChromeCastRawMessage;
import su.litvak.chromecast.api.v2.AppEvent;
public class CastDeviceControllerImpl extends ICastDeviceController.Stub implements public class CastDeviceControllerImpl extends ICastDeviceController.Stub implements
ChromeCastConnectionEventListener, ChromeCastConnectionEventListener,
@ -107,8 +99,8 @@ public class CastDeviceControllerImpl extends ICastDeviceController.Stub impleme
metadata.name = app.name; metadata.name = app.name;
Log.d(TAG, "unimplemented: ApplicationMetadata.images"); Log.d(TAG, "unimplemented: ApplicationMetadata.images");
Log.d(TAG, "unimplemented: ApplicationMetadata.senderAppLaunchUri"); Log.d(TAG, "unimplemented: ApplicationMetadata.senderAppLaunchUri");
metadata.images = new ArrayList<WebImage>(); metadata.images = new ArrayList<>();
metadata.namespaces = new ArrayList<String>(); metadata.namespaces = new ArrayList<>();
for(Namespace namespace : app.namespaces) { for(Namespace namespace : app.namespaces) {
metadata.namespaces.add(namespace.name); metadata.namespaces.add(namespace.name);
} }
@ -119,8 +111,6 @@ public class CastDeviceControllerImpl extends ICastDeviceController.Stub impleme
@Override @Override
public void spontaneousEventReceived(ChromeCastSpontaneousEvent event) { public void spontaneousEventReceived(ChromeCastSpontaneousEvent event) {
switch (event.getType()) { switch (event.getType()) {
case MEDIA_STATUS:
break;
case STATUS: case STATUS:
su.litvak.chromecast.api.v2.Status status = (su.litvak.chromecast.api.v2.Status)event.getData(); su.litvak.chromecast.api.v2.Status status = (su.litvak.chromecast.api.v2.Status)event.getData();
Application app = status.getRunningApp(); Application app = status.getRunningApp();
@ -132,11 +122,11 @@ public class CastDeviceControllerImpl extends ICastDeviceController.Stub impleme
int standbyState = status.standBy ? 1 : 0; int standbyState = status.standBy ? 1 : 0;
this.onDeviceStatusChanged(new CastDeviceStatus(status.volume.level, status.volume.muted, activeInputState, metadata, standbyState)); this.onDeviceStatusChanged(new CastDeviceStatus(status.volume.level, status.volume.muted, activeInputState, metadata, standbyState));
break; break;
case APPEVENT:
break;
case CLOSE: case CLOSE:
this.onApplicationDisconnected(CommonStatusCodes.SUCCESS); this.onApplicationDisconnected(CommonStatusCodes.SUCCESS);
break; break;
case MEDIA_STATUS:
case APPEVENT:
default: default:
break; break;
} }
@ -147,12 +137,10 @@ public class CastDeviceControllerImpl extends ICastDeviceController.Stub impleme
switch (message.getPayloadType()) { switch (message.getPayloadType()) {
case STRING: case STRING:
String response = message.getPayloadUtf8(); String response = message.getPayloadUtf8();
if (requestId == null) { if (requestId != null) {
this.onTextMessageReceived(message.getNamespace(), response);
} else {
this.onSendMessageSuccess(response, requestId); this.onSendMessageSuccess(response, requestId);
this.onTextMessageReceived(message.getNamespace(), response);
} }
this.onTextMessageReceived(message.getNamespace(), response);
break; break;
case BINARY: case BINARY:
byte[] payload = message.getPayloadBinary(); byte[] payload = message.getPayloadBinary();
@ -167,7 +155,6 @@ public class CastDeviceControllerImpl extends ICastDeviceController.Stub impleme
this.chromecast.disconnect(); this.chromecast.disconnect();
} catch (IOException e) { } catch (IOException e) {
Log.e(TAG, "Error disconnecting chromecast: " + e.getMessage()); Log.e(TAG, "Error disconnecting chromecast: " + e.getMessage());
return;
} }
} }
@ -178,7 +165,6 @@ public class CastDeviceControllerImpl extends ICastDeviceController.Stub impleme
} catch (IOException e) { } catch (IOException e) {
Log.w(TAG, "Error sending cast message: " + e.getMessage()); Log.w(TAG, "Error sending cast message: " + e.getMessage());
this.onSendMessageFailure("", requestId, CommonStatusCodes.NETWORK_ERROR); this.onSendMessageFailure("", requestId, CommonStatusCodes.NETWORK_ERROR);
return;
} }
} }

View File

@ -16,26 +16,14 @@
package org.microg.gms.cast; package org.microg.gms.cast;
import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.Parcel;
import android.util.ArrayMap;
import android.util.Log;
import com.google.android.gms.cast.CastDevice;
import com.google.android.gms.cast.internal.ICastDeviceControllerListener;
import com.google.android.gms.common.internal.GetServiceRequest; import com.google.android.gms.common.internal.GetServiceRequest;
import com.google.android.gms.common.internal.BinderWrapper;
import com.google.android.gms.common.internal.IGmsCallbacks; import com.google.android.gms.common.internal.IGmsCallbacks;
import org.microg.gms.BaseService; import org.microg.gms.BaseService;
import org.microg.gms.common.GmsService; import org.microg.gms.common.GmsService;
import su.litvak.chromecast.api.v2.ChromeCast;
import su.litvak.chromecast.api.v2.ChromeCasts;
import su.litvak.chromecast.api.v2.Status;
import su.litvak.chromecast.api.v2.ChromeCastsListener;
public class CastDeviceControllerService extends BaseService { public class CastDeviceControllerService extends BaseService {
private static final String TAG = CastDeviceControllerService.class.getSimpleName(); private static final String TAG = CastDeviceControllerService.class.getSimpleName();

View File

@ -16,36 +16,13 @@
package org.microg.gms.cast; package org.microg.gms.cast;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.os.AsyncTask;
import android.os.Handler;
import android.util.Log; import android.util.Log;
import androidx.mediarouter.media.MediaRouteProvider; import androidx.mediarouter.media.MediaRouteProvider;
import androidx.mediarouter.media.MediaRouter; import androidx.mediarouter.media.MediaRouter;
import com.google.android.gms.common.images.WebImage;
import com.google.android.gms.cast.CastDevice;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Inet4Address;
import java.net.UnknownHostException;
import java.io.IOException;
import java.lang.Thread;
import java.lang.Runnable;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import su.litvak.chromecast.api.v2.ChromeCast; import su.litvak.chromecast.api.v2.ChromeCast;
import su.litvak.chromecast.api.v2.ChromeCasts;
import su.litvak.chromecast.api.v2.Status;
import su.litvak.chromecast.api.v2.ChromeCastsListener;
public class CastMediaRouteController extends MediaRouteProvider.RouteController { public class CastMediaRouteController extends MediaRouteProvider.RouteController {
private static final String TAG = CastMediaRouteController.class.getSimpleName(); private static final String TAG = CastMediaRouteController.class.getSimpleName();

View File

@ -19,12 +19,9 @@ package org.microg.gms.cast;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.net.Uri;
import android.net.nsd.NsdManager; import android.net.nsd.NsdManager;
import android.net.nsd.NsdServiceInfo; import android.net.nsd.NsdServiceInfo;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.AsyncTask;
import android.os.Handler; import android.os.Handler;
import android.util.Log; import android.util.Log;
@ -35,33 +32,26 @@ import androidx.mediarouter.media.MediaRouteProvider;
import androidx.mediarouter.media.MediaRouteProviderDescriptor; import androidx.mediarouter.media.MediaRouteProviderDescriptor;
import androidx.mediarouter.media.MediaRouter; import androidx.mediarouter.media.MediaRouter;
import com.google.android.gms.common.images.WebImage;
import com.google.android.gms.cast.CastDevice; import com.google.android.gms.cast.CastDevice;
import com.google.android.gms.cast.CastMediaControlIntent; import com.google.android.gms.cast.CastMediaControlIntent;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.InetSocketAddress; import java.nio.charset.StandardCharsets;
import java.net.Inet4Address;
import java.net.UnknownHostException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.Thread;
import java.lang.Runnable;
import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CastMediaRouteProvider extends MediaRouteProvider { public class CastMediaRouteProvider extends MediaRouteProvider {
private static final String TAG = CastMediaRouteProvider.class.getSimpleName(); private static final String TAG = CastMediaRouteProvider.class.getSimpleName();
private Map<String, CastDevice> castDevices = new HashMap<String, CastDevice>(); private Map<String, CastDevice> castDevices = new HashMap<>();
private Map<String, String> serviceCastIds = new HashMap<String, String>(); private Map<String, String> serviceCastIds = new HashMap<>();
private NsdManager mNsdManager; private NsdManager mNsdManager;
private NsdManager.DiscoveryListener mDiscoveryListener; private NsdManager.DiscoveryListener mDiscoveryListener;
private List<String> customCategories = new ArrayList<String>(); private List<String> customCategories = new ArrayList<>();
private enum State { private enum State {
NOT_DISCOVERING, NOT_DISCOVERING,
@ -71,7 +61,7 @@ public class CastMediaRouteProvider extends MediaRouteProvider {
} }
private State state = State.NOT_DISCOVERING; private State state = State.NOT_DISCOVERING;
private static final ArrayList<IntentFilter> BASE_CONTROL_FILTERS = new ArrayList<IntentFilter>(); private static final ArrayList<IntentFilter> BASE_CONTROL_FILTERS = new ArrayList<>();
static { static {
IntentFilter filter; IntentFilter filter;
@ -215,17 +205,16 @@ public class CastMediaRouteProvider extends MediaRouteProvider {
return; return;
} }
try { try {
String id = new String(attributes.get("id"), "UTF-8"); String id = new String(attributes.get("id"), StandardCharsets.UTF_8);
String deviceVersion = new String(attributes.get("ve"), "UTF-8"); String deviceVersion = new String(attributes.get("ve"), StandardCharsets.UTF_8);
String friendlyName = new String(attributes.get("fn"), "UTF-8"); String friendlyName = new String(attributes.get("fn"), StandardCharsets.UTF_8);
String modelName = new String(attributes.get("md"), "UTF-8"); String modelName = new String(attributes.get("md"), StandardCharsets.UTF_8);
String iconPath = new String(attributes.get("ic"), "UTF-8"); String iconPath = new String(attributes.get("ic"), StandardCharsets.UTF_8);
int status = Integer.parseInt(new String(attributes.get("st"), "UTF-8")); int status = Integer.parseInt(new String(attributes.get("st"), StandardCharsets.UTF_8));
onChromeCastDiscovered(id, name, host, port, deviceVersion, friendlyName, modelName, iconPath, status); onChromeCastDiscovered(id, name, host, port, deviceVersion, friendlyName, modelName, iconPath, status);
} catch (UnsupportedEncodingException | NullPointerException ex) { } catch (NullPointerException ex) {
Log.e(TAG, "Error getting cast details from DNS-SD response", ex); Log.e(TAG, "Error getting cast details from DNS-SD response", ex);
return;
} }
} }
}); });
@ -317,18 +306,13 @@ public class CastMediaRouteProvider extends MediaRouteProvider {
private void publishRoutesInMainThread() { private void publishRoutesInMainThread() {
Handler mainHandler = new Handler(this.getContext().getMainLooper()); Handler mainHandler = new Handler(this.getContext().getMainLooper());
mainHandler.post(new Runnable() { mainHandler.post(this::publishRoutes);
@Override
public void run() {
publishRoutes();
}
});
} }
private void publishRoutes() { private void publishRoutes() {
MediaRouteProviderDescriptor.Builder builder = new MediaRouteProviderDescriptor.Builder(); MediaRouteProviderDescriptor.Builder builder = new MediaRouteProviderDescriptor.Builder();
for (CastDevice castDevice : this.castDevices.values()) { for (CastDevice castDevice : this.castDevices.values()) {
ArrayList<IntentFilter> controlFilters = new ArrayList<IntentFilter>(BASE_CONTROL_FILTERS); ArrayList<IntentFilter> controlFilters = new ArrayList<>(BASE_CONTROL_FILTERS);
// Include any app-specific control filters that have been requested. // Include any app-specific control filters that have been requested.
// TODO: Do we need to check with the device? // TODO: Do we need to check with the device?
for (String category : this.customCategories) { for (String category : this.customCategories) {

View File

@ -18,22 +18,18 @@ package org.microg.gms.checkin;
import android.util.Log; import android.util.Log;
import com.squareup.wire.Wire;
import org.microg.gms.common.Build; import org.microg.gms.common.Build;
import org.microg.gms.common.DeviceConfiguration; import org.microg.gms.common.DeviceConfiguration;
import org.microg.gms.common.DeviceIdentifier; import org.microg.gms.common.DeviceIdentifier;
import org.microg.gms.common.PhoneInfo; import org.microg.gms.common.PhoneInfo;
import org.microg.gms.common.Utils; import org.microg.gms.common.Utils;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -46,7 +42,7 @@ import java.util.zip.GZIPOutputStream;
public class CheckinClient { public class CheckinClient {
private static final String TAG = "GmsCheckinClient"; private static final String TAG = "GmsCheckinClient";
private static final Object TODO = null; // TODO private static final Object TODO = null; // TODO
private static final List<String> TODO_LIST_STRING = new ArrayList<String>(); // TODO private static final List<String> TODO_LIST_STRING = new ArrayList<>(); // TODO
private static final List<CheckinRequest.Checkin.Statistic> TODO_LIST_CHECKIN = new ArrayList<CheckinRequest.Checkin.Statistic>(); // TODO private static final List<CheckinRequest.Checkin.Statistic> TODO_LIST_CHECKIN = new ArrayList<CheckinRequest.Checkin.Statistic>(); // TODO
private static final String SERVICE_URL = "https://android.clients.google.com/checkin"; private static final String SERVICE_URL = "https://android.clients.google.com/checkin";
@ -151,8 +147,8 @@ public class CheckinClient {
} }
if (builder.accountCookie.isEmpty()) builder.accountCookie.add(""); if (builder.accountCookie.isEmpty()) builder.accountCookie.add("");
if (deviceIdent.wifiMac != null) { if (deviceIdent.wifiMac != null) {
builder.macAddress(Arrays.asList(deviceIdent.wifiMac)) builder.macAddress(Collections.singletonList(deviceIdent.wifiMac))
.macAddressType(Arrays.asList("wifi")); .macAddressType(Collections.singletonList("wifi"));
} }
if (checkinInfo.securityToken != 0) { if (checkinInfo.securityToken != 0) {
builder.securityToken(checkinInfo.securityToken) builder.securityToken(checkinInfo.securityToken)

View File

@ -20,7 +20,6 @@ import android.accounts.Account;
import android.accounts.AccountManager; import android.accounts.AccountManager;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.preference.PreferenceManager;
import org.microg.gms.auth.AuthConstants; import org.microg.gms.auth.AuthConstants;
import org.microg.gms.auth.AuthRequest; import org.microg.gms.auth.AuthRequest;
@ -43,7 +42,7 @@ public class CheckinManager {
return null; return null;
if (!CheckinPrefs.get(context).isEnabled()) if (!CheckinPrefs.get(context).isEnabled())
return null; return null;
List<CheckinClient.Account> accounts = new ArrayList<CheckinClient.Account>(); List<CheckinClient.Account> accounts = new ArrayList<>();
AccountManager accountManager = AccountManager.get(context); AccountManager accountManager = AccountManager.get(context);
String accountType = AuthConstants.DEFAULT_ACCOUNT_TYPE; String accountType = AuthConstants.DEFAULT_ACCOUNT_TYPE;
for (Account account : accountManager.getAccountsByType(accountType)) { for (Account account : accountManager.getAccountsByType(accountType)) {

View File

@ -8,7 +8,8 @@ package org.microg.gms.checkin;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import androidx.preference.PreferenceManager;
public class CheckinPrefs implements SharedPreferences.OnSharedPreferenceChangeListener { public class CheckinPrefs implements SharedPreferences.OnSharedPreferenceChangeListener {
public static final String PREF_ENABLE_CHECKIN = "checkin_enable_service"; public static final String PREF_ENABLE_CHECKIN = "checkin_enable_service";

View File

@ -22,7 +22,6 @@ import android.app.IntentService;
import android.content.Intent; import android.content.Intent;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import androidx.legacy.content.WakefulBroadcastReceiver; import androidx.legacy.content.WakefulBroadcastReceiver;

View File

@ -20,7 +20,6 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import androidx.legacy.content.WakefulBroadcastReceiver; import androidx.legacy.content.WakefulBroadcastReceiver;

View File

@ -44,10 +44,12 @@ public class Build {
} }
private String generateSerialNumber() { private String generateSerialNumber() {
String serial = "008741"; String serial;
Random rand = new Random(); Random rand = new Random();
StringBuilder serialBuilder = new StringBuilder("008741");
for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++)
serial += Integer.toString(rand.nextInt(16), 16); serialBuilder.append(Integer.toString(rand.nextInt(16), 16));
serial = serialBuilder.toString();
serial = serial.toUpperCase(Locale.US); serial = serial.toUpperCase(Locale.US);
return serial; return serial;
} }

View File

@ -69,7 +69,7 @@ public class DeviceConfiguration {
glEsVersion = configurationInfo.reqGlEsVersion; glEsVersion = configurationInfo.reqGlEsVersion;
PackageManager packageManager = context.getPackageManager(); PackageManager packageManager = context.getPackageManager();
String[] systemSharedLibraryNames = packageManager.getSystemSharedLibraryNames(); String[] systemSharedLibraryNames = packageManager.getSystemSharedLibraryNames();
sharedLibraries = new ArrayList<String>(); sharedLibraries = new ArrayList<>();
if (systemSharedLibraryNames != null) sharedLibraries.addAll(Arrays.asList(systemSharedLibraryNames)); if (systemSharedLibraryNames != null) sharedLibraries.addAll(Arrays.asList(systemSharedLibraryNames));
for (String s : new String[]{"com.google.android.maps", "com.google.android.media.effects", "com.google.widevine.software.drm"}) { for (String s : new String[]{"com.google.android.maps", "com.google.android.media.effects", "com.google.widevine.software.drm"}) {
if (!sharedLibraries.contains(s)) { if (!sharedLibraries.contains(s)) {
@ -77,7 +77,7 @@ public class DeviceConfiguration {
} }
} }
Collections.sort(sharedLibraries); Collections.sort(sharedLibraries);
availableFeatures = new ArrayList<String>(); availableFeatures = new ArrayList<>();
if (packageManager.getSystemAvailableFeatures() != null) { if (packageManager.getSystemAvailableFeatures() != null) {
for (FeatureInfo featureInfo : packageManager.getSystemAvailableFeatures()) { for (FeatureInfo featureInfo : packageManager.getSystemAvailableFeatures()) {
if (featureInfo != null && featureInfo.name != null) availableFeatures.add(featureInfo.name); if (featureInfo != null && featureInfo.name != null) availableFeatures.add(featureInfo.name);
@ -87,14 +87,14 @@ public class DeviceConfiguration {
this.nativePlatforms = getNativePlatforms(); this.nativePlatforms = getNativePlatforms();
widthPixels = displayMetrics.widthPixels; widthPixels = displayMetrics.widthPixels;
heightPixels = displayMetrics.heightPixels; heightPixels = displayMetrics.heightPixels;
locales = new ArrayList<String>(Arrays.asList(context.getAssets().getLocales())); locales = new ArrayList<>(Arrays.asList(context.getAssets().getLocales()));
for (int i = 0; i < locales.size(); i++) { for (int i = 0; i < locales.size(); i++) {
locales.set(i, locales.get(i).replace("-", "_")); locales.set(i, locales.get(i).replace("-", "_"));
} }
Collections.sort(locales); Collections.sort(locales);
Set<String> glExtensions = new HashSet<String>(); Set<String> glExtensions = new HashSet<>();
addEglExtensions(glExtensions); addEglExtensions(glExtensions);
this.glExtensions = new ArrayList<String>(glExtensions); this.glExtensions = new ArrayList<>(glExtensions);
Collections.sort(this.glExtensions); Collections.sort(this.glExtensions);
} }
@ -104,7 +104,7 @@ public class DeviceConfiguration {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return Arrays.asList(Build.SUPPORTED_ABIS); return Arrays.asList(Build.SUPPORTED_ABIS);
} else { } else {
nativePlatforms = new ArrayList<String>(); nativePlatforms = new ArrayList<>();
nativePlatforms.add(Build.CPU_ABI); nativePlatforms.add(Build.CPU_ABI);
if (Build.CPU_ABI2 != null && !Build.CPU_ABI2.equals("unknown")) if (Build.CPU_ABI2 != null && !Build.CPU_ABI2.equals("unknown"))
nativePlatforms.add(Build.CPU_ABI2); nativePlatforms.add(Build.CPU_ABI2);
@ -117,7 +117,7 @@ public class DeviceConfiguration {
if (egl10 != null) { if (egl10 != null) {
EGLDisplay display = egl10.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); EGLDisplay display = egl10.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
egl10.eglInitialize(display, new int[2]); egl10.eglInitialize(display, new int[2]);
int cf[] = new int[1]; int[] cf = new int[1];
if (egl10.eglGetConfigs(display, null, 0, cf)) { if (egl10.eglGetConfigs(display, null, 0, cf)) {
EGLConfig[] configs = new EGLConfig[cf[0]]; EGLConfig[] configs = new EGLConfig[cf[0]];
if (egl10.eglGetConfigs(display, configs, cf[0], cf)) { if (egl10.eglGetConfigs(display, configs, cf[0], cf)) {
@ -147,29 +147,23 @@ public class DeviceConfiguration {
} }
} }
private static void addExtensionsForConfig(EGL10 egl10, EGLDisplay egldisplay, EGLConfig eglconfig, int ai[], private static void addExtensionsForConfig(EGL10 egl10, EGLDisplay egldisplay, EGLConfig eglconfig, int[] ai,
int ai1[], Set<String> set) { int[] ai1, Set<String> set) {
EGLContext eglcontext = egl10.eglCreateContext(egldisplay, eglconfig, EGL10.EGL_NO_CONTEXT, ai1); EGLContext eglcontext = egl10.eglCreateContext(egldisplay, eglconfig, EGL10.EGL_NO_CONTEXT, ai1);
if (eglcontext != EGL10.EGL_NO_CONTEXT) { if (eglcontext != EGL10.EGL_NO_CONTEXT) {
javax.microedition.khronos.egl.EGLSurface eglsurface = javax.microedition.khronos.egl.EGLSurface eglsurface =
egl10.eglCreatePbufferSurface(egldisplay, eglconfig, ai); egl10.eglCreatePbufferSurface(egldisplay, eglconfig, ai);
if (eglsurface == EGL10.EGL_NO_SURFACE) { if (eglsurface != EGL10.EGL_NO_SURFACE) {
egl10.eglDestroyContext(egldisplay, eglcontext);
} else {
egl10.eglMakeCurrent(egldisplay, eglsurface, eglsurface, eglcontext); egl10.eglMakeCurrent(egldisplay, eglsurface, eglsurface, eglcontext);
String s = GLES10.glGetString(7939); String s = GLES10.glGetString(7939);
if (s != null && !s.isEmpty()) { if (s != null && !s.isEmpty()) {
String as[] = s.split(" "); String[] as = s.split(" ");
int i = as.length; set.addAll(Arrays.asList(as).subList(0, as.length));
for (int j = 0; j < i; j++) {
set.add(as[j]);
}
} }
egl10.eglMakeCurrent(egldisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT); egl10.eglMakeCurrent(egldisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT);
egl10.eglDestroySurface(egldisplay, eglsurface); egl10.eglDestroySurface(egldisplay, eglsurface);
egl10.eglDestroyContext(egldisplay, eglcontext);
} }
egl10.eglDestroyContext(egldisplay, eglcontext);
} }
} }
} }

View File

@ -25,22 +25,24 @@ public class DeviceIdentifier {
private static String randomMacAddress() { private static String randomMacAddress() {
String mac = "b407f9"; StringBuilder mac = new StringBuilder("b407f9");
Random rand = new Random(); Random rand = new Random();
for (int i = 0; i < 6; i++) { for (int i = 0; i < 6; i++) {
mac += Integer.toString(rand.nextInt(16), 16); mac.append(Integer.toString(rand.nextInt(16), 16));
} }
return mac; return mac.toString();
} }
private static String randomMeid() { private static String randomMeid() {
// http://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity // http://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity
// We start with a known base, and generate random MEID // We start with a known base, and generate random MEID
String meid = "35503104"; String meid;
Random rand = new Random(); Random rand = new Random();
StringBuilder meidBuilder = new StringBuilder("35503104");
for (int i = 0; i < 6; i++) { for (int i = 0; i < 6; i++) {
meid += Integer.toString(rand.nextInt(10)); meidBuilder.append(rand.nextInt(10));
} }
meid = meidBuilder.toString();
// Luhn algorithm (check digit) // Luhn algorithm (check digit)
int sum = 0; int sum = 0;

View File

@ -10,7 +10,6 @@ import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.ContextWrapper; import android.content.ContextWrapper;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources;
import android.os.Build; import android.os.Build;
import android.os.PowerManager; import android.os.PowerManager;
import android.provider.Settings; import android.provider.Settings;

View File

@ -191,14 +191,11 @@ public class HttpFormClient {
public static <T> void requestAsync(final String url, final Request request, final Class<T> tClass, public static <T> void requestAsync(final String url, final Request request, final Class<T> tClass,
final Callback<T> callback) { final Callback<T> callback) {
new Thread(new Runnable() { new Thread(() -> {
@Override try {
public void run() { callback.onResponse(request(url, request, tClass));
try { } catch (Exception e) {
callback.onResponse(request(url, request, tClass)); callback.onException(e);
} catch (Exception e) {
callback.onException(e);
}
} }
}).start(); }).start();
} }
@ -217,25 +214,25 @@ public class HttpFormClient {
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
public @interface RequestHeader { public @interface RequestHeader {
public String[] value(); String[] value();
public boolean truePresent() default true; boolean truePresent() default true;
public boolean falsePresent() default false; boolean falsePresent() default false;
public boolean nullPresent() default false; boolean nullPresent() default false;
} }
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
public @interface RequestContent { public @interface RequestContent {
public String[] value(); String[] value();
public boolean truePresent() default true; boolean truePresent() default true;
public boolean falsePresent() default false; boolean falsePresent() default false;
public boolean nullPresent() default false; boolean nullPresent() default false;
} }
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@ -246,13 +243,13 @@ public class HttpFormClient {
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
public @interface ResponseField { public @interface ResponseField {
public String value(); String value();
} }
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
public @interface ResponseHeader { public @interface ResponseHeader {
public String value(); String value();
} }
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)

View File

@ -22,7 +22,6 @@ import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Proxy; import java.lang.reflect.Proxy;
import java.util.Collection; import java.util.Collection;
@ -33,11 +32,11 @@ public class MultiListenerProxy<T extends IInterface> implements InvocationHandl
private static final String TAG = "GmsMultiListener"; private static final String TAG = "GmsMultiListener";
public static <T extends IInterface> T get(Class<T> tClass, final Collection<T> listeners) { public static <T extends IInterface> T get(Class<T> tClass, final Collection<T> listeners) {
return get(tClass, new CollectionListenerPool<T>(listeners)); return get(tClass, new CollectionListenerPool<>(listeners));
} }
public static <T extends IInterface> T get(Class<T> tClass, final ListenerPool<T> listenerPool) { public static <T extends IInterface> T get(Class<T> tClass, final ListenerPool<T> listenerPool) {
return (T) Proxy.newProxyInstance(tClass.getClassLoader(), new Class[]{tClass}, new MultiListenerProxy<T>(listenerPool)); return (T) Proxy.newProxyInstance(tClass.getClassLoader(), new Class[]{tClass}, new MultiListenerProxy<>(listenerPool));
} }
private final ListenerPool<T> listeners; private final ListenerPool<T> listeners;
@ -48,7 +47,7 @@ public class MultiListenerProxy<T extends IInterface> implements InvocationHandl
@Override @Override
public Object invoke(Object proxy, Method method, Object[] args) { public Object invoke(Object proxy, Method method, Object[] args) {
for (T listener : new HashSet<T>(listeners)) { for (T listener : new HashSet<>(listeners)) {
try { try {
method.invoke(listener, args); method.invoke(listener, args);
} catch (Exception e) { } catch (Exception e) {

View File

@ -38,12 +38,12 @@ public class RemoteListenerProxy<T extends IInterface> implements ServiceConnect
private final String bindAction; private final String bindAction;
private IBinder remote; private IBinder remote;
private boolean connecting; private boolean connecting;
private List<Runnable> waiting = new ArrayList<Runnable>(); private List<Runnable> waiting = new ArrayList<>();
private Class<T> tClass; private Class<T> tClass;
public static <T extends IInterface> T get(Context context, Intent intent, Class<T> tClass, String bindAction) { public static <T extends IInterface> T get(Context context, Intent intent, Class<T> tClass, String bindAction) {
return (T) Proxy.newProxyInstance(tClass.getClassLoader(), new Class[]{tClass}, return (T) Proxy.newProxyInstance(tClass.getClassLoader(), new Class[]{tClass},
new RemoteListenerProxy<T>(context, intent, tClass, bindAction)); new RemoteListenerProxy<>(context, intent, tClass, bindAction));
} }
private RemoteListenerProxy(Context context, Intent intent, Class<T> tClass, String bindAction) { private RemoteListenerProxy(Context context, Intent intent, Class<T> tClass, String bindAction) {
@ -117,15 +117,12 @@ public class RemoteListenerProxy<T extends IInterface> implements ServiceConnect
@Override @Override
public Object invoke(Object proxy, final Method method, final Object[] args) throws Throwable { public Object invoke(Object proxy, final Method method, final Object[] args) throws Throwable {
if (method.getDeclaringClass().equals(tClass)) { if (method.getDeclaringClass().equals(tClass)) {
runOncePossible(new Runnable() { runOncePossible(() -> {
@Override try {
public void run() { Object asInterface = Class.forName(tClass.getName() + "$Stub").getMethod("asInterface", IBinder.class).invoke(null, remote);
try { method.invoke(asInterface, args);
Object asInterface = Class.forName(tClass.getName() + "$Stub").getMethod("asInterface", IBinder.class).invoke(null, remote); } catch (Exception e) {
method.invoke(asInterface, args); Log.w(TAG, e);
} catch (Exception e) {
Log.w(TAG, e);
}
} }
}); });
connect(); connect();

View File

@ -18,7 +18,7 @@ package org.microg.gms.common;
import android.content.Context; import android.content.Context;
import android.util.Log; import android.util.Log;
import android.widget.Toast;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;

View File

@ -21,9 +21,10 @@ import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import androidx.preference.PreferenceManager;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;

View File

@ -20,7 +20,6 @@ import android.os.Handler;
import android.util.Log; import android.util.Log;
import com.squareup.wire.Message; import com.squareup.wire.Message;
import com.squareup.wire.Wire;
import org.microg.gms.gcm.mcs.Close; import org.microg.gms.gcm.mcs.Close;
import org.microg.gms.gcm.mcs.DataMessageStanza; import org.microg.gms.gcm.mcs.DataMessageStanza;

View File

@ -72,7 +72,6 @@ import okio.ByteString;
import static android.app.AlarmManager.ELAPSED_REALTIME_WAKEUP; import static android.app.AlarmManager.ELAPSED_REALTIME_WAKEUP;
import static android.os.Build.VERSION.SDK_INT; import static android.os.Build.VERSION.SDK_INT;
import static org.microg.gms.common.ForegroundServiceContext.EXTRA_FOREGROUND;
import static org.microg.gms.gcm.GcmConstants.ACTION_C2DM_RECEIVE; import static org.microg.gms.gcm.GcmConstants.ACTION_C2DM_RECEIVE;
import static org.microg.gms.gcm.GcmConstants.EXTRA_APP; import static org.microg.gms.gcm.GcmConstants.EXTRA_APP;
import static org.microg.gms.gcm.GcmConstants.EXTRA_COLLAPSE_KEY; import static org.microg.gms.gcm.GcmConstants.EXTRA_COLLAPSE_KEY;
@ -647,11 +646,8 @@ public class McsService extends Service implements Handler.Callback {
} }
private void handleOutputDone(android.os.Message msg) { private void handleOutputDone(android.os.Message msg) {
switch (msg.arg1) { if (msg.arg1 == MCS_HEARTBEAT_PING_TAG) {
case MCS_HEARTBEAT_PING_TAG: wakeLock.release();
wakeLock.release();
break;
default:
} }
} }

View File

@ -28,19 +28,16 @@ public class UnregisterReceiver extends BroadcastReceiver {
Log.d(TAG, "Package removed or data cleared: " + packageName); Log.d(TAG, "Package removed or data cleared: " + packageName);
final GcmDatabase.App app = database.getApp(packageName); final GcmDatabase.App app = database.getApp(packageName);
if (app != null) { if (app != null) {
new Thread(new Runnable() { new Thread(() -> {
@Override List<GcmDatabase.Registration> registrations = database.getRegistrationsByApp(packageName);
public void run() { boolean deletedAll = true;
List<GcmDatabase.Registration> registrations = database.getRegistrationsByApp(packageName); for (GcmDatabase.Registration registration : registrations) {
boolean deletedAll = true; deletedAll &= PushRegisterManager.unregister(context, registration.packageName, registration.signature, null, null).deleted != null;
for (GcmDatabase.Registration registration : registrations) {
deletedAll &= PushRegisterManager.unregister(context, registration.packageName, registration.signature, null, null).deleted != null;
}
if (deletedAll) {
database.removeApp(packageName);
}
database.close();
} }
if (deletedAll) {
database.removeApp(packageName);
}
database.close();
}).start(); }).start();
} else { } else {
database.close(); database.close();

View File

@ -75,7 +75,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
} }
public Map<String, String> search(String search) { public Map<String, String> search(String search) {
Map<String, String> map = new HashMap<String, String>(); Map<String, String> map = new HashMap<>();
Cursor cursor = getReadableDatabase().query("overrides", new String[]{"name", "value"}, Cursor cursor = getReadableDatabase().query("overrides", new String[]{"name", "value"},
"name LIKE ?", new String[]{search}, null, null, null, null); "name LIKE ?", new String[]{search}, null, null, null, null);
if (cursor != null) { if (cursor != null) {

View File

@ -46,8 +46,8 @@ public class GServicesProvider extends ContentProvider {
private static final String TAG = "GmsServicesProvider"; private static final String TAG = "GmsServicesProvider";
private DatabaseHelper databaseHelper; private DatabaseHelper databaseHelper;
private Map<String, String> cache = new HashMap<String, String>(); private Map<String, String> cache = new HashMap<>();
private Set<String> cachedPrefixes = new HashSet<String>(); private Set<String> cachedPrefixes = new HashSet<>();
@Override @Override
public boolean onCreate() { public boolean onCreate() {

View File

@ -16,12 +16,10 @@
package org.microg.gms.measurement; package org.microg.gms.measurement;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Log;
import com.google.android.gms.common.api.CommonStatusCodes; import com.google.android.gms.common.api.CommonStatusCodes;
import com.google.android.gms.common.api.Status; import com.google.android.gms.common.internal.GetServiceRequest;
import com.google.android.gms.common.internal.GetServiceRequest;
import com.google.android.gms.common.internal.IGmsCallbacks; import com.google.android.gms.common.internal.IGmsCallbacks;
import org.microg.gms.BaseService; import org.microg.gms.BaseService;

Some files were not shown because too many files have changed in this diff Show More