Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee8f5a3c authored by Sarmad Hashmi's avatar Sarmad Hashmi Committed by Android (Google) Code Review
Browse files

Merge "Add files for voicemail archive tab." into nyc-dev

parents 6b0056f3 3694b119
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -158,6 +158,11 @@
            android:exported="false">
            android:exported="false">
        </activity>
        </activity>


        <activity android:name="com.android.dialer.voicemail.VoicemailArchiveActivity"
            android:label="@string/voicemail_archive_activity_title"
            android:theme="@style/DialtactsThemeWithoutActionBarOverlay">
        </activity>

        <activity android:name="com.android.dialer.calllog.CallLogActivity"
        <activity android:name="com.android.dialer.calllog.CallLogActivity"
            android:label="@string/call_log_activity_title"
            android:label="@string/call_log_activity_title"
            android:theme="@style/DialtactsThemeWithoutActionBarOverlay"
            android:theme="@style/DialtactsThemeWithoutActionBarOverlay"
+5 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


package com.android.dialer;
package com.android.dialer;


import com.android.dialer.voicemail.VoicemailArchiveActivity;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.annotations.VisibleForTesting;


import android.app.Fragment;
import android.app.Fragment;
@@ -690,6 +691,10 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
            handleMenuSettings();
            handleMenuSettings();
            Logger.logScreenView(ScreenEvent.SETTINGS, this);
            Logger.logScreenView(ScreenEvent.SETTINGS, this);
            return true;
            return true;
        } else if (resId == R.id.menu_archive) {
            final Intent intent = new Intent(this, VoicemailArchiveActivity.class);
            startActivity(intent);
            return true;
        }
        }
        return false;
        return false;
    }
    }
+18 −7
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


package com.android.dialer.calllog;
package com.android.dialer.calllog;


import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.ContentValues;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
@@ -32,6 +33,7 @@ import com.android.contacts.common.GeoUtil;
import com.android.contacts.common.util.PermissionsUtil;
import com.android.contacts.common.util.PermissionsUtil;
import com.android.dialer.DialtactsActivity;
import com.android.dialer.DialtactsActivity;
import com.android.dialer.PhoneCallDetails;
import com.android.dialer.PhoneCallDetails;
import com.android.dialer.database.VoicemailArchiveContract;
import com.android.dialer.util.AppCompatConstants;
import com.android.dialer.util.AppCompatConstants;
import com.android.dialer.util.AsyncTaskExecutor;
import com.android.dialer.util.AsyncTaskExecutor;
import com.android.dialer.util.AsyncTaskExecutors;
import com.android.dialer.util.AsyncTaskExecutors;
@@ -413,16 +415,16 @@ public class CallLogAsyncTaskUtil {
    }
    }


    /**
    /**
     * Updates the duration of a voicemail call log entry.
     * Updates the duration of a voicemail call log entry if the duration given is greater than 0,
     * and if if the duration currently in the database is less than or equal to 0 (non-existent).
     */
     */
    public static void updateVoicemailDuration(
    public static void updateVoicemailDuration(
            final Context context,
            final Context context,
            final Uri voicemailUri,
            final Uri voicemailUri,
            final int duration) {
            final long duration) {
        if (!PermissionsUtil.hasPhonePermissions(context)) {
        if (duration <= 0 || !PermissionsUtil.hasPhonePermissions(context)) {
            return;
            return;
        }
        }

        if (sAsyncTaskExecutor == null) {
        if (sAsyncTaskExecutor == null) {
            initTaskExecutor();
            initTaskExecutor();
        }
        }
@@ -430,9 +432,18 @@ public class CallLogAsyncTaskUtil {
        sAsyncTaskExecutor.submit(Tasks.UPDATE_DURATION, new AsyncTask<Void, Void, Void>() {
        sAsyncTaskExecutor.submit(Tasks.UPDATE_DURATION, new AsyncTask<Void, Void, Void>() {
            @Override
            @Override
            public Void doInBackground(Void... params) {
            public Void doInBackground(Void... params) {
                ContentResolver contentResolver = context.getContentResolver();
                Cursor cursor = contentResolver.query(
                        voicemailUri,
                        new String[] { VoicemailArchiveContract.VoicemailArchive.DURATION },
                        null, null, null);
                if (cursor != null && cursor.moveToFirst() && cursor.getInt(
                        cursor.getColumnIndex(
                                VoicemailArchiveContract.VoicemailArchive.DURATION)) <= 0) {
                    ContentValues values = new ContentValues(1);
                    ContentValues values = new ContentValues(1);
                    values.put(CallLog.Calls.DURATION, duration);
                    values.put(CallLog.Calls.DURATION, duration);
                    context.getContentResolver().update(voicemailUri, values, null, null);
                    context.getContentResolver().update(voicemailUri, values, null, null);
                }
                return null;
                return null;
            }
            }
        });
        });
+6 −4
Original line number Original line Diff line number Diff line
@@ -115,11 +115,13 @@ public class VoicemailArchiveProvider extends ContentProvider {
        // Create the directory for archived voicemails if it doesn't already exist
        // Create the directory for archived voicemails if it doesn't already exist
        File directory = new File(getFilesDir(), VOICEMAIL_FOLDER);
        File directory = new File(getFilesDir(), VOICEMAIL_FOLDER);
        directory.mkdirs();
        directory.mkdirs();

        // Update the row's _data column with a file path in the voicemails folder
        Uri newUri = ContentUris.withAppendedId(uri, id);
        Uri newUri = ContentUris.withAppendedId(uri, id);

        // Create new file only if path is not provided to one
        if (!values.containsKey(VoicemailArchiveContract.VoicemailArchive._DATA)) {
            File voicemailFile = new File(directory, Long.toString(id));
            File voicemailFile = new File(directory, Long.toString(id));
            values.put(VoicemailArchiveContract.VoicemailArchive._DATA, voicemailFile.getPath());
            values.put(VoicemailArchiveContract.VoicemailArchive._DATA, voicemailFile.getPath());
        }
        update(newUri, values, null, null);
        update(newUri, values, null, null);
        return newUri;
        return newUri;
    }
    }
+160 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * 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.dialer.voicemail;

import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.MenuItem;
import android.view.View;

import com.android.contacts.common.GeoUtil;
import com.android.dialer.DialtactsActivity;
import com.android.dialer.R;
import com.android.dialer.TransactionSafeActivity;
import com.android.dialer.calllog.CallLogAdapter;
import com.android.dialer.calllog.CallLogQueryHandler;
import com.android.dialer.calllog.ContactInfoHelper;
import com.android.dialer.widget.EmptyContentView;
import com.android.dialerbind.ObjectFactory;

/**
 * This activity manages all the voicemails archived by the user.
 */
public class VoicemailArchiveActivity extends TransactionSafeActivity
        implements CallLogAdapter.CallFetcher, CallLogQueryHandler.Listener {
    private RecyclerView mRecyclerView;
    private LinearLayoutManager mLayoutManager;
    private EmptyContentView mEmptyListView;
    private CallLogAdapter mAdapter;
    private VoicemailPlaybackPresenter mVoicemailPlaybackPresenter;
    private CallLogQueryHandler mCallLogQueryHandler;

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (!isSafeToCommitTransactions()) {
            return true;
        }

        switch (item.getItemId()) {
            case android.R.id.home:
                Intent intent = new Intent(this, DialtactsActivity.class);
                // Clears any activities between VoicemailArchiveActivity and DialtactsActivity
                // on the activity stack and reuses the existing instance of DialtactsActivity
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.call_log_fragment);

        // Make window opaque to reduce overdraw
        getWindow().setBackgroundDrawable(null);

        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayShowHomeEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setElevation(0);

        mCallLogQueryHandler = new CallLogQueryHandler(this, getContentResolver(), this);
        mVoicemailPlaybackPresenter = VoicemailArchivePlaybackPresenter
                .getInstance(this, savedInstanceState);

        mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mEmptyListView = (EmptyContentView) findViewById(R.id.empty_list_view);
        mEmptyListView.setDescription(R.string.voicemail_archive_empty);
        mEmptyListView.setImage(R.drawable.empty_call_log);

        mAdapter = ObjectFactory.newCallLogAdapter(
                this,
                this,
                new ContactInfoHelper(this, GeoUtil.getCurrentCountryIso(this)),
                mVoicemailPlaybackPresenter,
                CallLogAdapter.ACTIVITY_TYPE_ARCHIVE);
        mRecyclerView.setAdapter(mAdapter);
        fetchCalls();
    }

    @Override
    protected void onPause() {
        mVoicemailPlaybackPresenter.onPause();
        mAdapter.onPause();
        super.onPause();
    }

    @Override
    public void onResume() {
        super.onResume();
        mAdapter.onResume();
        mVoicemailPlaybackPresenter.onResume();
    }

    @Override
    public void onDestroy() {
        mVoicemailPlaybackPresenter.onDestroy();
        mAdapter.changeCursor(null);
        super.onDestroy();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mVoicemailPlaybackPresenter.onSaveInstanceState(outState);
    }

    @Override
    public void fetchCalls() {
        mCallLogQueryHandler.fetchVoicemailArchive();
    }

    @Override
    public void onVoicemailStatusFetched(Cursor statusCursor) {
        // Do nothing
    }

    @Override
    public void onVoicemailUnreadCountFetched(Cursor cursor) {
        // Do nothing
    }

    @Override
    public void onMissedCallsUnreadCountFetched(Cursor cursor) {
        // Do nothing
    }

    @Override
    public boolean onCallsFetched(Cursor cursor) {
        mAdapter.changeCursorVoicemail(cursor);
        boolean showListView = cursor != null && cursor.getCount() > 0;
        mRecyclerView.setVisibility(showListView ? View.VISIBLE : View.GONE);
        mEmptyListView.setVisibility(!showListView ? View.VISIBLE : View.GONE);
        return true;
    }
}
Loading