com.javielinux.tweettopics2.TrendsLocationActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.javielinux.tweettopics2.TrendsLocationActivity.java

Source

/*
 * Copyright 2012 Javier Prez Pacheco and Francisco Daz Rodriguez
 * TweetTopics 2.0
 * javielinux@gmail.com
 *
 * 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.javielinux.tweettopics2;

import android.content.Intent;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;
import com.android.dataframework.DataFramework;
import com.android.dataframework.Entity;
import com.javielinux.adapters.RowTrendsLocationAdapter;
import com.javielinux.api.APIDelegate;
import com.javielinux.api.APITweetTopics;
import com.javielinux.api.request.TrendsLocationRequest;
import com.javielinux.api.response.BaseResponse;
import com.javielinux.api.response.ErrorResponse;
import com.javielinux.api.response.TrendsLocationResponse;
import com.javielinux.utils.ColumnsUtils;
import com.javielinux.utils.TweetTopicsUtils;
import com.javielinux.utils.Utils;
import twitter4j.Location;
import twitter4j.ResponseList;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class TrendsLocationActivity extends BaseActivity implements APIDelegate<BaseResponse> {

    private LinearLayout viewTrendsParent;
    private LinearLayout viewNoTrendsLocation;
    private LinearLayout viewLoading;
    private LinearLayout viewNoInternet;
    private ListView listView;

    private ThemeManager themeManager;

    private ArrayList<Location> trendslocation_list;
    private RowTrendsLocationAdapter trendslocation_adapter;

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

        try {
            DataFramework.getInstance().open(this, Utils.packageName);
        } catch (Exception e) {
            e.printStackTrace();
        }

        themeManager = new ThemeManager(this);
        themeManager.setTheme();

        setContentView(R.layout.trendslocation_activity);

        viewTrendsParent = (LinearLayout) this.findViewById(R.id.trends_location_parent);
        viewNoTrendsLocation = (LinearLayout) this.findViewById(R.id.trends_location_view_no_lists);
        viewLoading = (LinearLayout) this.findViewById(R.id.trends_location_view_loading);
        viewNoInternet = (LinearLayout) this.findViewById(R.id.trends_location_view_no_internet);
        listView = (ListView) this.findViewById(R.id.trends_location_list);

        BitmapDrawable bmp = (BitmapDrawable) this.getResources()
                .getDrawable(themeManager.getResource("search_tile"));
        if (bmp != null) {
            bmp.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
            viewTrendsParent.setBackgroundDrawable(bmp);
        }

        trendslocation_list = new ArrayList<Location>();
        trendslocation_adapter = new RowTrendsLocationAdapter(this, trendslocation_list);
        listView.setAdapter(trendslocation_adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> av, View v, int pos, long id) {
                Location trendslocation = trendslocation_adapter.getItem(pos);

                createTrendsLocationColumn(trendslocation);
            }
        });

        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) {
                return true;
            }
        });

        showLoading();
        loadTrendsLocation();
    }

    private void createTrendsLocationColumn(Location trendslocation) {

        ArrayList<Entity> created_column_list = DataFramework.getInstance().getEntityList("columns",
                "location_id=" + trendslocation.getWoeid());

        int position = 0;

        if (created_column_list.size() == 0) {
            position = ColumnsUtils.nextPositionColumn();

            Entity type = new Entity("type_columns", (long) TweetTopicsUtils.COLUMN_TRENDING_TOPIC);
            Entity user_list = new Entity("columns");
            user_list.setValue("description", trendslocation.getName());
            user_list.setValue("type_id", type);
            user_list.setValue("position", position);
            user_list.setValue("location_id", trendslocation.getWoeid());
            user_list.save();
            Toast.makeText(this, getString(R.string.column_created, trendslocation.getName()), Toast.LENGTH_LONG)
                    .show();
        } else {
            position = created_column_list.get(0).getInt("position");
        }

        Intent intent = getIntent();
        intent.putExtra("position", position);

        setResult(RESULT_OK, intent);
        finish();
    }

    public void showNoTrendsLocation() {
        viewNoTrendsLocation.setVisibility(View.VISIBLE);
        viewLoading.setVisibility(View.GONE);
        viewNoInternet.setVisibility(View.GONE);
        listView.setVisibility(View.GONE);
    }

    public void showLoading() {
        viewNoTrendsLocation.setVisibility(View.GONE);
        viewLoading.setVisibility(View.VISIBLE);
        viewNoInternet.setVisibility(View.GONE);
        listView.setVisibility(View.GONE);
    }

    public void showNoInternet() {
        viewNoTrendsLocation.setVisibility(View.GONE);
        viewLoading.setVisibility(View.GONE);
        viewNoInternet.setVisibility(View.VISIBLE);
        listView.setVisibility(View.GONE);
    }

    public void showTrendsLocationLists() {
        viewNoTrendsLocation.setVisibility(View.GONE);
        viewLoading.setVisibility(View.GONE);
        viewNoInternet.setVisibility(View.GONE);
        listView.setVisibility(View.VISIBLE);
    }

    public void loadTrendsLocation() {

        TrendsLocationRequest trendsLocationRequest = new TrendsLocationRequest();
        APITweetTopics.execute(this, getSupportLoaderManager(), this, trendsLocationRequest);
    }

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

    @Override
    protected void onDestroy() {
        super.onDestroy();
        DataFramework.getInstance().close();
    }

    @Override
    public void onResults(BaseResponse result) {

        TrendsLocationResponse trendsLocationResponse = (TrendsLocationResponse) result;
        ResponseList<Location> trendslocation_data = trendsLocationResponse.getLocationList();

        try {
            Collections.sort(trendslocation_data, new Comparator<Location>() {

                public int compare(Location location1, Location location2) {
                    return location1.getName().compareToIgnoreCase(location2.getName());
                }

            });

            for (int i = 0; i < trendslocation_data.size(); i++)
                trendslocation_list.add(trendslocation_data.get(i));

        } catch (Exception e) {
            e.printStackTrace();
        }

        trendslocation_adapter.notifyDataSetChanged();

        if (trendslocation_adapter.getCount() == 0) {
            showNoTrendsLocation();
        } else {
            showTrendsLocationLists();
        }
    }

    @Override
    public void onError(ErrorResponse error) {
        error.getError().printStackTrace();
    }

}