Home | History | Annotate | Download | only in deletionhelper
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.storagemanager.deletionhelper;
     18 
     19 import android.app.Activity;
     20 import android.os.Bundle;
     21 import android.support.annotation.IntDef;
     22 
     23 /**
     24  * Helper for the Deletion Helper which can query, clear out, and visualize deletable data.
     25  * This could represent a helper for deleting photos, downloads, movies, etc.
     26  */
     27 public interface DeletionType {
     28 
     29     @IntDef({LoadingStatus.LOADING, LoadingStatus.COMPLETE, LoadingStatus.EMPTY})
     30     @interface LoadingStatus {
     31         /** Loading is still in progress. */
     32         int LOADING = 0;
     33         /** Loading was completed and deletable content was found. */
     34         int COMPLETE = 1;
     35         /** Loading was completed and no deletable content was found. */
     36         int EMPTY = 2;
     37     }
     38 
     39     /**
     40      * Registers a callback to call when the amount of freeable space is updated.
     41      * @param listener A callback.
     42      */
     43     void registerFreeableChangedListener(FreeableChangedListener listener);
     44 
     45     /**
     46      * Resumes an operation, intended to be called when the deletion fragment resumes.
     47      */
     48     void onResume();
     49 
     50     /**
     51      * Pauses the feature's operations, intended to be called when the deletion fragment is paused.
     52      */
     53     void onPause();
     54 
     55     void onSaveInstanceStateBundle(Bundle savedInstanceState);
     56 
     57     /**
     58      * Asynchronously free up the freeable information for the feature.
     59      */
     60     void clearFreeableData(Activity activity);
     61 
     62     /** @return The number of items found that are available for deletion. */
     63     int getContentCount();
     64 
     65     /** @return The loading status of this deletion type. Can be any of {@link LoadingStatus}. */
     66     @LoadingStatus
     67     int getLoadingStatus();
     68 
     69     /**
     70      * Convenience method for checking if the loading status is {@link LoadingStatus#COMPLETE}.
     71      *
     72      * @return Whether the loading status is currently {@link LoadingStatus#COMPLETE} as a boolean.
     73      */
     74     default boolean isComplete() {
     75         return getLoadingStatus() == LoadingStatus.COMPLETE;
     76     }
     77 
     78     /**
     79      * Convenience method for checking if the loading status is {@link LoadingStatus#EMPTY}.
     80      *
     81      * @return Whether the loading status is currently {@link LoadingStatus#EMPTY} as a boolean.
     82      */
     83     default boolean isEmpty() {
     84         return getLoadingStatus() == LoadingStatus.EMPTY;
     85     }
     86 
     87     /**
     88      * @param loadingStatus The state to set the deletion type to. Can be any of {@link
     89      *     LoadingStatus}.
     90      */
     91     void setLoadingStatus(@LoadingStatus int loadingStatus);
     92 
     93     /**
     94      * Callback interface to listen for when a deletion feature's amount of freeable space updates.
     95      */
     96     interface FreeableChangedListener {
     97         void onFreeableChanged(int numItems, long bytesFreeable);
     98     }
     99 
    100     /**
    101      * Updates the loading status of the deletion type based on whether content is available to
    102      * delete or not.
    103      */
    104     default void updateLoadingStatus() {
    105         if (getContentCount() == 0) {
    106             setLoadingStatus(LoadingStatus.EMPTY);
    107         } else {
    108             setLoadingStatus(LoadingStatus.COMPLETE);
    109         }
    110     }
    111 }
    112