package org.wikipedia.useroption.sync;
import android.accounts.Account;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import org.wikipedia.BuildConfig;
import org.wikipedia.WikipediaApp;
import org.wikipedia.auth.AccountUtil;
import org.wikipedia.database.contract.UserOptionContract;
import org.wikipedia.theme.Theme;
import org.wikipedia.useroption.database.UserOptionDao;
import org.wikipedia.util.log.L;
public final class UserOptionContentResolver {
public static void requestManualUpload() {
requestManualSync(true);
}
public static void requestManualSync() {
requestManualSync(false);
}
public static void requestManualSync(boolean uploadOnly) {
Bundle bundle = new Bundle();
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_UPLOAD, uploadOnly);
requestSync(bundle);
}
public static void registerAppSyncObserver(@NonNull Context context) {
Uri uri = UserOptionContract.Option.URI;
UserOptionContentObserver observer = new UserOptionContentObserver();
context.getContentResolver().registerContentObserver(uri, true, observer);
}
private static void requestSync(@NonNull Bundle bundle) {
Account account = AccountUtil.account();
if (account == null) {
L.i("no account");
return;
}
ContentResolver.requestSync(account, BuildConfig.USER_OPTION_AUTHORITY, bundle);
}
private UserOptionContentResolver() { }
private static class UserOptionContentObserver extends ContentObserver {
UserOptionContentObserver() {
super(new Handler());
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
UserOptionDao.instance().theme(new UserOptionDao.Callback<Theme>() {
@Override
public void success(@Nullable Theme item) {
if (item != null) {
WikipediaApp.getInstance().setCurrentTheme(item);
}
}
});
UserOptionDao.instance().fontSize(new UserOptionDao.Callback<Integer>() {
@Override
public void success(@Nullable Integer item) {
if (item != null) {
WikipediaApp.getInstance().setFontSizeMultiplier(item);
}
}
});
}
}
}