1 /*
2  * Copyright (C) 2015 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.messaging.datamodel.action;
18 
19 import android.os.Parcel;
20 import android.os.Parcelable;
21 
22 import com.android.messaging.sms.SmsReleaseStorage;
23 import com.android.messaging.util.Assert;
24 
25 /**
26  * Action used to handle low storage related issues on the device.
27  */
28 public class HandleLowStorageAction extends Action implements Parcelable {
29     private static final int SUB_OP_CODE_CLEAR_MEDIA_MESSAGES = 100;
30     private static final int SUB_OP_CODE_CLEAR_OLD_MESSAGES = 101;
31 
handleDeleteMediaMessages(final long durationInMillis)32     public static void handleDeleteMediaMessages(final long durationInMillis) {
33         final HandleLowStorageAction action = new HandleLowStorageAction(
34                 SUB_OP_CODE_CLEAR_MEDIA_MESSAGES, durationInMillis);
35         action.start();
36     }
37 
handleDeleteOldMessages(final long durationInMillis)38     public static void handleDeleteOldMessages(final long durationInMillis) {
39         final HandleLowStorageAction action = new HandleLowStorageAction(
40                 SUB_OP_CODE_CLEAR_OLD_MESSAGES, durationInMillis);
41         action.start();
42     }
43 
44     private static final String KEY_SUB_OP_CODE = "sub_op_code";
45     private static final String KEY_CUTOFF_DURATION_MILLIS = "cutoff_duration_millis";
46 
HandleLowStorageAction(final int subOpcode, final long durationInMillis)47     private HandleLowStorageAction(final int subOpcode, final long durationInMillis) {
48         super();
49         actionParameters.putInt(KEY_SUB_OP_CODE, subOpcode);
50         actionParameters.putLong(KEY_CUTOFF_DURATION_MILLIS, durationInMillis);
51     }
52 
53     @Override
executeAction()54     protected Object executeAction() {
55         final int subOpCode = actionParameters.getInt(KEY_SUB_OP_CODE);
56         final long durationInMillis = actionParameters.getLong(KEY_CUTOFF_DURATION_MILLIS);
57         switch (subOpCode) {
58             case SUB_OP_CODE_CLEAR_MEDIA_MESSAGES:
59                 SmsReleaseStorage.deleteMessages(0, durationInMillis);
60                 break;
61 
62             case SUB_OP_CODE_CLEAR_OLD_MESSAGES:
63                 SmsReleaseStorage.deleteMessages(1, durationInMillis);
64                 break;
65 
66             default:
67                 Assert.fail("Unsupported action type!");
68                 break;
69         }
70         return true;
71     }
72 
HandleLowStorageAction(final Parcel in)73     private HandleLowStorageAction(final Parcel in) {
74         super(in);
75     }
76 
77     public static final Parcelable.Creator<HandleLowStorageAction> CREATOR
78             = new Parcelable.Creator<HandleLowStorageAction>() {
79         @Override
80         public HandleLowStorageAction createFromParcel(final Parcel in) {
81             return new HandleLowStorageAction(in);
82         }
83 
84         @Override
85         public HandleLowStorageAction[] newArray(final int size) {
86             return new HandleLowStorageAction[size];
87         }
88     };
89 
90     @Override
writeToParcel(final Parcel parcel, final int flags)91     public void writeToParcel(final Parcel parcel, final int flags) {
92         writeActionToParcel(parcel, flags);
93     }
94 }
95