Android Open Source - HelloMundo Preview Dialog Fragment






From Project

Back to project page HelloMundo.

License

The source code is released under:

GNU General Public License

If you think the Android project HelloMundo listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * This source is part of the/*  w w w  . j  av a2  s  . co m*/
 *      _____  ___   ____
 *  __ / / _ \/ _ | / __/___  _______ _
 * / // / , _/ __ |/ _/_/ _ \/ __/ _ `/
 * \___/_/|_/_/ |_/_/ (_)___/_/  \_, /
 *                              /___/
 * repository.
 *
 * Copyright (C) 2009-2014 Benoit 'BoD' Lubek (BoD@JRAF.org)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.jraf.android.hellomundo.app.pickwebcam;

import java.io.IOException;
import java.io.InputStream;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;

import org.jraf.android.hellomundo.provider.webcam.WebcamColumns;
import org.jraf.android.hellomundo.provider.webcam.WebcamCursor;
import org.jraf.android.hellomundo.provider.webcam.WebcamSelection;
import org.jraf.android.latoureiffel.R;
import org.jraf.android.util.http.HttpUtil;
import org.jraf.android.util.io.IoUtil;
import org.jraf.android.util.log.wrapper.Log;

import com.github.kevinsawicki.http.HttpRequest;

public class PreviewDialogFragment extends DialogFragment {
    private long mWebcamId;

    private View mPgbLoading;
    private ImageView mImgPreview;
    private View mImgPreviewFrame;

    protected Handler mHandler = new Handler();

    public PreviewDialogFragment() {}

    public static PreviewDialogFragment newInstance(Long webcamId) {
        PreviewDialogFragment res = new PreviewDialogFragment();
        Bundle args = new Bundle(1);
        args.putLong("webcamId", webcamId);
        res.setArguments(args);
        return res;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(STYLE_NO_FRAME, R.style.Theme_Dialog_Preview);
        mWebcamId = getArguments().getLong("webcamId");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        getDialog().setCanceledOnTouchOutside(true);
        View view = inflater.inflate(R.layout.preview, container, false);
        mPgbLoading = view.findViewById(R.id.pgbLoading);
        mImgPreview = (ImageView) view.findViewById(R.id.imgPreview);
        mImgPreviewFrame = view.findViewById(R.id.imgPreviewFrame);
        return view;
    }

    @Override
    public void onResume() {
        super.onResume();
        new AsyncTask<Void, Void, Bitmap>() {
            @Override
            protected Bitmap doInBackground(Void... params) {
                if (!isAdded()) return null;
                String[] projection = { WebcamColumns.URL, WebcamColumns.HTTP_REFERER };
                WebcamSelection where = new WebcamSelection().id(mWebcamId);
                WebcamCursor cursor = where.query(getActivity().getContentResolver(), projection);
                String url = null;
                String httpReferer = null;
                try {
                    if (cursor == null || !cursor.moveToFirst()) {
                        Log.d("Could not find webcam with webcamId=" + mWebcamId);
                        return null;
                    }
                    url = cursor.getUrl();
                    httpReferer = cursor.getHttpReferer();
                } finally {
                    if (cursor != null) cursor.close();
                }

                InputStream inputStream;
                try {
                    HttpRequest httpRequest = HttpUtil.get(url);
                    if (httpReferer != null) httpRequest.referer(httpReferer);
                    inputStream = httpRequest.stream();
                } catch (IOException e) {
                    Log.w("Could not download webcam with webcamId=" + mWebcamId, e);
                    return null;
                }

                try {
                    return BitmapFactory.decodeStream(inputStream);
                } catch (Throwable t) {
                    Log.w("Could not decode stream", t);
                    return null;
                } finally {
                    IoUtil.closeSilently(inputStream);
                }
            }

            @Override
            protected void onPostExecute(final Bitmap result) {
                if (!isAdded()) return;
                if (result == null) {
                    Toast.makeText(getActivity(), R.string.pickWebcam_previewDialog_cantPreviewToast, Toast.LENGTH_SHORT).show();
                    dismissAllowingStateLoss();
                    return;
                }
                mPgbLoading.setVisibility(View.GONE);

                // I'm not sure exactly why, but waiting a bit before showing the picture fixes a visual glitch
                // with the progressbar moving to the top of the dialog for a fraction of a second before
                // disappearing.
                mHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mImgPreview.setImageBitmap(result);
                        mImgPreviewFrame.setVisibility(View.VISIBLE);
                    }
                }, 10);
            }
        }.execute();
    }
}




Java Source Code List

org.jraf.android.hellomundo.Config.java
org.jraf.android.hellomundo.Config.java
org.jraf.android.hellomundo.Constants.java
org.jraf.android.hellomundo.analytics.AnalyticsHelper.java
org.jraf.android.hellomundo.app.Application.java
org.jraf.android.hellomundo.app.about.AboutActivity.java
org.jraf.android.hellomundo.app.about.EulaActivity.java
org.jraf.android.hellomundo.app.adduserwebcam.AddUserWebcamActivity.java
org.jraf.android.hellomundo.app.appwidget.refresh.RefreshAppWidgetProvider.java
org.jraf.android.hellomundo.app.appwidget.webcam.WebcamAppWidgetActionsActivity.java
org.jraf.android.hellomundo.app.appwidget.webcam.WebcamAppWidgetProvider3x3.java
org.jraf.android.hellomundo.app.appwidget.webcam.WebcamAppWidgetProvider.java
org.jraf.android.hellomundo.app.appwidget.webcam.WebcamConfigureActivity.java
org.jraf.android.hellomundo.app.common.BaseActivity.java
org.jraf.android.hellomundo.app.common.BasePreferenceActivity.java
org.jraf.android.hellomundo.app.main.MainActivity.java
org.jraf.android.hellomundo.app.pickwebcam.PickWebcamActivity.java
org.jraf.android.hellomundo.app.pickwebcam.PickWebcamListFragment.java
org.jraf.android.hellomundo.app.pickwebcam.PreviewDialogFragment.java
org.jraf.android.hellomundo.app.pickwebcam.WebcamAdapter.java
org.jraf.android.hellomundo.app.pickwebcam.WebcamCallbacks.java
org.jraf.android.hellomundo.app.preference.PreferenceActivity.java
org.jraf.android.hellomundo.app.receiver.BootCompletedBroadcastReceiver.java
org.jraf.android.hellomundo.app.receiver.WallpaperChangedBroadcastReceiver.java
org.jraf.android.hellomundo.app.saveshare.SaveShareHelper.java
org.jraf.android.hellomundo.app.saveshare.SaveShareListener.java
org.jraf.android.hellomundo.app.service.HelloMundoService.java
org.jraf.android.hellomundo.app.welcome.WelcomeActivity.java
org.jraf.android.hellomundo.model.AppwidgetManager.java
org.jraf.android.hellomundo.model.WebcamInfo.java
org.jraf.android.hellomundo.model.WebcamManager.java
org.jraf.android.hellomundo.provider.HelloMundoProvider.java
org.jraf.android.hellomundo.provider.HelloMundoSQLiteOpenHelper.java
org.jraf.android.hellomundo.provider.appwidget.AppwidgetColumns.java
org.jraf.android.hellomundo.provider.appwidget.AppwidgetContentValues.java
org.jraf.android.hellomundo.provider.appwidget.AppwidgetCursor.java
org.jraf.android.hellomundo.provider.appwidget.AppwidgetSelection.java
org.jraf.android.hellomundo.provider.base.AbstractContentValues.java
org.jraf.android.hellomundo.provider.base.AbstractCursor.java
org.jraf.android.hellomundo.provider.base.AbstractSelection.java
org.jraf.android.hellomundo.provider.webcam.WebcamColumns.java
org.jraf.android.hellomundo.provider.webcam.WebcamContentValues.java
org.jraf.android.hellomundo.provider.webcam.WebcamCursor.java
org.jraf.android.hellomundo.provider.webcam.WebcamSelection.java
org.jraf.android.hellomundo.provider.webcam.WebcamType.java