hackedteam/core-android-market

View on GitHub
src/main/java/org/benews/BeNews.java

Summary

Maintainability
A
0 mins
Test Coverage
package org.benews;



import android.app.DatePickerDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.os.Bundle;

import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.LocalBroadcastManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;


import java.util.HashMap;

import static org.benews.BackgroundSocket.Sleep;


public class BeNews extends FragmentActivity implements BeNewsFragList.OnFragmentInteractionListener , View.OnClickListener , BackgroundSocket.NewsUpdateListener {
    private final static String TAG="BeNews";
    private static Context context;
    private static ProgressBar pb=null;
    ArrayAdapter<HashMap<String,String>> listAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_be_news);
        BitmapHelper.init(getResources().getDisplayMetrics().density);
        context = getApplicationContext();
        final Intent serviceIntent = new Intent(context, PullIntentService.class);
        context.startService(serviceIntent);
    }

    public void setProgressBar(int progress){
        if(pb!=null){
            pb.setProgress(progress);
        }

    }
    boolean toUpdate=false;

    public synchronized boolean isToUpdate() {
        return toUpdate;
    }

    public synchronized void setToUpdate(boolean toUpdate) {
        this.toUpdate = toUpdate;
    }

    @Override
    public synchronized void onNewsUpdate() {
        setToUpdate(true);
        final Button b = ((Button) findViewById(R.id.bt_refresh));
        this.runOnUiThread(new Runnable() {
            public synchronized void run() {
                if (isToUpdate()) {
                    listAdapter.notifyDataSetChanged();
                    BackgroundSocket sucker = BackgroundSocket.self();
                    if (b.isEnabled() == false) {
                        sucker.setRun(true);
                        int i = 100;
                        while (sucker.isRunning() && i > 0) {
                            i -= 20;
                            setProgressBar(i);
                            Sleep(1);
                        }
                        setProgressBar(0);
                        b.setEnabled(true);
                    }
                    listAdapter.notifyDataSetChanged();
                    setToUpdate(false);
                }
            }
        });
    }
    @Override
    protected void onStop() {
        super.onStop();
        /* Save db status
         * release Memory
         * stop cpu intensive task
         */
        //Log.d(TAG, "onStop");
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if(listAdapter != null) {
            listAdapter.notifyDataSetChanged();
        }

    }
    @Override
    protected void onStart() {
        super.onStart();
        if(BackgroundSocket.self().isThreadStarted()){
            finishOnStart();
        }

    }
    public void finishOnStart(){

            final BackgroundSocket sucker = BackgroundSocket.self();
            BeNewsFragList bfl = new BeNewsFragList();
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.content_placeholder, bfl);
            ft.commit();
            listAdapter = new BeNewsArrayAdapter(this, sucker.getList());
            bfl.setListAdapter(listAdapter);
            final Button b = ((Button) findViewById(R.id.bt_refresh));
            b.setOnClickListener(this);
            pb = (ProgressBar) findViewById(R.id.progressBar);
            pb.setProgress(0);
            pb.setMax(100);
            sucker.setOnNewsUpdateListener(this);
            setToUpdate(true);

    }

    @Override
    protected void onResume() {
        super.onResume();
        // Register mMessageReceiver to receive messages.
        LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter(new IntentFilter(BackgroundSocket.READY)));
    }

    @Override
    protected void onPause() {
        super.onPause();
        // Unregister since the activity is not visible
        LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
        super.onPause();
    }

    // handler for received Intents for the "my-event" event
    private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Extract data included in the Intent
            String message = intent.getStringExtra("message");
            Log.d("receiver", "Got message: " + message);
            finishOnStart();
        }
    };
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu
                .be_news_menu, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onItemPress(int position) {
        try {
            Object o = listAdapter.getItem(position);
            String keyword = o.toString();
            Toast.makeText(this, "You selected: " + keyword, Toast.LENGTH_SHORT).show();
            BackgroundSocket sucker = BackgroundSocket.self();
            if ( sucker != null ) {
                DetailFragView details  = DetailFragView.newInstance((HashMap<String,String>)o);
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                ft.replace(R.id.content_placeholder, details);
                //ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                ft.addToBackStack("DETAILS");
                ft.commit();
            }
        }catch (Exception e){
            Log.d(TAG,"Exception:" + e);
        }
    }



    @Override
    public void onBackPressed() {
        if (getSupportFragmentManager().findFragmentById(R.id.detail_image) != null) {
            // I'm viewing Fragment C
            getSupportFragmentManager().popBackStack("DETAILS",
                    FragmentManager.POP_BACK_STACK_INCLUSIVE);
        } else {
            super.onBackPressed();
        }
    }

    public static Context getAppContext(){
        return BeNews.context;
    }

    @Override
    public void onClick(View view) {
        // Start lengthy operation in a background thread
        final Button button = (Button)view;
        final BackgroundSocket sucker = BackgroundSocket.self();
        button.setEnabled(false);
        sucker.setRun(false);
        int i = 0;
        new Thread(new Runnable() {
            public void run() {
                int i = 0;
                setProgressBar(i);
                while (sucker.isRunning()) {

                    Sleep(1);
                    i += 1;
                    if((i <= 100)) {
                        setProgressBar(i);
                    }
                }
                sucker.reset_news();
            }
        }).start();
    }
}