com.personal.learn_android.EventActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.personal.learn_android.EventActivity.java

Source

/*
 * Copyright (c) 2017 Bervianto Leo Pratama
 *
 * 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.personal.learn_android;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.maps.android.ui.IconGenerator;
import com.personal.learn_android.model.Event;
import com.personal.learn_android.adapter.EventPagerAdapter;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import io.realm.Realm;

/**
 * Created by Bervianto Leo P on 02/06/2017.
 */

public class EventActivity extends AppCompatActivity implements OnMapReadyCallback {

    public final static String EXTRA_MESSAGE = "com.personal.learn_android.EVENT_MESSAGE";

    private EventPagerAdapter eventPagerAdapter;

    /**
     * The {@link ViewPager} that will host the section contents.
     */
    private ViewPager mViewPager;

    List<Event> listEvent;
    private GoogleMap mMap;
    SupportMapFragment mapFragment;
    EventFragment eventFragment;
    FragmentManager fm;
    private Realm realm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);

        Toolbar toolbar = (Toolbar) findViewById(R.id.event_toolbar);
        setSupportActionBar(toolbar);

        ActionBar ourActionBar = getSupportActionBar();
        if (ourActionBar != null) {
            ourActionBar.setDisplayHomeAsUpEnabled(true);
        }

        realm = Realm.getDefaultInstance();

        this.initial();
    }

    private void setupMapView() {
        if (mViewPager.getVisibility() != View.VISIBLE) {
            mViewPager.setVisibility(View.VISIBLE);
        }
        if (mapFragment.isHidden()) {
            fm.beginTransaction().show(mapFragment).commit();
        }
    }

    private void initial() {

        listEvent = realm.where(Event.class).findAll();
        if (listEvent.isEmpty()) {
            listEvent = new ArrayList<>();

            Event event1 = new Event("Event 1", "12 Agustus 2017", R.drawable.events, 0.7, 113.2);
            Event event2 = new Event("Event 2", "19 Agustus 2017", R.drawable.events, 0.10, 113.3);
            Event event3 = new Event("Event 3", "13 Agustus 2017", R.drawable.events, 0.9, 113.5);
            Event event4 = new Event("Event 4", "17 Agustus 2017", R.drawable.events, 0.7, 115.3);
            listEvent.add(event1);
            listEvent.add(event2);
            listEvent.add(event3);
            listEvent.add(event4);

            realm.beginTransaction();
            realm.copyToRealmOrUpdate(listEvent);
            realm.commitTransaction();
        }

        eventFragment = new EventFragment();
        fm = getSupportFragmentManager();
        fm.beginTransaction().add(R.id.list_view_fragment, eventFragment).commit();
        mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map_fragment_view);
        fm.beginTransaction().hide(mapFragment).commit();

        // Create the adapter that will return a fragment for each of the three
        // primary sections of the activity.
        eventPagerAdapter = new EventPagerAdapter(getSupportFragmentManager(), listEvent);

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(eventPagerAdapter);

        mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                Event event = listEvent.get(position);
                LatLng place = new LatLng(event.getLatitude(), event.getLongitude());
                mMap.moveCamera(CameraUpdateFactory.newLatLng(place));
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        mViewPager.setVisibility(View.GONE);
        mapFragment.getMapAsync(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_event, menu);
        return true;
    }

    @Override
    public void onBackPressed() {
        Intent intent = new Intent(EventActivity.this, HomeActivity.class);
        String message = null;
        intent.putExtra(EXTRA_MESSAGE, message);
        setResult(Activity.RESULT_OK, intent);
        finish();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == android.R.id.home) {
            String message = null;
            Intent intent = new Intent(EventActivity.this, HomeActivity.class);
            intent.putExtra(EXTRA_MESSAGE, message);
            setResult(Activity.RESULT_OK, intent);
            finish();
            return true;
        } else if (id == R.id.action_add_event) {
            fm.beginTransaction().setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
                    .detach(eventFragment).addToBackStack(null).commit();
            setupMapView();
            return true;
        } else {
            return super.onOptionsItemSelected(item);
        }
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        IconGenerator generator = new IconGenerator(this);
        Random random = new Random();
        for (Event event : listEvent) {
            LatLng place = new LatLng(event.getLatitude(), event.getLongitude());
            generator.setColor(Color.rgb(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
            Bitmap icon = generator.makeIcon(event.getEventName());
            mMap.addMarker(new MarkerOptions().position(place).title(event.getEventName())
                    .icon(BitmapDescriptorFactory.fromBitmap(icon)));
        }
        Event event = listEvent.get(0);
        LatLng place = new LatLng(event.getLatitude(), event.getLongitude());
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(place, 8.0f));

        mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                String eventName = marker.getTitle();
                int i = 0;
                for (Event event : listEvent) {
                    if (event.getEventName().equalsIgnoreCase(eventName)) {
                        mViewPager.setCurrentItem(i);
                        break;
                    } else {
                        i++;
                    }
                }
                return true;
            }
        });
    }
}