Java tutorial
package com.jbirdvegas.mgerrit; /* * Copyright (C) 2013 Android Open Kang Project (AOKP) * Author: Jon Stanford (JBirdVegas), 2013 * * 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. */ import android.app.AlertDialog.Builder; import android.app.SearchManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import com.google.analytics.tracking.android.EasyTracker; import com.google.analytics.tracking.android.GoogleAnalytics; import com.google.analytics.tracking.android.Logger; import com.google.analytics.tracking.android.MapBuilder; import com.google.analytics.tracking.android.Tracker; import com.jbirdvegas.mgerrit.database.SelectedChange; import com.jbirdvegas.mgerrit.helpers.AnalyticsHelper; import com.jbirdvegas.mgerrit.helpers.ROMHelper; import com.jbirdvegas.mgerrit.message.GerritChanged; import com.jbirdvegas.mgerrit.message.NewChangeSelected; import com.jbirdvegas.mgerrit.views.GerritSearchView; import de.greenrobot.event.EventBus; public class GerritControllerActivity extends FragmentActivity { private static final String GERRIT_INSTANCE = "gerrit"; private String mGerritWebsite; private Menu mMenu; // Indicates if we are running this in tablet mode. private boolean mTwoPane = false; private ChangeListFragment mChangeList; // This will be null if mTwoPane is false (i.e. not tablet mode) private PatchSetViewerFragment mChangeDetail; private int mTheme; private GerritSearchView mSearchView; @Override protected void onStart() { super.onStart(); EasyTracker.getInstance(this).activityStart(this); EventBus.getDefault().register(this); } @Override protected void onStop() { super.onStop(); EasyTracker.getInstance(this).activityStop(this); EventBus.getDefault().unregister(this); } @Override public void onCreate(Bundle savedInstanceState) { mTheme = Prefs.getCurrentThemeID(this); setTheme(mTheme); super.onCreate(savedInstanceState); // check if caller has a gerrit instance start screen preference String suppliedGerritInstance = getIntent().getStringExtra(GERRIT_INSTANCE); if (suppliedGerritInstance != null && !suppliedGerritInstance.isEmpty() && suppliedGerritInstance.contains("http")) { // just set the prefs and allow normal loading Prefs.setCurrentGerrit(this, suppliedGerritInstance); } GoogleAnalytics googleAnalytics = GoogleAnalytics.getInstance(this); String trackingId = getString(R.string.ga_trackingId); Tracker tracker = googleAnalytics.getTracker(trackingId); googleAnalytics.getLogger().setLogLevel(Logger.LogLevel.VERBOSE); tracker.send(MapBuilder.createAppView().build()); // keep a log of what ROM our users run AnalyticsHelper.sendAnalyticsEvent(this, AnalyticsHelper.GA_APP_OPEN, AnalyticsHelper.GA_ROM_VERSION, ROMHelper.determineRom(this), null); // Keep track of what theme is being used AnalyticsHelper.sendAnalyticsEvent(this, AnalyticsHelper.GA_APP_OPEN, AnalyticsHelper.GA_THEME_SET_ON_OPEN, Prefs.getCurrentTheme(this), null); setContentView(R.layout.main); FragmentManager fm = getSupportFragmentManager(); if (findViewById(R.id.change_detail_fragment) != null) { // The detail container view will be present only in // large-screen layouts(res/values-sw600dp). If this view is present, // then the activity should be in two-pane mode. mTwoPane = true; mChangeDetail = (PatchSetViewerFragment) fm.findFragmentById(R.id.change_detail_fragment); } Prefs.setTabletMode(this, mTwoPane); mChangeList = (ChangeListFragment) fm.findFragmentById(R.id.change_list_fragment); mGerritWebsite = Prefs.getCurrentGerrit(this); // Get the SearchView and set the searchable configuration SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); mSearchView = (GerritSearchView) findViewById(R.id.search); mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); } @Override public boolean onPrepareOptionsMenu(Menu menu) { hideChangelogOption(Prefs.getCurrentGerrit(this)); return super.onPrepareOptionsMenu(menu); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.gerrit_instances_menu, menu); this.mMenu = menu; return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { Intent intent; switch (item.getItemId()) { case R.id.menu_save: intent = new Intent(this, PrefsActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); return true; case R.id.menu_help: showHelpDialog(); return true; case R.id.menu_refresh: refreshTabs(); return true; case R.id.menu_team_instance: intent = new Intent(this, GerritSwitcher.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); return true; case R.id.menu_projects: intent = new Intent(this, ProjectsList.class); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); return true; case R.id.menu_changelog: // TODO: Send the current search query along too. Intent changelog = new Intent(this, AOKPChangelog.class); changelog.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(changelog); return true; case R.id.menu_search: // Toggle the visibility of the searchview mSearchView.toggleVisibility(); default: return super.onOptionsItemSelected(item); } } private void onGerritChanged(String newGerrit) { mGerritWebsite = newGerrit; Toast.makeText(this, getString(R.string.using_gerrit_toast) + ' ' + newGerrit, Toast.LENGTH_LONG).show(); hideChangelogOption(newGerrit); refreshTabs(); } /* Mark all of the tabs as dirty to trigger a refresh when they are next * resumed. refresh must be called on the current fragment as it is already * resumed. */ public void refreshTabs() { mChangeList.refreshTabs(); } @Override protected void onResume() { super.onResume(); // Manually check if the Gerrit source changed (from the Preferences) String s = Prefs.getCurrentGerrit(this); if (!s.equals(mGerritWebsite)) onGerritChanged(s); // Apply the theme if it has changed int themeId = Prefs.getCurrentThemeID(this); if (themeId != mTheme) { mTheme = themeId; setTheme(themeId); this.recreate(); } } // Hide the AOKP Changelog menu option when AOKP's Gerrit is not selected private void hideChangelogOption(String gerrit) { MenuItem changelog = mMenu.findItem(R.id.menu_changelog); if (changelog != null) { changelog.setVisible(gerrit.contains("aokp")); } } public ChangeListFragment getChangeList() { return mChangeList; } /** * @return The change detail fragment, may be null. */ public PatchSetViewerFragment getChangeDetail() { return mChangeDetail; } private void showHelpDialog() { Builder builder = new Builder(this); builder.setTitle(R.string.menu_help); LayoutInflater layoutInflater = this.getLayoutInflater(); View dialog = layoutInflater.inflate(R.layout.dialog_help, null); builder.setView(dialog); builder.setNeutralButton(getString(R.string.gerrit_help), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(mGerritWebsite + "Documentation/index.html")); startActivity(browserIntent); } }); builder.create(); builder.show(); } public void onEventMainThread(GerritChanged ev) { onGerritChanged(ev.getNewGerrit()); } /** * Handler for when a change is selected in the list. */ public void onEventMainThread(NewChangeSelected ev) { String changeId = ev.getChangeId(); SelectedChange.setSelectedChange(this, changeId); if (mTwoPane) ev.setFragment(mChangeDetail); ev.inflate(this); } }