зеркало из https://github.com/mozilla/gecko-dev.git
Bug 801225 - Cleanup and restructuring of Android services code to support product announcements feature. r=nalexander, a=bbajaj
This commit is contained in:
Родитель
7800cefdd1
Коммит
8ad9807874
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -9,7 +9,6 @@ package org.mozilla.gecko.sync;
|
|||
* Preprocessed class for storing preprocessed values.
|
||||
*/
|
||||
public class GlobalConstants {
|
||||
public static final String PRODUCT_NAME = "@MOZ_APP_DISPLAYNAME@";
|
||||
public static final String ANDROID_CPU_ARCH = "@ANDROID_CPU_ARCH@";
|
||||
|
||||
// One of 'beta', 'aurora', 'nightly', 'default'.
|
||||
|
@ -23,47 +22,13 @@ public class GlobalConstants {
|
|||
#endif
|
||||
|
||||
public static final String MOZ_APP_VERSION = "@MOZ_APP_VERSION@";
|
||||
public static final String SYNC_MAJOR_VERSION = "1";
|
||||
public static final String SYNC_MINOR_VERSION = "0";
|
||||
public static final String SYNC_VERSION_STRING = SYNC_MAJOR_VERSION + "." +
|
||||
MOZ_APP_VERSION + "." +
|
||||
SYNC_MINOR_VERSION;
|
||||
|
||||
public static final String SYNC_USER_AGENT = "Firefox AndroidSync " +
|
||||
SYNC_VERSION_STRING + " (" +
|
||||
PRODUCT_NAME + ")";
|
||||
|
||||
public static final String BROWSER_INTENT_PACKAGE = "@ANDROID_PACKAGE_NAME@";
|
||||
public static final String BROWSER_INTENT_CLASS = BROWSER_INTENT_PACKAGE + ".App";
|
||||
|
||||
public static final String ACCOUNTTYPE_SYNC = "@MOZ_ANDROID_SHARED_ACCOUNT_TYPE@";
|
||||
|
||||
/**
|
||||
* Bug 790931: this signing-level permission protects broadcast intents that
|
||||
* should be received only by Firefox versions sharing the same Android
|
||||
* Account type.
|
||||
*/
|
||||
public static final String PER_ACCOUNT_TYPE_PERMISSION = "@MOZ_ANDROID_SHARED_ACCOUNT_TYPE@.permission.PER_ACCOUNT_TYPE";
|
||||
|
||||
/**
|
||||
* Bug 790931: this action is broadcast when an Android Account is deleted.
|
||||
* This allows each installed Firefox to delete any pickle file and to (try
|
||||
* to) wipe its client record from the server.
|
||||
* <p>
|
||||
* It is protected by signing-level permission PER_ACCOUNT_TYPE_PERMISSION and
|
||||
* can be received only by Firefox versions sharing the same Android Account
|
||||
* type.
|
||||
* <p>
|
||||
* See {@link SyncAccounts#makeSyncAccountDeletedIntent(android.content.Context, android.accounts.AccountManager, android.accounts.Account)}
|
||||
* for contents of the intent.
|
||||
*/
|
||||
public static final String SYNC_ACCOUNT_DELETED_ACTION = "@MOZ_ANDROID_SHARED_ACCOUNT_TYPE@.accounts.SYNC_ACCOUNT_DELETED_ACTION";
|
||||
|
||||
/**
|
||||
* Bug 790931: version number of contents of SYNC_ACCOUNT_DELETED_ACTION intent.
|
||||
* <p>
|
||||
* See {@link SyncAccounts#makeSyncAccountDeletedIntent(android.content.Context, android.accounts.AccountManager, android.accounts.Account)}
|
||||
* for contents of the intent.
|
||||
*/
|
||||
public static final long SYNC_ACCOUNT_DELETED_INTENT_VERSION = 1;
|
||||
}
|
||||
|
|
|
@ -11,7 +11,8 @@ import java.util.Set;
|
|||
import org.mozilla.gecko.sync.log.writers.AndroidLevelCachingLogWriter;
|
||||
import org.mozilla.gecko.sync.log.writers.AndroidLogWriter;
|
||||
import org.mozilla.gecko.sync.log.writers.LogWriter;
|
||||
import org.mozilla.gecko.sync.log.writers.SingleTagLogWriter;
|
||||
import org.mozilla.gecko.sync.log.writers.SimpleTagLogWriter;
|
||||
import org.mozilla.gecko.sync.log.writers.ThreadLocalTagLogWriter;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
|
@ -19,30 +20,62 @@ import android.util.Log;
|
|||
* Logging helper class. Serializes all log operations (by synchronizing).
|
||||
*/
|
||||
public class Logger {
|
||||
public static final String LOG_TAG = "Logger";
|
||||
|
||||
public static final String GLOBAL_LOG_TAG = "FxSync";
|
||||
public static final String LOGGER_TAG = "Logger";
|
||||
public static final String DEFAULT_LOG_TAG = "GeckoLogger";
|
||||
|
||||
// For extra debugging.
|
||||
public static boolean LOG_PERSONAL_INFORMATION = false;
|
||||
|
||||
/**
|
||||
* Current set of writers logged to.
|
||||
* Allow each thread to use its own global log tag. This allows
|
||||
* independent services to log as different sources.
|
||||
*
|
||||
* When your thread sets up logging, it should do something like the following:
|
||||
*
|
||||
* Logger.setThreadLogTag("MyTag");
|
||||
*
|
||||
* The value is inheritable, so worker threads and such do not need to
|
||||
* set the same log tag as their parent.
|
||||
*/
|
||||
private static final InheritableThreadLocal<String> logTag = new InheritableThreadLocal<String>() {
|
||||
@Override
|
||||
protected String initialValue() {
|
||||
return DEFAULT_LOG_TAG;
|
||||
}
|
||||
};
|
||||
|
||||
public static void setThreadLogTag(final String logTag) {
|
||||
Logger.logTag.set(logTag);
|
||||
}
|
||||
public static String getThreadLogTag() {
|
||||
return Logger.logTag.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Current set of writers to which we will log.
|
||||
* <p>
|
||||
* We want logging to be available while running tests, so we set initialize
|
||||
* We want logging to be available while running tests, so we initialize
|
||||
* this set statically.
|
||||
*/
|
||||
protected final static Set<LogWriter> logWriters = new LinkedHashSet<LogWriter>(Logger.defaultLogWriters());
|
||||
protected final static Set<LogWriter> logWriters;
|
||||
static {
|
||||
final Set<LogWriter> defaultWriters = Logger.defaultLogWriters();
|
||||
logWriters = new LinkedHashSet<LogWriter>(defaultWriters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Default set of log writers to log to.
|
||||
*/
|
||||
protected final static Set<LogWriter> defaultLogWriters() {
|
||||
final Set<LogWriter> defaultLogWriters = new LinkedHashSet<LogWriter>();
|
||||
LogWriter log = new AndroidLogWriter();
|
||||
LogWriter cache = new AndroidLevelCachingLogWriter(log);
|
||||
public final static Set<LogWriter> defaultLogWriters() {
|
||||
final String processedPackage = GlobalConstants.BROWSER_INTENT_PACKAGE.replace("org.mozilla.", "");
|
||||
LogWriter single = new SingleTagLogWriter(processedPackage, new SingleTagLogWriter(GLOBAL_LOG_TAG, cache));
|
||||
|
||||
final Set<LogWriter> defaultLogWriters = new LinkedHashSet<LogWriter>();
|
||||
|
||||
final LogWriter log = new AndroidLogWriter();
|
||||
final LogWriter cache = new AndroidLevelCachingLogWriter(log);
|
||||
|
||||
final LogWriter single = new SimpleTagLogWriter(processedPackage, new ThreadLocalTagLogWriter(Logger.logTag, cache));
|
||||
|
||||
defaultLogWriters.add(single);
|
||||
return defaultLogWriters;
|
||||
}
|
||||
|
@ -51,11 +84,15 @@ public class Logger {
|
|||
logWriters.add(logWriter);
|
||||
}
|
||||
|
||||
public static synchronized void startLoggingToWriters(Set<LogWriter> writers) {
|
||||
logWriters.addAll(writers);
|
||||
}
|
||||
|
||||
public static synchronized void stopLoggingTo(LogWriter logWriter) {
|
||||
try {
|
||||
logWriter.close();
|
||||
} catch (Exception e) {
|
||||
Log.e(LOG_TAG, "Got exception closing and removing LogWriter " + logWriter + ".", e);
|
||||
Log.e(LOGGER_TAG, "Got exception closing and removing LogWriter " + logWriter + ".", e);
|
||||
}
|
||||
logWriters.remove(logWriter);
|
||||
}
|
||||
|
@ -65,7 +102,7 @@ public class Logger {
|
|||
try {
|
||||
logWriter.close();
|
||||
} catch (Exception e) {
|
||||
Log.e(LOG_TAG, "Got exception closing and removing LogWriter " + logWriter + ".", e);
|
||||
Log.e(LOGGER_TAG, "Got exception closing and removing LogWriter " + logWriter + ".", e);
|
||||
}
|
||||
}
|
||||
logWriters.clear();
|
||||
|
@ -89,92 +126,92 @@ public class Logger {
|
|||
return false;
|
||||
}
|
||||
|
||||
public static void error(String logTag, String message) {
|
||||
Logger.error(logTag, message, null);
|
||||
public static void error(String tag, String message) {
|
||||
Logger.error(tag, message, null);
|
||||
}
|
||||
|
||||
public static void warn(String logTag, String message) {
|
||||
Logger.warn(logTag, message, null);
|
||||
public static void warn(String tag, String message) {
|
||||
Logger.warn(tag, message, null);
|
||||
}
|
||||
|
||||
public static void info(String logTag, String message) {
|
||||
Logger.info(logTag, message, null);
|
||||
public static void info(String tag, String message) {
|
||||
Logger.info(tag, message, null);
|
||||
}
|
||||
|
||||
public static void debug(String logTag, String message) {
|
||||
Logger.debug(logTag, message, null);
|
||||
public static void debug(String tag, String message) {
|
||||
Logger.debug(tag, message, null);
|
||||
}
|
||||
|
||||
public static void trace(String logTag, String message) {
|
||||
Logger.trace(logTag, message, null);
|
||||
public static void trace(String tag, String message) {
|
||||
Logger.trace(tag, message, null);
|
||||
}
|
||||
|
||||
public static void pii(String logTag, String message) {
|
||||
public static void pii(String tag, String message) {
|
||||
if (LOG_PERSONAL_INFORMATION) {
|
||||
Logger.debug(logTag, "$$PII$$: " + message);
|
||||
Logger.debug(tag, "$$PII$$: " + message);
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized void error(String logTag, String message, Throwable error) {
|
||||
public static synchronized void error(String tag, String message, Throwable error) {
|
||||
Iterator<LogWriter> it = logWriters.iterator();
|
||||
while (it.hasNext()) {
|
||||
LogWriter writer = it.next();
|
||||
try {
|
||||
writer.error(logTag, message, error);
|
||||
writer.error(tag, message, error);
|
||||
} catch (Exception e) {
|
||||
Log.e(LOG_TAG, "Got exception logging; removing LogWriter " + writer + ".", e);
|
||||
Log.e(LOGGER_TAG, "Got exception logging; removing LogWriter " + writer + ".", e);
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized void warn(String logTag, String message, Throwable error) {
|
||||
public static synchronized void warn(String tag, String message, Throwable error) {
|
||||
Iterator<LogWriter> it = logWriters.iterator();
|
||||
while (it.hasNext()) {
|
||||
LogWriter writer = it.next();
|
||||
try {
|
||||
writer.warn(logTag, message, error);
|
||||
writer.warn(tag, message, error);
|
||||
} catch (Exception e) {
|
||||
Log.e(LOG_TAG, "Got exception logging; removing LogWriter " + writer + ".", e);
|
||||
Log.e(LOGGER_TAG, "Got exception logging; removing LogWriter " + writer + ".", e);
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized void info(String logTag, String message, Throwable error) {
|
||||
public static synchronized void info(String tag, String message, Throwable error) {
|
||||
Iterator<LogWriter> it = logWriters.iterator();
|
||||
while (it.hasNext()) {
|
||||
LogWriter writer = it.next();
|
||||
try {
|
||||
writer.info(logTag, message, error);
|
||||
writer.info(tag, message, error);
|
||||
} catch (Exception e) {
|
||||
Log.e(LOG_TAG, "Got exception logging; removing LogWriter " + writer + ".", e);
|
||||
Log.e(LOGGER_TAG, "Got exception logging; removing LogWriter " + writer + ".", e);
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized void debug(String logTag, String message, Throwable error) {
|
||||
public static synchronized void debug(String tag, String message, Throwable error) {
|
||||
Iterator<LogWriter> it = logWriters.iterator();
|
||||
while (it.hasNext()) {
|
||||
LogWriter writer = it.next();
|
||||
try {
|
||||
writer.debug(logTag, message, error);
|
||||
writer.debug(tag, message, error);
|
||||
} catch (Exception e) {
|
||||
Log.e(LOG_TAG, "Got exception logging; removing LogWriter " + writer + ".", e);
|
||||
Log.e(LOGGER_TAG, "Got exception logging; removing LogWriter " + writer + ".", e);
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized void trace(String logTag, String message, Throwable error) {
|
||||
public static synchronized void trace(String tag, String message, Throwable error) {
|
||||
Iterator<LogWriter> it = logWriters.iterator();
|
||||
while (it.hasNext()) {
|
||||
LogWriter writer = it.next();
|
||||
try {
|
||||
writer.trace(logTag, message, error);
|
||||
writer.trace(tag, message, error);
|
||||
} catch (Exception e) {
|
||||
Log.e(LOG_TAG, "Got exception logging; removing LogWriter " + writer + ".", e);
|
||||
Log.e(LOGGER_TAG, "Got exception logging; removing LogWriter " + writer + ".", e);
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
#filter substitution
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.gecko.sync;
|
||||
|
||||
/**
|
||||
* Preprocessed class for storing preprocessed values.
|
||||
*/
|
||||
public class SyncConstants {
|
||||
public static final String PRODUCT_NAME = "@MOZ_APP_DISPLAYNAME@";
|
||||
public static final String GLOBAL_LOG_TAG = "FxSync";
|
||||
public static final String SYNC_MAJOR_VERSION = "1";
|
||||
public static final String SYNC_MINOR_VERSION = "0";
|
||||
public static final String SYNC_VERSION_STRING = SYNC_MAJOR_VERSION + "." +
|
||||
GlobalConstants.MOZ_APP_VERSION + "." +
|
||||
SYNC_MINOR_VERSION;
|
||||
|
||||
public static final String SYNC_USER_AGENT = "Firefox AndroidSync " +
|
||||
SYNC_VERSION_STRING + " (" +
|
||||
PRODUCT_NAME + ")";
|
||||
|
||||
|
||||
public static final String ACCOUNTTYPE_SYNC = "@MOZ_ANDROID_SHARED_ACCOUNT_TYPE@";
|
||||
|
||||
/**
|
||||
* Bug 790931: this action is broadcast when an Android Account is deleted.
|
||||
* This allows each installed Firefox to delete any pickle file and to (try
|
||||
* to) wipe its client record from the server.
|
||||
* <p>
|
||||
* It is protected by signing-level permission PER_ACCOUNT_TYPE_PERMISSION and
|
||||
* can be received only by Firefox versions sharing the same Android Account
|
||||
* type.
|
||||
* <p>
|
||||
* See {@link SyncAccounts#makeSyncAccountDeletedIntent(android.content.Context, android.accounts.AccountManager, android.accounts.Account)}
|
||||
* for contents of the intent.
|
||||
*/
|
||||
public static final String SYNC_ACCOUNT_DELETED_ACTION = "@MOZ_ANDROID_SHARED_ACCOUNT_TYPE@.accounts.SYNC_ACCOUNT_DELETED_ACTION";
|
||||
|
||||
/**
|
||||
* Bug 790931: version number of contents of SYNC_ACCOUNT_DELETED_ACTION intent.
|
||||
* <p>
|
||||
* See {@link SyncAccounts#makeSyncAccountDeletedIntent(android.content.Context, android.accounts.AccountManager, android.accounts.Account)}
|
||||
* for contents of the intent.
|
||||
*/
|
||||
public static final long SYNC_ACCOUNT_DELETED_INTENT_VERSION = 1;
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.gecko.sync.log.writers;
|
||||
|
||||
/**
|
||||
* Make a <code>LogWriter</code> only log with a single string tag.
|
||||
*/
|
||||
public class SimpleTagLogWriter extends TagLogWriter {
|
||||
final String tag;
|
||||
public SimpleTagLogWriter(String tag, LogWriter inner) {
|
||||
super(inner);
|
||||
this.tag = tag;
|
||||
}
|
||||
|
||||
protected String getMainTag() {
|
||||
return tag;
|
||||
}
|
||||
}
|
|
@ -5,45 +5,47 @@
|
|||
package org.mozilla.gecko.sync.log.writers;
|
||||
|
||||
/**
|
||||
* Make a <code>LogWriter</code> only log with a single tag.
|
||||
* A @link{LogWriter} that logs each message under a parent tag.
|
||||
*/
|
||||
public class SingleTagLogWriter extends LogWriter {
|
||||
protected final String tag;
|
||||
public abstract class TagLogWriter extends LogWriter {
|
||||
|
||||
protected final LogWriter inner;
|
||||
|
||||
public SingleTagLogWriter(String tag, LogWriter inner) {
|
||||
this.tag = tag;
|
||||
public TagLogWriter(final LogWriter inner) {
|
||||
super();
|
||||
this.inner = inner;
|
||||
}
|
||||
|
||||
protected abstract String getMainTag();
|
||||
|
||||
@Override
|
||||
public void error(String tag, String message, Throwable error) {
|
||||
inner.error(this.tag, tag + " :: " + message, error);
|
||||
inner.error(this.getMainTag(), tag + " :: " + message, error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String tag, String message, Throwable error) {
|
||||
inner.warn(this.tag, tag + " :: " + message, error);
|
||||
inner.warn(this.getMainTag(), tag + " :: " + message, error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String tag, String message, Throwable error) {
|
||||
inner.info(this.tag, tag + " :: " + message, error);
|
||||
inner.info(this.getMainTag(), tag + " :: " + message, error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debug(String tag, String message, Throwable error) {
|
||||
inner.debug(this.tag, tag + " :: " + message, error);
|
||||
inner.debug(this.getMainTag(), tag + " :: " + message, error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void trace(String tag, String message, Throwable error) {
|
||||
inner.trace(this.tag, tag + " :: " + message, error);
|
||||
inner.trace(this.getMainTag(), tag + " :: " + message, error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldLogVerbose(String tag) {
|
||||
return inner.shouldLogVerbose(this.tag);
|
||||
return inner.shouldLogVerbose(this.getMainTag());
|
||||
}
|
||||
|
||||
@Override
|
|
@ -0,0 +1,25 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.gecko.sync.log.writers;
|
||||
|
||||
/**
|
||||
* Log with a single global tag… but that tag can be different for each thread.
|
||||
*
|
||||
* Takes a @link{ThreadLocal} as a constructor parameter.
|
||||
*/
|
||||
public class ThreadLocalTagLogWriter extends TagLogWriter {
|
||||
|
||||
private final ThreadLocal<String> tag;
|
||||
|
||||
public ThreadLocalTagLogWriter(ThreadLocal<String> tag, LogWriter inner) {
|
||||
super(inner);
|
||||
this.tag = tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMainTag() {
|
||||
return this.tag.get();
|
||||
}
|
||||
}
|
|
@ -181,17 +181,6 @@ public class BaseResource implements Resource {
|
|||
private static Object connManagerMonitor = new Object();
|
||||
private static ClientConnectionManager connManager;
|
||||
|
||||
/**
|
||||
* This method exists for test code.
|
||||
*/
|
||||
public static ClientConnectionManager enablePlainHTTPConnectionManager() {
|
||||
synchronized (connManagerMonitor) {
|
||||
ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager();
|
||||
connManager = cm;
|
||||
return cm;
|
||||
}
|
||||
}
|
||||
|
||||
// Call within a synchronized block on connManagerMonitor.
|
||||
private static ClientConnectionManager enableTLSConnectionManager() throws KeyManagementException, NoSuchAlgorithmException {
|
||||
SSLContext sslContext = SSLContext.getInstance("TLS");
|
||||
|
|
|
@ -10,7 +10,7 @@ import java.net.URISyntaxException;
|
|||
import java.security.GeneralSecurityException;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.mozilla.gecko.sync.GlobalConstants;
|
||||
import org.mozilla.gecko.sync.SyncConstants;
|
||||
import org.mozilla.gecko.sync.Logger;
|
||||
|
||||
import ch.boye.httpclientandroidlib.HttpEntity;
|
||||
|
@ -131,7 +131,7 @@ public class SyncStorageRequest implements Resource {
|
|||
|
||||
@Override
|
||||
public void addHeaders(HttpRequestBase request, DefaultHttpClient client) {
|
||||
client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, GlobalConstants.SYNC_USER_AGENT);
|
||||
client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, SyncConstants.SYNC_USER_AGENT);
|
||||
|
||||
// Clients can use their delegate interface to specify X-If-Unmodified-Since.
|
||||
String ifUnmodifiedSince = this.request.delegate.ifUnmodifiedSince();
|
||||
|
|
|
@ -6,6 +6,7 @@ package org.mozilla.gecko.sync.receivers;
|
|||
|
||||
import org.mozilla.gecko.sync.ExtendedJSONObject;
|
||||
import org.mozilla.gecko.sync.GlobalConstants;
|
||||
import org.mozilla.gecko.sync.SyncConstants;
|
||||
import org.mozilla.gecko.sync.Logger;
|
||||
import org.mozilla.gecko.sync.SyncConfiguration;
|
||||
import org.mozilla.gecko.sync.Utils;
|
||||
|
@ -32,7 +33,7 @@ public class SyncAccountDeletedService extends IntentService {
|
|||
final Context context = this;
|
||||
|
||||
long intentVersion = intent.getLongExtra(Constants.JSON_KEY_VERSION, 0);
|
||||
long expectedVersion = GlobalConstants.SYNC_ACCOUNT_DELETED_INTENT_VERSION;
|
||||
long expectedVersion = SyncConstants.SYNC_ACCOUNT_DELETED_INTENT_VERSION;
|
||||
if (intentVersion != expectedVersion) {
|
||||
Logger.warn(LOG_TAG, "Intent malformed: version " + intentVersion + " given but version " + expectedVersion + "expected. " +
|
||||
"Not cleaning up after deleted Account.");
|
||||
|
|
|
@ -12,6 +12,7 @@ import org.mozilla.gecko.db.BrowserContract;
|
|||
import org.mozilla.gecko.sync.CredentialException;
|
||||
import org.mozilla.gecko.sync.ExtendedJSONObject;
|
||||
import org.mozilla.gecko.sync.GlobalConstants;
|
||||
import org.mozilla.gecko.sync.SyncConstants;
|
||||
import org.mozilla.gecko.sync.Logger;
|
||||
import org.mozilla.gecko.sync.SyncConfiguration;
|
||||
import org.mozilla.gecko.sync.ThreadPool;
|
||||
|
@ -53,7 +54,7 @@ public class SyncAccounts {
|
|||
* @return Sync accounts.
|
||||
*/
|
||||
public static Account[] syncAccounts(final Context c) {
|
||||
return AccountManager.get(c).getAccountsByType(GlobalConstants.ACCOUNTTYPE_SYNC);
|
||||
return AccountManager.get(c).getAccountsByType(SyncConstants.ACCOUNTTYPE_SYNC);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -64,7 +65,7 @@ public class SyncAccounts {
|
|||
* Do not call this method from the main thread.
|
||||
*/
|
||||
public static boolean syncAccountsExist(Context c) {
|
||||
final boolean accountsExist = AccountManager.get(c).getAccountsByType(GlobalConstants.ACCOUNTTYPE_SYNC).length > 0;
|
||||
final boolean accountsExist = AccountManager.get(c).getAccountsByType(SyncConstants.ACCOUNTTYPE_SYNC).length > 0;
|
||||
if (accountsExist) {
|
||||
return true;
|
||||
}
|
||||
|
@ -219,7 +220,7 @@ public class SyncAccounts {
|
|||
try {
|
||||
return createSyncAccount(syncAccount, syncAutomatically);
|
||||
} catch (Exception e) {
|
||||
Log.e(Logger.GLOBAL_LOG_TAG, "Unable to create account.", e);
|
||||
Log.e(SyncConstants.GLOBAL_LOG_TAG, "Unable to create account.", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -300,13 +301,13 @@ public class SyncAccounts {
|
|||
Logger.info(LOG_TAG, "Setting explicit server URL: " + serverURL);
|
||||
}
|
||||
|
||||
final Account account = new Account(username, GlobalConstants.ACCOUNTTYPE_SYNC);
|
||||
final Account account = new Account(username, SyncConstants.ACCOUNTTYPE_SYNC);
|
||||
final Bundle userbundle = new Bundle();
|
||||
|
||||
// Add sync key and server URL.
|
||||
userbundle.putString(Constants.OPTION_SYNCKEY, syncKey);
|
||||
userbundle.putString(Constants.OPTION_SERVER, serverURL);
|
||||
Logger.debug(LOG_TAG, "Adding account for " + GlobalConstants.ACCOUNTTYPE_SYNC);
|
||||
Logger.debug(LOG_TAG, "Adding account for " + SyncConstants.ACCOUNTTYPE_SYNC);
|
||||
boolean result = false;
|
||||
try {
|
||||
result = accountManager.addAccountExplicitly(account, password, userbundle);
|
||||
|
@ -314,13 +315,13 @@ public class SyncAccounts {
|
|||
// We use Log rather than Logger here to avoid possibly hiding these errors.
|
||||
final String message = e.getMessage();
|
||||
if (message != null && (message.indexOf("is different than the authenticator's uid") > 0)) {
|
||||
Log.wtf(Logger.GLOBAL_LOG_TAG,
|
||||
Log.wtf(SyncConstants.GLOBAL_LOG_TAG,
|
||||
"Unable to create account. " +
|
||||
"If you have more than one version of " +
|
||||
"Firefox/Beta/Aurora/Nightly/Fennec installed, that's why.",
|
||||
e);
|
||||
} else {
|
||||
Log.e(Logger.GLOBAL_LOG_TAG, "Unable to create account.", e);
|
||||
Log.e(SyncConstants.GLOBAL_LOG_TAG, "Unable to create account.", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -559,9 +560,9 @@ public class SyncAccounts {
|
|||
* @return <code>Intent</code> to broadcast.
|
||||
*/
|
||||
public static Intent makeSyncAccountDeletedIntent(final Context context, final AccountManager accountManager, final Account account) {
|
||||
final Intent intent = new Intent(GlobalConstants.SYNC_ACCOUNT_DELETED_ACTION);
|
||||
final Intent intent = new Intent(SyncConstants.SYNC_ACCOUNT_DELETED_ACTION);
|
||||
|
||||
intent.putExtra(Constants.JSON_KEY_VERSION, Long.valueOf(GlobalConstants.SYNC_ACCOUNT_DELETED_INTENT_VERSION));
|
||||
intent.putExtra(Constants.JSON_KEY_VERSION, Long.valueOf(SyncConstants.SYNC_ACCOUNT_DELETED_INTENT_VERSION));
|
||||
intent.putExtra(Constants.JSON_KEY_TIMESTAMP, Long.valueOf(System.currentTimeMillis()));
|
||||
intent.putExtra(Constants.JSON_KEY_ACCOUNT, account.name);
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ import java.io.UnsupportedEncodingException;
|
|||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
import org.mozilla.gecko.sync.GlobalConstants;
|
||||
import org.mozilla.gecko.sync.SyncConstants;
|
||||
import org.mozilla.gecko.sync.Logger;
|
||||
import org.mozilla.gecko.sync.Utils;
|
||||
import org.mozilla.gecko.sync.setup.activities.SetupSyncActivity;
|
||||
|
@ -99,7 +100,7 @@ public class SyncAuthenticatorService extends Service {
|
|||
final Bundle result = new Bundle();
|
||||
|
||||
// This is a Sync account.
|
||||
result.putString(AccountManager.KEY_ACCOUNT_TYPE, GlobalConstants.ACCOUNTTYPE_SYNC);
|
||||
result.putString(AccountManager.KEY_ACCOUNT_TYPE, SyncConstants.ACCOUNTTYPE_SYNC);
|
||||
|
||||
// Server.
|
||||
String serverURL = am.getUserData(account, Constants.OPTION_SERVER);
|
||||
|
@ -145,7 +146,7 @@ public class SyncAuthenticatorService extends Service {
|
|||
final Intent intent = new Intent(mContext, SetupSyncActivity.class);
|
||||
intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE,
|
||||
response);
|
||||
intent.putExtra("accountType", GlobalConstants.ACCOUNTTYPE_SYNC);
|
||||
intent.putExtra("accountType", SyncConstants.ACCOUNTTYPE_SYNC);
|
||||
intent.putExtra(Constants.INTENT_EXTRA_IS_SETUP, true);
|
||||
|
||||
final Bundle result = new Bundle();
|
||||
|
|
|
@ -7,7 +7,7 @@ package org.mozilla.gecko.sync.setup.activities;
|
|||
import java.util.Locale;
|
||||
|
||||
import org.mozilla.gecko.R;
|
||||
import org.mozilla.gecko.sync.GlobalConstants;
|
||||
import org.mozilla.gecko.sync.SyncConstants;
|
||||
import org.mozilla.gecko.sync.Logger;
|
||||
import org.mozilla.gecko.sync.ThreadPool;
|
||||
import org.mozilla.gecko.sync.setup.Constants;
|
||||
|
@ -63,6 +63,8 @@ public class AccountActivity extends AccountAuthenticatorActivity {
|
|||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.sync_account);
|
||||
|
||||
ActivityUtils.prepareLogging();
|
||||
mContext = getApplicationContext();
|
||||
Logger.debug(LOG_TAG, "AccountManager.get(" + mContext + ")");
|
||||
mAccountManager = AccountManager.get(mContext);
|
||||
|
@ -110,6 +112,7 @@ public class AccountActivity extends AccountAuthenticatorActivity {
|
|||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
ActivityUtils.prepareLogging();
|
||||
clearCredentials();
|
||||
usernameInput.requestFocus();
|
||||
cancelButton.setOnClickListener(new OnClickListener() {
|
||||
|
@ -264,8 +267,8 @@ public class AccountActivity extends AccountAuthenticatorActivity {
|
|||
|
||||
Bundle resultBundle = new Bundle();
|
||||
resultBundle.putString(AccountManager.KEY_ACCOUNT_NAME, syncAccount.username);
|
||||
resultBundle.putString(AccountManager.KEY_ACCOUNT_TYPE, GlobalConstants.ACCOUNTTYPE_SYNC);
|
||||
resultBundle.putString(AccountManager.KEY_AUTHTOKEN, GlobalConstants.ACCOUNTTYPE_SYNC);
|
||||
resultBundle.putString(AccountManager.KEY_ACCOUNT_TYPE, SyncConstants.ACCOUNTTYPE_SYNC);
|
||||
resultBundle.putString(AccountManager.KEY_AUTHTOKEN, SyncConstants.ACCOUNTTYPE_SYNC);
|
||||
setAccountAuthenticatorResult(resultBundle);
|
||||
|
||||
setResult(RESULT_OK);
|
||||
|
|
|
@ -4,9 +4,15 @@
|
|||
|
||||
package org.mozilla.gecko.sync.setup.activities;
|
||||
|
||||
import org.mozilla.gecko.sync.Logger;
|
||||
import org.mozilla.gecko.sync.SyncConstants;
|
||||
import org.mozilla.gecko.sync.setup.InvalidSyncKeyException;
|
||||
|
||||
public class ActivityUtils {
|
||||
public static void prepareLogging() {
|
||||
Logger.setThreadLogTag(SyncConstants.GLOBAL_LOG_TAG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sync key should be a 26-character string, and can include arbitrary
|
||||
* capitalization and hyphenation.
|
||||
|
|
|
@ -4,13 +4,13 @@ import org.mozilla.gecko.R;
|
|||
import org.mozilla.gecko.sync.Logger;
|
||||
import org.mozilla.gecko.sync.setup.Constants;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
public class RedirectToSetupActivity extends Activity {
|
||||
public class RedirectToSetupActivity extends SyncActivity {
|
||||
public static final String LOG_TAG = "RedirectToSetupActivity";
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
|
|
@ -11,6 +11,7 @@ import org.mozilla.gecko.sync.CommandProcessor;
|
|||
import org.mozilla.gecko.sync.CommandRunner;
|
||||
import org.mozilla.gecko.sync.CredentialException;
|
||||
import org.mozilla.gecko.sync.GlobalConstants;
|
||||
import org.mozilla.gecko.sync.SyncConstants;
|
||||
import org.mozilla.gecko.sync.GlobalSession;
|
||||
import org.mozilla.gecko.sync.Logger;
|
||||
import org.mozilla.gecko.sync.SyncConfiguration;
|
||||
|
@ -49,6 +50,7 @@ public class SendTabActivity extends Activity {
|
|||
|
||||
@Override
|
||||
public void onResume() {
|
||||
ActivityUtils.prepareLogging();
|
||||
Logger.info(LOG_TAG, "Called SendTabActivity.onResume.");
|
||||
super.onResume();
|
||||
|
||||
|
@ -93,7 +95,7 @@ public class SendTabActivity extends Activity {
|
|||
|
||||
private void redirectIfNoSyncAccount() {
|
||||
accountManager = AccountManager.get(getApplicationContext());
|
||||
Account[] accts = accountManager.getAccountsByType(GlobalConstants.ACCOUNTTYPE_SYNC);
|
||||
Account[] accts = accountManager.getAccountsByType(SyncConstants.ACCOUNTTYPE_SYNC);
|
||||
|
||||
// A Sync account exists.
|
||||
if (accts.length > 0) {
|
||||
|
|
|
@ -7,14 +7,13 @@ package org.mozilla.gecko.sync.setup.activities;
|
|||
import org.mozilla.gecko.R;
|
||||
import org.mozilla.gecko.sync.setup.Constants;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class SetupFailureActivity extends Activity {
|
||||
public class SetupFailureActivity extends SyncActivity {
|
||||
private Context mContext;
|
||||
|
||||
@Override
|
||||
|
|
|
@ -6,18 +6,15 @@ package org.mozilla.gecko.sync.setup.activities;
|
|||
|
||||
import org.mozilla.gecko.R;
|
||||
import org.mozilla.gecko.sync.GlobalConstants;
|
||||
import org.mozilla.gecko.sync.Logger;
|
||||
import org.mozilla.gecko.sync.setup.Constants;
|
||||
import org.mozilla.gecko.sync.setup.SyncAccounts;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class SetupSuccessActivity extends Activity {
|
||||
private final static String LOG_TAG = "SetupSuccessActivity";
|
||||
public class SetupSuccessActivity extends SyncActivity {
|
||||
private TextView setupSubtitle;
|
||||
|
||||
@Override
|
||||
|
@ -36,7 +33,6 @@ public class SetupSuccessActivity extends Activity {
|
|||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
Logger.debug(LOG_TAG, "onDestroy() called.");
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
|
|
|
@ -9,8 +9,8 @@ import java.util.HashMap;
|
|||
|
||||
import org.json.simple.JSONObject;
|
||||
import org.mozilla.gecko.R;
|
||||
import org.mozilla.gecko.sync.GlobalConstants;
|
||||
import org.mozilla.gecko.sync.Logger;
|
||||
import org.mozilla.gecko.sync.SyncConstants;
|
||||
import org.mozilla.gecko.sync.ThreadPool;
|
||||
import org.mozilla.gecko.sync.Utils;
|
||||
import org.mozilla.gecko.sync.jpake.JPakeClient;
|
||||
|
@ -64,12 +64,12 @@ public class SetupSyncActivity extends AccountAuthenticatorActivity {
|
|||
|
||||
public SetupSyncActivity() {
|
||||
super();
|
||||
Logger.info(LOG_TAG, "SetupSyncActivity constructor called.");
|
||||
}
|
||||
|
||||
/** Called when the activity is first created. */
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
ActivityUtils.prepareLogging();
|
||||
Logger.info(LOG_TAG, "Called SetupSyncActivity.onCreate.");
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
|
@ -88,6 +88,7 @@ public class SetupSyncActivity extends AccountAuthenticatorActivity {
|
|||
|
||||
@Override
|
||||
public void onResume() {
|
||||
ActivityUtils.prepareLogging();
|
||||
Logger.info(LOG_TAG, "Called SetupSyncActivity.onResume.");
|
||||
super.onResume();
|
||||
|
||||
|
@ -106,7 +107,8 @@ public class SetupSyncActivity extends AccountAuthenticatorActivity {
|
|||
ThreadPool.run(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Account[] accts = mAccountManager.getAccountsByType(GlobalConstants.ACCOUNTTYPE_SYNC);
|
||||
ActivityUtils.prepareLogging();
|
||||
Account[] accts = mAccountManager.getAccountsByType(SyncConstants.ACCOUNTTYPE_SYNC);
|
||||
finishResume(accts);
|
||||
}
|
||||
});
|
||||
|
@ -319,7 +321,7 @@ public class SetupSyncActivity extends AccountAuthenticatorActivity {
|
|||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressWarnings({ "unchecked", "static-method" })
|
||||
protected JSONObject makeAccountJSON(String username, String password,
|
||||
String syncKey, String serverURL) {
|
||||
|
||||
|
@ -346,7 +348,7 @@ public class SetupSyncActivity extends AccountAuthenticatorActivity {
|
|||
*/
|
||||
public void onPaired() {
|
||||
// Extract Sync account data.
|
||||
Account[] accts = mAccountManager.getAccountsByType(GlobalConstants.ACCOUNTTYPE_SYNC);
|
||||
Account[] accts = mAccountManager.getAccountsByType(SyncConstants.ACCOUNTTYPE_SYNC);
|
||||
if (accts.length == 0) {
|
||||
// Error, no account present.
|
||||
Logger.error(LOG_TAG, "No accounts present.");
|
||||
|
@ -437,8 +439,8 @@ public class SetupSyncActivity extends AccountAuthenticatorActivity {
|
|||
if (isSuccess) {
|
||||
Bundle resultBundle = new Bundle();
|
||||
resultBundle.putString(AccountManager.KEY_ACCOUNT_NAME, syncAccount.username);
|
||||
resultBundle.putString(AccountManager.KEY_ACCOUNT_TYPE, GlobalConstants.ACCOUNTTYPE_SYNC);
|
||||
resultBundle.putString(AccountManager.KEY_AUTHTOKEN, GlobalConstants.ACCOUNTTYPE_SYNC);
|
||||
resultBundle.putString(AccountManager.KEY_ACCOUNT_TYPE, SyncConstants.ACCOUNTTYPE_SYNC);
|
||||
resultBundle.putString(AccountManager.KEY_AUTHTOKEN, SyncConstants.ACCOUNTTYPE_SYNC);
|
||||
setAccountAuthenticatorResult(resultBundle);
|
||||
}
|
||||
displayResultAndFinish(isSuccess);
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.gecko.sync.setup.activities;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
|
||||
/**
|
||||
* Shared superclass of Sync activities. Currently exists to prepare per-thread
|
||||
* logging.
|
||||
*/
|
||||
public abstract class SyncActivity extends Activity {
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
ActivityUtils.prepareLogging();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
ActivityUtils.prepareLogging();
|
||||
}
|
||||
}
|
|
@ -20,7 +20,7 @@ import android.webkit.WebViewClient;
|
|||
* @author liuche
|
||||
*
|
||||
*/
|
||||
public class WebViewActivity extends Activity {
|
||||
public class WebViewActivity extends SyncActivity {
|
||||
private final static String LOG_TAG = "WebViewActivity";
|
||||
|
||||
@Override
|
||||
|
|
|
@ -13,7 +13,7 @@ import java.net.URISyntaxException;
|
|||
import java.security.GeneralSecurityException;
|
||||
|
||||
import org.mozilla.apache.commons.codec.binary.Base64;
|
||||
import org.mozilla.gecko.sync.GlobalConstants;
|
||||
import org.mozilla.gecko.sync.SyncConstants;
|
||||
import org.mozilla.gecko.sync.Logger;
|
||||
import org.mozilla.gecko.sync.net.BaseResource;
|
||||
import org.mozilla.gecko.sync.net.SyncResourceDelegate;
|
||||
|
@ -102,7 +102,7 @@ public class AuthenticateAccountStage implements AuthenticatorStage {
|
|||
// Make reference to request, to abort if necessary.
|
||||
httpRequest = request;
|
||||
client.log.enableDebug(true);
|
||||
request.setHeader(new BasicHeader("User-Agent", GlobalConstants.SYNC_USER_AGENT));
|
||||
request.setHeader(new BasicHeader("User-Agent", SyncConstants.SYNC_USER_AGENT));
|
||||
// Host header is not set for some reason, so do it explicitly.
|
||||
try {
|
||||
URI authServerUri = new URI(authRequestUrl);
|
||||
|
|
|
@ -14,6 +14,7 @@ import org.mozilla.gecko.db.BrowserContract;
|
|||
import org.mozilla.gecko.sync.AlreadySyncingException;
|
||||
import org.mozilla.gecko.sync.CredentialException;
|
||||
import org.mozilla.gecko.sync.GlobalConstants;
|
||||
import org.mozilla.gecko.sync.SyncConstants;
|
||||
import org.mozilla.gecko.sync.GlobalSession;
|
||||
import org.mozilla.gecko.sync.Logger;
|
||||
import org.mozilla.gecko.sync.NonObjectJSONException;
|
||||
|
@ -238,11 +239,11 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements GlobalSe
|
|||
* @param backoff time to wait in milliseconds.
|
||||
*/
|
||||
@Override
|
||||
public void requestBackoff(long backoff) {
|
||||
public void requestBackoff(final long backoff) {
|
||||
if (backoff > 0) {
|
||||
// Fuzz the backoff time (up to 25% more) to prevent client lock-stepping; agrees with desktop.
|
||||
backoff = backoff + Math.round((double) backoff * 0.25d * Math.random());
|
||||
this.extendEarliestNextSync(System.currentTimeMillis() + backoff);
|
||||
final long fuzzedBackoff = backoff + Math.round((double) backoff * 0.25d * Math.random());
|
||||
this.extendEarliestNextSync(System.currentTimeMillis() + fuzzedBackoff);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -275,6 +276,7 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements GlobalSe
|
|||
final String authority,
|
||||
final ContentProviderClient provider,
|
||||
final SyncResult syncResult) {
|
||||
Logger.setThreadLogTag(SyncConstants.GLOBAL_LOG_TAG);
|
||||
Logger.resetLogging();
|
||||
Utils.reseedSharedRandom(); // Make sure we don't work with the same random seed for too long.
|
||||
|
||||
|
@ -521,7 +523,7 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements GlobalSe
|
|||
public synchronized String getClientName() {
|
||||
String clientName = accountSharedPreferences.getString(SyncConfiguration.PREF_CLIENT_NAME, null);
|
||||
if (clientName == null) {
|
||||
clientName = GlobalConstants.PRODUCT_NAME + " on " + android.os.Build.MODEL;
|
||||
clientName = SyncConstants.PRODUCT_NAME + " on " + android.os.Build.MODEL;
|
||||
accountSharedPreferences.edit().putString(SyncConfiguration.PREF_CLIENT_NAME, clientName).commit();
|
||||
}
|
||||
return clientName;
|
||||
|
|
|
@ -61,8 +61,10 @@ sync/log/writers/AndroidLogWriter.java
|
|||
sync/log/writers/LevelFilteringLogWriter.java
|
||||
sync/log/writers/LogWriter.java
|
||||
sync/log/writers/PrintLogWriter.java
|
||||
sync/log/writers/SingleTagLogWriter.java
|
||||
sync/log/writers/SimpleTagLogWriter.java
|
||||
sync/log/writers/StringLogWriter.java
|
||||
sync/log/writers/TagLogWriter.java
|
||||
sync/log/writers/ThreadLocalTagLogWriter.java
|
||||
sync/Logger.java
|
||||
sync/MetaGlobal.java
|
||||
sync/MetaGlobalException.java
|
||||
|
@ -183,6 +185,7 @@ sync/setup/activities/SendTabActivity.java
|
|||
sync/setup/activities/SetupFailureActivity.java
|
||||
sync/setup/activities/SetupSuccessActivity.java
|
||||
sync/setup/activities/SetupSyncActivity.java
|
||||
sync/setup/activities/SyncActivity.java
|
||||
sync/setup/activities/WebViewActivity.java
|
||||
sync/setup/auth/AccountAuthenticator.java
|
||||
sync/setup/auth/AuthenticateAccountStage.java
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
sync/GlobalConstants.java
|
||||
sync/SyncConstants.java
|
||||
|
|
Загрузка…
Ссылка в новой задаче