Android Open Source - ghwatch Activity Base






From Project

Back to project page ghwatch.

License

The source code is released under:

Apache License

If you think the Android project ghwatch listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2014 contributors as indicated by the @authors tag.
 * //from w w w  .jav a2  s .  c o  m
 * 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.daskiworks.ghwatch;

import java.lang.reflect.Field;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.daskiworks.ghwatch.backend.AuthenticationManager;
import com.daskiworks.ghwatch.image.ImageLoader;
import com.daskiworks.ghwatch.model.GHUserInfo;

/**
 * Abstract base for activities in this app.
 * <p>
 * Contains navigation drawer support over, you can init drawer using {@link #navigationDrawerInit()} in your {@link #onCreate(Bundle)} implementation.
 * 
 * @author Vlastimil Elias <vlastimil.elias@worldonline.cz>
 * 
 */
public abstract class ActivityBase extends Activity {

  private static final String FRAGMENT_DIALOG = "dialogFragment";

  protected static final int COLOR_BACKGROUND_DRAWER = 0xFFEEEEEE;

  protected static final int NAV_DRAWER_ITEM_UNREAD_NOTIF = 0;
  protected static final int NAV_DRAWER_ITEM_WATCHED_REPOS = 1;

  protected View mDrawerView;
  protected DrawerLayout mDrawerLayout;
  protected ActionBarDrawerToggle mDrawerToggle;
  protected ListView mDrawerMenuList;
  protected NavigationDrawerAdapter mDrawerAdapter;
  protected String[] mDrawerMenuTitles;

  private CharSequence mDrawerTitle;
  private CharSequence mTitle;
  private int navDrawerMenuSelectedItem = -1;

  /**
   * Swipe layout support. A {@link #initSwipeLayout(OnRefreshListener)} must be called in {@link #onCreate(Bundle)} of activity.
   */
  protected SwipeRefreshLayout swipeLayout;
  protected SwipeRefreshLayout swipeLayout2;
  protected ProgressBar initialProgressBar;

  /**
   * Init SwipeRefreshLayout in the activity. A {@link #swipeLayout} is filled with object.
   * 
   * @param listener called on refresh swipe
   */
  protected void initSwipeLayout(OnRefreshListener listener) {
    swipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
    if (swipeLayout != null) {
      swipeLayout.setOnRefreshListener(listener);
      swipeLayout.setColorSchemeResources(android.R.color.holo_red_light, R.color.apptheme_color, android.R.color.holo_orange_light, R.color.apptheme_color);
    }

    swipeLayout2 = (SwipeRefreshLayout) findViewById(R.id.swipe_container_2);
    if (swipeLayout2 != null) {
      swipeLayout2.setOnRefreshListener(listener);
      swipeLayout2.setColorSchemeResources(android.R.color.holo_red_light, R.color.apptheme_color, android.R.color.holo_orange_light, R.color.apptheme_color);
    }

    initialProgressBar = (ProgressBar) findViewById(R.id.initial_progress);
  }

  protected void hideInitialProgressBar() {
    if (initialProgressBar != null)
      initialProgressBar.setVisibility(View.GONE);
  }

  /**
   * Init navigation drawer for activity. Layout xml file must be appropriate!
   * 
   * @param selectedItem in drawer main menu which represents this activity, see <code>NAV_DRAWER_ITEM_xx</code> constants.
   * 
   * @see #navigationDrawerClose()
   */
  protected void initNavigationDrawer(int selectedItem) {
    // initialization of navigation drawer
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (mDrawerLayout != null) {
      navDrawerMenuSelectedItem = selectedItem;
      mTitle = getTitle();
      mDrawerTitle = getResources().getString(R.string.app_name);
      mDrawerView = findViewById(R.id.drawer_view);
      // set drawer background color not to be transparent, we can't do it in layout due reuse for other layouts
      mDrawerView.setBackgroundColor(COLOR_BACKGROUND_DRAWER);
      mDrawerView.invalidate();

      mDrawerMenuTitles = getResources().getStringArray(R.array.action_list);
      mDrawerMenuList = (ListView) findViewById(R.id.drawer_menu);
      mDrawerAdapter = new NavigationDrawerAdapter(this, R.layout.drawer_list_item, mDrawerMenuTitles);
      mDrawerMenuList.setAdapter(mDrawerAdapter);
      mDrawerMenuList.setOnItemClickListener(new DrawerItemClickListener());

      mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_navigation_drawer, R.string.drawer_open, R.string.drawer_close) {

        public void onDrawerClosed(View view) {
          super.onDrawerClosed(view);
          getActionBar().setTitle(mTitle);
        }

        public void onDrawerOpened(View drawerView) {
          super.onDrawerOpened(drawerView);
          getActionBar().setTitle(mDrawerTitle);
        }

      };
      mDrawerLayout.setDrawerListener(mDrawerToggle);
      getActionBar().setDisplayHomeAsUpEnabled(true);
      getActionBar().setHomeButtonEnabled(true);
      navigationDrawerShowUserInfo();
    }
  }

  /**
   * Show user info in navigation drawer.
   */
  protected void navigationDrawerShowUserInfo() {
    if (mDrawerLayout != null) {
      (new ShowUserInfoTask()).execute();
    }
  }

  private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
      onDrawerMenuItemSelected(position);
    }
  }

  private void onDrawerMenuItemSelected(int position) {
    if (navDrawerMenuSelectedItem != position) {
      Intent intent = null;
      switch (position) {
      case NAV_DRAWER_ITEM_UNREAD_NOTIF:
        intent = new Intent(this, MainActivity.class);
        break;
      case NAV_DRAWER_ITEM_WATCHED_REPOS:
        intent = new Intent(this, WatchedRepositoriesActivity.class);
        break;
      }
      if (intent != null) {
        navigationDrawerClose();
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        this.startActivity(intent);
      }
    }
    navigationDrawerClose();
  }

  /**
   * Close navigation drawer if opened. Used when some item in drawer is used.
   */
  protected void navigationDrawerClose() {
    if (mDrawerLayout != null) {
      mDrawerLayout.closeDrawer(mDrawerView);
    }
  }

  @Override
  protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    if (mDrawerToggle != null)
      mDrawerToggle.syncState();
  }

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

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

    // hack to show menu overlay button in Action Bar even for phone with hardware menu buttons.
    try {
      ViewConfiguration config = ViewConfiguration.get(this);
      Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
      if (menuKeyField != null) {
        menuKeyField.setAccessible(true);
        menuKeyField.setBoolean(config, false);
      }
    } catch (Exception ex) {
      // Ignore
    }

  }

  protected boolean checkUserLoggedIn() {
    if (AuthenticationManager.getInstance().loadCurrentUser(this) == null) {
      Intent intent = new Intent(this, StartActivity.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      this.startActivity(intent);
      return false;
    }
    return true;
  }

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

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    // Pass the event to ActionBarDrawerToggle, if it returns true, then it has handled the app icon touch event
    if (mDrawerToggle != null && mDrawerToggle.onOptionsItemSelected(item)) {
      return true;
    }

    switch (item.getItemId()) {
    case R.id.action_settings:
      this.startActivity(new Intent(this, SettingsActivity.class));
      return true;
    case R.id.action_supportAppDevelopment:
      showSupportAppDevelopmentDialog();
      return true;
    case R.id.action_about:
      AboutDialogFragment ldf = new AboutDialogFragment();
      ldf.show(this.getFragmentManager(), FRAGMENT_DIALOG);
      return true;
    default:
      return false;
    }
  }

  /**
   * Show dialog with application support info
   */
  protected void showSupportAppDevelopmentDialog() {
    if (this.getFragmentManager().findFragmentByTag(FRAGMENT_DIALOG) == null) {
      SupportAppDevelopmentDialogFragment sdf = new SupportAppDevelopmentDialogFragment();
      sdf.show(this.getFragmentManager(), FRAGMENT_DIALOG);
    }
  }

  /**
   * Item adapter for navigation drawer. Makes selected items bold.
   */
  public class NavigationDrawerAdapter extends ArrayAdapter<String> {
    public NavigationDrawerAdapter(Context context, int resource, String[] objects) {
      super(context, resource, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      TextView view = (TextView) super.getView(position, convertView, parent);
      if (position == navDrawerMenuSelectedItem) {
        view.setTypeface(Typeface.DEFAULT_BOLD);
      } else {
        view.setTypeface(Typeface.DEFAULT);
      }
      return view;
    }
  }

  private final class ShowUserInfoTask extends AsyncTask<Object, String, GHUserInfo> {

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected GHUserInfo doInBackground(Object... params) {
      return AuthenticationManager.getInstance().getCurrentUserInfo(getApplicationContext());
    }

    @Override
    protected void onPostExecute(final GHUserInfo result) {
      if (isCancelled() || result == null) {
        return;
      }
      TextView userName = (TextView) findViewById(R.id.user_name);
      if (userName != null)
        userName.setText(result.getName());
      TextView userUserName = (TextView) findViewById(R.id.user_username);
      if (userUserName != null)
        userUserName.setText(result.getUsername());
      if (result.getAvatarUrl() != null)
        ImageLoader.getInstance(getApplicationContext()).displayImage(result.getAvatarUrl(), (ImageView) findViewById(R.id.drawer_user_thumb));

      if (result.getHtmlUrl() != null) {
        RelativeLayout hv = (RelativeLayout) findViewById(R.id.drawer_user_header);
        hv.setClickable(true);
        hv.setOnClickListener(new OnClickListener() {

          @Override
          public void onClick(View v) {
            navigationDrawerClose();
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(result.getHtmlUrl()));
            startActivity(browserIntent);
            ActivityTracker.sendEvent(getApplicationContext(), ActivityTracker.CAT_UI, "nav_drawer_user_profile_show", "", 0L);
          }
        });

      }

    }
  }

}




Java Source Code List

com.daskiworks.ghwatch.AboutDialogFragment.java
com.daskiworks.ghwatch.ActivityBase.java
com.daskiworks.ghwatch.ActivityTracker.java
com.daskiworks.ghwatch.FullHeightListView.java
com.daskiworks.ghwatch.IabHelper.java
com.daskiworks.ghwatch.LoginDialogFragment.java
com.daskiworks.ghwatch.MainActivity.java
com.daskiworks.ghwatch.MyBackupAgent.java
com.daskiworks.ghwatch.NotificationListAdapter.java
com.daskiworks.ghwatch.NotificationRepositoriesListAdapter.java
com.daskiworks.ghwatch.SettingsActivity.java
com.daskiworks.ghwatch.StartActivity.java
com.daskiworks.ghwatch.SupportAppDevelopmentDialogFragment.java
com.daskiworks.ghwatch.SwipeDismissListViewTouchListener.java
com.daskiworks.ghwatch.UnreadAppWidgetProvider.java
com.daskiworks.ghwatch.Utils.java
com.daskiworks.ghwatch.WatchedRepositoriesActivity.java
com.daskiworks.ghwatch.WatchedRepositoryListAdapter.java
com.daskiworks.ghwatch.alarm.AlarmBroadcastReceiver.java
com.daskiworks.ghwatch.alarm.MarkNotifiationAsReadReceiver.java
com.daskiworks.ghwatch.backend.AuthenticationManager.java
com.daskiworks.ghwatch.backend.GHConstants.java
com.daskiworks.ghwatch.backend.NotificationStreamParser.java
com.daskiworks.ghwatch.backend.OTPAuthenticationException.java
com.daskiworks.ghwatch.backend.PreferencesUtils.java
com.daskiworks.ghwatch.backend.RemoteSystemClient.java
com.daskiworks.ghwatch.backend.UnreadNotificationsService.java
com.daskiworks.ghwatch.backend.ViewDataReloadStrategy.java
com.daskiworks.ghwatch.backend.WatchedRepositoriesParser.java
com.daskiworks.ghwatch.backend.WatchedRepositoriesService.java
com.daskiworks.ghwatch.image.FileCache.java
com.daskiworks.ghwatch.image.ImageLoader.java
com.daskiworks.ghwatch.image.MemoryCache.java
com.daskiworks.ghwatch.model.AccountType.java
com.daskiworks.ghwatch.model.BaseViewData.java
com.daskiworks.ghwatch.model.BooleanViewData.java
com.daskiworks.ghwatch.model.GHCredentials.java
com.daskiworks.ghwatch.model.GHUserInfo.java
com.daskiworks.ghwatch.model.GHUserLoginInfo.java
com.daskiworks.ghwatch.model.LoadingStatus.java
com.daskiworks.ghwatch.model.NotifCount.java
com.daskiworks.ghwatch.model.NotificationStreamViewData.java
com.daskiworks.ghwatch.model.NotificationStream.java
com.daskiworks.ghwatch.model.Notification.java
com.daskiworks.ghwatch.model.Repository.java
com.daskiworks.ghwatch.model.StringViewData.java
com.daskiworks.ghwatch.model.WatchedRepositoriesViewData.java
com.daskiworks.ghwatch.model.WatchedRepositories.java
com.daskiworks.ghwatch.view.preference.ShowTextPreference.java
com.daskiworks.ghwatch.view.preference.ShowTimestampPreference.java