com.aptoide.amethyst.ui.ScheduledDownloadsActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.aptoide.amethyst.ui.ScheduledDownloadsActivity.java

Source

/*******************************************************************************
 * Copyright (c) 2012 rmateus.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 ******************************************************************************/
package com.aptoide.amethyst.ui;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.database.Cursor;
import android.os.Bundle;
import android.os.IBinder;
import android.support.annotation.NonNull;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.aptoide.amethyst.Aptoide;
import com.aptoide.amethyst.AptoideBaseActivity;
import com.aptoide.amethyst.R;
import com.aptoide.amethyst.analytics.Analytics;
import com.aptoide.amethyst.database.AptoideDatabase;
import com.aptoide.amethyst.database.SimpleCursorLoader;
import com.aptoide.amethyst.dialogs.AptoideDialog;
import com.aptoide.dataprovider.AptoideSpiceHttpService;
import com.aptoide.models.ScheduledDownloadItem;
import com.bumptech.glide.Glide;
import com.octo.android.robospice.SpiceManager;

import java.util.HashMap;

import com.aptoide.amethyst.dialogs.ScheduledDownloadsDialog;
import com.aptoide.amethyst.services.DownloadService;

public class ScheduledDownloadsActivity extends AptoideBaseActivity
        implements LoaderCallbacks<Cursor>, ScheduledDownloadsDialog.DialogCallback {

    public static final String ARG_DOWNLOAD_ALL = "downloadAll";

    public static Intent newIntent(@NonNull final Context context, final boolean dowloadAll) {
        final Intent intent = new Intent(context, ScheduledDownloadsActivity.class);
        intent.putExtra(ARG_DOWNLOAD_ALL, dowloadAll);
        return intent;
    }

    Toolbar mToolbar;

    private ListView lv;
    private AptoideDatabase db;
    private CursorAdapter adapter;
    private HashMap<Long, ScheduledDownload> scheduledDownloadsMap = new HashMap<Long, ScheduledDownload>();
    private DownloadService downloadService;
    private SpiceManager spiceManager = new SpiceManager(AptoideSpiceHttpService.class);
    private ServiceConnection conn = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder binder) {
            downloadService = ((DownloadService.LocalBinder) binder).getService();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };
    private int i;
    private boolean showDownloadAll;

    @Override
    protected void onStart() {
        super.onStart();
        spiceManager.start(this);
        //        FlurryAgent.onStartSession(this, getResources().getString(R.string.FLURRY_KEY));
    }

    @Override
    protected void onStop() {
        super.onStop();
        spiceManager.shouldStop();
        //        FlurryAgent.onEndSession(this);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        //Aptoide.getThemePicker().setAptoideTheme(this);
        super.onCreate(savedInstanceState);

        setContentView(getContentView());
        bindViews();

        mToolbar.setCollapsible(false);
        setSupportActionBar(mToolbar);

        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(true);
        getSupportActionBar().setTitle(getString(R.string.setting_schdwntitle));

        lv = (ListView) findViewById(android.R.id.list);
        lv.setDivider(null);
        db = new AptoideDatabase(Aptoide.getDb());
        bindService(new Intent(this, DownloadService.class), conn, Context.BIND_AUTO_CREATE);

        adapter = new CursorAdapter(this, null, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER) {

            @Override
            public View newView(Context context, Cursor arg1, ViewGroup arg2) {
                return LayoutInflater.from(context).inflate(R.layout.row_sch_download, null);
            }

            @Override
            public void bindView(View convertView, Context arg1, Cursor c) {
                ScheduledDownload scheduledDownload = scheduledDownloadsMap.get(c.getLong(c.getColumnIndex("_id")));

                // The child views in each row.
                CheckBox checkBoxScheduled;
                TextView textViewName;
                TextView textViewVersion;
                ImageView imageViewIcon;

                if (convertView.getTag() == null) {
                    textViewName = (TextView) convertView.findViewById(R.id.name);
                    textViewVersion = (TextView) convertView.findViewById(R.id.appversion);
                    checkBoxScheduled = (CheckBox) convertView.findViewById(R.id.schDwnChkBox);
                    imageViewIcon = (ImageView) convertView.findViewById(R.id.appicon);
                    convertView.setTag(new Holder(textViewName, textViewVersion, checkBoxScheduled, imageViewIcon));

                    checkBoxScheduled.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                            CheckBox cb = (CheckBox) v;
                            ScheduledDownload schDownload = (ScheduledDownload) cb.getTag();
                            schDownload.setChecked(cb.isChecked());
                        }
                    });
                }
                // Reuse existing row view
                else {
                    // Because we use a ViewHolder, we avoid having to call findViewById().
                    Holder viewHolder = (Holder) convertView.getTag();
                    checkBoxScheduled = viewHolder.checkBoxScheduled;
                    textViewVersion = viewHolder.textViewVersion;
                    textViewName = viewHolder.textViewName;
                    imageViewIcon = viewHolder.imageViewIcon;
                }

                // Tag the CheckBox with the Planet it is displaying, so that we can
                // access the planet in onClick() when the CheckBox is toggled.
                checkBoxScheduled.setTag(scheduledDownload);

                // Display planet data
                checkBoxScheduled.setChecked(scheduledDownload.isChecked());
                textViewName.setText(scheduledDownload.getName());
                textViewVersion.setText(scheduledDownload.getVersion_name());

                Glide.with(ScheduledDownloadsActivity.this).load(scheduledDownload.getIcon()).into(imageViewIcon);
            }
        };

        getSupportLoaderManager().initLoader(0, null, this);

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View item, int arg2, long arg3) {
                ScheduledDownload scheduledDownload = (ScheduledDownload) ((Holder) item.getTag()).checkBoxScheduled
                        .getTag();
                scheduledDownload.toggleChecked();
                Holder viewHolder = (Holder) item.getTag();
                viewHolder.checkBoxScheduled.setChecked(scheduledDownload.isChecked());
            }

        });

        if (getIntent().hasExtra(ARG_DOWNLOAD_ALL)) {
            ScheduledDownloadsDialog pd = new ScheduledDownloadsDialog();
            pd.show(getSupportFragmentManager(), "installAllScheduled");
        }

        lv.setAdapter(adapter);
    }

    protected int getContentView() {
        return R.layout.page_sch_downloads;
    }

    protected void bindViews() {
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
    }

    @Override
    public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
        return new SimpleCursorLoader(this) {

            @Override
            public Cursor loadInBackground() {
                return db.getScheduledDownloads();
            }

        };
    }

    @Override
    public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor c) {
        scheduledDownloadsMap.clear();
        if (c.getCount() == 0) {
            findViewById(android.R.id.empty).setVisibility(View.VISIBLE);
        } else {
            findViewById(android.R.id.empty).setVisibility(View.GONE);
        }
        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
            ScheduledDownload scheduledDownload = new ScheduledDownload(c.getLong(c.getColumnIndex("_id")), true);

            scheduledDownload.setPackage_name(c.getString(c.getColumnIndex("package_name")));
            scheduledDownload.setMd5(c.getString(c.getColumnIndex("md5")));
            scheduledDownload.setName(c.getString(c.getColumnIndex("name")));
            scheduledDownload.setVersion_name(c.getString(c.getColumnIndex("version_name")));
            scheduledDownload.setRepo_name(c.getString(c.getColumnIndex("repo_name")));
            scheduledDownload.setIcon(c.getString(c.getColumnIndex("icon")));

            scheduledDownloadsMap.put(c.getLong(c.getColumnIndex("_id")), scheduledDownload);
        }
        adapter.swapCursor(c);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> cursorLoader) {
        adapter.swapCursor(null);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_scheduled_downloads, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int i = item.getItemId();

        if (i == android.R.id.home || i == R.id.home) {
            finish();
        } else if (i == R.id.menu_install) {

            Analytics.ScheduledDownloads.clickOnInstallSelected();

            if (isAllChecked()) {
                for (ScheduledDownload scheduledDownload : scheduledDownloadsMap.values()) {
                    if (scheduledDownload.isChecked()) {
                        downloadService.startScheduledDownload(scheduledDownload);
                    }
                }
            } else {
                Toast toast = Toast.makeText(Aptoide.getContext(), R.string.schDown_nodownloadselect,
                        Toast.LENGTH_SHORT);
                toast.show();
            }
        } else if (i == R.id.menu_remove) {
            Analytics.ScheduledDownloads.clickOnRemoveSelected();
            Log.d("ScheduledDownloadsActivity-onOptionsItemSelected", "remove");
            if (isAllChecked()) {
                for (ScheduledDownload scheduledDownload : scheduledDownloadsMap.values()) {
                    if (scheduledDownload.isChecked()) {
                        db.deleteScheduledDownload(scheduledDownload.getMd5());
                        //                        FlurryAgent.logEvent("Scheduled_Downloads_Removed_Apps");
                    }
                }
                getSupportLoaderManager().restartLoader(0, null, this);
            } else {
                Toast toast = Toast.makeText(Aptoide.getContext(), R.string.schDown_nodownloadselect,
                        Toast.LENGTH_SHORT);
                toast.show();
            }
        } else if (i == R.id.menu_invert) {
            Analytics.ScheduledDownloads.clickOnInvertSelection();
            //            FlurryAgent.logEvent("Scheduled_Downloads_Inverted_Apps");
            for (ScheduledDownload scheduledDownload : scheduledDownloadsMap.values()) {
                scheduledDownload.toggleChecked();
            }
            adapter.notifyDataSetChanged();
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onResume() {
        super.onResume();

    }

    //    @Override
    //    protected String getScreenName() {
    //        return "Scheduled Downloads";
    //    }

    public boolean isAllChecked() {
        if (scheduledDownloadsMap.isEmpty()) {
            return false;
        }
        for (Long scheduledDownload : scheduledDownloadsMap.keySet()) {
            if (scheduledDownloadsMap.get(scheduledDownload).checked) {
                return true;
            }
        }
        return false;
    }

    @Override
    public void onOkClick() {
        AptoideDialog.pleaseWaitDialog().show(getSupportFragmentManager(), "pleaseWaitDialog");
        for (ScheduledDownload scheduledDownload : scheduledDownloadsMap.values()) {
            downloadService.startScheduledDownload(scheduledDownload);
        }
        finish();
    }

    @Override
    public void onCancelClick() {
        finish();
    }

    private static class ScheduledDownload extends ScheduledDownloadItem {
        private boolean checked = false;
        private long id;

        public ScheduledDownload(long id, boolean checked) {
            this.id = id;
            this.checked = checked;
        }

        public boolean isChecked() {
            return checked;
        }

        public void setChecked(boolean checked) {
            this.checked = checked;
        }

        public void toggleChecked() {
            checked = !checked;
        }

        public long getId() {
            return id;
        }

        public void setId(long id) {
            this.id = id;
        }
    }

    private static class Holder {
        public CheckBox checkBoxScheduled;
        public TextView textViewName;
        public TextView textViewVersion;
        public ImageView imageViewIcon;

        public Holder(TextView textView, TextView textViewVersion, CheckBox checkBox, ImageView imageView) {
            this.checkBoxScheduled = checkBox;
            this.textViewName = textView;
            this.textViewVersion = textViewVersion;
            this.imageViewIcon = imageView;
        }
    }

    @Override
    protected String getScreenName() {
        return "Scheduled Downloads";
    }

}