1a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling/*
2a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * Copyright (C) 2013 The Android Open Source Project
3a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling *
4a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * Licensed under the Apache License, Version 2.0 (the "License");
5a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * you may not use this file except in compliance with the License.
6a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * You may obtain a copy of the License at
7a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling *
8a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling *      http://www.apache.org/licenses/LICENSE-2.0
9a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling *
10a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * Unless required by applicable law or agreed to in writing, software
11a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * distributed under the License is distributed on an "AS IS" BASIS,
12a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * See the License for the specific language governing permissions and
14a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * limitations under the License.
15a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling */
16a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling
17a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberlingpackage com.android.camera.app;
18a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling
190aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayanimport java.util.HashMap;
200aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan
21a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling/**
22a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * Keeps track of memory used by the app and informs modules and services if
23a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling * memory gets low.
24a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling */
25a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberlingpublic interface MemoryManager {
26a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling    /**
27a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling     * Classes implementing this interface will be able to get updates about
28a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling     * memory status changes.
29a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling     */
30a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling    public static interface MemoryListener {
31a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling        /**
32a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling         * Called when the app is experiencing a change in memory state. Modules
33a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling         * should listen to these to not exceed the available memory.
34a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling         *
35a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling         * @param state the new state, one of {@link MemoryManager#STATE_OK},
36a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling         *            {@link MemoryManager#STATE_LOW_MEMORY},
37a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling         */
38a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling        public void onMemoryStateChanged(int state);
39a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling
40a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling        /**
41a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling         * Called when the system is about to kill our app due to high memory
42a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling         * load.
43a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling         */
44a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling        public void onLowMemory();
45a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling    }
46a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling
47a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling    /** The memory status is OK. The app can function as normal. */
48a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling    public static final int STATE_OK = 0;
49a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling
50a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling    /** The memory is running low. E.g. no new media should be captured. */
51a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling    public static final int STATE_LOW_MEMORY = 1;
52a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling
53a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling    /**
54a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling     * Add a new listener that is informed about upcoming memory events.
55a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling     */
56a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling    public void addListener(MemoryListener listener);
57a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling
58a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling    /**
59a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling     * Removes an already registered listener.
60a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling     */
61a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling    public void removeListener(MemoryListener listener);
6210809bdc41ec2203e5f4f4aa3d1016c0e94b97dfSascha Haeberling
6310809bdc41ec2203e5f4f4aa3d1016c0e94b97dfSascha Haeberling    /**
6477d24065a133adfb4f94db367aafea176aa56270Sascha Haeberling     * Returns the maximum amount of memory allowed to be allocated in native
6577d24065a133adfb4f94db367aafea176aa56270Sascha Haeberling     * code by our app (in megabytes).
6610809bdc41ec2203e5f4f4aa3d1016c0e94b97dfSascha Haeberling     */
6777d24065a133adfb4f94db367aafea176aa56270Sascha Haeberling    public int getMaxAllowedNativeMemoryAllocation();
680aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan
690aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan    /**
700aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan     * Queries the memory consumed, total memory, and memory thresholds for this app.
710aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan     *
720aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan     * @return HashMap containing memory metrics keyed by string labels
730aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan     *     defined in {@link MemoryQuery}.
740aeb0c82704401a050ad3b892ed1c9efa457013dKevin Gabayan     */
751fc61197e36b25c593e8b0e95a10a9167d7d621eSascha Häberling    public HashMap queryMemory();
76a63dbb6231f06031204fe20b19a87d0440bd1661Sascha Haeberling}
77