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
17package com.android.storagemanager.deletionhelper;
18
19import android.content.Context;
20import android.os.Handler;
21import android.support.v7.preference.Preference;
22import android.support.v7.preference.PreferenceViewHolder;
23import android.util.AttributeSet;
24import android.text.format.Formatter;
25
26import android.view.View;
27import com.android.internal.logging.MetricsLogger;
28import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
29import com.android.storagemanager.R;
30
31/**
32 * Preference to handle the deletion of photos and videos in the Deletion Helper.
33 */
34public class PhotosDeletionPreference extends DeletionPreference {
35    public static final int DAYS_TO_KEEP_DEFAULT = 30;
36    public static final int DAYS_TO_KEEP_MIN = 0;
37    private int mDaysToKeep;
38    private boolean mLoaded;
39
40    public PhotosDeletionPreference(Context context, AttributeSet attrs) {
41        super(context, attrs);
42        mDaysToKeep = DAYS_TO_KEEP_DEFAULT;
43        updatePreferenceText(0, 0);
44        setTitle(R.string.deletion_helper_photos_loading_title);
45        setSummary(R.string.deletion_helper_photos_loading_summary);
46    }
47
48    /**
49     * Updates the title and summary of the preference with fresh information.
50     */
51    public void updatePreferenceText(int items, long bytes) {
52        Context context = getContext();
53        setTitle(context.getString(R.string.deletion_helper_photos_title));
54        mLoaded = true;
55        setSummary(
56                context.getString(
57                        R.string.deletion_helper_photos_summary,
58                        Formatter.formatFileSize(context, bytes),
59                        mDaysToKeep));
60    }
61
62    public void setDaysToKeep(int daysToKeep) {
63        mDaysToKeep = daysToKeep;
64        updatePreferenceText(0, 0);
65    }
66
67    @Override
68    public void onFreeableChanged(int items, long bytes) {
69        // Because these operations may cause UI churn, we need to ensure they run on the main
70        // thread.
71        new Handler(getContext().getMainLooper()).post(new Runnable() {
72            @Override
73            public void run() {
74                PhotosDeletionPreference.super.onFreeableChanged(items, bytes);
75                updatePreferenceText(items, bytes);
76            }
77        });
78    }
79
80    @Override
81    public boolean onPreferenceChange(Preference preference, Object newValue) {
82        boolean checked = (boolean) newValue;
83        MetricsLogger.action(getContext(), MetricsEvent.ACTION_DELETION_SELECTION_PHOTOS, checked);
84        return super.onPreferenceChange(preference, newValue);
85    }
86
87    @Override
88    public void onBindViewHolder(PreferenceViewHolder holder) {
89        super.onBindViewHolder(holder);
90        holder.findViewById(com.android.internal.R.id.icon).setVisibility(View.GONE);
91    }
92
93    public boolean isLoaded() {
94        return mLoaded;
95    }
96}
97