package io.codetail;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
import javax.inject.Inject;
import butterknife.ButterKnife;
import butterknife.InjectView;
import codetail.graphics.drawables.MenuDrawable;
import codetail.utils.ThemeUtils;
import codetail.widget.SearchView;
import codetail.widget.Toolbar;
import io.codetail.sources.Source;
import io.codetail.watchme.R;
import io.codetail.work.JobManager;
public class LauncherActivity extends WatchMeActivity{
@InjectView(R.id.drawer_container)
DrawerLayout mNavigationLayout;
@InjectView(R.id.toolbar)
Toolbar mToolbar;
@InjectView(R.id.toolbar_layout)
ViewGroup mToolbarWrapper;
private FragmentManager mFragmentManager;
@Inject JobManager mJobManager;
private final View.OnClickListener mHamburgerClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
SearchView searchView = mToolbar.getSearchView();
if(!searchView.isSearchExpanded()){
mNavigationLayout.openDrawer(GravityCompat.START);
}else{
// transform from back button to hamburger
setNavigationLockMode(false);
forceBack();
}
}
};
private final View.OnClickListener mSearchClick = new View.OnClickListener(){
@Override
public void onClick(View v) {
MenuDrawable drawable = (MenuDrawable) mToolbar.getNavigationIcon();
SearchView view = mToolbar.getSearchView();
Source source = getSource();
if(!view.isSearchExpanded()) {
// transform from hamburger to back button
source.openSearchFragment(mFragmentManager);
}else{
if(TextUtils.isEmpty(view.getQuery())){
// transform from back button to hamburger
drawable.setRotation(0, true);
view.collapse();
forceBack();
}
view.setQuery("");
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
WatchMeApplication application = WatchMeApplication.getApplication();
application.inject(this);
mFragmentManager = getSupportFragmentManager();
setupToolbar();
setupNavigationMenu();
if(savedInstanceState != null){
return;
}
if (!createdWithNonStandardWay()) {
getSource().openDefaultFragment(mFragmentManager, false);
}
}
/**
* Checks {@link #getIntent()} if contains
* {@link android.content.Intent#ACTION_VIEW} and not null
* {@link android.content.Intent#getData()} creates by the not standard way
*
* @return true if created from outcome intent
*/
boolean createdWithNonStandardWay(){
Intent intent = getIntent();
return Intent.ACTION_VIEW.equals(intent.getAction()) && !TextUtils.isEmpty(intent.getDataString())
&& catchedByOriginalSource(intent);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if(Intent.ACTION_VIEW.equals(intent.getAction()) &&
!TextUtils.isEmpty(intent.getDataString())) {
catchedByOriginalSource(intent);
}
}
boolean catchedByOriginalSource(Intent intent){
WatchMeApplication application = WatchMeApplication.getApplication();
Uri unknownSourceUrl = intent.getData();
List<Source> sources = application.getSources();
for(Source source : sources){
if(source.onIntentCatched(this, mJobManager, unknownSourceUrl)){
//TODO set as default source?
return true;
}
}
return false;
}
/**
* Block navigation drawer, if true user can't use
* swipe to show navigation menu
*
* @param lockMode lock or node
*/
@Override
public void setNavigationLockMode(boolean lockMode){
mNavigationLayout.setDrawerLockMode(lockMode ? DrawerLayout.LOCK_MODE_LOCKED_CLOSED
: DrawerLayout.LOCK_MODE_UNLOCKED);
}
private void setupToolbar(){
int defaultColor = ThemeUtils.getThemeColor(this, R.attr.toolbarActionsPrimaryColor);
MenuDrawable hamburger = new MenuDrawable(this, defaultColor);
mToolbar.setNavigationIcon(hamburger);
mToolbar.setOnNavigationClickListener(mHamburgerClick);
SearchView searchButton = mToolbar.getSearchView();
searchButton.setIconsTint(defaultColor);
searchButton.setHintTextColor(defaultColor);
searchButton.setOnSearchClickListener(mSearchClick);
}
private void setupNavigationMenu(){
mNavigationLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
}
@Override
public void onBackPressed() {
if(mNavigationLayout.isDrawerOpen(GravityCompat.START)){
mNavigationLayout.closeDrawer(GravityCompat.START);
return;
}
super.onBackPressed();
}
/**
* @return toolbar of activity
*/
public Toolbar getToolbar(){
return mToolbar;
}
/**
* @return parent view of {@link #getToolbar()}
*/
public ViewGroup getToolbarWrapper(){
return mToolbarWrapper;
}
}