1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/* 2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2015 The Android Open Source Project 3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License"); 5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License. 6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at 7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * http://www.apache.org/licenses/LICENSE-2.0 9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software 11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS, 12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and 14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License. 15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.datamodel.action; 18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.os.Parcel; 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.os.Parcelable; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.sms.SmsReleaseStorage; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.Assert; 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/** 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Action used to handle low storage related issues on the device. 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class HandleLowStorageAction extends Action implements Parcelable { 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int SUB_OP_CODE_CLEAR_MEDIA_MESSAGES = 100; 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int SUB_OP_CODE_CLEAR_OLD_MESSAGES = 101; 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static void handleDeleteMediaMessages(final long durationInMillis) { 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final HandleLowStorageAction action = new HandleLowStorageAction( 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd SUB_OP_CODE_CLEAR_MEDIA_MESSAGES, durationInMillis); 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd action.start(); 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static void handleDeleteOldMessages(final long durationInMillis) { 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final HandleLowStorageAction action = new HandleLowStorageAction( 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd SUB_OP_CODE_CLEAR_OLD_MESSAGES, durationInMillis); 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd action.start(); 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final String KEY_SUB_OP_CODE = "sub_op_code"; 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final String KEY_CUTOFF_DURATION_MILLIS = "cutoff_duration_millis"; 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private HandleLowStorageAction(final int subOpcode, final long durationInMillis) { 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd super(); 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd actionParameters.putInt(KEY_SUB_OP_CODE, subOpcode); 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd actionParameters.putLong(KEY_CUTOFF_DURATION_MILLIS, durationInMillis); 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd protected Object executeAction() { 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final int subOpCode = actionParameters.getInt(KEY_SUB_OP_CODE); 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final long durationInMillis = actionParameters.getLong(KEY_CUTOFF_DURATION_MILLIS); 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd switch (subOpCode) { 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd case SUB_OP_CODE_CLEAR_MEDIA_MESSAGES: 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd SmsReleaseStorage.deleteMessages(0, durationInMillis); 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd break; 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd case SUB_OP_CODE_CLEAR_OLD_MESSAGES: 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd SmsReleaseStorage.deleteMessages(1, durationInMillis); 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd break; 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd default: 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Assert.fail("Unsupported action type!"); 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd break; 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return true; 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private HandleLowStorageAction(final Parcel in) { 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd super(in); 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final Parcelable.Creator<HandleLowStorageAction> CREATOR 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd = new Parcelable.Creator<HandleLowStorageAction>() { 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public HandleLowStorageAction createFromParcel(final Parcel in) { 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new HandleLowStorageAction(in); 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public HandleLowStorageAction[] newArray(final int size) { 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new HandleLowStorageAction[size]; 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void writeToParcel(final Parcel parcel, final int flags) { 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd writeActionToParcel(parcel, flags); 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 95