Java源码示例:net.grandcentrix.tray.core.TrayItem
示例1
@Override
public void onTrayPreferenceChanged(Collection<TrayItem> items) {
boolean permission = preferences.getBoolean(PREF_PERMISSION, false);
boolean serviceEnabled = preferences.getBoolean(PREF_ENABLED, false);
debugEnabled = preferences.getBoolean(PREF_DEBUG, false);
prefScreenOn = preferences.getBoolean(PREF_SCREEN_ON, false);
prefNoMedia = preferences.getBoolean(PREF_NO_MEDIA, false);
if(serviceEnabled && permission) {
mediaSessionManager.setOnVolumeKeyLongPressListener(this, mHandler);
Log.d("cilenco", "Registered VolumeKeyListener");
} else {
mediaSessionManager.setOnVolumeKeyLongPressListener(null, null);
Log.d("cilenco", "Unregistered VolumeKeyListener");
}
}
示例2
/**
* logging wrapper for:
* example how to import shared preferences
*/
private void importSharedPreferencesWithLogging() {
final SharedPreferences sharedPreferences = getContext()
.getSharedPreferences(SampleActivity.SHARED_PREF_NAME,
Context.MODE_MULTI_PROCESS);
final HashMap<String, ?> allBefore = new HashMap<>(sharedPreferences.getAll());
Log.v(TAG, allBefore.size() + " items in sharedPreferences: " + allBefore.toString());
// 2 items in sharedPreferences: {userToken=cf26535a-6949-4728-b595-c6d80c094eff, gcmToken=2ca7e9a0-9114-4d55-8d2d-870b8d49fafe}
importSharedPreferences();
final ArrayList<TrayItem> all = new ArrayList<>(getAll());
Log.v(TAG, "imported " + all.size() + " items: " + all.toString());
// imported 2 items: [
// {key: gcm:token, value: 2ca7e9a0-9114-4d55-8d2d-870b8d49fafe, module: imported, created: 14:06:04 05.06.2015, updated: 14:06:04 05.06.2015, migratedKey: gcmToken},
// {key: user:token, value: cf26535a-6949-4728-b595-c6d80c094eff, module: imported, created: 14:06:04 05.06.2015, updated: 14:06:04 05.06.2015, migratedKey: userToken}
// ]
final HashMap<String, ?> allAfter = new HashMap<>(sharedPreferences.getAll());
Log.v(TAG, allAfter.size() + " items in sharedPreferences: " + allAfter.toString());
// 0 items in sharedPreferences: {}
}
示例3
@Override
@Nullable
public TrayItem get(@NonNull final String key) {
final Uri uri = mTrayUri.builder()
.setType(getType())
.setModule(getModuleName())
.setKey(key)
.build();
final List<TrayItem> prefs = mProviderHelper.queryProviderSafe(uri);
final int size = prefs.size();
if (size > 1) {
TrayLog.w("found more than one item for key '" + key
+ "' in module " + getModuleName() + ". "
+ "This can be caused by using the same name for a device and user specific preference.");
for (int i = 0; i < prefs.size(); i++) {
final TrayItem pref = prefs.get(i);
TrayLog.d("item #" + i + " " + pref);
}
}
return size > 0 ? prefs.get(0) : null;
}
示例4
/**
* sends a query for TrayItems to the provider
*
* @param uri path to data
* @return list of items
* @throws TrayException when something is wrong with the provider/database
*/
@NonNull
public List<TrayItem> queryProvider(@NonNull final Uri uri) throws TrayException {
final Cursor cursor;
try {
cursor = mContext.getContentResolver().query(uri, null, null, null, null);
} catch (Throwable e) {
throw new TrayException("Hard error accessing the ContentProvider", e);
}
// Return Preference if found
if (cursor == null) {
// When running in here, please check if your ContentProvider has the correct authority
throw new TrayException("could not access stored data with uri " + uri);
}
final ArrayList<TrayItem> list = new ArrayList<>();
for (boolean hasItem = cursor.moveToFirst(); hasItem; hasItem = cursor.moveToNext()) {
final TrayItem trayItem = cursorToTrayItem(cursor);
list.add(trayItem);
}
cursor.close();
return list;
}
示例5
/**
* converts a {@link Cursor} to a {@link TrayItem}
* <p>
* This is not a secondary constructor in {@link TrayItem} because the columns are a
* implementation detail of the provider package
*
* @param cursor (size > 1)
* @return a {@link TrayItem} filled with data
*/
@NonNull
static TrayItem cursorToTrayItem(final Cursor cursor) {
final String module = cursor.getString(cursor
.getColumnIndexOrThrow(TrayContract.Preferences.Columns.MODULE));
final String key = cursor.getString(cursor
.getColumnIndexOrThrow(TrayContract.Preferences.Columns.KEY));
final String migratedKey = cursor.getString(cursor
.getColumnIndexOrThrow(TrayContract.Preferences.Columns.MIGRATED_KEY));
final String value = cursor.getString(cursor
.getColumnIndexOrThrow(TrayContract.Preferences.Columns.VALUE));
final Date created = new Date(cursor.getLong(cursor
.getColumnIndexOrThrow(TrayContract.Preferences.Columns.CREATED)));
final Date updated = new Date(cursor.getLong(cursor
.getColumnIndexOrThrow(TrayContract.Preferences.Columns.UPDATED)));
return new TrayItem(module, key, migratedKey, value, created, updated);
}
示例6
public void testUnregister() throws Exception {
final OnTrayPreferenceChangeListener listener = new OnTrayPreferenceChangeListener() {
@Override
public void onTrayPreferenceChanged(final Collection<TrayItem> items) {
}
};
final ContentProviderStorage userStorage = checkChangeListener(true, listener);
assertEquals(1, userStorage.mListeners.size());
// unregister null should do nothing
userStorage.unregisterOnTrayPreferenceChangeListener(null);
assertEquals(1, userStorage.mListeners.size());
userStorage.unregisterOnTrayPreferenceChangeListener(listener);
assertEquals(0, userStorage.mListeners.size());
assertNull(userStorage.mObserver);
assertNull(userStorage.mObserverThread);
}
示例7
public void testUpdateChanges() throws Exception {
assertTrue(mProviderHelper.persist(MODULE_A, KEY_A, STRING_A));
final List<TrayItem> list = mProviderHelper
.queryProvider(getUri(MODULE_A, KEY_A));
assertNotNull(list);
assertEquals(1, list.size());
TrayItem itemA = list.get(0);
assertNotNull(itemA.created());
assertNotNull(itemA.updateTime());
Thread.sleep(10);
assertTrue(mProviderHelper.persist(MODULE_A, KEY_A, STRING_B));
final List<TrayItem> list2 = mProviderHelper
.queryProvider(getUri(MODULE_A, KEY_A));
assertNotNull(list2);
assertEquals(1, list2.size());
TrayItem itemB = list2.get(0);
//Log.v("", "diff: " + (itemA.updateTime().getTime() - itemB.updateTime().getTime()));
assertNotSame(itemA.updateTime().getTime(), itemB.updateTime().getTime());
}
示例8
private void onSettingsChanged(Collection<TrayItem> trayItems) {
for (TrayItem item : trayItems) {
switch (item.key()) {
case Settings.SETTING_SUBSCRIBE_IDENTIFY_PATTERN:
mSettings.setSubscribeIdentifyPattern(item.value());
break;
case Settings.SETTING_SUBSCRIBE_PRIORITY:
mSettings.setSubscribePriority(Integer.parseInt(Objects.requireNonNull(item.value())));
break;
}
}
}
示例9
private void onSettingsChanged(Collection<TrayItem> trayItems) {
for (TrayItem item : trayItems) {
switch (item.key()) {
case Settings.SETTING_CAPTCHA_IDENTIFY_PATTERN:
mSettings.setCaptchaIdentifyPattern(item.value());
initCaptchaUtils();
break;
case Settings.SETTING_CAPTCHA_PARSE_PATTERN:
mSettings.setCaptchaParsePattern(item.value());
initCaptchaUtils();
break;
case Settings.SETTING_CAPTCHA_USE_DEFAULT_PATTERN :
mSettings.setCaptchaUseDefaultPattern(Boolean.parseBoolean(item.value()));
initCaptchaUtils();
break;
case Settings.SETTING_CAPTCHA_HIDE_ON_LOCKED :
mSettings.setCaptchaHideOnLocked(Boolean.parseBoolean(item.value()));
break;
case Settings.SETTING_CAPTCHA_OVERRIDE_DEFAULT_ACTION :
mSettings.setCaptchaOverrideDefaultAction(Boolean.parseBoolean(item.value()));
break;
case Settings.SETTING_CAPTCHA_POST_COPY_ACTION :
mSettings.setCaptchaPostCopyAction(Integer.parseInt(Objects.requireNonNull(item.value())));
break;
}
Log.i(TAG ,"Settings Updated " + item.key() + "=" + item.value());
}
}
示例10
private List<String> getNiceString(final Collection<TrayItem> items) {
return Observable.from(items)
.map(new Func1<TrayItem, String>() {
@Override
public String call(final TrayItem trayItem) {
return "key: '" + trayItem.key() + "' value '" + trayItem.value() + "'";
}
})
.toList().toBlocking().first();
}
示例11
@Override
public void onChange(final boolean selfChange, Uri uri) {
if (uri == null) {
// for sdk version 15 and below we cannot detect which exact data was changed. This will
// return all data for this module
uri = mTrayUri.builder().setModule(getModuleName()).build();
}
// query only the changed items
final List<TrayItem> trayItems = mProviderHelper.queryProviderSafe(uri);
// clone to get around ConcurrentModificationException
final Set<Map.Entry<OnTrayPreferenceChangeListener, Handler>> entries
= new HashSet<>(mListeners.entrySet());
// notify all registered listeners
for (final Map.Entry<OnTrayPreferenceChangeListener, Handler> entry : entries) {
final OnTrayPreferenceChangeListener listener = entry.getKey();
final Handler handler = entry.getValue();
if (handler != null) {
// call the listener on the thread where the listener was registered
handler.post(new Runnable() {
@Override
public void run() {
listener.onTrayPreferenceChanged(trayItems);
}
});
} else {
listener.onTrayPreferenceChanged(trayItems);
}
}
}
示例12
@Override
public void annex(final TrayStorage oldStorage) {
for (final TrayItem trayItem : oldStorage.getAll()) {
put(trayItem);
}
// ignore result
oldStorage.wipe();
}
示例13
@NonNull
@Override
public Collection<TrayItem> getAll() {
final Uri uri = mTrayUri.builder()
.setType(getType())
.setModule(getModuleName())
.build();
return mProviderHelper.queryProviderSafe(uri);
}
示例14
@Override
public int getVersion() throws TrayException {
final Uri internalUri = mTrayUri.builder()
.setInternal(true)
.setType(getType())
.setModule(getModuleName())
.setKey(VERSION)
.build();
final List<TrayItem> trayItems = mProviderHelper.queryProvider(internalUri);
if (trayItems.size() == 0) {
// fallback, not found
return 0;
}
return Integer.valueOf(trayItems.get(0).value());
}
示例15
/**
* sends a query for TrayItems to the provider, doesn't throw when the database access couldn't
* be established
*
* @param uri path to data
* @return list of items, empty when an error occured
*/
@NonNull
public List<TrayItem> queryProviderSafe(@NonNull final Uri uri) {
try {
return queryProvider(uri);
} catch (TrayException e) {
return new ArrayList<>();
}
}
示例16
@Override
public void annex(final TrayStorage oldStorage) {
for (final TrayItem trayItem : oldStorage.getAll()) {
mData.put(trayItem.key(), trayItem);
}
oldStorage.wipe();
}
示例17
public void testSaveNullAsString() throws Exception {
assertEquals("default", mPref.getString(KEY, "default"));
mPref.put(KEY, null);
final TrayItem pref = mPref.getPref(KEY);
assertNotNull(pref);
assertEquals(null, pref.value());
assertEquals(null, mPref.getString(KEY));
}
示例18
public void testGetAll() throws Exception {
final TestTrayModulePreferences module2 =
new TestTrayModulePreferences(getProviderMockContext(), "module2");
mTrayModulePref.put("test", "test");
module2.put("test", "test");
mTrayModulePref.put("test2", "test");
module2.put("test2", "test");
assertUserDatabaseSize(4);
final Collection<TrayItem> all = mTray.getAll();
assertEquals(4, all.size());
}
示例19
public void testNullValues() throws Exception {
final TrayItem item = new TrayItem(null, null, null, null, null, null);
assertEquals(null, item.key());
assertEquals(null, item.value());
assertEquals(null, item.migratedKey());
assertEquals(null, item.module());
assertEquals(null, item.updateTime());
assertEquals(null, item.created());
}
示例20
public void testToString() throws Exception {
SimpleDateFormat sf = new SimpleDateFormat("HH:mm:ss dd.MM.yyyy", Locale.US);
final Date created = new Date();
final Date updated = new Date();
final TrayItem item = new TrayItem("module", "key", "migratedKey", "value", created, updated
);
final String string = item.toString();
assertTrue(string.contains(item.key()));
assertTrue(string.contains(item.value()));
assertTrue(string.contains(item.migratedKey()));
assertTrue(string.contains(item.module()));
assertTrue(string.contains(sf.format(item.updateTime())));
assertTrue(string.contains(sf.format(item.created())));
}
示例21
public void testValues() throws Exception {
final Date created = new Date();
final Date updated = new Date();
final TrayItem item = new TrayItem("module", "key", "migratedKey", "value", created, updated
);
assertEquals("key", item.key());
assertEquals("value", item.value());
assertEquals("migratedKey", item.migratedKey());
assertEquals("module", item.module());
assertEquals(updated, item.updateTime());
assertEquals(created, item.created());
}
示例22
public void testApiLevel15OnChange() throws Exception {
final CountDownLatch latch = new CountDownLatch(
2); // first time called in checkChangeListener() second time in this test
final ArrayList<TrayItem> changed = new ArrayList<>();
final OnTrayPreferenceChangeListener listener = new OnTrayPreferenceChangeListener() {
@Override
public void onTrayPreferenceChanged(final Collection<TrayItem> items) {
changed.addAll(items);
latch.countDown();
}
};
final ContentProviderStorage storage = checkChangeListener(true, listener);
storage.put("some", "value");
storage.put("foo", "bar");
new HandlerThread("change") {
@Override
protected void onLooperPrepared() {
super.onLooperPrepared();
storage.mObserver.onChange(false);
}
}.start();
latch.await(3000, TimeUnit.MILLISECONDS);
assertEquals(2, changed.size());
}
示例23
public void testGetDevice() throws Exception {
final ContentProviderStorage storage = new ContentProviderStorage(getProviderMockContext(),
"testGet_Device", TrayStorage.Type.DEVICE);
assertNull(storage.get("test"));
assertTrue(storage.put("test", "foo"));
final TrayItem item = storage.get("test");
assertNotNull(item);
assertEquals("test", item.key());
assertEquals("foo", item.value());
}
示例24
public void testGetUser() throws Exception {
final ContentProviderStorage storage = new ContentProviderStorage(getProviderMockContext(),
"testGet_User", TrayStorage.Type.USER);
assertNull(storage.get("test"));
assertTrue(storage.put("test", "foo"));
final TrayItem item = storage.get("test");
assertNotNull(item);
assertEquals("test", item.key());
assertEquals("foo", item.value());
}
示例25
private void checkReadDataWithUndefined(final ContentProviderStorage original)
throws Exception {
final ContentProviderStorage undefined = new ContentProviderStorage(
getProviderMockContext(), original.getModuleName(), TrayStorage.Type.UNDEFINED);
assertEquals(TrayStorage.Type.UNDEFINED, undefined.getType());
assertEquals(original.getAll().size(), undefined.getAll().size());
final TrayItem item = undefined.get(TEST_KEY);
assertNotNull(item);
assertEquals(original.get(TEST_KEY).value(), item.value());
assertEquals(original.getVersion(), undefined.getVersion());
assertEquals(original.getModuleName(), undefined.getModuleName());
}
示例26
private void checkVersionAfterClear(final ContentProviderStorage storage) throws Exception {
assertTrue(storage.put("key", "value"));
final TrayItem key = storage.get("key");
assertNotNull(key);
assertEquals("value", key.value());
storage.setVersion(1);
assertEquals(1, storage.getVersion());
storage.clear();
assertNull(storage.get("key"));
assertEquals(0, storage.getAll().size());
assertEquals(1, storage.getVersion());
}
示例27
public void testCreatedTime() throws Exception {
final long start = System.currentTimeMillis();
mProviderHelper.persist(MODULE_A, KEY_A, STRING_A);
final List<TrayItem> list = mProviderHelper
.queryProvider(getUri(MODULE_A, KEY_A));
assertNotNull(list);
assertEquals(1, list.size());
TrayItem itemA = list.get(0);
assertNotNull(itemA.created());
assertEqualsWithin(start, itemA.created().getTime(), 50l);
}
示例28
public void testCreatedTimeDoesNotChange() throws Exception {
testCreatedTime();
final TrayItem insertedItem = mProviderHelper.getAll().get(0);
final long createdTime = insertedItem.created().getTime();
Thread.sleep(50);
// save again
assertTrue(mProviderHelper.persist(MODULE_A, KEY_A, STRING_B));
final long updatedCreatedTime = mProviderHelper.getAll().get(0).created().getTime();
assertEquals(createdTime, updatedCreatedTime);
}
示例29
public void testCursorToTrayItem() throws Exception {
final MatrixCursor matrixCursor = new MatrixCursor(new String[]{
TrayContract.Preferences.Columns.KEY,
TrayContract.Preferences.Columns.VALUE,
TrayContract.Preferences.Columns.MODULE,
TrayContract.Preferences.Columns.CREATED,
TrayContract.Preferences.Columns.UPDATED,
TrayContract.Preferences.Columns.MIGRATED_KEY
});
final Date created = new Date();
final Date updated = new Date();
matrixCursor.addRow(new Object[]{
"key",
"value",
"module",
created.getTime(),
updated.getTime(),
"migratedKey"
});
assertTrue(matrixCursor.moveToFirst());
final TrayItem item = TrayProviderHelper.cursorToTrayItem(matrixCursor);
assertEquals("key", item.key());
assertEquals("value", item.value());
assertEquals("migratedKey", item.migratedKey());
assertEquals("module", item.module());
assertEquals(updated, item.updateTime());
assertEquals(created, item.created());
}
示例30
public void testGetAll() throws Exception {
assertTrue(mProviderHelper.persist(MODULE_A, KEY_A, STRING_A));
final List<TrayItem> all = mProviderHelper.getAll();
assertEquals(1, all.size());
assertEquals(STRING_A, all.get(0).value());
assertEquals(KEY_A, all.get(0).key());
}