com.sonaive.v2ex.ui.debug.TestActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.sonaive.v2ex.ui.debug.TestActivity.java

Source

/*
 * Copyright 2014 sonaive.com. All rights reserved.
 *
 * 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.sonaive.v2ex.ui.debug;

import android.app.LoaderManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.CursorLoader;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.view.View;
import android.widget.Toast;

import com.sonaive.v2ex.R;
import com.sonaive.v2ex.provider.V2exContract;
import com.sonaive.v2ex.sync.SyncHelper;
import com.sonaive.v2ex.sync.api.Api;
import com.sonaive.v2ex.ui.BaseActivity;
import com.sonaive.v2ex.ui.widgets.CollectionView;
import com.sonaive.v2ex.ui.widgets.DrawShadowFrameLayout;
import com.sonaive.v2ex.util.UIUtils;

import static com.sonaive.v2ex.util.LogUtils.LOGD;
import static com.sonaive.v2ex.util.LogUtils.makeLogTag;

/**
 * Created by liutao on 12/1/14.
 */
public class TestActivity extends BaseActivity {

    private static final String TAG = makeLogTag(TestActivity.class);

    private static final String PICASA_RSS_URL = "http://picasaweb.google.com/data/feed/base/featured?"
            + "alt=rss&kind=photo&access=public&slabel=featured&hl=en_US&imgmax=1600";

    private DrawShadowFrameLayout mDrawShadowFrameLayout;
    private View mButterBar;
    private TestFragment mFrag;

    // Intent for starting the IntentService that downloads the Picasa featured picture RSS feed
    private Intent mServiceIntent;

    // An instance of the status broadcast receiver
    DownloadStateReceiver mDownloadStateReceiver;

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

        setContentView(R.layout.activity_browse_images);
        mButterBar = findViewById(R.id.butter_bar);
        mDrawShadowFrameLayout = (DrawShadowFrameLayout) findViewById(R.id.main_content);

        overridePendingTransition(0, 0);

        registerHideableHeaderView(findViewById(R.id.headerbar));

        //        getLoaderManager().restartLoader(2, null, new FeedLoaderCallback());
        //        getLoaderManager().restartLoader(3, null, new NodeLoaderCallback());

        /*
         * Creates a new Intent to send to the download IntentService. The Intent contains the
         * URL of the Picasa feature picture RSS feed
         */
        mServiceIntent = new Intent(this, RSSPullService.class).setData(Uri.parse(PICASA_RSS_URL));

        startService(mServiceIntent);

        /*
         * Creates an intent filter for DownloadStateReceiver that intercepts broadcast Intents
         */

        // The filter's action is BROADCAST_ACTION
        IntentFilter statusIntentFilter = new IntentFilter(Constants.BROADCAST_ACTION);

        // Sets the filter's category to DEFAULT
        statusIntentFilter.addCategory(Intent.CATEGORY_DEFAULT);

        mDownloadStateReceiver = new DownloadStateReceiver();
        LocalBroadcastManager.getInstance(this).registerReceiver(mDownloadStateReceiver, statusIntentFilter);
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        enableActionBarAutoHide((CollectionView) findViewById(R.id.images_collection_view));
    }

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

        mFrag = (TestFragment) getFragmentManager().findFragmentById(R.id.images_fragment);
        if (mFrag != null) {
            // configure images fragment's top clearance to take our overlaid controls (Action Bar
            // ) into account.
            int actionBarSize = UIUtils.calculateActionBarSize(this);
            mDrawShadowFrameLayout.setShadowTopOffset(actionBarSize);
            mFrag.setContentTopClearance(actionBarSize);
        }
        updateFragContentTopClearance();

    }

    @Override
    public boolean canSwipeRefreshChildScrollUp() {
        if (mFrag != null) {
            return mFrag.canCollectionViewScrollUp();
        }
        return super.canSwipeRefreshChildScrollUp();
    }

    @Override
    protected void onActionBarAutoShowOrHide(boolean shown) {
        super.onActionBarAutoShowOrHide(shown);
        mDrawShadowFrameLayout.setShadowVisible(shown, shown);
    }

    @Override
    protected int getSelfNavDrawerItem() {
        return NAVDRAWER_ITEM_PICASAS;
    }

    @Override
    protected void requestDataRefresh() {
        super.requestDataRefresh();
        //        Bundle args = new Bundle();
        //        args.putString(Api.ARG_API_NAME, Api.API_TOPICS_LATEST);
        //        args.putString(Api.ARG_API_NAME, Api.API_NODES_ALL);
        //        args.putString(Api.ARG_API_NAME, Api.API_NODES_SPECIFIC);
        //        args.putString(Api.ARG_API_PARAMS_ID, "2");
        //        args.putString(Api.ARG_API_NAME, Api.API_REVIEWS);
        //        args.putString(Api.ARG_API_PARAMS_ID, "150242");
        //        SyncHelper.requestManualSync(this, args);
        startService(mServiceIntent);

    }

    // Updates the Sessions fragment content top clearance to take our chrome into account
    private void updateFragContentTopClearance() {
        mFrag = (TestFragment) getFragmentManager().findFragmentById(R.id.images_fragment);
        if (mFrag == null) {
            return;
        }

        final boolean butterBarVisible = mButterBar != null && mButterBar.getVisibility() == View.VISIBLE;

        int actionBarClearance = UIUtils.calculateActionBarSize(this);
        int butterBarClearance = butterBarVisible ? getResources().getDimensionPixelSize(R.dimen.butter_bar_height)
                : 0;

        setProgressBarTopWhenActionBarShown(actionBarClearance + butterBarClearance);
        mDrawShadowFrameLayout.setShadowTopOffset(actionBarClearance + butterBarClearance);
        mFrag.setContentTopClearance(actionBarClearance + butterBarClearance);
    }

    class DownloadStateReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            switch (intent.getIntExtra(Constants.EXTENDED_DATA_STATUS, Constants.STATE_ACTION_COMPLETE)) {
            case Constants.STATE_ACTION_COMPLETE: {
                // Rss has already stored. Hide the refresh progress bar.
                onRefreshingStateChanged(false);
                LOGD(TAG, "Rss has already stored. Hide the refresh progress bar.");
            }
            }
        }
    }

    class FeedLoaderCallback implements LoaderManager.LoaderCallbacks<Cursor> {

        @Override
        public Loader<Cursor> onCreateLoader(int id, Bundle args) {
            return new CursorLoader(TestActivity.this, V2exContract.Feeds.CONTENT_URI, PROJECTION, null, null,
                    V2exContract.Feeds.FEED_ID + " DESC");
        }

        @Override
        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
            onRefreshingStateChanged(false);
            if (data != null) {
                data.moveToPosition(-1);
                if (data.moveToFirst()) {
                    String id = data.getString(data.getColumnIndex(V2exContract.Feeds.FEED_ID));
                    String feedTitle = data.getString(data.getColumnIndex(V2exContract.Feeds.FEED_TITLE));
                    String feedAuthor = data.getString(data.getColumnIndex(V2exContract.Feeds.FEED_MEMBER));
                    String feedNode = data.getString(data.getColumnIndex(V2exContract.Feeds.FEED_NODE));
                    int feedsCount = data.getCount();
                    Toast.makeText(TestActivity.this,
                            "feed_id=" + id + ", feedTitle=" + feedTitle + ", feedAuthor=" + feedAuthor
                                    + ", feedNode=" + feedNode + ", feedCount=" + feedsCount,
                            Toast.LENGTH_SHORT).show();
                    LOGD(TAG, "feed_id=" + id + ", feedTitle=" + feedTitle + ", feedAuthor=" + feedAuthor
                            + ", feedNode=" + feedNode + ", feedCount=" + feedsCount);
                }
            }
        }

        @Override
        public void onLoaderReset(Loader<Cursor> loader) {
            loader = null;
        }
    }

    class NodeLoaderCallback implements LoaderManager.LoaderCallbacks<Cursor> {

        @Override
        public Loader<Cursor> onCreateLoader(int id, Bundle args) {
            return new CursorLoader(TestActivity.this, V2exContract.Nodes.CONTENT_URI, PROJECTION_NODES, null, null,
                    V2exContract.Nodes.NODE_ID + " ASC");
        }

        @Override
        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
            onRefreshingStateChanged(false);
            if (data != null) {
                data.moveToPosition(-1);
                if (data.moveToFirst()) {
                    String id = data.getString(data.getColumnIndex(V2exContract.Nodes.NODE_ID));
                    String name = data.getString(data.getColumnIndex(V2exContract.Nodes.NODE_NAME));
                    String title = data.getString(data.getColumnIndex(V2exContract.Nodes.NODE_TITLE));
                    int nodesCount = data.getCount();
                    Toast.makeText(TestActivity.this, "node_id=" + id + ", nodeTitle=" + title + ", nodeName="
                            + name + ", nodeCount=" + nodesCount, Toast.LENGTH_SHORT).show();
                    LOGD(TAG, "node_id=" + id + ", nodeTitle=" + title + ", nodeName=" + name + ", nodeCount="
                            + nodesCount);

                }
            }
        }

        @Override
        public void onLoaderReset(Loader<Cursor> loader) {
            loader = null;
        }
    }

    class ReviewLoaderCallback implements LoaderManager.LoaderCallbacks<Cursor> {

        @Override
        public Loader<Cursor> onCreateLoader(int id, Bundle args) {
            return new CursorLoader(TestActivity.this, V2exContract.Reviews.CONTENT_URI, PROJECTION_REVIEWS, null,
                    null, V2exContract.Reviews.REVIEW_CREATED + " ASC");
        }

        @Override
        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
            onRefreshingStateChanged(false);
            if (data != null) {
                data.moveToPosition(-1);
                if (data.moveToFirst()) {
                    String id = data.getString(data.getColumnIndex(V2exContract.Reviews.REVIEW_ID));
                    String member = data.getString(data.getColumnIndex(V2exContract.Reviews.REVIEW_MEMBER));
                    String content = data.getString(data.getColumnIndex(V2exContract.Reviews.REVIEW_CONTENT));
                    int reviewCount = data.getCount();
                    Toast.makeText(TestActivity.this, "review_id=" + id + ", reviewMember=" + member
                            + ", reviewContent=" + content + ", reviewCount=" + reviewCount, Toast.LENGTH_SHORT)
                            .show();
                    LOGD(TAG, "review_id=" + id + ", reviewMember=" + member + ", reviewContent=" + content
                            + ", reviewCount=" + reviewCount);

                }
            }
        }

        @Override
        public void onLoaderReset(Loader<Cursor> loader) {
            loader = null;
        }
    }

    private static final String[] PROJECTION = { V2exContract.Feeds.FEED_ID, V2exContract.Feeds.FEED_TITLE,
            V2exContract.Feeds.FEED_MEMBER, V2exContract.Feeds.FEED_NODE };

    private static final String[] PROJECTION_NODES = { V2exContract.Nodes.NODE_ID, V2exContract.Nodes.NODE_NAME,
            V2exContract.Nodes.NODE_TITLE, };

    private static final String[] PROJECTION_REVIEWS = { V2exContract.Reviews.REVIEW_ID,
            V2exContract.Reviews.REVIEW_MEMBER, V2exContract.Reviews.REVIEW_CONTENT, };
}