summaryrefslogtreecommitdiffstats
path: root/src/com/android/photos
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2013-03-15 13:19:30 -0700
committerJohn Reck <jreck@google.com>2013-03-15 13:19:30 -0700
commit0fe391a43d0c549fa0effddd21ece4eb4ba86194 (patch)
tree5b738a76acc5c21e568bdefd27d8ce3721411e32 /src/com/android/photos
parent4fc93d01548b8b67cb4cdd4a9e540ea0e004df49 (diff)
downloadandroid_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.java35
-rw-r--r--src/com/android/photos/canvas/CanvasProvider.java381
-rw-r--r--src/com/android/photos/canvas/CanvasProviderBase.java414
-rw-r--r--src/com/android/photos/canvas/EnableSyncActivity.java25
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);
- }
-}