/*
* Copyright (C) 2015 Jacob Klinker
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.mms.service_alt;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.preference.PreferenceManager;
import android.provider.Telephony;
import android.util.Log;
import com.android.mms.transaction.NotificationTransaction;
import com.google.android.mms.MmsException;
import com.google.android.mms.pdu_alt.PduParser;
import com.google.android.mms.pdu_alt.PduPersister;
import com.google.android.mms.pdu_alt.RetrieveConf;
import com.google.android.mms.util_alt.SqliteWrapper;
public class MmsRequestManager implements MmsRequest.RequestManager {
private static final String TAG = "MmsRequestManager";
private Context context;
private byte[] pduData;
public MmsRequestManager(Context context) {
this(context, null);
}
public MmsRequestManager(Context context, byte[] pduData) {
this.context = context;
this.pduData = pduData;
}
@Override
public void addSimRequest(MmsRequest request) {
// Do nothing, this will not be invoked ever.
}
@Override
public boolean getAutoPersistingPref() {
return NotificationTransaction.allowAutoDownload(context);
}
@Override
public byte[] readPduFromContentUri(Uri contentUri, int maxSize) {
return pduData;
}
@Override
public boolean writePduToContentUri(Uri contentUri, byte[] response) {
if (response == null || response.length < 1) {
Log.e(TAG, "empty response");
return false;
}
try {
// Parse M-Retrieve.conf
RetrieveConf retrieveConf = (RetrieveConf) new PduParser(response).parse();
if (null == retrieveConf) {
throw new MmsException("Invalid M-Retrieve.conf PDU.");
}
Uri msgUri;
boolean group;
try {
group = com.klinker.android.send_message.Transaction.settings.getGroup();
} catch (Exception e) {
group = PreferenceManager.getDefaultSharedPreferences(context).getBoolean("group_message", true);
}
// Store M-Retrieve.conf into Inbox
PduPersister persister = PduPersister.getPduPersister(context);
msgUri = persister.persist(retrieveConf, Telephony.Mms.Inbox.CONTENT_URI, true,
group, null);
// Use local time instead of PDU time
ContentValues values = new ContentValues(2);
values.put(Telephony.Mms.DATE, System.currentTimeMillis() / 1000L);
values.put(Telephony.Mms.MESSAGE_SIZE, response.length);
SqliteWrapper.update(context, context.getContentResolver(),
msgUri, values, null, null);
// Send ACK to the Proxy-Relay to indicate we have fetched the
// MM successfully.
// Don't mark the transaction as failed if we failed to send it.
// sendAcknowledgeInd(retrieveConf);
} catch (Throwable t) {
com.klinker.android.logger.Log.e(TAG, "error", t);
}
return false;
}
}