diff options
author | John Reck <jreck@google.com> | 2013-03-15 13:19:30 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2013-03-15 13:19:30 -0700 |
commit | 0fe391a43d0c549fa0effddd21ece4eb4ba86194 (patch) | |
tree | 5b738a76acc5c21e568bdefd27d8ce3721411e32 /src/com/android/photos | |
parent | 4fc93d01548b8b67cb4cdd4a9e540ea0e004df49 (diff) | |
download | android_packages_apps_Snap-0fe391a43d0c549fa0effddd21ece4eb4ba86194.tar.gz android_packages_apps_Snap-0fe391a43d0c549fa0effddd21ece4eb4ba86194.tar.bz2 android_packages_apps_Snap-0fe391a43d0c549fa0effddd21ece4eb4ba86194.zip |
Prepare to switch to panolibs
Change-Id: Ie29c0014fcb08105cab1ee6043f66b58e5ac85f8
Diffstat (limited to 'src/com/android/photos')
-rw-r--r-- | src/com/android/photos/canvas/CanvasActivity.java | 35 | ||||
-rw-r--r-- | src/com/android/photos/canvas/CanvasProvider.java | 381 | ||||
-rw-r--r-- | src/com/android/photos/canvas/CanvasProviderBase.java | 414 | ||||
-rw-r--r-- | src/com/android/photos/canvas/EnableSyncActivity.java | 25 |
4 files changed, 0 insertions, 855 deletions
diff --git a/src/com/android/photos/canvas/CanvasActivity.java b/src/com/android/photos/canvas/CanvasActivity.java deleted file mode 100644 index ad3cb638b..000000000 --- a/src/com/android/photos/canvas/CanvasActivity.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * 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 - * - * http://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. - */ - -package com.android.photos.canvas; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; - -import com.google.android.pano.provider.PanoContract; - - -public class CanvasActivity extends Activity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - Intent intent = PanoContract.getBrowseIntent( - CanvasProvider.BROWSER_ROOT_URI, 0); - startActivity(intent); - finish(); - } -} diff --git a/src/com/android/photos/canvas/CanvasProvider.java b/src/com/android/photos/canvas/CanvasProvider.java deleted file mode 100644 index 92ca33c2c..000000000 --- a/src/com/android/photos/canvas/CanvasProvider.java +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * 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 - * - * http://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. - */ - -package com.android.photos.canvas; - -import android.accounts.Account; -import android.accounts.AccountManager; -import android.content.ContentResolver; -import android.content.Intent; -import android.content.res.AssetFileDescriptor; -import android.database.MatrixCursor; -import android.graphics.Bitmap; -import android.graphics.Bitmap.CompressFormat; -import android.net.Uri; -import android.os.AsyncTask; -import android.os.Binder; -import android.os.ParcelFileDescriptor; -import android.os.SystemClock; -import android.util.Log; - -import com.android.gallery3d.R; -import com.android.gallery3d.app.GalleryApp; -import com.android.gallery3d.data.ContentListener; -import com.android.gallery3d.data.DataManager; -import com.android.gallery3d.data.MediaItem; -import com.android.gallery3d.data.MediaSet; -import com.android.gallery3d.data.MediaSet.SyncListener; -import com.android.gallery3d.util.Future; -import com.android.gallery3d.util.ThreadPool.CancelListener; -import com.android.gallery3d.util.ThreadPool.Job; -import com.android.gallery3d.util.ThreadPool.JobContext; -import com.google.android.pano.data.Cluster; -import com.google.android.pano.provider.PanoContract; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class CanvasProvider extends CanvasProviderBase { - - private static final String TAG = "GalleryCanvasProvider"; - - // TODO: Temporary for testing, remove once b/8099821 fixed - public static final String PHOTO_AUTHORITY = "com.google.android.gallery3d.GooglePhotoProvider"; - public static final String ACCOUNT_TYPE = "com.google"; - - private DataManager mDataManager; - private MediaSet mRootSet; - - private static final long SYNC_IN_PROGRESS = -1; - private HashMap<MediaSet, Long> mSyncedSets = new HashMap<MediaSet, Long>(); - - private final SyncListener mSyncListener = new SyncListener() { - - @Override - public void onSyncDone(MediaSet mediaSet, int resultCode) { - if (resultCode != MediaSet.SYNC_RESULT_SUCCESS) { - mSyncedSets.put(mediaSet, (long) 0); - } else { - mSyncedSets.put(mediaSet, SystemClock.uptimeMillis()); - } - } - }; - - private final ContentListener mChangedListener = new ContentListener() { - - @Override - public void onContentDirty() { - getContext().getContentResolver().notifyChange(NOTIFY_CHANGED_URI, - null, false); - } - }; - - @Override - public boolean onCreate() { - GalleryApp app = (GalleryApp) getContext().getApplicationContext(); - mDataManager = app.getDataManager(); - return true; - } - - private MediaSet loadRootMediaSet() { - if (mRootSet == null) { - String path = mDataManager.getTopSetPath(DataManager.INCLUDE_ALL); - mRootSet = mDataManager.getMediaSet(path); - } - loadMediaSet(mRootSet); - return mRootSet; - } - - private boolean shouldRequestSync(MediaSet set) { - if (!mSyncedSets.containsKey(set)) { - return true; - } - long lastSynced = mSyncedSets.get(set); - if (lastSynced == SYNC_IN_PROGRESS) { - return true; - } - return (SystemClock.uptimeMillis() - lastSynced) > CACHE_TIME_MS; - } - - private void loadMediaSet(MediaSet set) { - try { - if (shouldRequestSync(set)) { - mSyncedSets.put(set, SYNC_IN_PROGRESS); - Future<Integer> future = set.requestSync(mSyncListener); - synchronized (future) { - if (!future.isDone()) { - future.wait(500); - } - } - } - } catch (InterruptedException e) { - Log.d(TAG, "timed out waiting for sync"); - } - set.addContentListener(mChangedListener); - set.loadIfDirty(); - } - - @Override - protected void loadClusters(List<Cluster> clusters) { - MediaSet root = loadRootMediaSet(); - int count = root.getSubMediaSetCount(); - for (int i = 0; i < count && clusters.size() < MAX_CLUSTER_SIZE; i++) { - MediaSet set = root.getSubMediaSet(i); - loadMediaSet(set); - Cluster.Builder bob = new Cluster.Builder(); - bob.id(i); - bob.displayName(set.getName()); - Intent intent = PanoContract.getBrowseIntent(BROWSER_ROOT_URI, i); - bob.intent(intent); - bob.imageCropAllowed(true); - bob.cacheTimeMs(CACHE_TIME_MS); - int itemCount = Math.min(set.getMediaItemCount(), - MAX_CLUSTER_ITEM_SIZE); - List<MediaItem> items = set.getMediaItem(0, itemCount); - // This is done because not all items may have been synced yet - itemCount = items.size(); - if (itemCount <= 0) { - continue; - } - bob.visibleCount(itemCount); - for (MediaItem item : items) { - bob.addItem(createImageUri(item)); - } - clusters.add(bob.build()); - } - - if (clusters.size() == 0) { - handleEmptyClusters(clusters); - } - } - - private void handleEmptyClusters(List<Cluster> clusters) { - // Images are temporary, remove once b/8108002 fixed - Account[] accounts = AccountManager.get(getContext()).getAccountsByType(ACCOUNT_TYPE); - boolean syncEnabled = false; - for (Account account : accounts) { - syncEnabled |= ContentResolver.getSyncAutomatically(account, PHOTO_AUTHORITY); - } - Cluster.Builder bob = new Cluster.Builder(); - bob.displayName(getContext().getString(R.string.no_albums_alert)); - bob.addItem(createImageUri(R.mipmap.ic_launcher_gallery)); - bob.visibleCount(1); - clusters.add(bob.build()); - if (!syncEnabled) { - bob = new Cluster.Builder(); - bob.displayName("Enable Picasa sync"); - bob.id(1); - bob.intent(new Intent(getContext(), EnableSyncActivity.class)); - bob.addItem(createImageUri(R.drawable.frame_overlay_gallery_picasa)); - bob.visibleCount(1); - clusters.add(bob.build()); - } - } - - private static final JobContext sJobStub = new JobContext() { - - @Override - public boolean isCancelled() { - return false; - } - - @Override - public void setCancelListener(CancelListener listener) { - } - - @Override - public boolean setMode(int mode) { - return true; - } - }; - - @Override - public ParcelFileDescriptor openFile(Uri uri, String mode) { - long identity = Binder.clearCallingIdentity(); - try { - String path = uri.getQueryParameter("path"); - if (path == null) { - return null; - } - MediaItem item = (MediaItem) mDataManager.getMediaObject(path); - Job<Bitmap> job = item.requestImage(MediaItem.TYPE_MICROTHUMBNAIL); - final Bitmap bitmap = job.run(sJobStub); - final ParcelFileDescriptor[] fds = ParcelFileDescriptor - .createPipe(); - AsyncTask<Object, Object, Object> task = new AsyncTask<Object, Object, Object>() { - - @Override - protected Object doInBackground(Object... params) { - OutputStream stream = new ParcelFileDescriptor.AutoCloseOutputStream( - fds[1]); - bitmap.compress(CompressFormat.PNG, 100, stream); - try { - fds[1].close(); - } catch (IOException e) { - Log.w(TAG, "Failure closing pipe", e); - } - return null; - } - }; - task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, - (Object[]) null); - - return fds[0]; - } catch (Exception e) { - Log.w(TAG, "openFile failed", e); - throw new RuntimeException(e); - } finally { - Binder.restoreCallingIdentity(identity); - } - } - - @Override - public AssetFileDescriptor openAssetFile(Uri uri, String mode) - throws FileNotFoundException { - ParcelFileDescriptor fd = openFile(uri, mode); - if (fd != null) { - return new AssetFileDescriptor(fd, 0, -1); - } - int id = Integer.parseInt(uri.getPathSegments().get(0)); - return getContext().getResources().openRawResourceFd(id); - } - - private Uri createImageUri(int imageResId) { - return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT) - .authority(AUTHORITY) - .path(Integer.toString(imageResId)) - .build(); - } - - private Uri createImageUri(MediaItem item) { - // TODO: Make a database to track URIs we've actually returned - // for which to proxy to avoid things with - // android.permission.ACCESS_APP_BROWSE_DATA being able to make - // any request it wants on our behalf. - return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT) - .authority(AUTHORITY).path(PATH_IMAGE) - .appendQueryParameter("path", item.getPath().toString()) - .build(); - } - - @Override - protected void buildBrowseHeaders(String[] projection, MatrixCursor c) { - // TODO: All images - MediaSet root = loadRootMediaSet(); - int itemCount = root.getSubMediaSetCount(); - for (int i = 0; i < itemCount; i++) { - Object[] header = new Object[projection.length]; - MediaSet item = root.getSubMediaSet(i); - for (int j = 0; j < projection.length; j++) { - if (!BROWSE_HEADER_COLUMN_CASES.containsKey(projection[j])) { - continue; - } - int column = BROWSE_HEADER_COLUMN_CASES.get(projection[j]); - Object obj = null; - switch (column) { - case BROWSE_HEADER_CASE_ID: - obj = i; - break; - case BROWSE_HEADER_CASE_COUNT: - obj = itemCount; - break; - case BROWSE_HEADER_CASE_NAME: - case BROWSE_HEADER_CASE_DISPLAY_NAME: - obj = item.getName(); - break; - case BROWSE_HEADER_CASE_ICON_URI: - break; - case BROWSE_HEADER_CASE_BADGE_URI: - break; - case BROWSE_HEADER_CASE_COLOR_HINT: - break; - case BROWSE_HEADER_CASE_TEXT_COLOR_HINT: - break; - case BROWSE_HEADER_CASE_BG_IMAGE_URI: - break; - case BROWSE_HEADER_CASE_EXPAND_GROUP: - obj = 0; - break; - case BROWSE_HEADER_CASE_WRAP: - obj = i % 2; - break; - case BROWSE_HEADER_CASE_DEFAULT_ITEM_WIDTH: - case BROWSE_HEADER_CASE_DEFAULT_ITEM_HEIGHT: - int px = MediaItem.getTargetSize(MediaItem.TYPE_MICROTHUMBNAIL); - obj = px / getContext().getResources().getDisplayMetrics().density; - break; - } - header[j] = obj; - } - c.addRow(header); - } - } - - @Override - protected void buildBrowseRow(String[] projection, MatrixCursor c, Uri uri) { - // TODO: Switch to item_uri scheme b/8018482 - int row = Integer.parseInt(uri.getLastPathSegment()); - MediaSet album = loadRootMediaSet().getSubMediaSet(row); - loadMediaSet(album); - int itemCount = album.getMediaItemCount(); - ArrayList<MediaItem> items = album.getMediaItem(0, itemCount); - itemCount = items.size(); - for (int i = 0; i < itemCount; i++) { - Object[] header = new Object[projection.length]; - MediaItem item = items.get(i); - for (int j = 0; j < projection.length; j++) { - if (!BROWSE_COLUMN_CASES.containsKey(projection[j])) { - continue; - } - int column = BROWSE_COLUMN_CASES.get(projection[j]); - Object obj = null; - switch (column) { - case BROWSE_CASE_ID: - obj = i; - break; - case BROWSE_CASE_COUNT: - obj = itemCount; - break; - case BROWSE_CASE_DISPLAY_NAME: - obj = item.getName(); - break; - case BROWSE_CASE_DISPLAY_DESCRIPTION: - obj = item.getFilePath(); - break; - case BROWSE_CASE_IMAGE_URI: - obj = createImageUri(item); - break; - case BROWSE_CASE_WIDTH: - case BROWSE_CASE_HEIGHT: - obj = MediaItem - .getTargetSize(MediaItem.TYPE_MICROTHUMBNAIL); - break; - case BROWSE_CASE_INTENT_URI: - Intent intent = new Intent(Intent.ACTION_VIEW, - item.getContentUri()); - obj = intent.toUri(Intent.URI_INTENT_SCHEME); - break; - } - header[j] = obj; - } - c.addRow(header); - } - } -} diff --git a/src/com/android/photos/canvas/CanvasProviderBase.java b/src/com/android/photos/canvas/CanvasProviderBase.java deleted file mode 100644 index a38aae5ce..000000000 --- a/src/com/android/photos/canvas/CanvasProviderBase.java +++ /dev/null @@ -1,414 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * 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 - * - * http://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. - */ - -package com.android.photos.canvas; - -import android.content.ContentProvider; -import android.content.ContentValues; -import android.content.Intent; -import android.content.UriMatcher; -import android.database.Cursor; -import android.database.MatrixCursor; -import android.net.Uri; -import android.os.Binder; -import android.provider.BaseColumns; - -import com.google.android.pano.data.Cluster; -import com.google.android.pano.provider.PanoContract; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public abstract class CanvasProviderBase extends ContentProvider { - - protected static final String AUTHORITY = "com.android.gallery3d.provider.CanvasProvider"; - public static Uri NOTIFY_CHANGED_URI = Uri.parse("content://" + AUTHORITY); - - // *************************************************** - // Provider path and URI matching - // *************************************************** - - protected static final String PATH_IMAGE = "image"; - protected static final String PATH_LAUNCHER = "launcher"; - protected static final String PATH_LAUNCHER_ITEM = PATH_LAUNCHER + "/" - + PanoContract.PATH_LAUNCHER_ITEM; - protected static final String PATH_BROWSE = "browse"; - protected static final String PATH_BROWSE_HEADERS = PATH_BROWSE + "/" - + PanoContract.PATH_BROWSE_HEADERS; - - public static final Uri BROWSER_ROOT_URI = Uri.parse("content://" - + AUTHORITY + "/" + PATH_BROWSE); - - protected static final int LAUNCHER = 1; - protected static final int LAUNCHER_ITEMS = 2; - protected static final int LAUNCHER_ITEM_ID = 3; - protected static final int BROWSE_HEADERS = 4; - protected static final int BROWSE = 5; - protected static final int IMAGE = 6; - protected static final UriMatcher sUriMatcher = new UriMatcher( - UriMatcher.NO_MATCH); - - static { - sUriMatcher.addURI(AUTHORITY, PATH_LAUNCHER, LAUNCHER); - sUriMatcher.addURI(AUTHORITY, PATH_LAUNCHER_ITEM, LAUNCHER_ITEMS); - sUriMatcher.addURI(AUTHORITY, PATH_LAUNCHER_ITEM + "/#", - LAUNCHER_ITEM_ID); - sUriMatcher.addURI(AUTHORITY, PATH_BROWSE_HEADERS, BROWSE_HEADERS); - sUriMatcher.addURI(AUTHORITY, PATH_BROWSE + "/#", BROWSE); - sUriMatcher.addURI(AUTHORITY, PATH_IMAGE + "/*", IMAGE); - } - - // *************************************************** - // Columns and projections - // *************************************************** - - protected static final HashMap<String, Integer> LAUNCHER_COLUMN_CASES = new HashMap<String, Integer>(); - protected static final String[] LAUNCHER_PROJECTION_ALL; - protected static final int LAUNCHER_CASE_ID = 0; - protected static final int LAUNCHER_CASE_COUNT = 1; - protected static final int LAUNCHER_CASE_NAME = 2; - protected static final int LAUNCHER_CASE_IMPORTANCE = 3; - protected static final int LAUNCHER_CASE_DISPLAY_NAME = 4; - protected static final int LAUNCHER_CASE_VISIBLE_COUNT = 5; - protected static final int LAUNCHER_CASE_CROP_ALLOWED = 6; - protected static final int LAUNCHER_CASE_CACHE_TIME = 7; - protected static final int LAUNCHER_CASE_INTENT_URI = 8; - - static { - LAUNCHER_COLUMN_CASES.put(BaseColumns._ID, LAUNCHER_CASE_ID); - LAUNCHER_COLUMN_CASES.put(BaseColumns._COUNT, LAUNCHER_CASE_COUNT); - LAUNCHER_COLUMN_CASES.put(PanoContract.Launcher.NAME, - LAUNCHER_CASE_NAME); - LAUNCHER_COLUMN_CASES.put(PanoContract.Launcher.IMPORTANCE, - LAUNCHER_CASE_IMPORTANCE); - LAUNCHER_COLUMN_CASES.put(PanoContract.Launcher.DISPLAY_NAME, - LAUNCHER_CASE_DISPLAY_NAME); - LAUNCHER_COLUMN_CASES.put(PanoContract.Launcher.VISIBLE_COUNT, - LAUNCHER_CASE_VISIBLE_COUNT); - LAUNCHER_COLUMN_CASES.put(PanoContract.Launcher.IMAGE_CROP_ALLOWED, - LAUNCHER_CASE_CROP_ALLOWED); - LAUNCHER_COLUMN_CASES.put(PanoContract.Launcher.CACHE_TIME_MS, - LAUNCHER_CASE_CACHE_TIME); - LAUNCHER_COLUMN_CASES.put(PanoContract.Launcher.INTENT_URI, - LAUNCHER_CASE_INTENT_URI); - - LAUNCHER_PROJECTION_ALL = LAUNCHER_COLUMN_CASES.keySet().toArray( - new String[] {}); - } - - protected static final HashMap<String, Integer> CLUSTER_COLUMN_CASES = new HashMap<String, Integer>(); - protected static final String[] CLUSTER_PROJECTION_ALL; - protected static final int CLUSTER_CASE_ID = 0; - protected static final int CLUSTER_CASE_COUNT = 1; - protected static final int CLUSTER_CASE_PARENT_ID = 2; - protected static final int CLUSTER_CASE_IMAGE_URI = 3; - - static { - CLUSTER_COLUMN_CASES.put(BaseColumns._ID, CLUSTER_CASE_ID); - CLUSTER_COLUMN_CASES.put(BaseColumns._COUNT, CLUSTER_CASE_COUNT); - CLUSTER_COLUMN_CASES.put(PanoContract.LauncherItem.PARENT_ID, - CLUSTER_CASE_PARENT_ID); - CLUSTER_COLUMN_CASES.put(PanoContract.LauncherItem.IMAGE_URI, - CLUSTER_CASE_IMAGE_URI); - - CLUSTER_PROJECTION_ALL = CLUSTER_COLUMN_CASES.keySet().toArray( - new String[] {}); - } - - protected static final HashMap<String, Integer> BROWSE_HEADER_COLUMN_CASES = new HashMap<String, Integer>(); - protected static final String[] BROWSE_HEADER_PROJECTION_ALL; - protected static final int BROWSE_HEADER_CASE_ID = 0; - protected static final int BROWSE_HEADER_CASE_COUNT = 1; - protected static final int BROWSE_HEADER_CASE_NAME = 2; - protected static final int BROWSE_HEADER_CASE_DISPLAY_NAME = 3; - protected static final int BROWSE_HEADER_CASE_ICON_URI = 4; - protected static final int BROWSE_HEADER_CASE_BADGE_URI = 5; - protected static final int BROWSE_HEADER_CASE_COLOR_HINT = 6; - protected static final int BROWSE_HEADER_CASE_TEXT_COLOR_HINT = 7; - protected static final int BROWSE_HEADER_CASE_BG_IMAGE_URI = 8; - protected static final int BROWSE_HEADER_CASE_EXPAND_GROUP = 9; - protected static final int BROWSE_HEADER_CASE_WRAP = 10; - protected static final int BROWSE_HEADER_CASE_DEFAULT_ITEM_WIDTH = 11; - protected static final int BROWSE_HEADER_CASE_DEFAULT_ITEM_HEIGHT = 12; - - static { - BROWSE_HEADER_COLUMN_CASES.put(BaseColumns._ID, BROWSE_HEADER_CASE_ID); - BROWSE_HEADER_COLUMN_CASES.put(BaseColumns._COUNT, - BROWSE_HEADER_CASE_COUNT); - BROWSE_HEADER_COLUMN_CASES.put(PanoContract.BrowseHeaders.NAME, - BROWSE_HEADER_CASE_NAME); - BROWSE_HEADER_COLUMN_CASES.put( - PanoContract.BrowseHeaders.DISPLAY_NAME, - BROWSE_HEADER_CASE_DISPLAY_NAME); - BROWSE_HEADER_COLUMN_CASES.put(PanoContract.BrowseHeaders.ICON_URI, - BROWSE_HEADER_CASE_ICON_URI); - BROWSE_HEADER_COLUMN_CASES.put(PanoContract.BrowseHeaders.BADGE_URI, - BROWSE_HEADER_CASE_BADGE_URI); - BROWSE_HEADER_COLUMN_CASES.put(PanoContract.BrowseHeaders.COLOR_HINT, - BROWSE_HEADER_CASE_COLOR_HINT); - BROWSE_HEADER_COLUMN_CASES.put( - PanoContract.BrowseHeaders.TEXT_COLOR_HINT, - BROWSE_HEADER_CASE_TEXT_COLOR_HINT); - BROWSE_HEADER_COLUMN_CASES.put( - PanoContract.BrowseHeaders.BG_IMAGE_URI, - BROWSE_HEADER_CASE_BG_IMAGE_URI); - BROWSE_HEADER_COLUMN_CASES.put( - PanoContract.BrowseHeaders.EXPAND_GROUP, - BROWSE_HEADER_CASE_EXPAND_GROUP); - BROWSE_HEADER_COLUMN_CASES.put(PanoContract.BrowseHeaders.WRAP_ITEMS, - BROWSE_HEADER_CASE_WRAP); - BROWSE_HEADER_COLUMN_CASES.put( - PanoContract.BrowseHeaders.DEFAULT_ITEM_WIDTH, - BROWSE_HEADER_CASE_DEFAULT_ITEM_WIDTH); - BROWSE_HEADER_COLUMN_CASES.put( - PanoContract.BrowseHeaders.DEFAULT_ITEM_HEIGHT, - BROWSE_HEADER_CASE_DEFAULT_ITEM_HEIGHT); - - BROWSE_HEADER_PROJECTION_ALL = BROWSE_HEADER_COLUMN_CASES.keySet() - .toArray(new String[] {}); - } - - protected static final HashMap<String, Integer> BROWSE_COLUMN_CASES = new HashMap<String, Integer>(); - protected static final String[] BROWSE_PROJECTION_ALL; - protected static final int BROWSE_CASE_ID = 0; - protected static final int BROWSE_CASE_COUNT = 1; - protected static final int BROWSE_CASE_PARENT_ID = 2; - protected static final int BROWSE_CASE_DISPLAY_NAME = 3; - protected static final int BROWSE_CASE_DISPLAY_DESCRIPTION = 4; - protected static final int BROWSE_CASE_IMAGE_URI = 5; - protected static final int BROWSE_CASE_WIDTH = 6; - protected static final int BROWSE_CASE_HEIGHT = 7; - protected static final int BROWSE_CASE_INTENT_URI = 8; - - static { - BROWSE_COLUMN_CASES.put(BaseColumns._ID, BROWSE_CASE_ID); - BROWSE_COLUMN_CASES.put(BaseColumns._COUNT, BROWSE_CASE_COUNT); - BROWSE_COLUMN_CASES.put(PanoContract.BrowseItems.PARENT_ID, - BROWSE_CASE_PARENT_ID); - BROWSE_COLUMN_CASES.put(PanoContract.BrowseItems.DISPLAY_NAME, - BROWSE_CASE_DISPLAY_NAME); - BROWSE_COLUMN_CASES.put(PanoContract.BrowseItems.DISPLAY_DESCRIPTION, - BROWSE_CASE_DISPLAY_DESCRIPTION); - BROWSE_COLUMN_CASES.put(PanoContract.BrowseItems.IMAGE_URI, - BROWSE_CASE_IMAGE_URI); - BROWSE_COLUMN_CASES.put(PanoContract.BrowseItems.WIDTH, - BROWSE_CASE_WIDTH); - BROWSE_COLUMN_CASES.put(PanoContract.BrowseItems.HEIGHT, - BROWSE_CASE_HEIGHT); - BROWSE_COLUMN_CASES.put(PanoContract.BrowseItems.INTENT_URI, - BROWSE_CASE_INTENT_URI); - - BROWSE_PROJECTION_ALL = BROWSE_COLUMN_CASES.keySet().toArray( - new String[] {}); - } - - // *************************************************** - // Configuration stuff - // *************************************************** - - // The max clusters that we'll return for a single launcher - protected static final int MAX_CLUSTER_SIZE = 3; - // The max amount of items we'll return for a cluster - protected static final int MAX_CLUSTER_ITEM_SIZE = 10; - protected static final Integer CACHE_TIME_MS = 15 * 60 * 1000; - - private ArrayList<Cluster> mClusters = new ArrayList<Cluster>( - MAX_CLUSTER_SIZE); - - @Override - public Cursor query(Uri uri, String[] projection, String selection, - String[] selectionArgs, String sortOrder) { - long identity = Binder.clearCallingIdentity(); - try { - MatrixCursor c; - int match = sUriMatcher.match(uri); - switch (match) { - case LAUNCHER: - if (projection == null) { - projection = LAUNCHER_PROJECTION_ALL; - } - c = new MatrixCursor(projection); - buildClusters(projection, c); - break; - case LAUNCHER_ITEMS: - if (projection == null) { - projection = CLUSTER_PROJECTION_ALL; - } - c = new MatrixCursor(projection); - buildMultiCluster(projection, c, uri); - break; - case LAUNCHER_ITEM_ID: - if (projection == null) { - projection = CLUSTER_PROJECTION_ALL; - } - c = new MatrixCursor(projection); - buildSingleCluster(projection, c, uri); - break; - case BROWSE_HEADERS: - if (projection == null) { - projection = BROWSE_HEADER_PROJECTION_ALL; - } - c = new MatrixCursor(projection); - buildBrowseHeaders(projection, c); - break; - case BROWSE: - if (projection == null) { - projection = BROWSE_PROJECTION_ALL; - } - c = new MatrixCursor(projection); - buildBrowseRow(projection, c, uri); - break; - default: - c = new MatrixCursor(new String[] { BaseColumns._ID }); - break; - } - return c; - } finally { - Binder.restoreCallingIdentity(identity); - } - } - - private void loadClustersIfEmpty() { - if (mClusters.size() > 0) { - return; - } - loadClusters(mClusters); - } - - private void buildClusters(String[] projection, MatrixCursor c) { - mClusters.clear(); - loadClustersIfEmpty(); - - int clusterCount = mClusters.size(); - for (Cluster cluster : mClusters) { - - Object[] row = new Object[projection.length]; - long id = cluster.getId(); - for (int j = 0; j < projection.length; j++) { - if (!LAUNCHER_COLUMN_CASES.containsKey(projection[j])) { - continue; - } - int column = LAUNCHER_COLUMN_CASES.get(projection[j]); - Object obj = null; - switch (column) { - case LAUNCHER_CASE_ID: - obj = id; - break; - case LAUNCHER_CASE_COUNT: - obj = clusterCount; - break; - case LAUNCHER_CASE_NAME: - obj = cluster.getName(); - break; - case LAUNCHER_CASE_IMPORTANCE: - obj = cluster.getImportance(); - break; - case LAUNCHER_CASE_DISPLAY_NAME: - obj = cluster.getDisplayName(); - break; - case LAUNCHER_CASE_VISIBLE_COUNT: - obj = cluster.getVisibleCount(); - break; - case LAUNCHER_CASE_CACHE_TIME: - obj = cluster.getCacheTimeMs(); - break; - case LAUNCHER_CASE_INTENT_URI: - if (cluster.getIntent() != null) { - obj = cluster.getIntent().toUri(Intent.URI_INTENT_SCHEME); - } - break; - case LAUNCHER_CASE_CROP_ALLOWED: - obj = cluster.isImageCropAllowed(); - break; - } - row[j] = obj; - } - c.addRow(row); - } - } - - private void buildMultiCluster(String[] projection, MatrixCursor c, Uri uri) { - for (int index = 0; index < mClusters.size(); ++index) { - buildSingleCluster(projection, c, - uri.buildUpon().appendPath(String.valueOf(index)).build()); - } - } - - private void buildSingleCluster(String[] projection, MatrixCursor c, Uri uri) { - loadClustersIfEmpty(); - - int parentId = Integer.parseInt(uri.getLastPathSegment()); - - Cluster cluster = mClusters.get(parentId); - int numItems = Math.min(cluster.getItemCount(), MAX_CLUSTER_ITEM_SIZE); - for (int i = 0; i < numItems; i++) { - Cluster.ClusterItem item = cluster.getItem(i); - Object[] row = new Object[projection.length]; - - for (int j = 0; j < projection.length; j++) { - if (!CLUSTER_COLUMN_CASES.containsKey(projection[j])) { - continue; - } - int column = CLUSTER_COLUMN_CASES.get(projection[j]); - switch (column) { - case CLUSTER_CASE_ID: - row[j] = i; - break; - case CLUSTER_CASE_COUNT: - row[j] = numItems; - break; - case CLUSTER_CASE_PARENT_ID: - row[j] = parentId; - break; - case CLUSTER_CASE_IMAGE_URI: - row[j] = item.getImageUri(); - break; - } - } - c.addRow(row); - } - } - - @Override - public String getType(Uri uri) { - return null; - } - - @Override - public Uri insert(Uri uri, ContentValues values) { - throw new UnsupportedOperationException("Insert not supported"); - } - - @Override - public int delete(Uri uri, String selection, String[] selectionArgs) { - throw new UnsupportedOperationException("Delete not supported"); - } - - @Override - public int update(Uri uri, ContentValues values, String selection, - String[] selectionArgs) { - throw new UnsupportedOperationException("Update not supported"); - } - - protected abstract void loadClusters(List<Cluster> clusters); - - protected abstract void buildBrowseRow(String[] projection, MatrixCursor c, - Uri uri); - - protected abstract void buildBrowseHeaders(String[] projection, - MatrixCursor c); -} diff --git a/src/com/android/photos/canvas/EnableSyncActivity.java b/src/com/android/photos/canvas/EnableSyncActivity.java deleted file mode 100644 index e6d5303b5..000000000 --- a/src/com/android/photos/canvas/EnableSyncActivity.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.android.photos.canvas; - -import android.accounts.Account; -import android.accounts.AccountManager; -import android.app.Activity; -import android.content.ContentResolver; -import android.os.Bundle; - - - -public class EnableSyncActivity extends Activity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - Account[] accounts = AccountManager.get(this).getAccountsByType( - CanvasProvider.ACCOUNT_TYPE); - for (Account account : accounts) { - ContentResolver.setSyncAutomatically(account, - CanvasProvider.PHOTO_AUTHORITY, true); - } - finish(); - getContentResolver().notifyChange(CanvasProviderBase.NOTIFY_CHANGED_URI, - null, false); - } -} |